@inseefr/lunatic 2.7.9 → 2.7.11

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.
Files changed (26) hide show
  1. package/lib/components/loop/constant.js +1 -1
  2. package/lib/components/radio/html/radio-option.js +5 -3
  3. package/lib/components/suggester/html/suggester.js +12 -7
  4. package/lib/components/summary/html/summary-responses.js +3 -5
  5. package/lib/src/components/suggester/html/suggester.d.ts +1 -0
  6. package/lib/src/components/suggester/searching/create-searching.d.ts +1 -0
  7. package/lib/stories/behaviour/cleaning/{test.stories.js → cleaning.stories.js} +10 -3
  8. package/lib/stories/behaviour/cleaning/source-loop.json +130 -0
  9. package/lib/stories/behaviour/resizing/{test.stories.js → resizing.stories.js} +8 -1
  10. package/lib/stories/behaviour/resizing/source-resizing-cleaning.json +171 -0
  11. package/lib/stories/component-set/data-loop.json +1 -1
  12. package/lib/stories/roundabout/source.json +25 -18
  13. package/lib/stories/suggester/simple.json +5 -2
  14. package/lib/use-lunatic/commons/fill-components/fill-specific-expression.js +2 -3
  15. package/lib/use-lunatic/commons/variables/lunatic-variables-store.js +1 -1
  16. package/lib/use-lunatic/hooks/use-page-has-response.js +1 -1
  17. package/lib/use-lunatic/use-lunatic.test.js +59 -7
  18. package/lib/use-lunatic/use-suggesters.js +10 -6
  19. package/lib/utils/store-tools/initStore.js +4 -3
  20. package/lib/utils/store-tools/open-or-create-store.js +3 -3
  21. package/lib/utils/suggester-workers/searching/searching.js +20 -10
  22. package/lib/utils/suggester-workers/searching/searching.worker.js +5 -1
  23. package/lib/utils/vtl.js +4 -4
  24. package/package.json +3 -3
  25. package/workers-release/lunatic-append-worker-0.3.0.js +1 -1
  26. package/workers-release/lunatic-search-worker-0.3.0.js +1 -1
@@ -7,6 +7,8 @@ var _source = _interopRequireDefault(require("../stories/overview/source.json"))
7
7
  var _source2 = _interopRequireDefault(require("../stories/questionnaires/logement/source.json"));
8
8
  var _source3 = _interopRequireDefault(require("../stories/questionnaires2023/simpsons/source.json"));
9
9
  var _source4 = _interopRequireDefault(require("../stories/component-set/source.json"));
10
+ var _sourceLoop = _interopRequireDefault(require("../stories/behaviour/cleaning/source-loop.json"));
11
+ var _sourceResizingCleaning = _interopRequireDefault(require("../stories/behaviour/resizing/source-resizing-cleaning.json"));
10
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
11
13
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
12
14
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -31,7 +33,7 @@ var dataFromObject = function dataFromObject(o) {
31
33
  };
32
34
  (0, _vitest.describe)('use-lunatic()', function () {
33
35
  var defaultParams = [_source3["default"], dataFromObject({}), {}];
34
- (0, _vitest.it)('should initialize correcly', function () {
36
+ (0, _vitest.it)('should initialize correctly', function () {
35
37
  var _renderHook = (0, _reactHooks.renderHook)(function () {
36
38
  return _useLunatic["default"].apply(void 0, defaultParams);
37
39
  }),
@@ -168,12 +170,62 @@ var dataFromObject = function dataFromObject(o) {
168
170
  });
169
171
  });
170
172
  });
173
+ (0, _vitest.describe)('cleaning', function () {
174
+ (0, _vitest.it)('should handle cleaning in a loop', function () {
175
+ var _renderHook10 = (0, _reactHooks.renderHook)(function () {
176
+ return (0, _useLunatic["default"])(_sourceLoop["default"], undefined, {});
177
+ }),
178
+ result = _renderHook10.result;
179
+ (0, _reactHooks.act)(function () {
180
+ result.current.onChange({
181
+ name: 'PRENOM'
182
+ }, ['John', 'Doe', 'Marc']);
183
+ result.current.onChange({
184
+ name: 'AGE'
185
+ }, [18, 18, 18]);
186
+ // Go in the first iteration
187
+ result.current.goNextPage();
188
+ result.current.goNextPage();
189
+ });
190
+ var expectCollectedAgeToEqual = function expectCollectedAgeToEqual(expectation) {
191
+ (0, _vitest.expect)(result.current.getData(false).COLLECTED.AGE.COLLECTED).toEqual(expectation);
192
+ };
193
+ expectCollectedAgeToEqual([18, 18, 18]);
194
+ (0, _reactHooks.act)(function () {
195
+ result.current.onChange({
196
+ name: 'HIDE_AGE'
197
+ }, true, {
198
+ iteration: [0]
199
+ });
200
+ });
201
+ expectCollectedAgeToEqual([null, 18, 18]);
202
+ });
203
+ });
204
+ (0, _vitest.describe)('resizing', function () {
205
+ (0, _vitest.it)('should resize after cleaning', function () {
206
+ var spy = _vitest.vi.fn();
207
+ var _renderHook11 = (0, _reactHooks.renderHook)(function () {
208
+ return (0, _useLunatic["default"])(_sourceResizingCleaning["default"], undefined, {
209
+ onChange: spy
210
+ });
211
+ }),
212
+ result = _renderHook11.result;
213
+ result.current.onChange({
214
+ name: 'NB'
215
+ }, 3);
216
+ (0, _vitest.expect)(result.current.getData(true).COLLECTED.PRENOMS.COLLECTED).toEqual([null, null, null]);
217
+ result.current.onChange({
218
+ name: 'NB'
219
+ }, 2);
220
+ (0, _vitest.expect)(result.current.getData(true).COLLECTED.PRENOMS.COLLECTED).toEqual([null, null]);
221
+ });
222
+ });
171
223
  (0, _vitest.describe)('getComponents()', function () {
172
224
  (0, _vitest.describe)('componentSet', function () {
173
- var _renderHook10 = (0, _reactHooks.renderHook)(function () {
225
+ var _renderHook12 = (0, _reactHooks.renderHook)(function () {
174
226
  return (0, _useLunatic["default"])(_source4["default"], undefined, {});
175
227
  }),
176
- result = _renderHook10.result;
228
+ result = _renderHook12.result;
177
229
  var getComponents = function getComponents() {
178
230
  return result.current.getComponents();
179
231
  };
@@ -196,10 +248,10 @@ var dataFromObject = function dataFromObject(o) {
196
248
  (0, _vitest.describe)('getData()', function () {
197
249
  var hookRef;
198
250
  (0, _vitest.beforeEach)(function () {
199
- var _renderHook11 = (0, _reactHooks.renderHook)(function () {
251
+ var _renderHook13 = (0, _reactHooks.renderHook)(function () {
200
252
  return (0, _useLunatic["default"])(_source3["default"], undefined, {});
201
253
  }),
202
- result = _renderHook11.result;
254
+ result = _renderHook13.result;
203
255
  (0, _reactHooks.act)(function () {
204
256
  result.current.onChange({
205
257
  name: 'COMMENT'
@@ -245,12 +297,12 @@ var dataFromObject = function dataFromObject(o) {
245
297
  (0, _vitest.describe)('getChangedData()', function () {
246
298
  var hookRef;
247
299
  (0, _vitest.beforeEach)(function () {
248
- var _renderHook12 = (0, _reactHooks.renderHook)(function () {
300
+ var _renderHook14 = (0, _reactHooks.renderHook)(function () {
249
301
  return (0, _useLunatic["default"])(_source3["default"], undefined, {
250
302
  trackChanges: true
251
303
  });
252
304
  }),
253
- result = _renderHook12.result;
305
+ result = _renderHook14.result;
254
306
  hookRef = result;
255
307
  });
256
308
  (0, _vitest.it)('should return every value', function () {
@@ -90,9 +90,11 @@ function useSuggesters(_ref) {
90
90
 
91
91
  // Index the data
92
92
  (0, _react.useEffect)(function () {
93
- var aborts = [];
93
+ var aborts = {
94
+ current: []
95
+ };
94
96
  if (typeof getReferentiel === 'function' && Array.isArray(suggesters) && auto) {
95
- suggesters.forEach( /*#__PURE__*/function () {
97
+ var suggesterWorkers = suggesters.map( /*#__PURE__*/function () {
96
98
  var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(store) {
97
99
  var name, current, isClean, data, _createAppendTask, _createAppendTask2, append, abort, result;
98
100
  return _regeneratorRuntime().wrap(function _callee$(_context) {
@@ -132,7 +134,7 @@ function useSuggesters(_ref) {
132
134
  case 13:
133
135
  data = _context.sent;
134
136
  _createAppendTask = (0, _createAppendTask3.createAppendTask)(store, 1, nothing, workersBasePath), _createAppendTask2 = _slicedToArray(_createAppendTask, 2), append = _createAppendTask2[0], abort = _createAppendTask2[1];
135
- aborts.push(abort);
137
+ aborts.current.push(abort);
136
138
  _context.next = 18;
137
139
  return append(data);
138
140
  case 18:
@@ -163,11 +165,13 @@ function useSuggesters(_ref) {
163
165
  return _ref3.apply(this, arguments);
164
166
  };
165
167
  }());
166
- return function () {
167
- aborts.forEach(function (abort) {
168
- return abort();
168
+ var clearWorkers = function clearWorkers() {
169
+ return aborts.current.forEach(function (a) {
170
+ return a();
169
171
  });
170
172
  };
173
+ Promise.all(suggesterWorkers)["finally"](clearWorkers);
174
+ return clearWorkers;
171
175
  }
172
176
  }, [suggesters, auto, getReferentiel, status, workersBasePath]);
173
177
  return getSuggesterStatus;
@@ -28,7 +28,7 @@ function _initStore() {
28
28
  case 3:
29
29
  db = _context.sent;
30
30
  if (!db) {
31
- _context.next = 15;
31
+ _context.next = 16;
32
32
  break;
33
33
  }
34
34
  _context.next = 7;
@@ -43,10 +43,11 @@ function _initStore() {
43
43
  return (0, _insertEntity["default"])(db, _constantes["default"].STORE_INFO_NAME, storeInfo);
44
44
  case 13:
45
45
  c = _context.sent;
46
+ db.close();
46
47
  return _context.abrupt("return", a && b && c);
47
- case 15:
48
- return _context.abrupt("return", false);
49
48
  case 16:
49
+ return _context.abrupt("return", false);
50
+ case 17:
50
51
  case "end":
51
52
  return _context.stop();
52
53
  }
@@ -9,14 +9,14 @@ var _getIdb = _interopRequireDefault(require("../idb-tools/get-idb"));
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
10
10
  /* eslint-disable no-restricted-globals */
11
11
 
12
- var IDB_REF = (0, _getIdb["default"])();
13
12
  function openStorage(name) {
14
13
  var idbVersion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
15
14
  return new Promise(function (resolve, reject) {
16
- if (!IDB_REF) {
15
+ var idb = (0, _getIdb["default"])();
16
+ if (!idb) {
17
17
  reject('indexedDb not supported !');
18
18
  }
19
- var request = IDB_REF.open(name, idbVersion);
19
+ var request = idb.open(name, idbVersion);
20
20
  var db;
21
21
  var doIt = true;
22
22
  request.onupgradeneeded = function (e) {
@@ -83,14 +83,14 @@ function searching(_x3, _x4) {
83
83
  }
84
84
  function _searching() {
85
85
  _searching = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(search, _ref2) {
86
- var name, _ref2$version, version, _ref2$meloto, meloto, db, info, queryParser, max, order, parser, transaction, store, index, tokens, documents;
86
+ var name, _ref2$version, version, _ref2$meloto, meloto, db, info, queryParser, max, order, parser, tokens, transaction, store, index, documents;
87
87
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
88
88
  while (1) switch (_context2.prev = _context2.next) {
89
89
  case 0:
90
90
  name = _ref2.name, _ref2$version = _ref2.version, version = _ref2$version === void 0 ? '1' : _ref2$version, _ref2$meloto = _ref2.meloto, meloto = _ref2$meloto === void 0 ? true : _ref2$meloto;
91
91
  _context2.prev = 1;
92
92
  if (!isValideSearch(search)) {
93
- _context2.next = 21;
93
+ _context2.next = 23;
94
94
  break;
95
95
  }
96
96
  _context2.next = 5;
@@ -106,34 +106,44 @@ function _searching() {
106
106
  return (0, _resolveQueryParser["default"])(queryParser);
107
107
  case 12:
108
108
  parser = _context2.sent;
109
+ tokens = parser(search); // Do not start a transaction if we have nothing to search
110
+ if (!(tokens.length === 0)) {
111
+ _context2.next = 16;
112
+ break;
113
+ }
114
+ return _context2.abrupt("return", {
115
+ results: [],
116
+ search: search,
117
+ tokens: tokens
118
+ });
119
+ case 16:
109
120
  transaction = db.transaction(_storeTools.CONSTANTES.STORE_DATA_NAME, 'readonly');
110
121
  store = transaction.objectStore(_storeTools.CONSTANTES.STORE_DATA_NAME);
111
122
  index = store.index(_storeTools.CONSTANTES.STORE_INDEX_NAME);
112
- tokens = parser(search);
113
- _context2.next = 19;
123
+ _context2.next = 21;
114
124
  return searchTokens(tokens, index);
115
- case 19:
125
+ case 21:
116
126
  documents = _context2.sent;
117
127
  return _context2.abrupt("return", {
118
128
  results: prepare((0, _order["default"])(order)(filterSize((0, _computeScore["default"])(documents, tokens, meloto), max), order)),
119
129
  search: search,
120
130
  tokens: tokens
121
131
  });
122
- case 21:
132
+ case 23:
123
133
  return _context2.abrupt("return", {
124
134
  results: [],
125
135
  search: search
126
136
  });
127
- case 24:
128
- _context2.prev = 24;
137
+ case 26:
138
+ _context2.prev = 26;
129
139
  _context2.t0 = _context2["catch"](1);
130
140
  console.error(_context2.t0);
131
141
  throw _context2.t0;
132
- case 28:
142
+ case 30:
133
143
  case "end":
134
144
  return _context2.stop();
135
145
  }
136
- }, _callee2, null, [[1, 24]]);
146
+ }, _callee2, null, [[1, 26]]);
137
147
  }));
138
148
  return _searching.apply(this, arguments);
139
149
  }
@@ -6,17 +6,21 @@ var _searching = _interopRequireDefault(require("./searching"));
6
6
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
7
7
  /* eslint-disable no-restricted-globals */
8
8
 
9
+ var LAST_SEARCH = undefined;
9
10
  self.onmessage = function (e) {
10
11
  var _e$data = e.data,
11
12
  search = _e$data.search,
12
13
  name = _e$data.name,
13
14
  version = _e$data.version,
14
15
  meloto = _e$data.meloto;
16
+ LAST_SEARCH = search;
15
17
  (0, _searching["default"])(search, {
16
18
  name: name,
17
19
  version: version,
18
20
  meloto: meloto
19
21
  }).then(function (result) {
20
- self.postMessage(result);
22
+ if (search === LAST_SEARCH) {
23
+ self.postMessage(result);
24
+ }
21
25
  });
22
26
  };
package/lib/utils/vtl.js CHANGED
@@ -79,11 +79,11 @@ function getExpressionType(expression) {
79
79
  return '';
80
80
  }
81
81
  function getExpressionAsString(expression) {
82
- if (typeof expression === 'string') {
83
- return expression;
82
+ if (typeof expression === 'string' || typeof expression === 'number') {
83
+ return expression.toString();
84
84
  }
85
- if (expression && _typeof(expression) === 'object' && 'value' in expression && typeof expression.value === 'string') {
86
- return expression.value;
85
+ if (expression && _typeof(expression) === 'object' && 'value' in expression && (typeof expression.value === 'string' || typeof expression.value === 'number')) {
86
+ return expression.value.toString();
87
87
  }
88
88
  return '';
89
89
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inseefr/lunatic",
3
- "version": "2.7.9",
3
+ "version": "2.7.11",
4
4
  "workersVersion": "0.3.0",
5
5
  "description": "Library of questionnaire components",
6
6
  "repository": {
@@ -49,7 +49,7 @@
49
49
  "check": "tsc",
50
50
  "lint": "eslint ./src",
51
51
  "lint:check": "eslint . --ext .ts,.tsx",
52
- "_format": "prettier **/*.{ts,tsx,json,md}",
52
+ "_format": "prettier **/*.{ts,tsx,json}",
53
53
  "format": "npm run _format -- --write",
54
54
  "format:check": "npm run _format -- --list-different",
55
55
  "test-coverage": "vitest run --coverage",
@@ -71,7 +71,7 @@
71
71
  ],
72
72
  "dependencies": {
73
73
  "@inseefr/trevas": "^0.1.20",
74
- "@inseefr/vtl-2.0-antlr-tools": "^0.1.0-bundle",
74
+ "@inseefr/vtl-2.0-antlr-tools": "^0.1.0",
75
75
  "antlr4": "4.11.0",
76
76
  "classnames": "^2.3.1",
77
77
  "date-fns": "^2.25.0",