@athoscommerce/snap-controller 1.0.0
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/LICENSE +21 -0
- package/README.md +117 -0
- package/dist/cjs/Abstract/AbstractController.d.ts +42 -0
- package/dist/cjs/Abstract/AbstractController.d.ts.map +1 -0
- package/dist/cjs/Abstract/AbstractController.js +305 -0
- package/dist/cjs/Autocomplete/AutocompleteController.d.ts +59 -0
- package/dist/cjs/Autocomplete/AutocompleteController.d.ts.map +1 -0
- package/dist/cjs/Autocomplete/AutocompleteController.js +1091 -0
- package/dist/cjs/Finder/FinderController.d.ts +15 -0
- package/dist/cjs/Finder/FinderController.d.ts.map +1 -0
- package/dist/cjs/Finder/FinderController.js +336 -0
- package/dist/cjs/Recommendation/RecommendationController.d.ts +27 -0
- package/dist/cjs/Recommendation/RecommendationController.d.ts.map +1 -0
- package/dist/cjs/Recommendation/RecommendationController.js +447 -0
- package/dist/cjs/Search/SearchController.d.ts +41 -0
- package/dist/cjs/Search/SearchController.d.ts.map +1 -0
- package/dist/cjs/Search/SearchController.js +993 -0
- package/dist/cjs/index.d.ts +7 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +29 -0
- package/dist/cjs/types.d.ts +87 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +10 -0
- package/dist/cjs/utils/getParams.d.ts +3 -0
- package/dist/cjs/utils/getParams.d.ts.map +1 -0
- package/dist/cjs/utils/getParams.js +70 -0
- package/dist/cjs/utils/isClickWithinBannerLink.d.ts +2 -0
- package/dist/cjs/utils/isClickWithinBannerLink.d.ts.map +1 -0
- package/dist/cjs/utils/isClickWithinBannerLink.js +21 -0
- package/dist/cjs/utils/isClickWithinProductLink.d.ts +5 -0
- package/dist/cjs/utils/isClickWithinProductLink.d.ts.map +1 -0
- package/dist/cjs/utils/isClickWithinProductLink.js +25 -0
- package/dist/esm/Abstract/AbstractController.d.ts +42 -0
- package/dist/esm/Abstract/AbstractController.d.ts.map +1 -0
- package/dist/esm/Abstract/AbstractController.js +208 -0
- package/dist/esm/Autocomplete/AutocompleteController.d.ts +59 -0
- package/dist/esm/Autocomplete/AutocompleteController.d.ts.map +1 -0
- package/dist/esm/Autocomplete/AutocompleteController.js +882 -0
- package/dist/esm/Finder/FinderController.d.ts +15 -0
- package/dist/esm/Finder/FinderController.d.ts.map +1 -0
- package/dist/esm/Finder/FinderController.js +218 -0
- package/dist/esm/Recommendation/RecommendationController.d.ts +27 -0
- package/dist/esm/Recommendation/RecommendationController.d.ts.map +1 -0
- package/dist/esm/Recommendation/RecommendationController.js +342 -0
- package/dist/esm/Search/SearchController.d.ts +41 -0
- package/dist/esm/Search/SearchController.d.ts.map +1 -0
- package/dist/esm/Search/SearchController.js +795 -0
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/types.d.ts +87 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +7 -0
- package/dist/esm/utils/getParams.d.ts +3 -0
- package/dist/esm/utils/getParams.d.ts.map +1 -0
- package/dist/esm/utils/getParams.js +67 -0
- package/dist/esm/utils/isClickWithinBannerLink.d.ts +2 -0
- package/dist/esm/utils/isClickWithinBannerLink.d.ts.map +1 -0
- package/dist/esm/utils/isClickWithinBannerLink.js +17 -0
- package/dist/esm/utils/isClickWithinProductLink.d.ts +5 -0
- package/dist/esm/utils/isClickWithinProductLink.d.ts.map +1 -0
- package/dist/esm/utils/isClickWithinProductLink.js +19 -0
- package/package.json +41 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { FinderController } from './Finder/FinderController';
|
|
2
|
+
export { SearchController } from './Search/SearchController';
|
|
3
|
+
export { AutocompleteController, INPUT_DELAY } from './Autocomplete/AutocompleteController';
|
|
4
|
+
export { RecommendationController } from './Recommendation/RecommendationController';
|
|
5
|
+
export { AbstractController } from './Abstract/AbstractController';
|
|
6
|
+
export * from './types';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { FinderController } from './Finder/FinderController';
|
|
2
|
+
export { SearchController } from './Search/SearchController';
|
|
3
|
+
export { AutocompleteController, INPUT_DELAY } from './Autocomplete/AutocompleteController';
|
|
4
|
+
export { RecommendationController } from './Recommendation/RecommendationController';
|
|
5
|
+
export { AbstractController } from './Abstract/AbstractController';
|
|
6
|
+
export * from './types';
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { AbstractController, AutocompleteController, SearchController, FinderController, RecommendationController } from './index';
|
|
2
|
+
import type { EventManager, Middleware } from '@athoscommerce/snap-event-manager';
|
|
3
|
+
import type { Client } from '@athoscommerce/snap-client';
|
|
4
|
+
import type { SearchStore, AutocompleteStore, FinderStore, RecommendationStore, StoreConfig, SearchStoreConfig, FinderStoreConfig, AutocompleteStoreConfig, RecommendationStoreConfig } from '@athoscommerce/snap-store-mobx';
|
|
5
|
+
import type { Tracker, ProductViewEvent } from '@athoscommerce/snap-tracker';
|
|
6
|
+
import type { Profiler } from '@athoscommerce/snap-profiler';
|
|
7
|
+
import type { UrlManager } from '@athoscommerce/snap-url-manager';
|
|
8
|
+
import type { Logger } from '@athoscommerce/snap-logger';
|
|
9
|
+
import type { AutocompleteRequestModel, SearchRequestModel } from '@athoscommerce/snapi-types';
|
|
10
|
+
export type PluginFunction = (cntrlr: AbstractController, ...args: any) => Promise<void> | void;
|
|
11
|
+
export type PluginGrouping = [func: PluginFunction, ...args: unknown[]];
|
|
12
|
+
export type BeforeSearchObj = {
|
|
13
|
+
controller: AbstractController;
|
|
14
|
+
request: any;
|
|
15
|
+
};
|
|
16
|
+
export type SearchAfterSearchObj = {
|
|
17
|
+
controller: SearchController;
|
|
18
|
+
response: any;
|
|
19
|
+
request: SearchRequestModel;
|
|
20
|
+
};
|
|
21
|
+
export type AutocompleteAfterSearchObj = {
|
|
22
|
+
controller: AutocompleteController;
|
|
23
|
+
response: any;
|
|
24
|
+
request: AutocompleteRequestModel;
|
|
25
|
+
};
|
|
26
|
+
export type FinderAfterSearchObj = {
|
|
27
|
+
controller: FinderController;
|
|
28
|
+
response: any;
|
|
29
|
+
request: SearchRequestModel;
|
|
30
|
+
};
|
|
31
|
+
export type AfterSearchObj = SearchAfterSearchObj | AutocompleteAfterSearchObj | FinderAfterSearchObj;
|
|
32
|
+
export type AfterStoreObj = {
|
|
33
|
+
controller: AbstractController;
|
|
34
|
+
request: any;
|
|
35
|
+
response: any;
|
|
36
|
+
};
|
|
37
|
+
export type RestorePositionObj = {
|
|
38
|
+
controller: AbstractController;
|
|
39
|
+
element?: ElementPositionObj;
|
|
40
|
+
};
|
|
41
|
+
export type ElementPositionObj = {
|
|
42
|
+
href?: string;
|
|
43
|
+
selector?: string;
|
|
44
|
+
domRect?: DOMRect;
|
|
45
|
+
};
|
|
46
|
+
export declare enum ControllerTypes {
|
|
47
|
+
search = "search",
|
|
48
|
+
autocomplete = "autocomplete",
|
|
49
|
+
finder = "finder",
|
|
50
|
+
recommendation = "recommendation"
|
|
51
|
+
}
|
|
52
|
+
export type Controllers = SearchController | AutocompleteController | FinderController | RecommendationController;
|
|
53
|
+
export type ControllerServices = {
|
|
54
|
+
client: Client;
|
|
55
|
+
store: SearchStore | AutocompleteStore | FinderStore | RecommendationStore;
|
|
56
|
+
urlManager: UrlManager;
|
|
57
|
+
eventManager: EventManager;
|
|
58
|
+
profiler: Profiler;
|
|
59
|
+
logger: Logger;
|
|
60
|
+
tracker: Tracker;
|
|
61
|
+
};
|
|
62
|
+
export type Attachments = {
|
|
63
|
+
middleware?: {
|
|
64
|
+
[eventName: string]: Middleware<any> | Middleware<any>[];
|
|
65
|
+
};
|
|
66
|
+
plugins?: PluginGrouping[];
|
|
67
|
+
[any: string]: unknown;
|
|
68
|
+
};
|
|
69
|
+
export type ContextVariables = {
|
|
70
|
+
shopper?: {
|
|
71
|
+
id: string;
|
|
72
|
+
cart?: ProductViewEvent[];
|
|
73
|
+
[variable: string]: any;
|
|
74
|
+
};
|
|
75
|
+
page?: PageContextVariable;
|
|
76
|
+
[variable: string]: any;
|
|
77
|
+
};
|
|
78
|
+
export type PageContextVariable = {
|
|
79
|
+
type: 'search' | 'category';
|
|
80
|
+
};
|
|
81
|
+
export type ControllerConfig = StoreConfig & Attachments;
|
|
82
|
+
export type SearchControllerConfig = ControllerConfig & SearchStoreConfig;
|
|
83
|
+
export type FinderControllerConfig = ControllerConfig & FinderStoreConfig;
|
|
84
|
+
export type AutocompleteControllerConfig = ControllerConfig & AutocompleteStoreConfig;
|
|
85
|
+
export type RecommendationControllerConfig = ControllerConfig & RecommendationStoreConfig;
|
|
86
|
+
export type ControllerConfigs = SearchControllerConfig | AutocompleteControllerConfig | FinderControllerConfig | RecommendationControllerConfig;
|
|
87
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export var ControllerTypes;
|
|
2
|
+
(function (ControllerTypes) {
|
|
3
|
+
ControllerTypes["search"] = "search";
|
|
4
|
+
ControllerTypes["autocomplete"] = "autocomplete";
|
|
5
|
+
ControllerTypes["finder"] = "finder";
|
|
6
|
+
ControllerTypes["recommendation"] = "recommendation";
|
|
7
|
+
})(ControllerTypes || (ControllerTypes = {}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getParams.d.ts","sourceRoot":"","sources":["../../../src/utils/getParams.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAgF7E"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export function getSearchParams(state) {
|
|
2
|
+
const params = {};
|
|
3
|
+
if (state.tag) {
|
|
4
|
+
params.merchandising = params.merchandising || {};
|
|
5
|
+
params.merchandising.landingPage = state.tag;
|
|
6
|
+
}
|
|
7
|
+
if (state.query) {
|
|
8
|
+
params.search = params.search || {};
|
|
9
|
+
params.search.query = params.search.query || {};
|
|
10
|
+
params.search.query.string = state.query;
|
|
11
|
+
}
|
|
12
|
+
if (state.rq) {
|
|
13
|
+
params.search = params.search || {};
|
|
14
|
+
params.search.subQuery = state.rq;
|
|
15
|
+
}
|
|
16
|
+
if (state.fallbackQuery) {
|
|
17
|
+
params.search = params.search || {};
|
|
18
|
+
params.search.fallbackQuery = state.fallbackQuery;
|
|
19
|
+
}
|
|
20
|
+
if (state.page) {
|
|
21
|
+
params.pagination = params.pagination || {};
|
|
22
|
+
params.pagination.page = state.page;
|
|
23
|
+
}
|
|
24
|
+
if (state.pageSize) {
|
|
25
|
+
params.pagination = params.pagination || {};
|
|
26
|
+
params.pagination.pageSize = state.pageSize;
|
|
27
|
+
}
|
|
28
|
+
if (state.sort) {
|
|
29
|
+
params.sorts = params.sorts || [];
|
|
30
|
+
const sorts = Array.isArray(state.sort) ? state.sort : [state.sort];
|
|
31
|
+
const sort = sorts[0];
|
|
32
|
+
if (sort && sort.field && sort.direction) {
|
|
33
|
+
params.sorts.push({
|
|
34
|
+
field: sort.field,
|
|
35
|
+
direction: sort.direction,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (state.filter) {
|
|
40
|
+
params.filters = params.filters || [];
|
|
41
|
+
Object.keys(state.filter).forEach((field) => {
|
|
42
|
+
if (typeof field != 'string') {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const filter = state.filter[field];
|
|
46
|
+
// ensure values are an array
|
|
47
|
+
const values = Array.isArray(filter) ? filter : [filter];
|
|
48
|
+
values.forEach((value) => {
|
|
49
|
+
if (typeof value != 'object') {
|
|
50
|
+
params.filters.push({
|
|
51
|
+
type: 'value',
|
|
52
|
+
field: field,
|
|
53
|
+
value,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
else if (typeof value.low != 'undefined' && typeof value.high != 'undefined') {
|
|
57
|
+
params.filters.push({
|
|
58
|
+
type: 'range',
|
|
59
|
+
field: field,
|
|
60
|
+
value,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return params;
|
|
67
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isClickWithinBannerLink.d.ts","sourceRoot":"","sources":["../../../src/utils/isClickWithinBannerLink.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,uBAAuB,MAAO,UAAU,KAAG,OAcvD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CLICK_THROUGH_CLOSEST_MAX_LEVELS } from './isClickWithinProductLink';
|
|
2
|
+
const TRACKING_ATTRIBUTE = 'sstracking';
|
|
3
|
+
export const isClickWithinBannerLink = (e) => {
|
|
4
|
+
let currentElement = e.target;
|
|
5
|
+
let href = null;
|
|
6
|
+
let level = 0;
|
|
7
|
+
while (currentElement && (level < CLICK_THROUGH_CLOSEST_MAX_LEVELS || !currentElement.getAttribute(TRACKING_ATTRIBUTE))) {
|
|
8
|
+
href = currentElement.getAttribute('href');
|
|
9
|
+
const isAnchor = currentElement.tagName.toLowerCase() === 'a';
|
|
10
|
+
if (href && isAnchor) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
currentElement = currentElement.parentElement;
|
|
14
|
+
level++;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Product } from '@athoscommerce/snap-store-mobx';
|
|
2
|
+
export declare const CLICK_DUPLICATION_TIMEOUT = 300;
|
|
3
|
+
export declare const CLICK_THROUGH_CLOSEST_MAX_LEVELS = 12;
|
|
4
|
+
export declare const isClickWithinProductLink: (e: MouseEvent, result: Product) => boolean;
|
|
5
|
+
//# sourceMappingURL=isClickWithinProductLink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isClickWithinProductLink.d.ts","sourceRoot":"","sources":["../../../src/utils/isClickWithinProductLink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAE9D,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,eAAO,MAAM,wBAAwB,MAAO,UAAU,UAAU,OAAO,KAAG,OAoBzE,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const CLICK_DUPLICATION_TIMEOUT = 300;
|
|
2
|
+
export const CLICK_THROUGH_CLOSEST_MAX_LEVELS = 12;
|
|
3
|
+
export const isClickWithinProductLink = (e, result) => {
|
|
4
|
+
const resultDisplayUrl = result?.display?.mappings.core?.url || '';
|
|
5
|
+
const resultCoreUrl = result?.mappings.core?.url || '';
|
|
6
|
+
// Get the composed path to handle shadow DOM elements
|
|
7
|
+
const path = e.composedPath ? e.composedPath() : [e.target];
|
|
8
|
+
// Check up to CLICK_THROUGH_CLOSEST_MAX_LEVELS elements in the path
|
|
9
|
+
const elementsToCheck = path.slice(0, CLICK_THROUGH_CLOSEST_MAX_LEVELS);
|
|
10
|
+
for (const element of elementsToCheck) {
|
|
11
|
+
if (element instanceof Element) {
|
|
12
|
+
const href = element.getAttribute('href');
|
|
13
|
+
if (href && ((resultCoreUrl && href.includes(resultCoreUrl)) || (resultDisplayUrl && href.includes(resultDisplayUrl)))) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@athoscommerce/snap-controller",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Snap Controllers",
|
|
5
|
+
"main": "dist/cjs/index.js",
|
|
6
|
+
"module": "dist/esm/index.js",
|
|
7
|
+
"author": "Athos Commerce",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"repository": "https://github.com/athoscommerce/snap",
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "rm -rf ./dist && rm -fr ./components/dist && tsc & p1=$!; tsc -p tsconfig.cjs.json & p2=$!; wait $p1 && wait $p2",
|
|
15
|
+
"build:docs": "typedoc --out docs src/index.ts",
|
|
16
|
+
"dev": "tsc --watch",
|
|
17
|
+
"format": "prettier --write 'src/**/*.{js,jsx,ts,tsx}'",
|
|
18
|
+
"lint": "eslint 'src/**/*.{js,jsx,ts,tsx}'",
|
|
19
|
+
"test": "jest",
|
|
20
|
+
"test:watch": "jest --watch"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@athoscommerce/snap-toolbox": "1.0.0",
|
|
24
|
+
"css.escape": "1.5.1",
|
|
25
|
+
"deepmerge": "4.3.1"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@athoscommerce/snap-client": "1.0.0",
|
|
29
|
+
"@athoscommerce/snap-event-manager": "1.0.0",
|
|
30
|
+
"@athoscommerce/snap-logger": "1.0.0",
|
|
31
|
+
"@athoscommerce/snap-profiler": "1.0.0",
|
|
32
|
+
"@athoscommerce/snap-store-mobx": "1.0.0",
|
|
33
|
+
"@athoscommerce/snap-tracker": "1.0.0",
|
|
34
|
+
"@athoscommerce/snap-url-manager": "1.0.0"
|
|
35
|
+
},
|
|
36
|
+
"sideEffects": false,
|
|
37
|
+
"files": [
|
|
38
|
+
"dist/**/*"
|
|
39
|
+
],
|
|
40
|
+
"gitHead": "714fb2d140d44581a559a6025310f8df9e33e216"
|
|
41
|
+
}
|