@searchspring/snap-store-mobx 0.20.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 +54 -0
- package/dist/cjs/Abstract/AbstractStore.d.ts +18 -0
- package/dist/cjs/Abstract/AbstractStore.d.ts.map +1 -0
- package/dist/cjs/Abstract/AbstractStore.js +31 -0
- package/dist/cjs/Autocomplete/AutocompleteStore.d.ts +32 -0
- package/dist/cjs/Autocomplete/AutocompleteStore.d.ts.map +1 -0
- package/dist/cjs/Autocomplete/AutocompleteStore.js +121 -0
- package/dist/cjs/Autocomplete/Stores/FacetStore.d.ts +9 -0
- package/dist/cjs/Autocomplete/Stores/FacetStore.d.ts.map +1 -0
- package/dist/cjs/Autocomplete/Stores/FacetStore.js +69 -0
- package/dist/cjs/Autocomplete/Stores/QueryStore.d.ts +15 -0
- package/dist/cjs/Autocomplete/Stores/QueryStore.d.ts.map +1 -0
- package/dist/cjs/Autocomplete/Stores/QueryStore.js +30 -0
- package/dist/cjs/Autocomplete/Stores/StateStore.d.ts +23 -0
- package/dist/cjs/Autocomplete/Stores/StateStore.d.ts.map +1 -0
- package/dist/cjs/Autocomplete/Stores/StateStore.js +52 -0
- package/dist/cjs/Autocomplete/Stores/TermStore.d.ts +19 -0
- package/dist/cjs/Autocomplete/Stores/TermStore.d.ts.map +1 -0
- package/dist/cjs/Autocomplete/Stores/TermStore.js +86 -0
- package/dist/cjs/Autocomplete/Stores/TrendingStore.d.ts +7 -0
- package/dist/cjs/Autocomplete/Stores/TrendingStore.d.ts.map +1 -0
- package/dist/cjs/Autocomplete/Stores/TrendingStore.js +44 -0
- package/dist/cjs/Autocomplete/Stores/index.d.ts +6 -0
- package/dist/cjs/Autocomplete/Stores/index.d.ts.map +1 -0
- package/dist/cjs/Autocomplete/Stores/index.js +13 -0
- package/dist/cjs/Finder/FinderStore.d.ts +21 -0
- package/dist/cjs/Finder/FinderStore.d.ts.map +1 -0
- package/dist/cjs/Finder/FinderStore.js +56 -0
- package/dist/cjs/Finder/Stores/SelectionStore.d.ts +8 -0
- package/dist/cjs/Finder/Stores/SelectionStore.d.ts.map +1 -0
- package/dist/cjs/Finder/Stores/SelectionStore.js +232 -0
- package/dist/cjs/Finder/Stores/index.d.ts +2 -0
- package/dist/cjs/Finder/Stores/index.d.ts.map +1 -0
- package/dist/cjs/Finder/Stores/index.js +5 -0
- package/dist/cjs/Recommendation/RecommendationStore.d.ts +14 -0
- package/dist/cjs/Recommendation/RecommendationStore.d.ts.map +1 -0
- package/dist/cjs/Recommendation/RecommendationStore.js +51 -0
- package/dist/cjs/Recommendation/Stores/ProfileStore.d.ts +8 -0
- package/dist/cjs/Recommendation/Stores/ProfileStore.d.ts.map +1 -0
- package/dist/cjs/Recommendation/Stores/ProfileStore.js +22 -0
- package/dist/cjs/Recommendation/Stores/index.d.ts +2 -0
- package/dist/cjs/Recommendation/Stores/index.d.ts.map +1 -0
- package/dist/cjs/Recommendation/Stores/index.js +5 -0
- package/dist/cjs/Search/SearchStore.d.ts +26 -0
- package/dist/cjs/Search/SearchStore.d.ts.map +1 -0
- package/dist/cjs/Search/SearchStore.js +61 -0
- package/dist/cjs/Search/Stores/FacetStore.d.ts +8 -0
- package/dist/cjs/Search/Stores/FacetStore.d.ts.map +1 -0
- package/dist/cjs/Search/Stores/FacetStore.js +317 -0
- package/dist/cjs/Search/Stores/FilterStore.d.ts +7 -0
- package/dist/cjs/Search/Stores/FilterStore.d.ts.map +1 -0
- package/dist/cjs/Search/Stores/FilterStore.js +100 -0
- package/dist/cjs/Search/Stores/MerchandisingStore.d.ts +20 -0
- package/dist/cjs/Search/Stores/MerchandisingStore.d.ts.map +1 -0
- package/dist/cjs/Search/Stores/MerchandisingStore.js +59 -0
- package/dist/cjs/Search/Stores/PaginationStore.d.ts +40 -0
- package/dist/cjs/Search/Stores/PaginationStore.d.ts.map +1 -0
- package/dist/cjs/Search/Stores/PaginationStore.js +190 -0
- package/dist/cjs/Search/Stores/QueryStore.d.ts +16 -0
- package/dist/cjs/Search/Stores/QueryStore.d.ts.map +1 -0
- package/dist/cjs/Search/Stores/QueryStore.js +34 -0
- package/dist/cjs/Search/Stores/ResultStore.d.ts +7 -0
- package/dist/cjs/Search/Stores/ResultStore.d.ts.map +1 -0
- package/dist/cjs/Search/Stores/ResultStore.js +156 -0
- package/dist/cjs/Search/Stores/SortingStore.d.ts +21 -0
- package/dist/cjs/Search/Stores/SortingStore.d.ts.map +1 -0
- package/dist/cjs/Search/Stores/SortingStore.js +75 -0
- package/dist/cjs/Search/Stores/index.d.ts +8 -0
- package/dist/cjs/Search/Stores/index.d.ts.map +1 -0
- package/dist/cjs/Search/Stores/index.js +17 -0
- package/dist/cjs/Storage/StorageStore.d.ts +25 -0
- package/dist/cjs/Storage/StorageStore.d.ts.map +1 -0
- package/dist/cjs/Storage/StorageStore.js +130 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +27 -0
- package/dist/cjs/types.d.ts +81 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +9 -0
- package/dist/esm/Abstract/AbstractStore.d.ts +18 -0
- package/dist/esm/Abstract/AbstractStore.d.ts.map +1 -0
- package/dist/esm/Abstract/AbstractStore.js +25 -0
- package/dist/esm/Autocomplete/AutocompleteStore.d.ts +32 -0
- package/dist/esm/Autocomplete/AutocompleteStore.d.ts.map +1 -0
- package/dist/esm/Autocomplete/AutocompleteStore.js +94 -0
- package/dist/esm/Autocomplete/Stores/FacetStore.d.ts +9 -0
- package/dist/esm/Autocomplete/Stores/FacetStore.d.ts.map +1 -0
- package/dist/esm/Autocomplete/Stores/FacetStore.js +29 -0
- package/dist/esm/Autocomplete/Stores/QueryStore.d.ts +15 -0
- package/dist/esm/Autocomplete/Stores/QueryStore.d.ts.map +1 -0
- package/dist/esm/Autocomplete/Stores/QueryStore.js +24 -0
- package/dist/esm/Autocomplete/Stores/StateStore.d.ts +23 -0
- package/dist/esm/Autocomplete/Stores/StateStore.d.ts.map +1 -0
- package/dist/esm/Autocomplete/Stores/StateStore.js +40 -0
- package/dist/esm/Autocomplete/Stores/TermStore.d.ts +19 -0
- package/dist/esm/Autocomplete/Stores/TermStore.d.ts.map +1 -0
- package/dist/esm/Autocomplete/Stores/TermStore.js +42 -0
- package/dist/esm/Autocomplete/Stores/TrendingStore.d.ts +7 -0
- package/dist/esm/Autocomplete/Stores/TrendingStore.d.ts.map +1 -0
- package/dist/esm/Autocomplete/Stores/TrendingStore.js +16 -0
- package/dist/esm/Autocomplete/Stores/index.d.ts +6 -0
- package/dist/esm/Autocomplete/Stores/index.d.ts.map +1 -0
- package/dist/esm/Autocomplete/Stores/index.js +5 -0
- package/dist/esm/Finder/FinderStore.d.ts +21 -0
- package/dist/esm/Finder/FinderStore.d.ts.map +1 -0
- package/dist/esm/Finder/FinderStore.js +33 -0
- package/dist/esm/Finder/Stores/SelectionStore.d.ts +8 -0
- package/dist/esm/Finder/Stores/SelectionStore.d.ts.map +1 -0
- package/dist/esm/Finder/Stores/SelectionStore.js +171 -0
- package/dist/esm/Finder/Stores/index.d.ts +2 -0
- package/dist/esm/Finder/Stores/index.d.ts.map +1 -0
- package/dist/esm/Finder/Stores/index.js +1 -0
- package/dist/esm/Recommendation/RecommendationStore.d.ts +14 -0
- package/dist/esm/Recommendation/RecommendationStore.d.ts.map +1 -0
- package/dist/esm/Recommendation/RecommendationStore.js +28 -0
- package/dist/esm/Recommendation/Stores/ProfileStore.d.ts +8 -0
- package/dist/esm/Recommendation/Stores/ProfileStore.d.ts.map +1 -0
- package/dist/esm/Recommendation/Stores/ProfileStore.js +17 -0
- package/dist/esm/Recommendation/Stores/index.d.ts +2 -0
- package/dist/esm/Recommendation/Stores/index.d.ts.map +1 -0
- package/dist/esm/Recommendation/Stores/index.js +1 -0
- package/dist/esm/Search/SearchStore.d.ts +26 -0
- package/dist/esm/Search/SearchStore.d.ts.map +1 -0
- package/dist/esm/Search/SearchStore.js +38 -0
- package/dist/esm/Search/Stores/FacetStore.d.ts +8 -0
- package/dist/esm/Search/Stores/FacetStore.d.ts.map +1 -0
- package/dist/esm/Search/Stores/FacetStore.js +264 -0
- package/dist/esm/Search/Stores/FilterStore.d.ts +7 -0
- package/dist/esm/Search/Stores/FilterStore.d.ts.map +1 -0
- package/dist/esm/Search/Stores/FilterStore.js +68 -0
- package/dist/esm/Search/Stores/MerchandisingStore.d.ts +20 -0
- package/dist/esm/Search/Stores/MerchandisingStore.d.ts.map +1 -0
- package/dist/esm/Search/Stores/MerchandisingStore.js +32 -0
- package/dist/esm/Search/Stores/PaginationStore.d.ts +40 -0
- package/dist/esm/Search/Stores/PaginationStore.d.ts.map +1 -0
- package/dist/esm/Search/Stores/PaginationStore.js +148 -0
- package/dist/esm/Search/Stores/QueryStore.d.ts +16 -0
- package/dist/esm/Search/Stores/QueryStore.d.ts.map +1 -0
- package/dist/esm/Search/Stores/QueryStore.js +28 -0
- package/dist/esm/Search/Stores/ResultStore.d.ts +7 -0
- package/dist/esm/Search/Stores/ResultStore.d.ts.map +1 -0
- package/dist/esm/Search/Stores/ResultStore.js +117 -0
- package/dist/esm/Search/Stores/SortingStore.d.ts +21 -0
- package/dist/esm/Search/Stores/SortingStore.d.ts.map +1 -0
- package/dist/esm/Search/Stores/SortingStore.js +65 -0
- package/dist/esm/Search/Stores/index.d.ts +8 -0
- package/dist/esm/Search/Stores/index.d.ts.map +1 -0
- package/dist/esm/Search/Stores/index.js +7 -0
- package/dist/esm/Storage/StorageStore.d.ts +25 -0
- package/dist/esm/Storage/StorageStore.d.ts.map +1 -0
- package/dist/esm/Storage/StorageStore.js +123 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/types.d.ts +81 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +6 -0
- package/package.json +34 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StorageType = exports.StorageStore = void 0;
|
|
4
|
+
var snap_toolbox_1 = require("@searchspring/snap-toolbox");
|
|
5
|
+
var utils = {
|
|
6
|
+
cookies: snap_toolbox_1.cookies,
|
|
7
|
+
};
|
|
8
|
+
var StorageStore = /** @class */ (function () {
|
|
9
|
+
function StorageStore(config) {
|
|
10
|
+
var _a, _b;
|
|
11
|
+
this.type = null;
|
|
12
|
+
this.expiration = 31536000000; // one year (ms)
|
|
13
|
+
this.sameSite = undefined;
|
|
14
|
+
this.key = 'ss-storage';
|
|
15
|
+
this.state = {};
|
|
16
|
+
if (config) {
|
|
17
|
+
if (config.key.trim() !== '') {
|
|
18
|
+
this.key = config.key.trim();
|
|
19
|
+
}
|
|
20
|
+
if ((_a = config === null || config === void 0 ? void 0 : config.cookie) === null || _a === void 0 ? void 0 : _a.expiration) {
|
|
21
|
+
this.expiration = config.cookie.expiration;
|
|
22
|
+
}
|
|
23
|
+
if ((_b = config === null || config === void 0 ? void 0 : config.cookie) === null || _b === void 0 ? void 0 : _b.sameSite) {
|
|
24
|
+
this.sameSite = config.cookie.sameSite;
|
|
25
|
+
}
|
|
26
|
+
switch (config.type) {
|
|
27
|
+
case StorageType.SESSION:
|
|
28
|
+
this.type = snap_toolbox_1.featureFlags.storage ? config.type : null;
|
|
29
|
+
if (this.type) {
|
|
30
|
+
this.state = JSON.parse(window.sessionStorage.getItem(this.key) || '{}');
|
|
31
|
+
window.sessionStorage.setItem(this.key, JSON.stringify(this.state));
|
|
32
|
+
}
|
|
33
|
+
break;
|
|
34
|
+
case StorageType.LOCAL:
|
|
35
|
+
this.type = snap_toolbox_1.featureFlags.storage ? config.type : null;
|
|
36
|
+
if (this.type && !window.localStorage.getItem(this.key)) {
|
|
37
|
+
this.state = JSON.parse(window.localStorage.getItem(this.key) || '{}');
|
|
38
|
+
window.localStorage.setItem(this.key, JSON.stringify(this.state));
|
|
39
|
+
}
|
|
40
|
+
break;
|
|
41
|
+
case StorageType.COOKIE:
|
|
42
|
+
if (snap_toolbox_1.featureFlags.cookies) {
|
|
43
|
+
this.type = config.type;
|
|
44
|
+
var data = utils.cookies.get(this.key);
|
|
45
|
+
if (data) {
|
|
46
|
+
this.state = JSON.parse(data);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
StorageStore.prototype.set = function (path, value) {
|
|
54
|
+
var paths = path === null || path === void 0 ? void 0 : path.split('.');
|
|
55
|
+
var location = this.state;
|
|
56
|
+
paths === null || paths === void 0 ? void 0 : paths.forEach(function (p, i) {
|
|
57
|
+
var leaf = i == paths.length - 1;
|
|
58
|
+
if (leaf) {
|
|
59
|
+
location[p] = value;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
location = location[p] = location[p] || {};
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
switch (this.type) {
|
|
66
|
+
case StorageType.SESSION:
|
|
67
|
+
window.sessionStorage.setItem(this.key, JSON.stringify(this.state));
|
|
68
|
+
break;
|
|
69
|
+
case StorageType.LOCAL:
|
|
70
|
+
window.localStorage.setItem(this.key, JSON.stringify(this.state));
|
|
71
|
+
break;
|
|
72
|
+
case StorageType.COOKIE:
|
|
73
|
+
utils.cookies.set(this.key, JSON.stringify(this.state), this.sameSite, this.expiration);
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
StorageStore.prototype.get = function (path) {
|
|
78
|
+
switch (this.type) {
|
|
79
|
+
case StorageType.SESSION:
|
|
80
|
+
this.state = JSON.parse(window.sessionStorage.getItem(this.key)) || {};
|
|
81
|
+
break;
|
|
82
|
+
case StorageType.LOCAL:
|
|
83
|
+
this.state = JSON.parse(window.localStorage.getItem(this.key)) || {};
|
|
84
|
+
break;
|
|
85
|
+
case StorageType.COOKIE:
|
|
86
|
+
var data = utils.cookies.get(this.key);
|
|
87
|
+
if (data) {
|
|
88
|
+
this.state = JSON.parse(data) || {};
|
|
89
|
+
}
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
var paths = path === null || path === void 0 ? void 0 : path.split('.');
|
|
93
|
+
if (!(paths === null || paths === void 0 ? void 0 : paths.length))
|
|
94
|
+
return undefined;
|
|
95
|
+
var value = this.state;
|
|
96
|
+
for (var _i = 0, paths_1 = paths; _i < paths_1.length; _i++) {
|
|
97
|
+
var p = paths_1[_i];
|
|
98
|
+
if (value && typeof value[p] != 'undefined') {
|
|
99
|
+
value = value[p];
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
value = undefined;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return value;
|
|
107
|
+
};
|
|
108
|
+
StorageStore.prototype.clear = function () {
|
|
109
|
+
switch (this.type) {
|
|
110
|
+
case StorageType.SESSION:
|
|
111
|
+
window.sessionStorage.removeItem(this.key);
|
|
112
|
+
break;
|
|
113
|
+
case StorageType.LOCAL:
|
|
114
|
+
window.localStorage.removeItem(this.key);
|
|
115
|
+
break;
|
|
116
|
+
case StorageType.COOKIE:
|
|
117
|
+
utils.cookies.unset(this.key);
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
this.state = {};
|
|
121
|
+
};
|
|
122
|
+
return StorageStore;
|
|
123
|
+
}());
|
|
124
|
+
exports.StorageStore = StorageStore;
|
|
125
|
+
var StorageType;
|
|
126
|
+
(function (StorageType) {
|
|
127
|
+
StorageType["SESSION"] = "session";
|
|
128
|
+
StorageType["LOCAL"] = "local";
|
|
129
|
+
StorageType["COOKIE"] = "cookie";
|
|
130
|
+
})(StorageType = exports.StorageType || (exports.StorageType = {}));
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { AbstractStore } from './Abstract/AbstractStore';
|
|
2
|
+
export { AutocompleteStore } from './Autocomplete/AutocompleteStore';
|
|
3
|
+
export { FinderStore } from './Finder/FinderStore';
|
|
4
|
+
export { SearchStore } from './Search/SearchStore';
|
|
5
|
+
export { RecommendationStore } from './Recommendation/RecommendationStore';
|
|
6
|
+
export { StorageStore, StorageConfig, StorageType } from './Storage/StorageStore';
|
|
7
|
+
export * from './types';
|
|
8
|
+
//# 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,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAElF,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.StorageType = exports.StorageStore = exports.RecommendationStore = exports.SearchStore = exports.FinderStore = exports.AutocompleteStore = exports.AbstractStore = void 0;
|
|
14
|
+
var AbstractStore_1 = require("./Abstract/AbstractStore");
|
|
15
|
+
Object.defineProperty(exports, "AbstractStore", { enumerable: true, get: function () { return AbstractStore_1.AbstractStore; } });
|
|
16
|
+
var AutocompleteStore_1 = require("./Autocomplete/AutocompleteStore");
|
|
17
|
+
Object.defineProperty(exports, "AutocompleteStore", { enumerable: true, get: function () { return AutocompleteStore_1.AutocompleteStore; } });
|
|
18
|
+
var FinderStore_1 = require("./Finder/FinderStore");
|
|
19
|
+
Object.defineProperty(exports, "FinderStore", { enumerable: true, get: function () { return FinderStore_1.FinderStore; } });
|
|
20
|
+
var SearchStore_1 = require("./Search/SearchStore");
|
|
21
|
+
Object.defineProperty(exports, "SearchStore", { enumerable: true, get: function () { return SearchStore_1.SearchStore; } });
|
|
22
|
+
var RecommendationStore_1 = require("./Recommendation/RecommendationStore");
|
|
23
|
+
Object.defineProperty(exports, "RecommendationStore", { enumerable: true, get: function () { return RecommendationStore_1.RecommendationStore; } });
|
|
24
|
+
var StorageStore_1 = require("./Storage/StorageStore");
|
|
25
|
+
Object.defineProperty(exports, "StorageStore", { enumerable: true, get: function () { return StorageStore_1.StorageStore; } });
|
|
26
|
+
Object.defineProperty(exports, "StorageType", { enumerable: true, get: function () { return StorageStore_1.StorageType; } });
|
|
27
|
+
__exportStar(require("./types"), exports);
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { UrlManager } from '@searchspring/snap-url-manager';
|
|
2
|
+
export declare type StoreConfig = {
|
|
3
|
+
id: string;
|
|
4
|
+
[any: string]: unknown;
|
|
5
|
+
};
|
|
6
|
+
export declare type SearchStoreConfig = StoreConfig & {
|
|
7
|
+
globals?: {
|
|
8
|
+
personalization?: {
|
|
9
|
+
disabled: boolean;
|
|
10
|
+
};
|
|
11
|
+
[any: string]: unknown;
|
|
12
|
+
};
|
|
13
|
+
settings?: {
|
|
14
|
+
redirects?: {
|
|
15
|
+
merchandising?: boolean;
|
|
16
|
+
singleResult?: boolean;
|
|
17
|
+
};
|
|
18
|
+
facets?: {
|
|
19
|
+
trim?: boolean;
|
|
20
|
+
pinFiltered?: boolean;
|
|
21
|
+
};
|
|
22
|
+
infinite?: {
|
|
23
|
+
backfill?: number;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export declare type FinderStoreConfig = StoreConfig & {
|
|
28
|
+
globals?: any;
|
|
29
|
+
url?: string;
|
|
30
|
+
fields: FinderFieldConfig[];
|
|
31
|
+
};
|
|
32
|
+
export declare type FinderFieldConfig = {
|
|
33
|
+
field: string;
|
|
34
|
+
label?: string;
|
|
35
|
+
levels?: string[];
|
|
36
|
+
};
|
|
37
|
+
export declare type AutocompleteStoreConfig = StoreConfig & {
|
|
38
|
+
globals?: {
|
|
39
|
+
personalization?: {
|
|
40
|
+
disabled: boolean;
|
|
41
|
+
};
|
|
42
|
+
search?: {
|
|
43
|
+
[any: string]: unknown;
|
|
44
|
+
query?: {
|
|
45
|
+
[any: string]: unknown;
|
|
46
|
+
spellCorrection?: boolean;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
[any: string]: unknown;
|
|
50
|
+
};
|
|
51
|
+
selector: string;
|
|
52
|
+
action?: string;
|
|
53
|
+
settings?: {
|
|
54
|
+
initializeFromUrl?: boolean;
|
|
55
|
+
syncInputs?: boolean;
|
|
56
|
+
facets?: {
|
|
57
|
+
trim?: boolean;
|
|
58
|
+
pinFiltered?: boolean;
|
|
59
|
+
};
|
|
60
|
+
trending?: {
|
|
61
|
+
limit: number;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
export declare type RecommendationStoreConfig = StoreConfig & {
|
|
66
|
+
globals?: any;
|
|
67
|
+
tag: string;
|
|
68
|
+
branch?: string;
|
|
69
|
+
realtime?: boolean;
|
|
70
|
+
batched?: boolean;
|
|
71
|
+
};
|
|
72
|
+
export declare type StoreConfigs = SearchStoreConfig | AutocompleteStoreConfig | FinderStoreConfig | RecommendationStoreConfig;
|
|
73
|
+
export declare type StoreServices = {
|
|
74
|
+
urlManager?: UrlManager;
|
|
75
|
+
};
|
|
76
|
+
export declare enum ErrorType {
|
|
77
|
+
WARNING = "warning",
|
|
78
|
+
INFO = "info",
|
|
79
|
+
ERROR = "error"
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAGjE,oBAAY,WAAW,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB,CAAC;AAGF,oBAAY,iBAAiB,GAAG,WAAW,GAAG;IAC7C,OAAO,CAAC,EAAE;QACT,eAAe,CAAC,EAAE;YACjB,QAAQ,EAAE,OAAO,CAAC;SAClB,CAAC;QACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,EAAE;QACV,SAAS,CAAC,EAAE;YACX,aAAa,CAAC,EAAE,OAAO,CAAC;YACxB,YAAY,CAAC,EAAE,OAAO,CAAC;SACvB,CAAC;QACF,MAAM,CAAC,EAAE;YACR,IAAI,CAAC,EAAE,OAAO,CAAC;YACf,WAAW,CAAC,EAAE,OAAO,CAAC;SACtB,CAAC;QACF,QAAQ,CAAC,EAAE;YACV,QAAQ,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;KACF,CAAC;CACF,CAAC;AAGF,oBAAY,iBAAiB,GAAG,WAAW,GAAG;IAC7C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC5B,CAAC;AAEF,oBAAY,iBAAiB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAGF,oBAAY,uBAAuB,GAAG,WAAW,GAAG;IACnD,OAAO,CAAC,EAAE;QACT,eAAe,CAAC,EAAE;YACjB,QAAQ,EAAE,OAAO,CAAC;SAClB,CAAC;QACF,MAAM,CAAC,EAAE;YACR,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;YACvB,KAAK,CAAC,EAAE;gBACP,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;gBACvB,eAAe,CAAC,EAAE,OAAO,CAAC;aAC1B,CAAC;SACF,CAAC;QACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACV,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,MAAM,CAAC,EAAE;YACR,IAAI,CAAC,EAAE,OAAO,CAAC;YACf,WAAW,CAAC,EAAE,OAAO,CAAC;SACtB,CAAC;QACF,QAAQ,CAAC,EAAE;YACV,KAAK,EAAE,MAAM,CAAC;SACd,CAAC;KACF,CAAC;CACF,CAAC;AAGF,oBAAY,yBAAyB,GAAG,WAAW,GAAG;IACrD,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,oBAAY,YAAY,GAAG,iBAAiB,GAAG,uBAAuB,GAAG,iBAAiB,GAAG,yBAAyB,CAAC;AAEvH,oBAAY,aAAa,GAAG;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,oBAAY,SAAS;IACpB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,KAAK,UAAU;CACf"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ErrorType = void 0;
|
|
4
|
+
var ErrorType;
|
|
5
|
+
(function (ErrorType) {
|
|
6
|
+
ErrorType["WARNING"] = "warning";
|
|
7
|
+
ErrorType["INFO"] = "info";
|
|
8
|
+
ErrorType["ERROR"] = "error";
|
|
9
|
+
})(ErrorType = exports.ErrorType || (exports.ErrorType = {}));
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { StoreConfigs, ErrorType } from '../types';
|
|
2
|
+
export declare abstract class AbstractStore {
|
|
3
|
+
protected controller: any;
|
|
4
|
+
custom: {};
|
|
5
|
+
loading: boolean;
|
|
6
|
+
loaded: boolean;
|
|
7
|
+
error: {
|
|
8
|
+
code?: number;
|
|
9
|
+
type: ErrorType;
|
|
10
|
+
message: string;
|
|
11
|
+
};
|
|
12
|
+
config: StoreConfigs;
|
|
13
|
+
constructor(config: StoreConfigs);
|
|
14
|
+
setConfig(newConfig: StoreConfigs): void;
|
|
15
|
+
abstract update(data: any): void;
|
|
16
|
+
toJSON(thing?: this): this;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=AbstractStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractStore.d.ts","sourceRoot":"","sources":["../../../src/Abstract/AbstractStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAOxD,8BAAsB,aAAa;IAClC,SAAS,CAAC,UAAU,MAAC;IACd,MAAM,KAAM;IACZ,OAAO,UAAS;IAChB,MAAM,UAAS;IACf,KAAK,EAAE;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,SAAS,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KAChB,CAAC;IACK,MAAM,EAAE,YAAY,CAAC;gBAEhB,MAAM,EAAE,YAAY;IAUhC,SAAS,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAIxC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAA,GAAG,IAAI;IAE3B,MAAM,CAAC,KAAK,OAAO;CAInB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { makeObservable, observable, toJS, configure } from 'mobx';
|
|
2
|
+
configure({
|
|
3
|
+
// useProxies: "never", // for IE 11 (es5) support
|
|
4
|
+
enforceActions: 'never',
|
|
5
|
+
});
|
|
6
|
+
export class AbstractStore {
|
|
7
|
+
constructor(config) {
|
|
8
|
+
this.custom = {};
|
|
9
|
+
this.loading = false;
|
|
10
|
+
this.loaded = false;
|
|
11
|
+
this.config = config;
|
|
12
|
+
makeObservable(this, {
|
|
13
|
+
custom: observable,
|
|
14
|
+
loading: observable,
|
|
15
|
+
loaded: observable,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
setConfig(newConfig) {
|
|
19
|
+
this.config = newConfig;
|
|
20
|
+
}
|
|
21
|
+
toJSON(thing = this) {
|
|
22
|
+
// TODO: make this work better
|
|
23
|
+
return toJS(thing);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AutocompleteResponseModel, MetaResponseModel } from '@searchspring/snapi-types';
|
|
2
|
+
import { AbstractStore } from '../Abstract/AbstractStore';
|
|
3
|
+
import { FilterStore, ResultStore, MerchandisingStore, PaginationStore, SortingStore } from '../Search/Stores';
|
|
4
|
+
import { StorageStore } from '../Storage/StorageStore';
|
|
5
|
+
import type { AutocompleteStoreConfig, StoreServices } from '../types';
|
|
6
|
+
import { StateStore, TermStore, QueryStore, FacetStore, TrendingStore } from './Stores';
|
|
7
|
+
export declare class AutocompleteStore extends AbstractStore {
|
|
8
|
+
config: AutocompleteStoreConfig;
|
|
9
|
+
services: StoreServices;
|
|
10
|
+
meta: MetaResponseModel;
|
|
11
|
+
merchandising: MerchandisingStore;
|
|
12
|
+
search: QueryStore;
|
|
13
|
+
terms: TermStore;
|
|
14
|
+
facets: FacetStore;
|
|
15
|
+
filters: FilterStore;
|
|
16
|
+
results: ResultStore;
|
|
17
|
+
pagination: PaginationStore;
|
|
18
|
+
sorting: SortingStore;
|
|
19
|
+
state: StateStore;
|
|
20
|
+
storage: StorageStore;
|
|
21
|
+
trending: TrendingStore;
|
|
22
|
+
constructor(config: AutocompleteStoreConfig, services: StoreServices);
|
|
23
|
+
reset(): void;
|
|
24
|
+
resetTrending(): void;
|
|
25
|
+
resetTerms(): void;
|
|
26
|
+
setService(name: any, service: any): void;
|
|
27
|
+
updateTrendingTerms(data: any): void;
|
|
28
|
+
update(data: AutocompleteResponseModel & {
|
|
29
|
+
meta: MetaResponseModel;
|
|
30
|
+
}): void;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=AutocompleteStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutocompleteStore.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC/G,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxF,qBAAa,iBAAkB,SAAQ,aAAa;IACnD,MAAM,EAAE,uBAAuB,CAAC;IAChC,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,iBAAiB,CAAM;IAE7B,aAAa,EAAE,kBAAkB,CAAC;IAClC,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,aAAa,CAAC;gBAEZ,MAAM,EAAE,uBAAuB,EAAE,QAAQ,EAAE,aAAa;IA4BpE,KAAK,IAAI,IAAI;IAMb,aAAa,IAAI,IAAI;IAQrB,UAAU,IAAI,IAAI;IAQlB,UAAU,CAAC,IAAI,KAAA,EAAE,OAAO,KAAA,GAAG,IAAI;IAS/B,mBAAmB,CAAC,IAAI,KAAA,GAAG,IAAI;IAW/B,MAAM,CAAC,IAAI,EAAE,yBAAyB,GAAG;QAAE,IAAI,EAAE,iBAAiB,CAAA;KAAE,GAAG,IAAI;CA8C3E"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { makeObservable, observable } from 'mobx';
|
|
2
|
+
import { AbstractStore } from '../Abstract/AbstractStore';
|
|
3
|
+
import { FilterStore, ResultStore, MerchandisingStore, PaginationStore, SortingStore } from '../Search/Stores';
|
|
4
|
+
import { StorageStore } from '../Storage/StorageStore';
|
|
5
|
+
import { StateStore, TermStore, QueryStore, FacetStore, TrendingStore } from './Stores';
|
|
6
|
+
export class AutocompleteStore extends AbstractStore {
|
|
7
|
+
constructor(config, services) {
|
|
8
|
+
super(config);
|
|
9
|
+
this.meta = {};
|
|
10
|
+
if (typeof services != 'object' || typeof services.urlManager?.subscribe != 'function') {
|
|
11
|
+
throw new Error(`Invalid service 'urlManager' passed to AutocompleteStore. Missing "subscribe" function.`);
|
|
12
|
+
}
|
|
13
|
+
this.services = services;
|
|
14
|
+
this.state = new StateStore(services);
|
|
15
|
+
this.storage = new StorageStore();
|
|
16
|
+
this.trending = [];
|
|
17
|
+
this.reset();
|
|
18
|
+
makeObservable(this, {
|
|
19
|
+
state: observable,
|
|
20
|
+
search: observable,
|
|
21
|
+
terms: observable,
|
|
22
|
+
facets: observable,
|
|
23
|
+
filters: observable,
|
|
24
|
+
merchandising: observable,
|
|
25
|
+
results: observable,
|
|
26
|
+
pagination: observable,
|
|
27
|
+
sorting: observable,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
reset() {
|
|
31
|
+
this.state.reset();
|
|
32
|
+
this.update({ meta: this.meta });
|
|
33
|
+
this.resetTrending();
|
|
34
|
+
}
|
|
35
|
+
resetTrending() {
|
|
36
|
+
if (this.trending?.length) {
|
|
37
|
+
this.trending.forEach((term) => {
|
|
38
|
+
term.active = false;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
resetTerms() {
|
|
43
|
+
if (this.terms?.length > 0) {
|
|
44
|
+
this.terms.forEach((term) => {
|
|
45
|
+
term.active = false;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
setService(name, service) {
|
|
50
|
+
if (this.services[name] && service) {
|
|
51
|
+
this.services[name] = service;
|
|
52
|
+
if (name === 'urlManager') {
|
|
53
|
+
this.state.url = service;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
updateTrendingTerms(data) {
|
|
58
|
+
this.trending = new TrendingStore(this.services, data.trending, () => {
|
|
59
|
+
this.resetTerms();
|
|
60
|
+
}, this.state);
|
|
61
|
+
}
|
|
62
|
+
update(data) {
|
|
63
|
+
this.error = undefined;
|
|
64
|
+
this.loaded = !!data.pagination;
|
|
65
|
+
this.meta = data.meta;
|
|
66
|
+
// set the query to match the actual queried term and not the input query
|
|
67
|
+
if (data.search) {
|
|
68
|
+
this.state.url = this.services.urlManager = this.services.urlManager.set('query', data.search.query);
|
|
69
|
+
}
|
|
70
|
+
// only run if we want to update the terms (not locked)
|
|
71
|
+
if (!this.state.locks.terms.locked) {
|
|
72
|
+
this.terms = new TermStore(this.services, data.autocomplete, data.pagination, () => {
|
|
73
|
+
this.resetTrending();
|
|
74
|
+
}, this.state);
|
|
75
|
+
// only lock if there was data
|
|
76
|
+
data.autocomplete && this.state.locks.terms.lock();
|
|
77
|
+
}
|
|
78
|
+
this.merchandising = new MerchandisingStore(this.services, data.merchandising);
|
|
79
|
+
this.search = new QueryStore(this.services, data.autocomplete, data.search);
|
|
80
|
+
// only run if we want to update the facets (not locked)
|
|
81
|
+
if (!this.state.locks.facets.locked) {
|
|
82
|
+
this.facets = new FacetStore(this.config, this.services, this.storage, data.facets, data.pagination, this.meta, this.state);
|
|
83
|
+
}
|
|
84
|
+
this.filters = new FilterStore(this.services, data.filters, this.meta);
|
|
85
|
+
this.results = new ResultStore(this.config, this.services, data.results, data.pagination, data.merchandising);
|
|
86
|
+
if ((this.results.length === 0 && !this.trending.filter((term) => term.active).length) || this.terms.filter((term) => term.active).length) {
|
|
87
|
+
// if a trending term was selected and then a subsequent search yields no results, reset trending terms to remove active state
|
|
88
|
+
// OR if any terms are active, also reset to ensure only a single term or trending term is active
|
|
89
|
+
this.resetTrending();
|
|
90
|
+
}
|
|
91
|
+
this.pagination = new PaginationStore(this.config, this.services, data.pagination);
|
|
92
|
+
this.sorting = new SortingStore(this.services, data.sorting, data.search, this.meta);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { StorageStore } from '../../Storage/StorageStore';
|
|
2
|
+
import type { StateStore } from './StateStore';
|
|
3
|
+
import type { AutocompleteStoreConfig, SearchStoreConfig, StoreServices } from '../../types';
|
|
4
|
+
import type { SearchResponseModelFacet, SearchResponseModelPagination, MetaResponseModel } from '@searchspring/snapi-types';
|
|
5
|
+
export declare class FacetStore extends Array {
|
|
6
|
+
static get [Symbol.species](): ArrayConstructor;
|
|
7
|
+
constructor(config: SearchStoreConfig | AutocompleteStoreConfig, services: StoreServices, storage: StorageStore, facetsData: SearchResponseModelFacet[], paginationData: SearchResponseModelPagination, meta: MetaResponseModel, rootState: StateStore);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=FacetStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FacetStore.d.ts","sourceRoot":"","sources":["../../../../src/Autocomplete/Stores/FacetStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC7F,OAAO,KAAK,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE5H,qBAAa,UAAW,SAAQ,KAAK;IACpC,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAE9C;gBAGA,MAAM,EAAE,iBAAiB,GAAG,uBAAuB,EACnD,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,wBAAwB,EAAE,EACtC,cAAc,EAAE,6BAA6B,EAC7C,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,UAAU;CA2BtB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { FacetStore as SearchFacetStore } from '../../Search/Stores';
|
|
2
|
+
export class FacetStore extends Array {
|
|
3
|
+
static get [Symbol.species]() {
|
|
4
|
+
return Array;
|
|
5
|
+
}
|
|
6
|
+
constructor(config, services, storage, facetsData, paginationData, meta, rootState) {
|
|
7
|
+
// allow for only a singular facet option selection at a time
|
|
8
|
+
const alteredServices = { ...services, urlManager: services.urlManager.remove('filter') };
|
|
9
|
+
const facets = new SearchFacetStore(config, alteredServices, storage, facetsData, paginationData, meta);
|
|
10
|
+
// mutate facet values to add 'preview' function
|
|
11
|
+
facets.forEach((facet) => {
|
|
12
|
+
facet.values?.forEach((value) => {
|
|
13
|
+
value.preview = () => {
|
|
14
|
+
facets.map((facet) => {
|
|
15
|
+
facet.filtered = false;
|
|
16
|
+
facet.values?.map((value) => {
|
|
17
|
+
value.filtered = false;
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
facet.filtered = true;
|
|
21
|
+
value.filtered = true;
|
|
22
|
+
rootState.locks.facets.lock();
|
|
23
|
+
value.url.go();
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
super(...facets);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { UrlManager } from '@searchspring/snap-url-manager';
|
|
2
|
+
import type { SearchResponseModelSearch, AutocompleteResponseModelAllOfAutocomplete } from '@searchspring/snapi-types';
|
|
3
|
+
import type { StoreServices } from '../../types';
|
|
4
|
+
export declare class QueryStore {
|
|
5
|
+
query: Query;
|
|
6
|
+
originalQuery: Query;
|
|
7
|
+
constructor(services: StoreServices, autocomplete: AutocompleteResponseModelAllOfAutocomplete, search: SearchResponseModelSearch);
|
|
8
|
+
}
|
|
9
|
+
declare class Query {
|
|
10
|
+
string: string;
|
|
11
|
+
url: UrlManager;
|
|
12
|
+
constructor(urlManager: any, query: any);
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=QueryStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryStore.d.ts","sourceRoot":"","sources":["../../../../src/Autocomplete/Stores/QueryStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,yBAAyB,EAAE,0CAA0C,EAAE,MAAM,2BAA2B,CAAC;AACvH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,qBAAa,UAAU;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,KAAK,CAAC;gBAET,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,0CAA0C,EAAE,MAAM,EAAE,yBAAyB;CAehI;AAMD,cAAM,KAAK;IACV,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,UAAU,CAAC;gBAEJ,UAAU,KAAA,EAAE,KAAK,KAAA;CAS7B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { observable, makeObservable } from 'mobx';
|
|
2
|
+
export class QueryStore {
|
|
3
|
+
constructor(services, autocomplete, search) {
|
|
4
|
+
const observables = {};
|
|
5
|
+
if (search?.query) {
|
|
6
|
+
this.query = new Query(services.urlManager, search.query);
|
|
7
|
+
observables.query = observable;
|
|
8
|
+
}
|
|
9
|
+
if (autocomplete?.correctedQuery) {
|
|
10
|
+
this.originalQuery = new Query(services.urlManager, autocomplete.query);
|
|
11
|
+
observables.originalQuery = observable;
|
|
12
|
+
}
|
|
13
|
+
makeObservable(this, observables);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
class Query {
|
|
17
|
+
constructor(urlManager, query) {
|
|
18
|
+
this.string = query;
|
|
19
|
+
this.url = urlManager.set({ query: this.string });
|
|
20
|
+
makeObservable(this, {
|
|
21
|
+
string: observable,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { UrlManager } from '@searchspring/snap-url-manager';
|
|
2
|
+
import type { StoreServices } from '../../types';
|
|
3
|
+
export declare class StateStore {
|
|
4
|
+
locks: {
|
|
5
|
+
terms: Lock;
|
|
6
|
+
facets: Lock;
|
|
7
|
+
};
|
|
8
|
+
focusedInput: HTMLInputElement;
|
|
9
|
+
input: string;
|
|
10
|
+
url: UrlManager;
|
|
11
|
+
constructor(services: StoreServices);
|
|
12
|
+
reset(): void;
|
|
13
|
+
}
|
|
14
|
+
export declare class Lock {
|
|
15
|
+
private state;
|
|
16
|
+
private startState;
|
|
17
|
+
constructor(state?: boolean);
|
|
18
|
+
reset(): void;
|
|
19
|
+
get locked(): boolean;
|
|
20
|
+
lock(): void;
|
|
21
|
+
unlock(): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=StateStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateStore.d.ts","sourceRoot":"","sources":["../../../../src/Autocomplete/Stores/StateStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,qBAAa,UAAU;IACtB,KAAK,EAAE;QACN,KAAK,EAAE,IAAI,CAAC;QACZ,MAAM,EAAE,IAAI,CAAC;KACb,CAAC;IACF,YAAY,EAAE,gBAAgB,CAAa;IAC3C,KAAK,SAAM;IACX,GAAG,EAAE,UAAU,CAAC;gBAEJ,QAAQ,EAAE,aAAa;IAgBnC,KAAK,IAAI,IAAI;CAKb;AAED,qBAAa,IAAI;IAChB,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,UAAU,CAAU;gBAEhB,KAAK,UAAQ;IAIzB,KAAK,IAAI,IAAI;IAIb,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,IAAI,IAAI;IAIZ,MAAM,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { observable, action, makeObservable } from 'mobx';
|
|
2
|
+
export class StateStore {
|
|
3
|
+
constructor(services) {
|
|
4
|
+
this.focusedInput = undefined;
|
|
5
|
+
this.input = '';
|
|
6
|
+
this.locks = {
|
|
7
|
+
terms: new Lock(false),
|
|
8
|
+
facets: new Lock(false),
|
|
9
|
+
};
|
|
10
|
+
this.url = services.urlManager;
|
|
11
|
+
makeObservable(this, {
|
|
12
|
+
focusedInput: observable,
|
|
13
|
+
locks: observable,
|
|
14
|
+
input: observable,
|
|
15
|
+
reset: action,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
reset() {
|
|
19
|
+
this.input = '';
|
|
20
|
+
this.locks.terms.reset();
|
|
21
|
+
this.locks.facets.reset();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export class Lock {
|
|
25
|
+
constructor(state = false) {
|
|
26
|
+
this.state = this.startState = state;
|
|
27
|
+
}
|
|
28
|
+
reset() {
|
|
29
|
+
this.state = this.startState;
|
|
30
|
+
}
|
|
31
|
+
get locked() {
|
|
32
|
+
return this.state;
|
|
33
|
+
}
|
|
34
|
+
lock() {
|
|
35
|
+
this.state = true;
|
|
36
|
+
}
|
|
37
|
+
unlock() {
|
|
38
|
+
this.state = false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { UrlManager } from '@searchspring/snap-url-manager';
|
|
2
|
+
import type { StateStore } from './StateStore';
|
|
3
|
+
import type { StoreServices } from '../../types';
|
|
4
|
+
import type { AutocompleteResponseModelAllOfAutocomplete, SearchResponseModelPagination } from '@searchspring/snapi-types';
|
|
5
|
+
export declare class TermStore extends Array {
|
|
6
|
+
static get [Symbol.species](): ArrayConstructor;
|
|
7
|
+
constructor(services: StoreServices, autocomplete: AutocompleteResponseModelAllOfAutocomplete, paginationData: SearchResponseModelPagination, resetTerms: () => void, rootState: StateStore);
|
|
8
|
+
}
|
|
9
|
+
export declare class Term {
|
|
10
|
+
active: boolean;
|
|
11
|
+
value: string;
|
|
12
|
+
preview: () => void;
|
|
13
|
+
url: UrlManager;
|
|
14
|
+
constructor(services: StoreServices, term: {
|
|
15
|
+
active: boolean;
|
|
16
|
+
value: string;
|
|
17
|
+
}, terms: Term[], resetTerms: () => void, rootState: StateStore);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=TermStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TermStore.d.ts","sourceRoot":"","sources":["../../../../src/Autocomplete/Stores/TermStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,0CAA0C,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAE3H,qBAAa,SAAU,SAAQ,KAAK;IACnC,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAE9C;gBAGA,QAAQ,EAAE,aAAa,EACvB,YAAY,EAAE,0CAA0C,EACxD,cAAc,EAAE,6BAA6B,EAC7C,UAAU,EAAE,MAAM,IAAI,EACtB,SAAS,EAAE,UAAU;CA6BtB;AAED,qBAAa,IAAI;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,GAAG,EAAE,UAAU,CAAC;gBAEJ,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,IAAI,EAAE,SAAS,EAAE,UAAU;CAwB3I"}
|