@inseefr/lunatic 0.1.0-hackathon → 0.1.0-v2

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 (350) hide show
  1. package/lib/index.js +1433 -835
  2. package/lib/index.js.map +1 -1
  3. package/package.json +11 -8
  4. package/src/components/breadcrumb/component.js +29 -29
  5. package/src/components/button/index.js +1 -1
  6. package/src/components/button/lunatic-button.js +32 -0
  7. package/src/components/checkbox/checkbox-boolean/index.js +1 -0
  8. package/src/components/checkbox/checkbox-boolean/lunatic-checkbox-boolean.js +44 -0
  9. package/src/components/checkbox/checkbox-group/checkbox-group.js +78 -0
  10. package/src/components/checkbox/checkbox-group/checkbox-option.js +46 -0
  11. package/src/components/checkbox/checkbox-group/index.js +1 -0
  12. package/src/components/checkbox/checkbox-group/lunatic-checkbox-group.js +32 -0
  13. package/src/components/checkbox/checkbox-one/index.js +1 -0
  14. package/src/components/checkbox/checkbox-one/lunatic-checkbox-one.js +7 -0
  15. package/src/components/checkbox/checkbox.scss +1 -73
  16. package/src/components/checkbox/commons/checkbox-option.js +49 -0
  17. package/src/components/checkbox/commons/index.js +1 -0
  18. package/src/components/checkbox/index.js +3 -3
  19. package/src/components/commons/components/field-container/field-container.js +28 -0
  20. package/src/components/commons/components/field-container/field-container.scss +0 -0
  21. package/src/components/commons/components/field-container/index.js +1 -0
  22. package/src/components/commons/components/fieldset.js +12 -0
  23. package/src/components/commons/components/input-container.js +30 -0
  24. package/src/components/commons/components/label.js +14 -0
  25. package/src/components/commons/components/lunatic-field.js +35 -0
  26. package/src/components/commons/create-customizable-field.js +13 -0
  27. package/src/components/commons/index.js +9 -0
  28. package/src/components/commons/use-on-handle-change.js +16 -0
  29. package/src/components/commons/use-options-keydown.js +22 -0
  30. package/src/components/commons/use-previous.js +11 -0
  31. package/src/components/component-wrapper/controls/component.js +70 -0
  32. package/src/components/component-wrapper/controls/controls.scss +6 -0
  33. package/src/components/component-wrapper/controls/index.js +1 -0
  34. package/src/components/component-wrapper/controls/validators/datepicker.js +33 -0
  35. package/src/components/component-wrapper/controls/validators/index.js +16 -0
  36. package/src/components/component-wrapper/controls/validators/input-number.js +23 -0
  37. package/src/components/{missing-wrapper → component-wrapper}/index.js +1 -1
  38. package/src/components/{missing-wrapper → component-wrapper/missing}/component.js +72 -12
  39. package/src/components/component-wrapper/missing/index.js +1 -0
  40. package/src/components/{missing-wrapper → component-wrapper/missing}/missing.scss +0 -0
  41. package/src/components/component-wrapper/wrapper.js +23 -0
  42. package/src/components/components.js +22 -18
  43. package/src/components/datepicker/datepicker.js +25 -0
  44. package/src/components/datepicker/index.js +1 -1
  45. package/src/components/datepicker/lunatic-datepicker.js +50 -0
  46. package/src/components/declarations/declaration.js +11 -0
  47. package/src/components/declarations/declarations-after-text.js +8 -0
  48. package/src/components/declarations/declarations-before-text.js +8 -0
  49. package/src/components/declarations/declarations-detachable.js +8 -0
  50. package/src/components/declarations/declarations.js +35 -0
  51. package/src/components/declarations/index.js +4 -1
  52. package/src/components/declarations/wrappers/input-declarations-wrapper.js +40 -12
  53. package/src/components/declarations/wrappers/list-declarations-wrapper.js +235 -232
  54. package/src/components/dropdown/commons/actions.js +40 -31
  55. package/src/components/dropdown/commons/components/panel.js +78 -78
  56. package/src/components/dropdown/commons/reducer.js +152 -149
  57. package/src/components/dropdown/component.js +121 -115
  58. package/src/components/dropdown/dropdown-edit/dropdown-edit.js +6 -0
  59. package/src/components/dropdown/dropdown-simple/dropdown.js +8 -1
  60. package/src/components/filter-description/component.js +48 -42
  61. package/src/components/icon/component.js +31 -33
  62. package/src/components/index.scss +5 -3
  63. package/src/components/input/index.js +1 -2
  64. package/src/components/input/input.js +45 -9
  65. package/src/components/input/input.scss +0 -6
  66. package/src/components/input/lunatic-input.js +53 -0
  67. package/src/components/input-number/index.js +1 -0
  68. package/src/components/input-number/input-number.js +38 -0
  69. package/src/components/input-number/input-number.scss +0 -0
  70. package/src/components/input-number/lunatic-input-number.js +50 -0
  71. package/src/components/loop/{component.js → _old/component.js} +1 -0
  72. package/src/components/loop/{loop.scss → _old/loop.scss} +0 -0
  73. package/src/components/loop/{wrapper.js → _old/wrapper.js} +15 -15
  74. package/src/components/loop/block-for-loop/block-for-loop-ochestrator.js +6 -0
  75. package/src/components/loop/block-for-loop/block-for-loop.js +91 -0
  76. package/src/components/loop/block-for-loop/index.js +1 -0
  77. package/src/components/loop/block-for-loop/row.js +52 -0
  78. package/src/components/loop/commons/create-loop-orchestrator.js +36 -0
  79. package/src/components/loop/commons/index.js +2 -0
  80. package/src/components/loop/commons/row-component.js +52 -0
  81. package/src/components/loop/index.js +1 -1
  82. package/src/components/loop/loop.js +78 -0
  83. package/src/components/loop/roster-for-loop/add-row-button.js +12 -0
  84. package/src/components/loop/roster-for-loop/body.js +44 -0
  85. package/src/components/loop/roster-for-loop/header.js +25 -0
  86. package/src/components/loop/roster-for-loop/html-table/table.js +11 -0
  87. package/src/components/loop/roster-for-loop/html-table/tbody.js +11 -0
  88. package/src/components/loop/roster-for-loop/html-table/td.js +14 -0
  89. package/src/components/loop/roster-for-loop/html-table/th.js +11 -0
  90. package/src/components/loop/roster-for-loop/html-table/thead.js +11 -0
  91. package/src/components/loop/roster-for-loop/html-table/tr.js +11 -0
  92. package/src/components/loop/roster-for-loop/index.js +1 -0
  93. package/src/components/loop/roster-for-loop/roster-for-loop-orchestrator.js +6 -0
  94. package/src/components/loop/roster-for-loop/roster-for-loop.js +90 -0
  95. package/src/components/loop/roster-for-loop/roster-table.js +39 -0
  96. package/src/components/loop/roster-for-loop/roster.scss +42 -0
  97. package/src/components/loop/roster-for-loop/row.js +65 -0
  98. package/src/components/loop-constructor/block/component.js +2 -2
  99. package/src/components/loop-constructor/block/index.js +1 -1
  100. package/src/components/loop-constructor/index.js +1 -1
  101. package/src/components/loop-constructor/roster/component.js +2 -2
  102. package/src/components/loop-constructor/roster/index.js +1 -1
  103. package/src/components/loop-constructor/wrapper/body-component.js +6 -0
  104. package/src/components/loop-constructor/wrapper/build-components.js +33 -33
  105. package/src/components/loop-constructor/wrapper/index.js +1 -1
  106. package/src/components/modal/component.js +42 -0
  107. package/src/components/modal/index.js +1 -0
  108. package/src/components/modal/modal.scss +33 -0
  109. package/src/components/radio/index.js +1 -1
  110. package/src/components/radio/lunatic-radio-group.js +45 -0
  111. package/src/components/radio/radio-group.js +33 -0
  112. package/src/components/radio/radio-option.js +87 -0
  113. package/src/components/radio/radio.scss +52 -52
  114. package/src/components/sequence/index.js +1 -1
  115. package/src/components/sequence/sequence.js +75 -0
  116. package/src/components/subsequence/index.js +1 -1
  117. package/src/components/subsequence/subsequence.js +73 -0
  118. package/src/components/suggester/check-store.js +70 -70
  119. package/src/components/suggester/components/panel/option-container.js +11 -10
  120. package/src/components/suggester/components/panel/panel.js +20 -6
  121. package/src/components/suggester/components/selection/label.js +7 -6
  122. package/src/components/suggester/components/selection/selection.js +36 -11
  123. package/src/components/suggester/components/suggester-content.js +35 -42
  124. package/src/components/suggester/components/suggester.js +45 -26
  125. package/src/components/suggester/{components/create-on-keydown-callback.js → create-on-keydown-callback.js} +28 -28
  126. package/src/components/suggester/find-best-label/find-best-label.js +3 -1
  127. package/src/components/suggester/idb-suggester.js +2 -1
  128. package/src/components/suggester/lunatic-suggester.js +48 -96
  129. package/src/components/suggester/searching/create-searching.js +3 -1
  130. package/src/components/suggester/suggester-wrapper.js +75 -9
  131. package/src/components/switch/index.js +1 -0
  132. package/src/components/switch/lunatic-switch.js +49 -0
  133. package/src/components/switch/switch.js +72 -0
  134. package/src/components/switch/switch.scss +47 -0
  135. package/src/components/table/table.js +164 -158
  136. package/src/components/textarea/component.js +11 -5
  137. package/src/components/tooltip/response.js +58 -52
  138. package/src/stories/checkbox-boolean/data-forced.json +48 -48
  139. package/src/stories/checkbox-group/data-vtl.json +102 -102
  140. package/src/stories/cleaning/cleaning.stories.js +39 -0
  141. package/src/stories/cleaning/simple-loop.json +911 -0
  142. package/src/stories/cleaning/simpsons.json +5839 -0
  143. package/src/stories/datepicker/data.json +45 -43
  144. package/src/stories/declarations/declarations.stories.js +20 -13
  145. package/src/stories/icons/icons.stories.js +24 -16
  146. package/src/stories/loop-constructor/README.md +27 -27
  147. package/src/stories/loop-constructor/data-input-forced.json +64 -64
  148. package/src/stories/loop-constructor/data-input.json +100 -100
  149. package/src/stories/loop-constructor/data-loop-forced.json +66 -66
  150. package/src/stories/loop-constructor/data-loop-static-forced.json +66 -66
  151. package/src/stories/loop-constructor/data-loop-static.json +81 -81
  152. package/src/stories/loop-constructor/data-loop.json +81 -81
  153. package/src/stories/loop-constructor/data-roster-forced.json +68 -68
  154. package/src/stories/loop-constructor/data-roster.json +83 -83
  155. package/src/stories/loop-constructor/loop-constructor.stories.js +180 -180
  156. package/src/stories/questionnaire/logement-queen.json +23234 -0
  157. package/src/stories/questionnaire/logement.json +22068 -26812
  158. package/src/stories/questionnaire/questionnaire.stories.js +86 -29
  159. package/src/stories/questionnaire/update-external/data.json +1 -0
  160. package/src/stories/questionnaire/update-external/questionnaire.json +75 -0
  161. package/src/stories/suggester/bailleurs-sociaux-2021/fetch-bailleurs.js +12 -0
  162. package/src/stories/suggester/bailleurs-sociaux-2021/index.js +1 -0
  163. package/src/stories/suggester/data-auto.json +1 -0
  164. package/src/stories/suggester/data.json +35 -2
  165. package/src/stories/suggester/lunatic-suggester-mui.scss +27 -0
  166. package/src/stories/suggester/suggester-material-ui.js +148 -0
  167. package/src/stories/suggester/suggester-workers.stories.js +48 -1
  168. package/src/stories/suggester/suggester.stories.js +27 -1
  169. package/src/stories/switch/README.md +31 -0
  170. package/src/stories/switch/SwitchMaterialUI.js +35 -0
  171. package/src/stories/switch/data-forced.json +48 -0
  172. package/src/stories/switch/data.json +80 -0
  173. package/src/stories/switch/switch.stories.js +78 -0
  174. package/src/stories/utils/custom-lunatic.scss +28 -23
  175. package/src/stories/utils/orchestrator.js +151 -58
  176. package/src/stories/utils/waiting/index.js +1 -0
  177. package/src/stories/utils/waiting/preloader.svg +1 -0
  178. package/src/stories/utils/waiting/waiting.js +21 -0
  179. package/src/stories/utils/waiting/waiting.scss +21 -0
  180. package/src/tests/sample.spec.js +5 -0
  181. package/src/utils/icons/checkbox-checked.icon.js +25 -0
  182. package/src/utils/icons/checkbox-unchecked.icon.js +25 -0
  183. package/src/utils/icons/radio-checked.icon.js +25 -0
  184. package/src/utils/icons/radio-unchecked.icon.js +25 -0
  185. package/src/utils/lib/controls/index.js +1 -0
  186. package/src/utils/lib/controls/utils.js +146 -0
  187. package/src/utils/lib/index.js +20 -19
  188. package/src/utils/lib/pagination/navigation/shared.js +7 -4
  189. package/src/utils/lib/responses.js +9 -7
  190. package/src/utils/lib/tooltip/build-response.js +53 -41
  191. package/src/utils/store-tools/auto-load.js +2 -1
  192. package/src/utils/store-tools/create/index.js +2 -1
  193. package/src/utils/store-tools/create/update-store-info.js +26 -26
  194. package/src/utils/store-tools/index.js +7 -5
  195. package/src/utils/suggester-workers/append-to-index/create-append-task.js +3 -1
  196. package/src/utils/suggester-workers/commons-tokenizer/create-entity-tokenizer.js +56 -0
  197. package/src/utils/suggester-workers/commons-tokenizer/create-fields-tokenizer.js +56 -0
  198. package/src/utils/suggester-workers/commons-tokenizer/create-filter-stop-words.js +11 -11
  199. package/src/utils/suggester-workers/commons-tokenizer/filters/compose-filters.js +10 -0
  200. package/src/utils/suggester-workers/commons-tokenizer/filters/create-filter-stop-words.js +17 -0
  201. package/src/utils/suggester-workers/commons-tokenizer/filters/create-filter-stop-words.spec.js +14 -0
  202. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-accents.js +12 -0
  203. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-accents.spec.js +12 -0
  204. package/src/utils/suggester-workers/commons-tokenizer/{filter-double.js → filters/filter-double.js} +0 -0
  205. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-double.spec.js +20 -0
  206. package/src/utils/suggester-workers/commons-tokenizer/{filter-length.js → filters/filter-length.js} +0 -0
  207. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-length.spec.js +18 -0
  208. package/src/utils/suggester-workers/commons-tokenizer/{filter-stemmer.js → filters/filter-stemmer.js} +2 -2
  209. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-stemmer.spec.js +12 -0
  210. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-synonyms.js +36 -0
  211. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-synonyms.spec.js +12 -0
  212. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-to-lower.js +10 -0
  213. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-to-lower.spec.js +12 -0
  214. package/src/utils/suggester-workers/commons-tokenizer/filters/index.js +2 -0
  215. package/src/utils/suggester-workers/commons-tokenizer/{stop-words.js → filters/stop-words.js} +0 -0
  216. package/src/utils/suggester-workers/commons-tokenizer/index.js +6 -5
  217. package/src/utils/suggester-workers/commons-tokenizer/prepare-string-indexation.js +7 -3
  218. package/src/utils/suggester-workers/commons-tokenizer/soft-tokenizer.js +1 -1
  219. package/src/utils/suggester-workers/create-worker.js +55 -0
  220. package/src/utils/suggester-workers/find-best-label/tokenize.js +2 -5
  221. package/src/utils/suggester-workers/{query-parser → searching/query-parser}/index.js +0 -0
  222. package/src/utils/suggester-workers/searching/query-parser/query-parser-soft.js +7 -0
  223. package/src/utils/suggester-workers/{query-parser → searching/query-parser}/query-parser-soft.spec.js +0 -0
  224. package/src/utils/suggester-workers/searching/query-parser/query-parser-tokenized.js +34 -0
  225. package/src/utils/suggester-workers/searching/resolve-query-parser.js +2 -2
  226. package/src/utils/suggester-workers/searching/searching.js +2 -2
  227. package/src/utils/to-expose/{calculated-variables.js → _old/calculated-variables.js} +0 -0
  228. package/src/utils/to-expose/{handler.js → _old/handler.js} +22 -0
  229. package/src/utils/to-expose/{init-questionnaire.js → _old/init-questionnaire.js} +0 -0
  230. package/src/utils/to-expose/{state.js → _old/state.js} +13 -14
  231. package/src/utils/to-expose/hooks/filter-components.js +106 -106
  232. package/src/utils/to-expose/hooks/index.js +1 -1
  233. package/src/utils/to-expose/hooks/lunatic.js +68 -7
  234. package/src/utils/to-expose/hooks/use-lunatic/actions.js +23 -0
  235. package/src/utils/to-expose/hooks/use-lunatic/commons/check-loops.js +61 -0
  236. package/src/utils/to-expose/hooks/use-lunatic/commons/create-map-pages.js +69 -0
  237. package/src/utils/to-expose/hooks/use-lunatic/commons/execute-condition-filter.js +16 -0
  238. package/src/utils/to-expose/hooks/use-lunatic/commons/execute-expression/create-execute-expression.js +182 -0
  239. package/src/utils/to-expose/hooks/use-lunatic/commons/execute-expression/create-memoizer.js +42 -0
  240. package/src/utils/to-expose/hooks/use-lunatic/commons/execute-expression/create-refresh-calculated.js +50 -0
  241. package/src/utils/to-expose/hooks/use-lunatic/commons/execute-expression/execute-expression.js +60 -0
  242. package/src/utils/to-expose/hooks/use-lunatic/commons/execute-expression/get-expressions-variables.js +22 -0
  243. package/src/utils/to-expose/hooks/use-lunatic/commons/execute-expression/index.js +1 -0
  244. package/src/utils/to-expose/hooks/use-lunatic/commons/fill-component-expressions.js +113 -0
  245. package/src/utils/to-expose/hooks/use-lunatic/commons/fill-components.js +31 -0
  246. package/src/utils/to-expose/hooks/use-lunatic/commons/get-compatible-vtl-expression.js +14 -0
  247. package/src/utils/to-expose/hooks/use-lunatic/commons/get-component-value/get-component-value.js +161 -0
  248. package/src/utils/to-expose/hooks/use-lunatic/commons/get-component-value/index.js +1 -0
  249. package/src/utils/to-expose/hooks/use-lunatic/commons/get-components-from-state.js +24 -0
  250. package/src/utils/to-expose/hooks/use-lunatic/commons/get-page-tag.js +10 -0
  251. package/src/utils/to-expose/hooks/use-lunatic/commons/index.js +12 -0
  252. package/src/utils/to-expose/hooks/use-lunatic/commons/is-First-last-page.js +8 -0
  253. package/src/utils/to-expose/hooks/use-lunatic/commons/is-paginated-loop.js +6 -0
  254. package/src/utils/to-expose/hooks/use-lunatic/commons/load-suggesters.js +59 -0
  255. package/src/utils/to-expose/hooks/use-lunatic/commons/use-components-from-state.js +20 -0
  256. package/src/utils/to-expose/hooks/use-lunatic/index.js +1 -0
  257. package/src/utils/to-expose/hooks/use-lunatic/initial-state.js +22 -0
  258. package/src/utils/to-expose/hooks/use-lunatic/reducer/commons/index.js +3 -0
  259. package/src/utils/to-expose/hooks/use-lunatic/reducer/commons/is-empty-on-empty-page.js +29 -0
  260. package/src/utils/to-expose/hooks/use-lunatic/reducer/commons/resize-array-variable.js +26 -0
  261. package/src/utils/to-expose/hooks/use-lunatic/reducer/commons/validate-loop-condition-filter.js +20 -0
  262. package/src/utils/to-expose/hooks/use-lunatic/reducer/index.js +1 -0
  263. package/src/utils/to-expose/hooks/use-lunatic/reducer/reduce-go-next-page.js +129 -0
  264. package/src/utils/to-expose/hooks/use-lunatic/reducer/reduce-go-previous-page.js +131 -0
  265. package/src/utils/to-expose/hooks/use-lunatic/reducer/reduce-handle-change/index.js +1 -0
  266. package/src/utils/to-expose/hooks/use-lunatic/reducer/reduce-handle-change/reduce-handle-change.js +69 -0
  267. package/src/utils/to-expose/hooks/use-lunatic/reducer/reduce-handle-change/reduce-variables-array.js +22 -0
  268. package/src/utils/to-expose/hooks/use-lunatic/reducer/reduce-handle-change/reduce-variables-simple.js +13 -0
  269. package/src/utils/to-expose/hooks/use-lunatic/reducer/reduce-on-init.js +166 -0
  270. package/src/utils/to-expose/hooks/use-lunatic/reducer/reduce-on-set-waiting.js +7 -0
  271. package/src/utils/to-expose/hooks/use-lunatic/reducer/reducer.js +26 -0
  272. package/src/utils/to-expose/hooks/use-lunatic/use-lunatic.js +79 -0
  273. package/src/utils/to-expose/index.js +16 -11
  274. package/src/components/button/component.js +0 -53
  275. package/src/components/checkbox/boolean.js +0 -172
  276. package/src/components/checkbox/group.js +0 -231
  277. package/src/components/checkbox/one.js +0 -11
  278. package/src/components/datepicker/component.js +0 -11
  279. package/src/components/input/input-number.js +0 -54
  280. package/src/components/missing-wrapper/wrapper.js +0 -10
  281. package/src/components/radio/component.js +0 -9
  282. package/src/components/sequence/component.js +0 -50
  283. package/src/components/subsequence/component.js +0 -49
  284. package/src/tests/components/breadcrumb.spec.js +0 -13
  285. package/src/tests/components/button.spec.js +0 -11
  286. package/src/tests/components/checkbox-boolean.spec.js +0 -45
  287. package/src/tests/components/checkbox-group.spec.js +0 -53
  288. package/src/tests/components/checkbox-one.spec.js +0 -32
  289. package/src/tests/components/datepicker.spec.js +0 -22
  290. package/src/tests/components/declarations-wrappers/input-declarations-wrapper.spec.js +0 -67
  291. package/src/tests/components/declarations-wrappers/list-declarations-wrapper.spec.js +0 -52
  292. package/src/tests/components/declarations-wrappers/simple-declarations-wrapper.spec.js +0 -21
  293. package/src/tests/components/declarations.spec.js +0 -46
  294. package/src/tests/components/input-number.spec.js +0 -194
  295. package/src/tests/components/input.spec.js +0 -18
  296. package/src/tests/components/loops/loop-static.json +0 -66
  297. package/src/tests/components/loops/loop.json +0 -258
  298. package/src/tests/components/loops/loop.spec.js +0 -30
  299. package/src/tests/components/loops/roster-for-loop.spec.js +0 -18
  300. package/src/tests/components/loops/roster-loop.json +0 -71
  301. package/src/tests/components/missing-wrapper.spec.js +0 -33
  302. package/src/tests/components/progress-bar.spec.js +0 -15
  303. package/src/tests/components/radio.spec.js +0 -27
  304. package/src/tests/components/sequence.spec.js +0 -9
  305. package/src/tests/components/subsequence.spec.js +0 -9
  306. package/src/tests/components/table.spec.js +0 -11
  307. package/src/tests/components/textarea.spec.js +0 -18
  308. package/src/tests/components/tooltip.spec.js +0 -25
  309. package/src/tests/setup/setupTests.js +0 -4
  310. package/src/tests/utils/lib/alphabet.spec.js +0 -36
  311. package/src/tests/utils/lib/array.spec.js +0 -22
  312. package/src/tests/utils/lib/checkbox/group.spec.js +0 -72
  313. package/src/tests/utils/lib/decorator/title-decorator.spec.js +0 -12
  314. package/src/tests/utils/lib/input-number.spec.js +0 -18
  315. package/src/tests/utils/lib/items-positioning.spec.js +0 -17
  316. package/src/tests/utils/lib/label-position.spec.js +0 -22
  317. package/src/tests/utils/lib/loops/bindings.spec.js +0 -75
  318. package/src/tests/utils/lib/loops/shared.spec.js +0 -82
  319. package/src/tests/utils/lib/missing/missing.spec.js +0 -74
  320. package/src/tests/utils/lib/missing/mock.js +0 -137
  321. package/src/tests/utils/lib/pagination/shared.spec.js +0 -42
  322. package/src/tests/utils/lib/responses.spec.js +0 -64
  323. package/src/tests/utils/lib/style.spec.js +0 -26
  324. package/src/tests/utils/lib/table/roster.spec.js +0 -25
  325. package/src/tests/utils/lib/tooltip/build-response.spec.js +0 -95
  326. package/src/tests/utils/lib/tooltip/content.spec.js +0 -109
  327. package/src/tests/utils/to-expose/handler/handler.spec.js +0 -94
  328. package/src/tests/utils/to-expose/handler/questionnaire.json +0 -158
  329. package/src/tests/utils/to-expose/handler/results/index.js +0 -6
  330. package/src/tests/utils/to-expose/handler/results/res-double.json +0 -158
  331. package/src/tests/utils/to-expose/handler/results/res-input-collected.json +0 -158
  332. package/src/tests/utils/to-expose/handler/results/res-input-edited.json +0 -158
  333. package/src/tests/utils/to-expose/handler/results/res-loop.json +0 -158
  334. package/src/tests/utils/to-expose/handler/results/res-matrix.json +0 -158
  335. package/src/tests/utils/to-expose/handler/results/res-responses.json +0 -158
  336. package/src/tests/utils/to-expose/hooks/use-lunatic.spec.js +0 -46
  337. package/src/tests/utils/to-expose/init-questionnaire/data.json +0 -12
  338. package/src/tests/utils/to-expose/init-questionnaire/init-questionnaire.spec.js +0 -19
  339. package/src/tests/utils/to-expose/init-questionnaire/questionnaire.json +0 -148
  340. package/src/tests/utils/to-expose/init-questionnaire/result.json +0 -181
  341. package/src/tests/utils/to-expose/interpret/interpret.spec.js +0 -48
  342. package/src/tests/utils/to-expose/state/questionnaire.json +0 -61
  343. package/src/tests/utils/to-expose/state/results.js +0 -78
  344. package/src/tests/utils/to-expose/state/state.spec.js +0 -59
  345. package/src/utils/suggester-workers/commons-tokenizer/create-tokenizer.js +0 -103
  346. package/src/utils/suggester-workers/commons-tokenizer/filter-accents-to-lower.js +0 -9
  347. package/src/utils/suggester-workers/commons-tokenizer/filter-synonyms.js +0 -10
  348. package/src/utils/suggester-workers/query-parser/query-parser-soft.js +0 -7
  349. package/src/utils/suggester-workers/query-parser/query-parser-tokenized.js +0 -31
  350. package/src/utils/suggester-workers/query-parser/query-parser-tokenized.spec.js +0 -32
@@ -0,0 +1,146 @@
1
+ import { buildLoopBindings } from '../loops';
2
+ import { interpret } from '../../to-expose/interpret';
3
+ import { splitPage } from '..';
4
+ import { getTypeControls } from '../../../components/component-wrapper/controls/validators';
5
+
6
+ export const getControls = ({
7
+ page,
8
+ components,
9
+ bindings,
10
+ features,
11
+ preferences,
12
+ }) =>
13
+ getControlsFromComponents({
14
+ page,
15
+ components,
16
+ depth: 1,
17
+ bindings,
18
+ features,
19
+ preferences,
20
+ });
21
+
22
+ const getControlsFromComponents = ({
23
+ page,
24
+ depth,
25
+ components,
26
+ bindings,
27
+ features,
28
+ preferences,
29
+ }) => {
30
+ const { currentIteration, currentPageWithoutAnyIteration } = splitPage(
31
+ page,
32
+ depth
33
+ );
34
+ return components.reduce((acc, component) => {
35
+ const {
36
+ controls,
37
+ componentType,
38
+ components: loopComponents,
39
+ page: componentPage,
40
+ paginatedLoop,
41
+ } = component;
42
+ if (componentType === 'Loop') {
43
+ const { bindingDependencies: bindingDependenciesLoop } = component;
44
+ const rootLoopBindings = getReducedBindings(
45
+ bindingDependenciesLoop,
46
+ bindings
47
+ );
48
+ let loopBindings = {};
49
+ if (paginatedLoop) {
50
+ loopBindings = buildLoopBindings(currentIteration - 1)(
51
+ Object.entries(rootLoopBindings)
52
+ );
53
+ return [
54
+ ...acc,
55
+ ...getControlsFromComponents({
56
+ page,
57
+ components: loopComponents,
58
+ bindings: loopBindings,
59
+ features,
60
+ depth: depth + 1,
61
+ preferences,
62
+ }),
63
+ ];
64
+ } else {
65
+ const { loopDependencies } = component;
66
+ const iterations = parseInt(bindings[loopDependencies[0]], 10);
67
+ const ctrls = [...Array(iterations).keys()].reduce((accIt, i) => {
68
+ loopBindings = buildLoopBindings(i)(Object.entries(rootLoopBindings));
69
+ return [
70
+ ...accIt,
71
+ ...getControlsFromComponents({
72
+ page,
73
+ components: loopComponents,
74
+ bindings: loopBindings,
75
+ features,
76
+ depth: depth,
77
+ preferences,
78
+ }),
79
+ ];
80
+ }, []);
81
+ return [...acc, ...ctrls];
82
+ }
83
+ }
84
+ if (currentPageWithoutAnyIteration === componentPage) {
85
+ if (controls) {
86
+ const interpretedControls = controls.reduce(
87
+ (
88
+ iC,
89
+ { id, control, errorMessage, criticality, bindingDependencies }
90
+ ) => {
91
+ const reducedBindings = getReducedBindings(
92
+ bindingDependencies,
93
+ bindings
94
+ );
95
+ const interpretedControl =
96
+ interpret(features)(reducedBindings)(control);
97
+ if (!interpretedControl)
98
+ return [...iC, { id, errorMessage, criticality }];
99
+ return iC;
100
+ },
101
+ []
102
+ );
103
+ if (!['InputNumber', 'Datepicker'].includes(componentType))
104
+ return [...acc, ...interpretedControls];
105
+ else {
106
+ const {
107
+ response: { name },
108
+ } = component;
109
+ const value = bindings[name];
110
+ const typeControls = getTypeControls({
111
+ ...component,
112
+ value,
113
+ preferences,
114
+ });
115
+
116
+ if (!typeControls) return [...acc, ...interpretedControls];
117
+ return [
118
+ ...acc,
119
+ { ...typeControls, criticality: 'LOCK' },
120
+ ...interpretedControls,
121
+ ];
122
+ }
123
+ }
124
+ if (['InputNumber', 'Datepicker'].includes(componentType)) {
125
+ const {
126
+ response: { name },
127
+ } = component;
128
+ const value = bindings[name];
129
+ const typeControls = getTypeControls({
130
+ ...component,
131
+ value,
132
+ preferences,
133
+ });
134
+ if (!typeControls) return [...acc];
135
+ return [...acc, { ...typeControls, criticality: 'LOCK' }];
136
+ }
137
+ }
138
+ return acc;
139
+ }, []);
140
+ };
141
+
142
+ const getReducedBindings = (bindingDependencies, bindings) =>
143
+ (bindingDependencies || []).reduce(
144
+ (accB, bD) => ({ ...accB, [bD]: bindings[bD] }),
145
+ {}
146
+ );
@@ -1,19 +1,20 @@
1
- export { getAlphabet } from './alphabet';
2
- export * from './array';
3
- export * from './checkbox';
4
- export { titleDecorator } from './decorator';
5
- export * from './env';
6
- export * from './input-number';
7
- export * from './label-position';
8
- export * from './loops';
9
- export * from './memo-check';
10
- export * from './missing';
11
- export * from './options-positioning';
12
- export * from './pagination';
13
- export * from './prop-types';
14
- export * from './responses';
15
- export { buildStyleObject } from './style';
16
- export * from './table';
17
- export * from './tooltip';
18
- export { isFunction } from './function';
19
- export { createObjectEvent } from './event';
1
+ export { getAlphabet } from './alphabet';
2
+ export * from './array';
3
+ export * from './checkbox';
4
+ export * from './controls';
5
+ export { titleDecorator } from './decorator';
6
+ export * from './env';
7
+ export * from './input-number';
8
+ export * from './label-position';
9
+ export * from './loops';
10
+ export * from './memo-check';
11
+ export * from './missing';
12
+ export * from './options-positioning';
13
+ export * from './pagination';
14
+ export * from './prop-types';
15
+ export * from './responses';
16
+ export { buildStyleObject } from './style';
17
+ export * from './table';
18
+ export * from './tooltip';
19
+ export { isFunction } from './function';
20
+ export { createObjectEvent } from './event';
@@ -50,7 +50,8 @@ export const getPage = ({
50
50
  interpret(featuresWithoutMD)(loopVectorialB)(loopV) !== true ||
51
51
  (flow === FLOW_PREVIOUS &&
52
52
  currentIteration === 1 &&
53
- currentComponentIndex === 1)
53
+ currentComponentIndex === 1 &&
54
+ page === currentRootPage)
54
55
  )
55
56
  continue;
56
57
  const iterations = getIterations({
@@ -86,7 +87,6 @@ export const getPage = ({
86
87
  page,
87
88
  it,
88
89
  currentIteration,
89
- loopComponentIndex: componentIndex,
90
90
  currentComponentIndex,
91
91
  loopComponent,
92
92
  })
@@ -112,7 +112,6 @@ export const getPage = ({
112
112
  const block = filteredComponents.filter(
113
113
  (c) => c.page === page && c.componentType === 'Loop'
114
114
  );
115
-
116
115
  if (block.length > 0) {
117
116
  const loopIdOfInterest =
118
117
  flow === FLOW_NEXT ? block[0].id : block[block.length - 1].id;
@@ -168,10 +167,14 @@ const hasToBeExcluded = ({
168
167
  page,
169
168
  it,
170
169
  currentIteration,
171
- loopComponentIndex,
172
170
  currentComponentIndex,
173
171
  loopComponent,
174
172
  }) => {
173
+ const { page: loopPage, depth } = loopComponent;
174
+ const { currentComponentIndex: loopComponentIndex } = splitPage(
175
+ loopPage,
176
+ depth
177
+ );
175
178
  if (flow === FLOW_NEXT)
176
179
  return (
177
180
  (currentRootPage === page &&
@@ -1,9 +1,11 @@
1
1
  export const getResponseName = (response) => (response && response.name) || '';
2
2
 
3
- export const getResponseByPreference = (preferences) => (response) => {
4
- if (!(response && response.values)) return null;
5
- return preferences.reduce((acc, p) => {
6
- const value = response.values[p];
7
- return value !== null ? value : acc;
8
- }, null);
9
- };
3
+ export const getResponseByPreference =
4
+ (preferences = []) =>
5
+ (response) => {
6
+ if (!(response && response.values)) return null;
7
+ return preferences.reduce((acc, p) => {
8
+ const value = response.values[p];
9
+ return value !== null ? value : acc;
10
+ }, null);
11
+ };
@@ -1,41 +1,53 @@
1
- import { buildNewValue } from '../../to-expose/handler';
2
- import * as C from '../../../constants/value-types';
3
-
4
- export const buildMultiTooltipResponse = (options) => (response) => {
5
- if (!response || Object.keys(response).length === 0 || !options) return {};
6
- const { name, values } = response;
7
- const newValues = Object.entries(values).reduce(
8
- (acc, [k, v]) =>
9
- v === null
10
- ? { ...acc, [k]: v }
11
- : { ...acc, [k]: options.find((o) => o.value === v).label },
12
- {}
13
- );
14
- return { name, values: newValues };
15
- };
16
-
17
- export const buildBooleanTooltipResponse = (response) => {
18
- if (!response || Object.keys(response).length === 0) return {};
19
- const { name, values } = response;
20
- const newValues = Object.entries(values).reduce(
21
- (acc, [k, v]) =>
22
- v === null ? { ...acc, [k]: v } : { ...acc, [k]: v ? 'Vrai' : 'Faux' },
23
- {}
24
- );
25
- return { name, values: newValues };
26
- };
27
-
28
- /**
29
- * Assume we use this tool in management mode only
30
- */
31
- export const buildLocalResponse = (response, value) => {
32
- if (!response || Object.keys(response).length === 0) return {};
33
- const { name, values } = response;
34
- const newValue = buildNewValue([C.COLLECTED, C.FORCED, C.EDITED])(C.EDITED)(
35
- values
36
- )(value);
37
- return {
38
- name,
39
- values: { ...values, EDITED: newValue },
40
- };
41
- };
1
+ export const buildLocalResponse = () => {
2
+ throw new Error('redefine buildLocalResponse if needed');
3
+ };
4
+
5
+ export const buildMultiTooltipResponse = () => {
6
+ throw new Error('redefine buildMultiTooltipResponse if needed');
7
+ };
8
+
9
+ export const buildBooleanTooltipResponse = () => {
10
+ throw new Error('redefine buildBooleanTooltipResponse if needed');
11
+ };
12
+
13
+ // import { buildNewValue } from '../../to-expose/handler';
14
+ // import * as C from '../../../constants/value-types';
15
+
16
+ // export const buildMultiTooltipResponse = (options) => (response) => {
17
+ // if (!response || Object.keys(response).length === 0 || !options) return {};
18
+ // const { name, values } = response;
19
+ // const newValues = Object.entries(values).reduce(
20
+ // (acc, [k, v]) =>
21
+ // v === null
22
+ // ? { ...acc, [k]: v }
23
+ // : { ...acc, [k]: options.find((o) => o.value === v).label },
24
+ // {}
25
+ // );
26
+ // return { name, values: newValues };
27
+ // };
28
+
29
+ // export const buildBooleanTooltipResponse = (response) => {
30
+ // if (!response || Object.keys(response).length === 0) return {};
31
+ // const { name, values } = response;
32
+ // const newValues = Object.entries(values).reduce(
33
+ // (acc, [k, v]) =>
34
+ // v === null ? { ...acc, [k]: v } : { ...acc, [k]: v ? 'Vrai' : 'Faux' },
35
+ // {}
36
+ // );
37
+ // return { name, values: newValues };
38
+ // };
39
+
40
+ // /**
41
+ // * Assume we use this tool in management mode only
42
+ // */
43
+ // export const buildLocalResponse = (response, value) => {
44
+ // if (!response || Object.keys(response).length === 0) return {};
45
+ // const { name, values } = response;
46
+ // const newValue = buildNewValue([C.COLLECTED, C.FORCED, C.EDITED])(C.EDITED)(
47
+ // values
48
+ // )(value);
49
+ // return {
50
+ // name,
51
+ // values: { ...values, EDITED: newValue },
52
+ // };
53
+ // };
@@ -2,6 +2,7 @@ import openStorage from './open-or-create-store';
2
2
  import updateStoreInfo from './create/update-store-info';
3
3
  import cleanStorage from './clear-store-data';
4
4
  import cleanInfoStorage from './clear-store-info';
5
+ import { createWorker } from '../suggester-workers/create-worker';
5
6
 
6
7
  const workerPath =
7
8
  process.env.LUNATIC_LOADER_WORKER_PATH ||
@@ -34,7 +35,7 @@ export const loadSuggesters = (suggesterFetcher) => async (suggesters) => {
34
35
  * Only with Worker
35
36
  */
36
37
  function task({ name, fields, stopWords }, version, log = () => null) {
37
- const worker = new Worker(workerPath);
38
+ const worker = createWorker(workerPath);
38
39
  let start = false;
39
40
  let stop = false;
40
41
 
@@ -1 +1,2 @@
1
- export { default } from './create';
1
+ export { default } from './create';
2
+ export { default as updateStoreInfo } from './update-store-info';
@@ -1,26 +1,26 @@
1
- import CONSTANTES from '../constantes';
2
-
3
- function update(db, storeInfo) {
4
- return new Promise(function (resolve, reject) {
5
- try {
6
- const transaction = db.transaction(
7
- CONSTANTES.STORE_INFO_NAME,
8
- 'readwrite'
9
- );
10
- const store = transaction.objectStore(CONSTANTES.STORE_INFO_NAME);
11
- const request = store.add(storeInfo);
12
-
13
- request.onsuccess = function () {
14
- resolve('success');
15
- };
16
-
17
- request.onerror = function (e) {
18
- reject(e);
19
- };
20
- } catch (e) {
21
- reject(e);
22
- }
23
- });
24
- }
25
-
26
- export default update;
1
+ import CONSTANTES from '../constantes';
2
+
3
+ function updateStoreInfo(db, storeInfo) {
4
+ return new Promise(function (resolve, reject) {
5
+ try {
6
+ const transaction = db.transaction(
7
+ CONSTANTES.STORE_INFO_NAME,
8
+ 'readwrite'
9
+ );
10
+ const store = transaction.objectStore(CONSTANTES.STORE_INFO_NAME);
11
+ const request = store.add(storeInfo);
12
+
13
+ request.onsuccess = function () {
14
+ resolve('success');
15
+ };
16
+
17
+ request.onerror = function (e) {
18
+ reject(e);
19
+ };
20
+ } catch (e) {
21
+ reject(e);
22
+ }
23
+ });
24
+ }
25
+
26
+ export default updateStoreInfo;
@@ -1,5 +1,7 @@
1
- export * as CONSTANTES from './constantes';
2
- export { default as openOrCreateStore } from './open-or-create-store';
3
- export { default as clearStoreData } from './clear-store-data';
4
- export { default as useStoreIndex } from './use-store-index';
5
- export { default as getStoreCount } from './get-store-count';
1
+ export * as CONSTANTES from './constantes';
2
+ export { default as openOrCreateStore } from './open-or-create-store';
3
+ export { default as clearStoreData } from './clear-store-data';
4
+ export { default as clearStoreInfo } from './clear-store-info';
5
+ export { default as useStoreIndex } from './use-store-index';
6
+ export { default as getStoreCount } from './get-store-count';
7
+ export { default as updateStoreInfo } from './create/update-store-info';
@@ -1,3 +1,5 @@
1
+ import { createWorker } from '../create-worker';
2
+
1
3
  const workerPath =
2
4
  process.env.LUNATIC_LOADER_WORKER_PATH ||
3
5
  process.env.REACT_APP_LUNATIC_LOADER_WORKER_PATH ||
@@ -8,7 +10,7 @@ const workerPath =
8
10
  */
9
11
  function task(info, version, log = () => null) {
10
12
  const { name, fields, stopWords } = info;
11
- const worker = new Worker(workerPath);
13
+ const worker = createWorker(workerPath);
12
14
  let start = false;
13
15
  let stop = false;
14
16
 
@@ -0,0 +1,56 @@
1
+ import createFieldsTokenizer from './create-fields-tokenizer';
2
+ import { composeFilters, createFilterStopWords } from './filters';
3
+ import filterStemmer from './filters/filter-stemmer';
4
+ import filterLength from './filters/filter-length';
5
+ import filterSynonyms from './filters/filter-synonyms';
6
+ import filterAccents from './filters/filter-accents';
7
+ import filterToLower from './filters/filter-to-lower';
8
+ import filterDouble from './filters/filter-double';
9
+
10
+ function createMapFieldsTokenizer(fields, filters) {
11
+ return fields.reduce(function (mapFieldTokenizers, field) {
12
+ const { name } = field;
13
+ return {
14
+ ...mapFieldTokenizers,
15
+ [name]: createFieldsTokenizer(field, filters),
16
+ };
17
+ }, {});
18
+ }
19
+
20
+ function createFilterTokens(fields, stopWords) {
21
+ const filterStopWords = createFilterStopWords(stopWords);
22
+ const getFilters = composeFilters(
23
+ filterDouble,
24
+ filterAccents,
25
+ filterStemmer,
26
+ filterSynonyms,
27
+ filterToLower,
28
+ filterStopWords,
29
+ filterLength
30
+ );
31
+ const FIELDS_TOKENIZER_MAP = createMapFieldsTokenizer(
32
+ fields || [],
33
+ getFilters
34
+ );
35
+
36
+ return function (field, entity) {
37
+ const { name } = field;
38
+ const tokenizeIt = FIELDS_TOKENIZER_MAP[name];
39
+ if (name in entity) {
40
+ return tokenizeIt(`${entity[name]}`);
41
+ }
42
+ return [];
43
+ };
44
+ }
45
+
46
+ function createEntityTokenizer(fields, stopWords) {
47
+ const tokenizeAll = createFilterTokens(fields, stopWords);
48
+ return function (entity) {
49
+ return fields.reduce(function (a, field) {
50
+ const { name } = field;
51
+ return { ...a, [name]: tokenizeAll(field, entity) };
52
+ }, {});
53
+ };
54
+ }
55
+
56
+ export default createEntityTokenizer;
@@ -0,0 +1,56 @@
1
+ import prepareStringIndexation from './prepare-string-indexation';
2
+ import softTokenizer from './soft-tokenizer';
3
+ import tokenizer from 'string-tokenizer';
4
+ import getRegExpFromPattern from './get-regexp-from-pattern';
5
+
6
+ function defaultTokenizeIt(string) {
7
+ return [prepareStringIndexation(string)];
8
+ }
9
+
10
+ function toArray(content) {
11
+ return Array.isArray(content) ? content : [content];
12
+ }
13
+
14
+ function tokensToArray(tokenized) {
15
+ return Object.entries(tokenized).reduce(function (a, [k, values]) {
16
+ if (k.startsWith('pattern')) {
17
+ return [...a, ...toArray(values)];
18
+ }
19
+ return a;
20
+ }, []);
21
+ }
22
+
23
+ function createFieldsTokenizer(field, filtersStack) {
24
+ const {
25
+ name,
26
+ rules = [],
27
+ min,
28
+ language = 'French',
29
+ stemmer = true,
30
+ synonyms = {},
31
+ } = field;
32
+ if (rules === 'soft') {
33
+ return softTokenizer;
34
+ }
35
+ if (rules.length) {
36
+ const tokenRules = rules.reduce(function (rulesMap, pattern, index) {
37
+ return {
38
+ ...rulesMap,
39
+ [`pattern${name}${index}`]: getRegExpFromPattern(pattern),
40
+ };
41
+ }, {});
42
+
43
+ return function (string) {
44
+ const what = tokenizer().input(string).tokens(tokenRules).resolve();
45
+ return filtersStack(tokensToArray(what), {
46
+ min,
47
+ language,
48
+ stemmer,
49
+ synonyms,
50
+ });
51
+ };
52
+ }
53
+ return defaultTokenizeIt;
54
+ }
55
+
56
+ export default createFieldsTokenizer;
@@ -1,17 +1,17 @@
1
1
  import defaultStopWords from './stop-words';
2
2
 
3
3
  function createFilterStopWords(stops = defaultStopWords) {
4
- const mapSW = stops.reduce(function (a, w) {
5
- return { ...a, [w]: undefined };
6
- }, {});
7
- return function filter(tokens) {
8
- return tokens.reduce(function (a, t) {
9
- if (t in mapSW) {
10
- return a;
11
- }
12
- return [...a, t];
13
- }, []);
14
- };
4
+ const mapSW = stops.reduce(function (a, w) {
5
+ return { ...a, [w]: undefined };
6
+ }, {});
7
+ return function filter(tokens) {
8
+ return tokens.reduce(function (a, t) {
9
+ if (t in mapSW) {
10
+ return a;
11
+ }
12
+ return [...a, t];
13
+ }, []);
14
+ };
15
15
  }
16
16
 
17
17
  export default createFilterStopWords;
@@ -0,0 +1,10 @@
1
+ export function composeFilters(...filters) {
2
+ return filters.reduce(
3
+ function (next, current) {
4
+ return (tokens, args) => next(current(tokens, args), args);
5
+ },
6
+ (t) => t
7
+ );
8
+ }
9
+
10
+ export default composeFilters;
@@ -0,0 +1,17 @@
1
+ import defaultStopWords from './stop-words';
2
+
3
+ function createFilterStopWords(stops = defaultStopWords) {
4
+ const mapSW = stops.reduce(function (a, w) {
5
+ return { ...a, [w]: undefined };
6
+ }, {});
7
+ return function filter(tokens) {
8
+ return tokens.reduce(function (a, t) {
9
+ if (t in mapSW) {
10
+ return a;
11
+ }
12
+ return [...a, t];
13
+ }, []);
14
+ };
15
+ }
16
+
17
+ export default createFilterStopWords;
@@ -0,0 +1,14 @@
1
+ import createFilterSW from './create-filter-stop-words';
2
+
3
+ describe('create-filter-stop-words', function () {
4
+ it('only last ', function () {
5
+ const sw = ['un', 'de'];
6
+ const tokens = ['un', 'de', 'trois'];
7
+
8
+ const filter = createFilterSW(sw);
9
+
10
+ const results = filter(tokens);
11
+ expect(Array.isArray(results)).toBe(true);
12
+ expect(results.length).toBe(1);
13
+ });
14
+ });
@@ -0,0 +1,12 @@
1
+ import removeAccents from 'remove-accents';
2
+
3
+ function filterAccents(tokens = []) {
4
+ return tokens.map(function (token) {
5
+ if (typeof token === 'string') {
6
+ return removeAccents(token).toLowerCase();
7
+ }
8
+ return token;
9
+ });
10
+ }
11
+
12
+ export default filterAccents;
@@ -0,0 +1,12 @@
1
+ import filterATL from './filter-accents';
2
+
3
+ describe('filter-length', function () {
4
+ it('maj accent', function () {
5
+ const tokens = ['UN', 'éà ù'];
6
+ const results = filterATL(tokens, { min: 3 });
7
+ expect(Array.isArray(results)).toBe(true);
8
+ expect(results.length).toBe(2);
9
+ expect(results[0]).toBe('un');
10
+ expect(results[1]).toBe('ea u');
11
+ });
12
+ });