@searchspring/snap-controller 0.24.0 → 0.26.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.
@@ -7,7 +7,7 @@ export declare class FinderController extends AbstractController {
7
7
  config: FinderControllerConfig;
8
8
  constructor(config: FinderControllerConfig, { client, store, urlManager, eventManager, profiler, logger, tracker }: ControllerServices, context?: ContextVariables);
9
9
  get params(): Record<string, any>;
10
- find: () => void;
10
+ find: () => Promise<void>;
11
11
  reset: () => void;
12
12
  search: () => Promise<void>;
13
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FinderController.d.ts","sourceRoot":"","sources":["../../../src/Finder/FinderController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAmC,kBAAkB,EAAa,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAQzI,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,SAAY;IAChB,KAAK,EAAE,WAAW,CAAC;IAC1B,MAAM,EAAE,sBAAsB,CAAC;gBAG9B,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IAqC3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAchC;IAED,IAAI,QAAO,IAAI,CAEb;IAEF,KAAK,QAAO,IAAI,CAMd;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CA6G9B;CACF"}
1
+ {"version":3,"file":"FinderController.d.ts","sourceRoot":"","sources":["../../../src/Finder/FinderController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAmC,kBAAkB,EAAa,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiBzI,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,SAAY;IAChB,KAAK,EAAE,WAAW,CAAC;IAC1B,MAAM,EAAE,sBAAsB,CAAC;gBAG9B,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IAqC3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAchC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAkB5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAiH9B;CACF"}
@@ -72,8 +72,17 @@ var AbstractController_1 = require("../Abstract/AbstractController");
72
72
  var getParams_1 = require("../utils/getParams");
73
73
  var defaultConfig = {
74
74
  id: 'finder',
75
- globals: {},
75
+ globals: {
76
+ pagination: {
77
+ pageSize: 0,
78
+ },
79
+ },
76
80
  fields: [],
81
+ persist: {
82
+ enabled: false,
83
+ lockSelections: true,
84
+ expiration: 0,
85
+ },
77
86
  };
78
87
  var FinderController = /** @class */ (function (_super) {
79
88
  __extends(FinderController, _super);
@@ -81,18 +90,45 @@ var FinderController = /** @class */ (function (_super) {
81
90
  var client = _a.client, store = _a.store, urlManager = _a.urlManager, eventManager = _a.eventManager, profiler = _a.profiler, logger = _a.logger, tracker = _a.tracker;
82
91
  var _this = _super.call(this, config, { client: client, store: store, urlManager: urlManager, eventManager: eventManager, profiler: profiler, logger: logger, tracker: tracker }, context) || this;
83
92
  _this.type = 'finder';
84
- _this.find = function () {
85
- window.location.href = _this.urlManager.href;
86
- };
93
+ _this.find = function () { return __awaiter(_this, void 0, void 0, function () {
94
+ var err_1;
95
+ return __generator(this, function (_a) {
96
+ switch (_a.label) {
97
+ case 0: return [4 /*yield*/, this.store.save()];
98
+ case 1:
99
+ _a.sent(); // save current selections to storage
100
+ _a.label = 2;
101
+ case 2:
102
+ _a.trys.push([2, 4, , 5]);
103
+ return [4 /*yield*/, this.eventManager.fire('beforeFind', {
104
+ controller: this,
105
+ })];
106
+ case 3:
107
+ _a.sent();
108
+ return [3 /*break*/, 5];
109
+ case 4:
110
+ err_1 = _a.sent();
111
+ if ((err_1 === null || err_1 === void 0 ? void 0 : err_1.message) == 'cancelled') {
112
+ this.log.warn("'beforeFind' middleware cancelled");
113
+ }
114
+ else {
115
+ this.log.error("error in 'beforeFind' middleware");
116
+ this.log.error(err_1);
117
+ }
118
+ return [2 /*return*/];
119
+ case 5:
120
+ window.location.href = this.urlManager.href;
121
+ return [2 /*return*/];
122
+ }
123
+ });
124
+ }); };
87
125
  _this.reset = function () {
88
- // only need to reset when selections have been made
89
- if (_this.urlManager.state.filter) {
90
- _this.store.storage.clear();
91
- _this.urlManager.remove('filter').go();
92
- }
126
+ _this.store.reset();
127
+ _this.urlManager.remove('filter').go();
128
+ _this.store.setService('urlManager', _this.urlManager);
93
129
  };
94
130
  _this.search = function () { return __awaiter(_this, void 0, void 0, function () {
95
- var params, err_1, searchProfile, _a, meta, response, afterSearchProfile, err_2, afterStoreProfile, err_3, err_4;
131
+ var params, err_2, searchProfile, _a, meta, response, afterSearchProfile, err_3, afterStoreProfile, err_4, err_5;
96
132
  return __generator(this, function (_b) {
97
133
  switch (_b.label) {
98
134
  case 0:
@@ -102,6 +138,9 @@ var FinderController = /** @class */ (function (_super) {
102
138
  _b.sent();
103
139
  _b.label = 2;
104
140
  case 2:
141
+ if (this.store.state.persisted) {
142
+ return [2 /*return*/];
143
+ }
105
144
  params = this.params;
106
145
  _b.label = 3;
107
146
  case 3:
@@ -117,14 +156,14 @@ var FinderController = /** @class */ (function (_super) {
117
156
  _b.sent();
118
157
  return [3 /*break*/, 7];
119
158
  case 6:
120
- err_1 = _b.sent();
121
- if ((err_1 === null || err_1 === void 0 ? void 0 : err_1.message) == 'cancelled') {
159
+ err_2 = _b.sent();
160
+ if ((err_2 === null || err_2 === void 0 ? void 0 : err_2.message) == 'cancelled') {
122
161
  this.log.warn("'beforeSearch' middleware cancelled");
123
162
  return [2 /*return*/];
124
163
  }
125
164
  else {
126
165
  this.log.error("error in 'beforeSearch' middleware");
127
- throw err_1;
166
+ throw err_2;
128
167
  }
129
168
  return [3 /*break*/, 7];
130
169
  case 7:
@@ -154,15 +193,15 @@ var FinderController = /** @class */ (function (_super) {
154
193
  _b.sent();
155
194
  return [3 /*break*/, 12];
156
195
  case 11:
157
- err_2 = _b.sent();
158
- if ((err_2 === null || err_2 === void 0 ? void 0 : err_2.message) == 'cancelled') {
196
+ err_3 = _b.sent();
197
+ if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
159
198
  this.log.warn("'afterSearch' middleware cancelled");
160
199
  afterSearchProfile.stop();
161
200
  return [2 /*return*/];
162
201
  }
163
202
  else {
164
203
  this.log.error("error in 'afterSearch' middleware");
165
- throw err_2;
204
+ throw err_3;
166
205
  }
167
206
  return [3 /*break*/, 12];
168
207
  case 12:
@@ -183,15 +222,15 @@ var FinderController = /** @class */ (function (_super) {
183
222
  _b.sent();
184
223
  return [3 /*break*/, 16];
185
224
  case 15:
186
- err_3 = _b.sent();
187
- if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
225
+ err_4 = _b.sent();
226
+ if ((err_4 === null || err_4 === void 0 ? void 0 : err_4.message) == 'cancelled') {
188
227
  this.log.warn("'afterStore' middleware cancelled");
189
228
  afterStoreProfile.stop();
190
229
  return [2 /*return*/];
191
230
  }
192
231
  else {
193
232
  this.log.error("error in 'afterStore' middleware");
194
- throw err_3;
233
+ throw err_4;
195
234
  }
196
235
  return [3 /*break*/, 16];
197
236
  case 16:
@@ -199,9 +238,9 @@ var FinderController = /** @class */ (function (_super) {
199
238
  this.log.profile(afterStoreProfile);
200
239
  return [3 /*break*/, 18];
201
240
  case 17:
202
- err_4 = _b.sent();
203
- if (err_4) {
204
- switch (err_4) {
241
+ err_5 = _b.sent();
242
+ if (err_5) {
243
+ switch (err_5) {
205
244
  case 429:
206
245
  this.store.error = {
207
246
  code: 429,
@@ -219,7 +258,7 @@ var FinderController = /** @class */ (function (_super) {
219
258
  this.log.error(this.store.error);
220
259
  break;
221
260
  default:
222
- this.log.error(err_4);
261
+ this.log.error(err_5);
223
262
  break;
224
263
  }
225
264
  this.store.loading = false;
@@ -238,7 +277,6 @@ var FinderController = /** @class */ (function (_super) {
238
277
  return __assign(__assign({}, translatorConfig), { urlRoot: _this.config.url });
239
278
  });
240
279
  }
241
- // add 'beforeSearch' middleware
242
280
  _this.eventManager.on('beforeSearch', function (finder, next) { return __awaiter(_this, void 0, void 0, function () {
243
281
  return __generator(this, function (_a) {
244
282
  switch (_a.label) {
@@ -252,7 +290,6 @@ var FinderController = /** @class */ (function (_super) {
252
290
  });
253
291
  }); });
254
292
  // TODO: move this to afterStore
255
- // add 'afterSearch' middleware
256
293
  _this.eventManager.on('afterSearch', function (finder, next) { return __awaiter(_this, void 0, void 0, function () {
257
294
  return __generator(this, function (_a) {
258
295
  switch (_a.label) {
@@ -266,6 +303,7 @@ var FinderController = /** @class */ (function (_super) {
266
303
  }); });
267
304
  // attach config plugins and event middleware
268
305
  _this.use(_this.config);
306
+ _this.store.loadPersisted();
269
307
  return _this;
270
308
  }
271
309
  Object.defineProperty(FinderController.prototype, "params", {
@@ -7,7 +7,7 @@ export declare class FinderController extends AbstractController {
7
7
  config: FinderControllerConfig;
8
8
  constructor(config: FinderControllerConfig, { client, store, urlManager, eventManager, profiler, logger, tracker }: ControllerServices, context?: ContextVariables);
9
9
  get params(): Record<string, any>;
10
- find: () => void;
10
+ find: () => Promise<void>;
11
11
  reset: () => void;
12
12
  search: () => Promise<void>;
13
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FinderController.d.ts","sourceRoot":"","sources":["../../../src/Finder/FinderController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAmC,kBAAkB,EAAa,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAQzI,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,SAAY;IAChB,KAAK,EAAE,WAAW,CAAC;IAC1B,MAAM,EAAE,sBAAsB,CAAC;gBAG9B,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IAqC3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAchC;IAED,IAAI,QAAO,IAAI,CAEb;IAEF,KAAK,QAAO,IAAI,CAMd;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CA6G9B;CACF"}
1
+ {"version":3,"file":"FinderController.d.ts","sourceRoot":"","sources":["../../../src/Finder/FinderController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAmC,kBAAkB,EAAa,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiBzI,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,SAAY;IAChB,KAAK,EAAE,WAAW,CAAC;IAC1B,MAAM,EAAE,sBAAsB,CAAC;gBAG9B,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IAqC3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAchC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAkB5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAiH9B;CACF"}
@@ -4,27 +4,53 @@ import { AbstractController } from '../Abstract/AbstractController';
4
4
  import { getSearchParams } from '../utils/getParams';
5
5
  const defaultConfig = {
6
6
  id: 'finder',
7
- globals: {},
7
+ globals: {
8
+ pagination: {
9
+ pageSize: 0,
10
+ },
11
+ },
8
12
  fields: [],
13
+ persist: {
14
+ enabled: false,
15
+ lockSelections: true,
16
+ expiration: 0,
17
+ },
9
18
  };
10
19
  export class FinderController extends AbstractController {
11
20
  constructor(config, { client, store, urlManager, eventManager, profiler, logger, tracker }, context) {
12
21
  super(config, { client, store, urlManager, eventManager, profiler, logger, tracker }, context);
13
22
  this.type = 'finder';
14
- this.find = () => {
23
+ this.find = async () => {
24
+ await this.store.save(); // save current selections to storage
25
+ try {
26
+ await this.eventManager.fire('beforeFind', {
27
+ controller: this,
28
+ });
29
+ }
30
+ catch (err) {
31
+ if (err?.message == 'cancelled') {
32
+ this.log.warn(`'beforeFind' middleware cancelled`);
33
+ }
34
+ else {
35
+ this.log.error(`error in 'beforeFind' middleware`);
36
+ this.log.error(err);
37
+ }
38
+ return;
39
+ }
15
40
  window.location.href = this.urlManager.href;
16
41
  };
17
42
  this.reset = () => {
18
- // only need to reset when selections have been made
19
- if (this.urlManager.state.filter) {
20
- this.store.storage.clear();
21
- this.urlManager.remove('filter').go();
22
- }
43
+ this.store.reset();
44
+ this.urlManager.remove('filter').go();
45
+ this.store.setService('urlManager', this.urlManager);
23
46
  };
24
47
  this.search = async () => {
25
48
  if (!this.initialized) {
26
49
  await this.init();
27
50
  }
51
+ if (this.store.state.persisted) {
52
+ return;
53
+ }
28
54
  const params = this.params;
29
55
  try {
30
56
  try {
@@ -138,19 +164,18 @@ export class FinderController extends AbstractController {
138
164
  };
139
165
  });
140
166
  }
141
- // add 'beforeSearch' middleware
142
167
  this.eventManager.on('beforeSearch', async (finder, next) => {
143
168
  finder.controller.store.loading = true;
144
169
  await next();
145
170
  });
146
171
  // TODO: move this to afterStore
147
- // add 'afterSearch' middleware
148
172
  this.eventManager.on('afterSearch', async (finder, next) => {
149
173
  await next();
150
174
  finder.controller.store.loading = false;
151
175
  });
152
176
  // attach config plugins and event middleware
153
177
  this.use(this.config);
178
+ this.store.loadPersisted();
154
179
  }
155
180
  get params() {
156
181
  const urlState = this.urlManager.state;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@searchspring/snap-controller",
3
- "version": "0.24.0",
3
+ "version": "0.26.0",
4
4
  "description": "Snap Controllers",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -20,21 +20,21 @@
20
20
  "test:watch": "jest --watch"
21
21
  },
22
22
  "dependencies": {
23
- "@searchspring/snap-toolbox": "^0.24.0",
23
+ "@searchspring/snap-toolbox": "^0.26.0",
24
24
  "deepmerge": "^4.2.2"
25
25
  },
26
26
  "devDependencies": {
27
- "@searchspring/snap-client": "^0.24.0",
28
- "@searchspring/snap-event-manager": "^0.24.0",
29
- "@searchspring/snap-logger": "^0.24.0",
30
- "@searchspring/snap-profiler": "^0.24.0",
31
- "@searchspring/snap-store-mobx": "^0.24.0",
32
- "@searchspring/snap-tracker": "^0.24.0",
33
- "@searchspring/snap-url-manager": "^0.24.0"
27
+ "@searchspring/snap-client": "^0.26.0",
28
+ "@searchspring/snap-event-manager": "^0.26.0",
29
+ "@searchspring/snap-logger": "^0.26.0",
30
+ "@searchspring/snap-profiler": "^0.26.0",
31
+ "@searchspring/snap-store-mobx": "^0.26.0",
32
+ "@searchspring/snap-tracker": "^0.26.0",
33
+ "@searchspring/snap-url-manager": "^0.26.0"
34
34
  },
35
35
  "sideEffects": false,
36
36
  "files": [
37
37
  "dist/**/*"
38
38
  ],
39
- "gitHead": "2aadf9555a7c409f6922a4ab72938d2ea0510faf"
39
+ "gitHead": "e2a217f1492486b497e6fe4be8102d3fb06c573c"
40
40
  }