Skip to content

Commit 1c24f68

Browse files
fix: filter out inactive guides in preview mode (#743)
Co-authored-by: Thomas <thomas.whyyou@gmail.com>
1 parent 00d3f8c commit 1c24f68

File tree

4 files changed

+57
-3
lines changed

4 files changed

+57
-3
lines changed

.changeset/slimy-dogs-tie.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@knocklabs/client": patch
3+
---
4+
5+
fix: filter out inactive guides in preview mode

packages/client/src/clients/guide/client.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,10 @@ const predicate = (
160160
return true;
161161
}
162162

163+
if (!guide.active) {
164+
return false;
165+
}
166+
163167
if (guide.steps.every((s) => !!s.message.archived_at)) {
164168
return false;
165169
}

packages/client/src/clients/guide/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export interface GuideData<TContent = Any> {
4444
key: string;
4545
type: string;
4646
semver: string;
47+
active: boolean;
4748
steps: GuideStepData<TContent>[];
4849
activation_url_rules: GuideActivationUrlRuleData[];
4950
activation_url_patterns: GuideActivationUrlPatternData[];

packages/client/test/clients/guide/guide.test.ts

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ describe("KnockGuideClient", () => {
225225
key: "test_guide",
226226
type: "test",
227227
semver: "1.0.0",
228+
active: true,
228229
steps: [],
229230
activation_url_rules: [],
230231
activation_url_patterns: [],
@@ -540,6 +541,7 @@ describe("KnockGuideClient", () => {
540541
key: "test_guide",
541542
type: "test",
542543
semver: "1.0.0",
544+
active: true,
543545
steps: [mockStep],
544546
activation_url_rules: [],
545547
activation_url_patterns: [],
@@ -893,6 +895,7 @@ describe("KnockGuideClient", () => {
893895
key: "onboarding",
894896
type: "card",
895897
semver: "1.0.0",
898+
active: true,
896899
steps: [mockStep],
897900
activation_url_rules: [],
898901
activation_url_patterns: [
@@ -915,6 +918,7 @@ describe("KnockGuideClient", () => {
915918
key: "feature_tour",
916919
type: "tooltip",
917920
semver: "1.0.0",
921+
active: true,
918922
steps: [mockStep],
919923
activation_url_rules: [],
920924
activation_url_patterns: [
@@ -937,6 +941,7 @@ describe("KnockGuideClient", () => {
937941
key: "system_status",
938942
type: "banner",
939943
semver: "1.0.0",
944+
active: true,
940945
steps: [mockStep],
941946
activation_url_rules: [],
942947
activation_url_patterns: [],
@@ -1483,6 +1488,7 @@ describe("KnockGuideClient", () => {
14831488
key: "new_modal",
14841489
type: "modal",
14851490
semver: "1.0.0",
1491+
active: true,
14861492
steps: [mockStep],
14871493
activation_url_patterns: [],
14881494
activation_url_rules: [],
@@ -1856,6 +1862,7 @@ describe("KnockGuideClient", () => {
18561862
key: "onboarding",
18571863
type: "card",
18581864
semver: "1.0.0",
1865+
active: true,
18591866
steps: [mockStep],
18601867
activation_url_patterns: [],
18611868
activation_url_rules: [],
@@ -1872,6 +1879,7 @@ describe("KnockGuideClient", () => {
18721879
key: "changelog",
18731880
type: "card",
18741881
semver: "1.0.0",
1882+
active: true,
18751883
steps: [mockStep],
18761884
activation_url_patterns: [],
18771885
activation_url_rules: [],
@@ -1889,6 +1897,7 @@ describe("KnockGuideClient", () => {
18891897
type: "banner",
18901898
semver: "1.0.0",
18911899
steps: [mockStep],
1900+
active: true,
18921901
activation_url_patterns: [],
18931902
activation_url_rules: [],
18941903
bypass_global_group_limit: false,
@@ -2025,6 +2034,35 @@ describe("KnockGuideClient", () => {
20252034
expect(result).toHaveLength(1);
20262035
expect(result[0]!.key).toBe(mockGuideTwo.key);
20272036
});
2037+
2038+
test("does not return an inactive guide when forced guide key is set", () => {
2039+
const stateWithGuides = {
2040+
guideGroups: [mockDefaultGroup],
2041+
guideGroupDisplayLogs: {},
2042+
guides: {
2043+
...mockGuides,
2044+
[mockGuideTwo.key]: {
2045+
...mockGuideTwo,
2046+
active: false,
2047+
},
2048+
},
2049+
previewGuides: {},
2050+
queries: {},
2051+
location: undefined,
2052+
counter: 0,
2053+
debug: {
2054+
forcedGuideKey: mockGuideThree.key,
2055+
previewSessionId: "test-session-id",
2056+
},
2057+
};
2058+
2059+
const client = new KnockGuideClient(mockKnock, channelId);
2060+
const result = client.selectGuides(stateWithGuides);
2061+
2062+
expect(result).toHaveLength(2);
2063+
expect(result[0]!.key).toBe(mockGuideThree.key);
2064+
expect(result[1]!.key).toBe(mockGuideOne.key);
2065+
});
20282066
});
20292067

20302068
describe("guide socket event handling", () => {
@@ -2038,6 +2076,7 @@ describe("KnockGuideClient", () => {
20382076
key: "new_guide",
20392077
type: "test",
20402078
semver: "1.0.0",
2079+
active: true,
20412080
steps: [],
20422081
activation_url_patterns: [],
20432082
activation_url_rules: [],
@@ -2070,14 +2109,15 @@ describe("KnockGuideClient", () => {
20702109
key: "existing_guide",
20712110
type: "test",
20722111
semver: "1.0.0",
2112+
active: true,
20732113
steps: [],
20742114
activation_url_patterns: [],
20752115
activation_url_rules: [],
20762116
bypass_global_group_limit: false,
20772117
inserted_at: new Date().toISOString(),
20782118
updated_at: new Date().toISOString(),
20792119
getStep() {
2080-
return this.steps.find((s) => !s.message.archived_at);
2120+
return this.steps.find((s: KnockGuideStep) => !s.message.archived_at);
20812121
},
20822122
};
20832123

@@ -2123,14 +2163,15 @@ describe("KnockGuideClient", () => {
21232163
key: "existing_guide",
21242164
type: "test",
21252165
semver: "1.0.0",
2166+
active: true,
21262167
steps: [],
21272168
activation_url_patterns: [],
21282169
activation_url_rules: [],
21292170
bypass_global_group_limit: false,
21302171
inserted_at: new Date().toISOString(),
21312172
updated_at: new Date().toISOString(),
21322173
getStep() {
2133-
return this.steps.find((s) => !s.message.archived_at);
2174+
return this.steps.find((s: KnockGuideStep) => !s.message.archived_at);
21342175
},
21352176
};
21362177

@@ -2168,14 +2209,15 @@ describe("KnockGuideClient", () => {
21682209
key: "existing_guide",
21692210
type: "test",
21702211
semver: "1.0.0",
2212+
active: true,
21712213
steps: [],
21722214
activation_url_rules: [],
21732215
activation_url_patterns: [],
21742216
bypass_global_group_limit: false,
21752217
inserted_at: new Date().toISOString(),
21762218
updated_at: new Date().toISOString(),
21772219
getStep() {
2178-
return this.steps.find((s) => !s.message.archived_at);
2220+
return this.steps.find((s: KnockGuideStep) => !s.message.archived_at);
21792221
},
21802222
};
21812223

@@ -2231,6 +2273,7 @@ describe("KnockGuideClient", () => {
22312273
key: "guide_one",
22322274
type: "banner",
22332275
semver: "1.0.0",
2276+
active: true,
22342277
steps: [mockStep],
22352278
activation_url_patterns: [],
22362279
activation_url_rules: [],
@@ -2247,6 +2290,7 @@ describe("KnockGuideClient", () => {
22472290
key: "guide_two",
22482291
type: "banner",
22492292
semver: "1.0.0",
2293+
active: true,
22502294
steps: [mockStep],
22512295
activation_url_patterns: [],
22522296
activation_url_rules: [],

0 commit comments

Comments
 (0)