Skip to content

Commit 87b90fc

Browse files
committed
refactor(browser-sdk): refactor API for setting overrides
1 parent fafbd84 commit 87b90fc

4 files changed

Lines changed: 34 additions & 13 deletions

File tree

packages/browser-sdk/src/client.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,17 @@ export interface Feature {
330330
requestFeedback: (
331331
options: Omit<RequestFeedbackData, "featureKey" | "featureId">,
332332
) => void;
333+
334+
/**
335+
* The current override status of isEnabled for the feature.
336+
*/
337+
isEnabledOverride: boolean | null;
338+
339+
/**
340+
* Set the override status for isEnabled for the feature.
341+
* Set to `null` to remove the override.
342+
*/
343+
setIsEnabledOverride(isEnabled: boolean | null): void;
333344
}
334345

335346
function shouldShowToolbar(opts: InitOptions) {
@@ -737,17 +748,13 @@ export class BucketClient {
737748
...options,
738749
});
739750
},
751+
isEnabledOverride: this.featuresClient.getFeatureOverride(key),
752+
setIsEnabledOverride(isEnabled: boolean | null) {
753+
fClient.setFeatureOverride(key, isEnabled);
754+
},
740755
};
741756
}
742757

743-
setFeatureOverride(key: string, isEnabled: boolean | null) {
744-
this.featuresClient.setFeatureOverride(key, isEnabled);
745-
}
746-
747-
getFeatureOverride(key: string): boolean | null {
748-
return this.featuresClient.getFeatureOverride(key);
749-
}
750-
751758
sendCheckEvent(checkEvent: CheckEvent) {
752759
return this.featuresClient.sendCheckEvent(checkEvent);
753760
}

packages/browser-sdk/src/toolbar/Toolbar.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export default function Toolbar({
4646
(feature) =>
4747
({
4848
key: feature.key,
49-
localOverride: bucketClient.getFeatureOverride(feature?.key),
49+
localOverride: feature.isEnabledOverride,
5050
isEnabled: feature.isEnabled,
5151
}) satisfies FeatureItem,
5252
),
@@ -101,9 +101,9 @@ export default function Toolbar({
101101
<DialogContent>
102102
<FeaturesTable
103103
features={searchedFeatures}
104-
setEnabledOverride={bucketClient.setFeatureOverride.bind(
105-
bucketClient,
106-
)}
104+
setEnabledOverride={(key: string, value: boolean | null) =>
105+
bucketClient.getFeature(key).setIsEnabledOverride(value)
106+
}
107107
appBaseUrl={appBaseUrl}
108108
/>
109109
</DialogContent>

packages/browser-sdk/test/client.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,9 @@ describe("BucketClient", () => {
7070
await client.initialize();
7171
expect(featuresResult["featureA"].isEnabled).toBe(true);
7272
expect(client.getFeature("featureA").isEnabled).toBe(true);
73-
client.setFeatureOverride("featureA", false);
73+
74+
client.getFeature("featureA").setIsEnabledOverride(false);
75+
7476
expect(client.getFeature("featureA").isEnabled).toBe(false);
7577
});
7678
});

packages/browser-sdk/test/usage.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ describe("usage", () => {
7979
isEnabled: false,
8080
track: expect.any(Function),
8181
requestFeedback: expect.any(Function),
82+
isEnabledOverride: null,
83+
setIsEnabledOverride: expect.any(Function),
8284
config: { key: undefined, payload: undefined },
8385
});
8486
});
@@ -413,6 +415,8 @@ describe(`sends "check" events `, () => {
413415
config: { key: undefined, payload: undefined },
414416
track: expect.any(Function),
415417
requestFeedback: expect.any(Function),
418+
isEnabledOverride: null,
419+
setIsEnabledOverride: expect.any(Function),
416420
});
417421

418422
expect(client.getFeature("featureB")).toStrictEqual({
@@ -426,13 +430,17 @@ describe(`sends "check" events `, () => {
426430
},
427431
track: expect.any(Function),
428432
requestFeedback: expect.any(Function),
433+
isEnabledOverride: null,
434+
setIsEnabledOverride: expect.any(Function),
429435
});
430436

431437
expect(client.getFeature("featureC")).toStrictEqual({
432438
isEnabled: false,
433439
config: { key: undefined, payload: undefined },
434440
track: expect.any(Function),
435441
requestFeedback: expect.any(Function),
442+
isEnabledOverride: null,
443+
setIsEnabledOverride: expect.any(Function),
436444
});
437445
});
438446

@@ -561,6 +569,8 @@ describe(`sends "check" events `, () => {
561569
track: expect.any(Function),
562570
requestFeedback: expect.any(Function),
563571
config: { key: undefined, payload: undefined },
572+
isEnabledOverride: null,
573+
setIsEnabledOverride: expect.any(Function),
564574
});
565575

566576
vi.spyOn(client, "track");
@@ -580,6 +590,8 @@ describe(`sends "check" events `, () => {
580590
track: expect.any(Function),
581591
requestFeedback: expect.any(Function),
582592
config: { key: undefined, payload: undefined },
593+
isEnabledOverride: null,
594+
setIsEnabledOverride: expect.any(Function),
583595
});
584596

585597
vi.spyOn(client, "requestFeedback");

0 commit comments

Comments
 (0)