Skip to content

Commit 0c41da7

Browse files
committed
Vue SDK example
1 parent 743c8ec commit 0c41da7

File tree

4 files changed

+6333
-293
lines changed

4 files changed

+6333
-293
lines changed

packages/vue-sdk/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@bucketco/vue-sdk",
3-
"version": "1.0.0",
3+
"version": "0.1.0",
44
"description": "Vue SDK for Bucket",
55
"main": "dist/index.js",
66
"module": "dist/index.esm.js",

packages/vue-sdk/src/BucketPlugin.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import type {
55
CompanyContext,
66
Feedback,
77
FeedbackOptions,
8-
FlagsOptions,
8+
FeaturesOptions,
99
RequestFeedbackOptions,
1010
UserContext,
1111
} from "@bucketco/browser-sdk";
@@ -17,16 +17,16 @@ const SDK_VERSION = `vue-sdk/${version}`;
1717

1818
type OtherContext = Record<string, any>;
1919

20-
export interface Flags {}
20+
export interface Features {}
2121

22-
export type BucketFlags = keyof (keyof Flags extends never
22+
export type BucketFeatures = keyof (keyof Features extends never
2323
? Record<string, boolean>
24-
: Flags);
24+
: Features);
2525

26-
export type FlagsResult = { [k in BucketFlags]?: boolean };
26+
export type FeaturesResult = { [k in BucketFeatures]?: boolean };
2727

2828
export interface BucketState {
29-
flags: FlagsResult;
29+
features: FeaturesResult;
3030
isLoading: boolean;
3131
user: UserContext | null;
3232
company: CompanyContext | null;
@@ -35,8 +35,8 @@ export interface BucketState {
3535

3636
export interface BucketPluginOptions {
3737
publishableKey: string;
38-
flagOptions?: Omit<FlagsOptions, "fallbackFlags"> & {
39-
fallbackFlags?: BucketFlags[];
38+
flagOptions?: Omit<FeaturesOptions, "fallbackFeatures"> & {
39+
fallbackFeatures?: BucketFeatures[];
4040
};
4141
feedback?: FeedbackOptions;
4242
host?: string;
@@ -58,7 +58,7 @@ export const BucketInjectionKey = Symbol() as InjectionKey<ProvideType>;
5858
export const BucketPlugin = {
5959
install(app: App, options: BucketPluginOptions) {
6060
const bucketState = reactive<BucketState>({
61-
flags: {},
61+
features: {},
6262
isLoading: true,
6363
user: null,
6464
company: null,
@@ -82,11 +82,11 @@ export const BucketPlugin = {
8282
{
8383
host: options.host,
8484
sseHost: options.sseHost,
85-
flags: {
85+
features: {
8686
...options.flagOptions,
87-
onUpdatedFlags: (flags) => {
88-
bucketState.flags = flags;
89-
},
87+
// onUpdatedFeatures: (flags) => {
88+
// bucketState.flags = flags;
89+
// },
9090
},
9191
feedback: options.feedback,
9292
logger: options.debug ? console : undefined,
@@ -97,7 +97,7 @@ export const BucketPlugin = {
9797
client.value
9898
.initialize()
9999
.then(() => {
100-
bucketState.flags = client.value!.getFlags() ?? {};
100+
bucketState.features = client.value!.getFeatures() ?? {};
101101
bucketState.isLoading = false;
102102

103103
// Update user attributes

packages/vue-sdk/src/useBucket.ts

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,22 @@
1-
import { computed, inject } from "vue";
1+
import { inject } from "vue";
22
import { BucketInjectionKey } from "./BucketPlugin";
3-
import type { BucketFlags } from "./BucketPlugin";
3+
import type { BucketFeatures } from "./BucketPlugin";
44

55
export function useBucket() {
66
const bucket = inject(BucketInjectionKey);
77
if (!bucket) {
88
throw new Error("Bucket not found. Make sure to provide the BucketPlugin.");
99
}
10-
return bucket
10+
return bucket;
1111
}
1212

13-
export function useFlagIsEnabled(flagKey: BucketFlags) {
13+
export function useFeature(key: BucketFeatures) {
1414
const bucket = useBucket();
15-
return computed(() => bucket.state.flags[flagKey] ?? false);
16-
}
17-
18-
export function useFlag(key: BucketFlags) {
19-
const bucket = useBucket();
20-
return computed(() => ({
21-
isLoading: bucket.state.isLoading,
22-
isEnabled: bucket.state.flags[key] ?? false,
23-
}));
24-
}
25-
26-
export function useFlags() {
27-
const bucket = useBucket();
28-
return computed(() => ({
15+
return {
2916
isLoading: bucket.state.isLoading,
30-
flags: bucket.state.flags,
31-
}));
17+
isEnabled: bucket.state.features[key] ?? false,
18+
track: () => bucket.track(key),
19+
};
3220
}
3321

3422
export function useTrack() {

0 commit comments

Comments
 (0)