@simplybusiness/services 2.4.4 → 2.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/cjs/index.js +6 -2
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/meta.json +27 -27
- package/dist/cjs/snowplow/Snowplow.js +3 -0
- package/dist/cjs/snowplow/Snowplow.js.map +2 -2
- package/dist/cjs/snowplow/SnowplowContext.js +6 -2
- package/dist/cjs/snowplow/SnowplowContext.js.map +2 -2
- package/dist/cjs/snowplow/event-definitions/index.js +3 -2
- package/dist/cjs/snowplow/event-definitions/index.js.map +2 -2
- package/dist/cjs/snowplow/event-definitions/questionnaire/questionnaire.js +3 -2
- package/dist/cjs/snowplow/event-definitions/questionnaire/questionnaire.js.map +2 -2
- package/dist/cjs/snowplow/index.js +6 -2
- package/dist/cjs/snowplow/index.js.map +2 -2
- package/dist/cjs/utils/testUtils.js +6 -2
- package/dist/cjs/utils/testUtils.js.map +2 -2
- package/dist/esm/{chunk-EDKZP2NB.js → chunk-2TWF6FRS.js} +4 -1
- package/dist/esm/{chunk-EDKZP2NB.js.map → chunk-2TWF6FRS.js.map} +2 -2
- package/dist/esm/{chunk-YO5FUC73.js → chunk-3VFJFBNM.js} +4 -3
- package/dist/esm/chunk-3VFJFBNM.js.map +7 -0
- package/dist/esm/{chunk-7QIIG44X.js → chunk-RSDIB373.js} +3 -3
- package/dist/esm/{chunk-LLSH4K4D.js → chunk-X77BVKJO.js} +2 -2
- package/dist/esm/index.js +4 -4
- package/dist/esm/meta.json +39 -39
- package/dist/esm/snowplow/Snowplow.js +1 -1
- package/dist/esm/snowplow/SnowplowContext.js +4 -4
- package/dist/esm/snowplow/event-definitions/index.js +2 -2
- package/dist/esm/snowplow/event-definitions/questionnaire/questionnaire.js +1 -1
- package/dist/esm/snowplow/index.js +4 -4
- package/dist/esm/utils/testUtils.js +4 -4
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/snowplow/Snowplow.ts +4 -0
- package/src/snowplow/event-definitions/questionnaire/questionnaire.test.ts +43 -0
- package/src/snowplow/event-definitions/questionnaire/questionnaire.ts +5 -1
- package/src/snowplow/index.test.ts +32 -0
- package/dist/esm/chunk-YO5FUC73.js.map +0 -7
- /package/dist/esm/{chunk-7QIIG44X.js.map → chunk-RSDIB373.js.map} +0 -0
- /package/dist/esm/{chunk-LLSH4K4D.js.map → chunk-X77BVKJO.js.map} +0 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplybusiness/services",
|
|
3
3
|
"license": "UNLICENSED",
|
|
4
|
-
"version": "2.4.
|
|
4
|
+
"version": "2.4.6",
|
|
5
5
|
"description": "Internal library for services",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"@eslint/compat": "^2.0.2",
|
|
61
61
|
"@eslint/eslintrc": "^3.3.4",
|
|
62
62
|
"@eslint/js": "^9.39.3",
|
|
63
|
-
"@simplybusiness/build-scripts": "^
|
|
63
|
+
"@simplybusiness/build-scripts": "^3.0.0",
|
|
64
64
|
"@simplybusiness/eslint-config": "^2.0.4",
|
|
65
65
|
"@testing-library/dom": "^10.4.1",
|
|
66
66
|
"@testing-library/jest-dom": "6.9.1",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
},
|
|
89
89
|
"dependencies": {
|
|
90
90
|
"@airbrake/browser": "^2.1.9",
|
|
91
|
-
"@simplybusiness/mobius": "^
|
|
91
|
+
"@simplybusiness/mobius": "^10.0.0",
|
|
92
92
|
"@snowplow/browser-plugin-ga-cookies": "^3.24.0",
|
|
93
93
|
"@snowplow/browser-tracker": "^3.24.6",
|
|
94
94
|
"classnames": "^2.5.1"
|
package/src/snowplow/Snowplow.ts
CHANGED
|
@@ -196,6 +196,10 @@ export class Snowplow {
|
|
|
196
196
|
}
|
|
197
197
|
|
|
198
198
|
trigger(name: string, params?: Record<string, unknown>) {
|
|
199
|
+
if (!this.serverData || Object.keys(this.serverData).length === 0) {
|
|
200
|
+
return this;
|
|
201
|
+
}
|
|
202
|
+
|
|
199
203
|
const handler = this.eventHandlers[name];
|
|
200
204
|
|
|
201
205
|
if (
|
|
@@ -655,6 +655,49 @@ describe("questionnaireEventDefinitions", () => {
|
|
|
655
655
|
});
|
|
656
656
|
});
|
|
657
657
|
|
|
658
|
+
describe("primaryDetailSelected selectedLocation override", () => {
|
|
659
|
+
it("should use selectedLocation when provided", () => {
|
|
660
|
+
const params = {
|
|
661
|
+
context: {
|
|
662
|
+
site: "simplybusiness_us",
|
|
663
|
+
vertical: "usa",
|
|
664
|
+
},
|
|
665
|
+
answer: "Plumber",
|
|
666
|
+
selectedLocation: null,
|
|
667
|
+
};
|
|
668
|
+
|
|
669
|
+
const result = findEventByName(
|
|
670
|
+
questionnaireEventDefinitions,
|
|
671
|
+
"primaryDetailSelected",
|
|
672
|
+
).makePayload(params);
|
|
673
|
+
|
|
674
|
+
expect(result).toHaveProperty("data");
|
|
675
|
+
if ("data" in result) {
|
|
676
|
+
expect(result.data.selected_location).toBeNull();
|
|
677
|
+
}
|
|
678
|
+
});
|
|
679
|
+
|
|
680
|
+
it("should default selected_location to 'trade_selector_vertical' when selectedLocation is not provided", () => {
|
|
681
|
+
const params = {
|
|
682
|
+
context: {
|
|
683
|
+
site: "simplybusiness_us",
|
|
684
|
+
vertical: "usa",
|
|
685
|
+
},
|
|
686
|
+
answer: "Plumber",
|
|
687
|
+
};
|
|
688
|
+
|
|
689
|
+
const result = findEventByName(
|
|
690
|
+
questionnaireEventDefinitions,
|
|
691
|
+
"primaryDetailSelected",
|
|
692
|
+
).makePayload(params);
|
|
693
|
+
|
|
694
|
+
expect(result).toHaveProperty("data");
|
|
695
|
+
if ("data" in result) {
|
|
696
|
+
expect(result.data.selected_location).toBe("trade_selector_vertical");
|
|
697
|
+
}
|
|
698
|
+
});
|
|
699
|
+
});
|
|
700
|
+
|
|
658
701
|
describe("tradeSelectorClicked", () => {
|
|
659
702
|
it("should create correct payload", () => {
|
|
660
703
|
const result = findEventByName(
|
|
@@ -44,6 +44,7 @@ export const questionnaireEventDefinitions: EventDefinition[] = [
|
|
|
44
44
|
searchId,
|
|
45
45
|
selectedListPosition,
|
|
46
46
|
selectionMethod,
|
|
47
|
+
selectedLocation,
|
|
47
48
|
} = params as ParamsType;
|
|
48
49
|
const { site } = context;
|
|
49
50
|
const isUSPage = site === "simplybusiness_us";
|
|
@@ -77,7 +78,10 @@ export const questionnaireEventDefinitions: EventDefinition[] = [
|
|
|
77
78
|
selectedListPosition !== undefined
|
|
78
79
|
? (selectedListPosition + 1).toString()
|
|
79
80
|
: null;
|
|
80
|
-
data.selected_location =
|
|
81
|
+
data.selected_location =
|
|
82
|
+
selectedLocation !== undefined
|
|
83
|
+
? selectedLocation
|
|
84
|
+
: "trade_selector_vertical";
|
|
81
85
|
data.business_unit = site;
|
|
82
86
|
}
|
|
83
87
|
|
|
@@ -449,6 +449,38 @@ describe("Snowplow Analytics Class", () => {
|
|
|
449
449
|
);
|
|
450
450
|
});
|
|
451
451
|
|
|
452
|
+
it("does not trigger events when serverData is empty", () => {
|
|
453
|
+
testSnowplow.addEventHandlers(eventDefinitions as EventDefinition[]);
|
|
454
|
+
testSnowplow.serverData = {};
|
|
455
|
+
|
|
456
|
+
const trackUnstructEventSpy = vi.spyOn(
|
|
457
|
+
testSnowplow,
|
|
458
|
+
"trackUnstructEvent",
|
|
459
|
+
);
|
|
460
|
+
|
|
461
|
+
testSnowplow.trigger("questionAnswered", {
|
|
462
|
+
question: "test-question",
|
|
463
|
+
section: "test-section",
|
|
464
|
+
answer: "test-answer",
|
|
465
|
+
});
|
|
466
|
+
|
|
467
|
+
expect(trackUnstructEventSpy).not.toHaveBeenCalled();
|
|
468
|
+
});
|
|
469
|
+
|
|
470
|
+
it("does not trigger events when serverData is undefined", () => {
|
|
471
|
+
testSnowplow.addEventHandlers(eventDefinitions as EventDefinition[]);
|
|
472
|
+
testSnowplow.serverData = undefined as unknown as Record<
|
|
473
|
+
string,
|
|
474
|
+
unknown
|
|
475
|
+
>;
|
|
476
|
+
|
|
477
|
+
const trackStructEventSpy = vi.spyOn(testSnowplow, "trackEvent");
|
|
478
|
+
|
|
479
|
+
testSnowplow.trigger("navButtonClicked", { label: "test-label" });
|
|
480
|
+
|
|
481
|
+
expect(trackStructEventSpy).not.toHaveBeenCalled();
|
|
482
|
+
});
|
|
483
|
+
|
|
452
484
|
it("uses server-supplied context in events", () => {
|
|
453
485
|
testSnowplow.addEventHandlers(eventDefinitions as EventDefinition[]);
|
|
454
486
|
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/snowplow/event-definitions/questionnaire/questionnaire.ts"],
|
|
4
|
-
"sourcesContent": ["import { DELIMITER } from \"../../constants\";\nimport type { EventDefinition, ParamsType } from \"../../types\";\nimport { redact } from \"./redaction\";\n\n// Questionnaire events\nexport const questionnaireEventDefinitions: EventDefinition[] = [\n {\n name: \"questionAnswered\",\n type: \"unstructured\",\n makePayload: params => {\n const { section, context } = params as ParamsType;\n const { question, answer } = redact(params as ParamsType);\n // Flatten the answer to a delimited string\n const flatAnswer = Array.isArray(answer)\n ? answer.join(DELIMITER)\n : answer;\n\n return {\n schema:\n \"iglu:com.simplybusiness/form_question_answered/jsonschema/1-0-4\",\n data: {\n site: context.site,\n page_index: 1,\n page_name: \"quick_to_quote\",\n submitted_from: \"quick_to_quote_experiment\",\n section_name: section,\n question,\n answer: flatAnswer,\n vertical: context.vertical,\n journey_id: context.journeyId,\n },\n };\n },\n contexts: [\"serviceChannelContext\"],\n },\n {\n name: \"primaryDetailSelected\",\n type: \"unstructured\",\n makePayload: params => {\n const {\n context,\n answer,\n vertical,\n searchId,\n selectedListPosition,\n selectionMethod,\n } = params as ParamsType;\n const { site } = context;\n const isUSPage = site === \"simplybusiness_us\";\n let verticalName = vertical || context.vertical;\n\n if (verticalName.toLowerCase().indexOf(\"landlord\") > -1) {\n verticalName =\n answer === \"residential\" ? \"Landlord\" : \"Commercial landlord\";\n }\n\n const data: Record<string, unknown> = {\n site,\n vertical: verticalName,\n primary_detail: answer,\n selected_type: \"trade_selector\",\n location: window?.location?.pathname ?? \"\",\n };\n\n // Always include search_id if present\n if (searchId) {\n data.search_id = searchId;\n }\n // Always include selection_method if present\n if (selectionMethod) {\n data.selection_method = selectionMethod;\n }\n\n // US only fields\n if (isUSPage) {\n data.selected_list_position =\n selectedListPosition !== undefined\n ? (selectedListPosition + 1).toString()\n : null;\n data.selected_location = \"trade_selector_vertical\";\n data.business_unit = site;\n }\n\n // Optional pre-filled source\n const preFilledSource =\n (params as ParamsType).preFilledSource ??\n (typeof sessionStorage !== \"undefined\"\n ? sessionStorage.getItem(\"preFilledSource\")\n : null);\n if (preFilledSource) {\n data.pre_filled_source = preFilledSource;\n }\n\n return {\n schema:\n \"iglu:com.simplybusiness/primary_detail_selected/jsonschema/1-5-0\",\n data,\n };\n },\n contexts: [\"distributionChannelContext\", \"serviceChannelContext\"],\n },\n {\n name: \"helpTextOpened\",\n type: \"unstructured\",\n makePayload: params => {\n const { primaryText, label, context, helpText } = params as ParamsType;\n\n return {\n schema: \"iglu:com.simplybusiness/help_text_opened/jsonschema/1-1-0\",\n data: {\n vertical: context.vertical,\n site: context.site,\n primary_text: primaryText,\n help_text: helpText,\n label,\n page_name: \"quick_to_quote\",\n },\n };\n },\n },\n {\n name: \"assumptionsButtonClicked\",\n type: \"structured\",\n makePayload: params => {\n const { source, presentationGroup } = params as ParamsType;\n\n return {\n action: source,\n category: presentationGroup,\n };\n },\n },\n {\n name: \"navButtonClicked\",\n type: \"structured\",\n makePayload: params => {\n const { label, category } = params as ParamsType;\n\n return {\n label,\n action: \"link_click\",\n category,\n };\n },\n },\n {\n name: \"manualAddressClicked\",\n type: \"structured\",\n makePayload: params => {\n const { category } = params as ParamsType;\n\n return {\n action: \"link_click\",\n category,\n label: \"Enter address manually\",\n };\n },\n },\n {\n name: \"assumptionLinkClicked\",\n type: \"structured\",\n makePayload: params => {\n const { label, category, property } = params as ParamsType;\n\n return {\n action: \"assumption_link_click\",\n category,\n label,\n property,\n };\n },\n },\n {\n name: \"addressLookupFocused\",\n type: \"structured\",\n makePayload: params => {\n const { label, category } = params as ParamsType;\n\n return {\n action: \"address_lookup_focused\",\n category,\n label,\n };\n },\n },\n {\n name: \"addressLookupTypedIn\",\n type: \"structured\",\n makePayload: params => {\n const { label, category } = params as ParamsType;\n\n return {\n action: \"address_lookup_typed_in\",\n category,\n label,\n };\n },\n },\n {\n name: \"addressOptionsDisplayed\",\n type: \"structured\",\n makePayload: params => {\n const { label, category } = params as ParamsType;\n\n return {\n action: \"address_options_displayed\",\n category,\n label,\n };\n },\n },\n {\n name: \"tradeChanged\",\n type: \"structured\",\n makePayload: params => {\n const { label, property } = params as ParamsType;\n\n return {\n action: \"change_your_selected_profession_button_clicked\",\n category: \"change_your_selected_profession_button\",\n label: `Question: ${label}`,\n property, // Answer before change\n };\n },\n },\n {\n name: \"questionValidationFailed\",\n type: \"structured\",\n makePayload: params => {\n const { question, errorMessage } = params as ParamsType;\n\n return {\n category: \"questionnaire\",\n action: `${question} validation failed`,\n label: errorMessage,\n };\n },\n },\n {\n name: \"stateQuestionAnswered\",\n type: \"unstructured\",\n makePayload: params => {\n const { context, answer, selectedCoverages } = params as ParamsType & {\n selectedCoverages?: string[];\n selectedType?: string;\n };\n\n const data: Record<string, string> = {\n vertical: context.vertical,\n selected_type: context.journeyName ?? \"usa\",\n location: window?.location?.pathname ?? \"\",\n url: window?.location?.href ?? \"\",\n state: answer,\n selection_method: \"dropdown\",\n };\n\n if (selectedCoverages?.length) {\n data.products = selectedCoverages.join(\",\");\n }\n\n return {\n schema:\n \"iglu:com.simplybusiness/state_question_answered/jsonschema/1-0-0\",\n data,\n };\n },\n },\n {\n name: \"tradeSelectorClicked\",\n type: \"structured\",\n makePayload: () => {\n return {\n category: \"marketing\",\n action: \"trade_selector_clicked\",\n label: \"trade selector clicked\",\n property: window?.location?.href ?? \"\",\n };\n },\n },\n {\n name: \"usStateClicked\",\n type: \"structured\",\n makePayload: () => {\n return {\n category: \"marketing\",\n action: \"us_state_clicked\",\n label: \"US state clicked\",\n property: window?.location?.href ?? \"\",\n };\n },\n },\n {\n name: \"usStateErrorMessageDisplayed\",\n type: \"structured\",\n makePayload: params => {\n const { stateValue } = params as ParamsType;\n\n return {\n category: \"marketing\",\n action: \"us_state_error_message_displayed\",\n label: \"US state error message displayed\",\n property: stateValue ?? \"\",\n };\n },\n },\n {\n name: \"pagesetSectionChanged\",\n type: \"unstructured\",\n makePayload: params => {\n const {\n context,\n pageIndex,\n pageName,\n sectionName,\n sectionIndex,\n sectionComplete,\n } = params as ParamsType;\n\n return {\n schema:\n \"iglu:com.simplybusiness/pageset_section_changed/jsonschema/1-0-0\",\n data: {\n site: context.site,\n vertical: context.vertical,\n page_index: pageIndex,\n page_name: pageName,\n section_name: sectionName,\n section_index: sectionIndex,\n section_complete: sectionComplete,\n },\n };\n },\n contexts: [\"distributionChannelContext\", \"serviceChannelContext\"],\n },\n {\n name: \"aiTradeSelectorFindMyBusiness\",\n type: \"structured\",\n makePayload: params => {\n const { searchQuery } = params as ParamsType;\n\n return {\n category: \"ai_trade_selector_find_my_business_btn\",\n action: \"click\",\n label: searchQuery ?? \"\",\n property: window?.location?.href ?? \"\",\n };\n },\n },\n];\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
File without changes
|
|
File without changes
|