@inseefr/lunatic 0.2.2-experimental → 0.2.3-prisme

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 (219) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +25 -23
  3. package/lib/index.js +1191 -475
  4. package/lib/index.js.map +1 -1
  5. package/package.json +174 -172
  6. package/src/components/breadcrumb/breadcrumb.scss +22 -22
  7. package/src/components/checkbox/boolean.js +172 -172
  8. package/src/components/checkbox/checkbox.scss +73 -73
  9. package/src/components/checkbox/group.js +231 -231
  10. package/src/components/checkbox/one.js +11 -11
  11. package/src/components/component-wrapper/controls/component.js +70 -0
  12. package/src/components/component-wrapper/controls/controls.scss +6 -0
  13. package/src/components/component-wrapper/controls/index.js +1 -0
  14. package/src/components/component-wrapper/controls/validators/datepicker.js +44 -0
  15. package/src/components/component-wrapper/controls/validators/index.js +16 -0
  16. package/src/components/component-wrapper/controls/validators/input-number.js +23 -0
  17. package/src/components/{missing-wrapper → component-wrapper}/index.js +0 -0
  18. package/src/components/component-wrapper/missing/component.js +200 -0
  19. package/src/components/component-wrapper/missing/index.js +1 -0
  20. package/src/components/{missing-wrapper → component-wrapper/missing}/missing.scss +32 -32
  21. package/src/components/component-wrapper/wrapper.js +23 -0
  22. package/src/components/components.js +1 -0
  23. package/src/components/datepicker/component.js +26 -11
  24. package/src/components/declarations/component.js +46 -46
  25. package/src/components/declarations/declarations.scss +40 -40
  26. package/src/components/declarations/wrappers/input-declarations-wrapper.js +328 -274
  27. package/src/components/declarations/wrappers/simple-declarations-wrapper.js +54 -54
  28. package/src/components/dropdown/commons/actions.js +65 -56
  29. package/src/components/dropdown/commons/children-to-option.js +9 -9
  30. package/src/components/dropdown/commons/cleaner-callbacks.js +58 -58
  31. package/src/components/dropdown/commons/components/dropdown-container.js +29 -29
  32. package/src/components/dropdown/commons/components/dropdown.js +204 -183
  33. package/src/components/dropdown/commons/event-callbacks/on-mousedown-callback.js +15 -15
  34. package/src/components/dropdown/commons/reducer.js +3 -0
  35. package/src/components/dropdown/commons/tools/index.js +17 -17
  36. package/src/components/dropdown/component.js +135 -135
  37. package/src/components/dropdown/dropdown-edit/dropdown-edit.js +194 -185
  38. package/src/components/dropdown/dropdown-edit/index.js +11 -11
  39. package/src/components/dropdown/dropdown-simple/dropdown.js +173 -164
  40. package/src/components/dropdown/dropdown-simple/index.js +20 -20
  41. package/src/components/dropdown/dropdown.scss +178 -178
  42. package/src/components/icon/icon.scss +15 -15
  43. package/src/components/index.js +2 -0
  44. package/src/components/index.scss +177 -175
  45. package/src/components/input/input-number.js +30 -54
  46. package/src/components/input/input.js +11 -11
  47. package/src/components/input/input.scss +31 -37
  48. package/src/components/loop/component.js +170 -169
  49. package/src/components/loop/loop.scss +13 -13
  50. package/src/components/loop/wrapper.js +1 -1
  51. package/src/components/loop-constructor/block/block.scss +10 -10
  52. package/src/components/loop-constructor/block/component.js +9 -9
  53. package/src/components/loop-constructor/roster/component.js +8 -8
  54. package/src/components/loop-constructor/wrapper/body-component.js +146 -125
  55. package/src/components/modal/component.js +36 -0
  56. package/src/components/modal/index.js +1 -0
  57. package/src/components/modal/modal.scss +33 -0
  58. package/src/components/progress-bar/progress-bar.scss +54 -54
  59. package/src/components/radio/component.js +9 -9
  60. package/src/components/radio/radio.scss +59 -59
  61. package/src/components/sequence/component.js +50 -50
  62. package/src/components/sequence/sequence.scss +10 -10
  63. package/src/components/subsequence/component.js +49 -49
  64. package/src/components/suggester/check-store.js +2 -4
  65. package/src/components/suggester/components/panel/default-option-renderer.js +27 -27
  66. package/src/components/suggester/components/panel/option-container.js +61 -61
  67. package/src/components/suggester/components/panel/panel.js +47 -47
  68. package/src/components/suggester/components/selection/default-label-renderer.js +31 -31
  69. package/src/components/suggester/components/selection/label.js +35 -35
  70. package/src/components/suggester/components/selection/selection.js +50 -50
  71. package/src/components/suggester/components/suggester-content.js +2 -2
  72. package/src/components/suggester/components/suggester.js +128 -88
  73. package/src/components/suggester/components/suggester.scss +101 -101
  74. package/src/components/suggester/default-style.scss +125 -125
  75. package/src/components/suggester/find-best-label/find-best-label.js +51 -49
  76. package/src/components/suggester/find-best-label/index.js +1 -1
  77. package/src/components/suggester/idb-suggester.js +73 -67
  78. package/src/components/suggester/lunatic-suggester.js +140 -137
  79. package/src/components/suggester/searching/create-searching.js +49 -47
  80. package/src/components/suggester/searching/index.js +1 -1
  81. package/src/components/suggester/state-management/actions.js +38 -38
  82. package/src/components/suggester/state-management/reducer/reduce-on-delete-search.js +11 -11
  83. package/src/components/suggester/state-management/reducer/reduce-on-init.js +29 -29
  84. package/src/components/suggester/state-management/reducer/reducer.js +38 -38
  85. package/src/components/suggester/suggester-wrapper.js +127 -121
  86. package/src/components/suggester-loader-widget/loader.js +67 -67
  87. package/src/components/suggester-loader-widget/widget.js +123 -123
  88. package/src/components/table/table.js +173 -171
  89. package/src/components/table/table.scss +26 -26
  90. package/src/components/textarea/component.js +11 -11
  91. package/src/components/textarea/textarea.scss +8 -8
  92. package/src/components/tooltip/tooltip.scss +30 -30
  93. package/src/stories/checkbox-boolean/data.json +78 -78
  94. package/src/stories/datepicker/data.json +3 -1
  95. package/src/stories/dropdown/README.md +44 -44
  96. package/src/stories/dropdown/data.json +98 -98
  97. package/src/stories/dropdown/dropdown.stories.js +89 -89
  98. package/src/stories/progress-bar/progress-bar.stories.js +24 -24
  99. package/src/stories/questionnaire/arithmetic-management.json +47 -0
  100. package/src/stories/questionnaire/arithmetic.json +247 -247
  101. package/src/stories/questionnaire/kish.json +275 -0
  102. package/src/stories/questionnaire/logement-queen.json +23390 -0
  103. package/src/stories/questionnaire/logement-s2.json +46028 -0
  104. package/src/stories/questionnaire/logement.json +20347 -26087
  105. package/src/stories/questionnaire/loop-and-controls.json +481 -0
  106. package/src/stories/questionnaire/questionnaire.stories.js +236 -138
  107. package/src/stories/questionnaire/update-external/data.json +1 -0
  108. package/src/stories/questionnaire/update-external/questionnaire.json +75 -0
  109. package/src/stories/suggester/README.md +46 -46
  110. package/src/stories/suggester/bailleurs-sociaux/fetch-bailleurs.js +15 -15
  111. package/src/stories/suggester/bailleurs-sociaux/index.js +2 -2
  112. package/src/stories/suggester/bailleurs-sociaux/option-bailleur-renderer.js +58 -58
  113. package/src/stories/suggester/bailleurs-sociaux/preloader.svg +51 -51
  114. package/src/stories/suggester/bailleurs-sociaux/theme.scss +22 -22
  115. package/src/stories/suggester/bailleurs-sociaux-2021/fetch-bailleurs.js +12 -0
  116. package/src/stories/suggester/bailleurs-sociaux-2021/index.js +1 -0
  117. package/src/stories/suggester/cog-communes/fetch-cog.js +15 -15
  118. package/src/stories/suggester/data-auto.json +232 -231
  119. package/src/stories/suggester/data-vtl.json +82 -82
  120. package/src/stories/suggester/data.json +169 -136
  121. package/src/stories/suggester/naf-rev2/index.js +2 -2
  122. package/src/stories/suggester/naf-rev2/option-naf-renderer.js +17 -17
  123. package/src/stories/suggester/suggester-workers.stories.js +226 -179
  124. package/src/stories/suggester/suggester.stories.js +138 -133
  125. package/src/stories/utils/orchestrator-split.js +119 -0
  126. package/src/stories/utils/orchestrator.js +119 -108
  127. package/src/tests/components/input-number.spec.js +6 -12
  128. package/src/tests/components/missing-wrapper.spec.js +0 -1
  129. package/src/tests/utils/lib/table/roster.spec.js +25 -25
  130. package/src/tests/utils/to-expose/handler/results/res-input-edited.json +1 -1
  131. package/src/utils/components/dragger/dragger.scss +7 -7
  132. package/src/utils/idb-tools/create-db-opener.js +43 -43
  133. package/src/utils/idb-tools/create-open-db.js +25 -25
  134. package/src/utils/idb-tools/idb-bulk-insert.js +96 -96
  135. package/src/utils/idb-tools/index.js +10 -10
  136. package/src/utils/idb-tools/insert-entity.js +15 -15
  137. package/src/utils/idb-tools/open-db.js +13 -13
  138. package/src/utils/idb-tools/open-or-create-db.js +34 -34
  139. package/src/utils/lib/controls/index.js +1 -0
  140. package/src/utils/lib/controls/utils.js +152 -0
  141. package/src/utils/lib/decorator/title-decorator.js +16 -16
  142. package/src/utils/lib/env.js +2 -2
  143. package/src/utils/lib/index.js +2 -0
  144. package/src/utils/lib/input-number.js +1 -1
  145. package/src/utils/lib/options-positioning.js +9 -9
  146. package/src/utils/lib/pagination/navigation/shared.js +12 -9
  147. package/src/utils/lib/prop-types/lines.js +6 -6
  148. package/src/utils/lib/responses.js +11 -9
  149. package/src/utils/lib/splitting.js +142 -0
  150. package/src/utils/lib/style.js +10 -10
  151. package/src/utils/store-tools/auto-load.js +74 -73
  152. package/src/utils/suggester-workers/append-to-index/append.js +25 -25
  153. package/src/utils/suggester-workers/append-to-index/append.worker.js +16 -16
  154. package/src/utils/suggester-workers/append-to-index/create-append-task.js +45 -43
  155. package/src/utils/suggester-workers/append-to-index/index.js +2 -2
  156. package/src/utils/suggester-workers/append-to-index/prepare-entities.js +61 -61
  157. package/src/utils/suggester-workers/append-to-index/store-messages.js +21 -21
  158. package/src/utils/suggester-workers/commons-tokenizer/create-entity-tokenizer.js +56 -0
  159. package/src/utils/suggester-workers/commons-tokenizer/create-fields-tokenizer.js +56 -0
  160. package/src/utils/suggester-workers/commons-tokenizer/create-filter-stop-words.js +17 -17
  161. package/src/utils/suggester-workers/commons-tokenizer/filters/compose-filters.js +10 -0
  162. package/src/utils/suggester-workers/commons-tokenizer/filters/create-filter-stop-words.js +17 -0
  163. package/src/utils/suggester-workers/commons-tokenizer/filters/create-filter-stop-words.spec.js +14 -0
  164. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-accents.js +12 -0
  165. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-accents.spec.js +12 -0
  166. package/src/utils/suggester-workers/commons-tokenizer/{filter-double.js → filters/filter-double.js} +12 -12
  167. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-double.spec.js +20 -0
  168. package/src/utils/suggester-workers/commons-tokenizer/{filter-length.js → filters/filter-length.js} +7 -7
  169. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-length.spec.js +18 -0
  170. package/src/utils/suggester-workers/commons-tokenizer/{filter-stemmer.js → filters/filter-stemmer.js} +13 -13
  171. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-stemmer.spec.js +12 -0
  172. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-synonyms.js +36 -0
  173. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-synonyms.spec.js +12 -0
  174. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-to-lower.js +10 -0
  175. package/src/utils/suggester-workers/commons-tokenizer/filters/filter-to-lower.spec.js +12 -0
  176. package/src/utils/suggester-workers/commons-tokenizer/filters/index.js +2 -0
  177. package/src/utils/suggester-workers/commons-tokenizer/{stop-words.js → filters/stop-words.js} +118 -118
  178. package/src/utils/suggester-workers/commons-tokenizer/get-regexp-from-pattern.js +8 -8
  179. package/src/utils/suggester-workers/commons-tokenizer/get-stemmer.js +18 -18
  180. package/src/utils/suggester-workers/commons-tokenizer/index.js +9 -8
  181. package/src/utils/suggester-workers/commons-tokenizer/prepare-string-indexation.js +13 -9
  182. package/src/utils/suggester-workers/commons-tokenizer/soft-tokenizer.js +7 -7
  183. package/src/utils/suggester-workers/create-worker.js +56 -0
  184. package/src/utils/suggester-workers/find-best-label/find-best-label.js +39 -39
  185. package/src/utils/suggester-workers/find-best-label/find-best-label.worker.js +40 -40
  186. package/src/utils/suggester-workers/find-best-label/tokenize.js +30 -33
  187. package/src/utils/suggester-workers/find-best-label/tokenize.spec.js +19 -19
  188. package/src/utils/suggester-workers/searching/compute-score.js +33 -33
  189. package/src/utils/suggester-workers/searching/get-db.js +18 -18
  190. package/src/utils/suggester-workers/searching/index.js +1 -1
  191. package/src/utils/suggester-workers/searching/order/create-alphanumeric-orderer.js +20 -20
  192. package/src/utils/suggester-workers/searching/order/index.js +19 -19
  193. package/src/utils/suggester-workers/{query-parser → searching/query-parser}/index.js +2 -2
  194. package/src/utils/suggester-workers/searching/query-parser/query-parser-soft.js +7 -0
  195. package/src/utils/suggester-workers/{query-parser → searching/query-parser}/query-parser-soft.spec.js +24 -24
  196. package/src/utils/suggester-workers/searching/query-parser/query-parser-tokenized.js +34 -0
  197. package/src/utils/suggester-workers/searching/resolve-query-parser.js +27 -27
  198. package/src/utils/suggester-workers/searching/search-in-index.js +17 -17
  199. package/src/utils/suggester-workers/searching/searching.js +70 -70
  200. package/src/utils/suggester-workers/searching/searching.worker.js +11 -11
  201. package/src/utils/to-expose/calculated-variables.js +113 -113
  202. package/src/utils/to-expose/handler.js +149 -112
  203. package/src/utils/to-expose/hooks/filter-components.js +27 -12
  204. package/src/utils/to-expose/hooks/index.js +2 -1
  205. package/src/utils/to-expose/hooks/lunatic-split.js +428 -0
  206. package/src/utils/to-expose/hooks/lunatic.js +284 -187
  207. package/src/utils/to-expose/index.js +1 -1
  208. package/src/utils/to-expose/init-questionnaire.js +164 -164
  209. package/src/utils/to-expose/interpret/vtl.js +18 -18
  210. package/src/utils/to-expose/state.js +66 -58
  211. package/src/components/missing-wrapper/component.js +0 -120
  212. package/src/components/missing-wrapper/wrapper.js +0 -10
  213. package/src/tests/utils/to-expose/hooks/use-lunatic.spec.js +0 -46
  214. package/src/utils/suggester-workers/commons-tokenizer/create-tokenizer.js +0 -103
  215. package/src/utils/suggester-workers/commons-tokenizer/filter-accents-to-lower.js +0 -9
  216. package/src/utils/suggester-workers/commons-tokenizer/filter-synonyms.js +0 -10
  217. package/src/utils/suggester-workers/query-parser/query-parser-soft.js +0 -7
  218. package/src/utils/suggester-workers/query-parser/query-parser-tokenized.js +0 -31
  219. package/src/utils/suggester-workers/query-parser/query-parser-tokenized.spec.js +0 -32
@@ -1,121 +1,127 @@
1
- import React, { useReducer, useEffect } from 'react';
2
- import PropTypes from 'prop-types';
3
- import {
4
- reducer,
5
- INITIAL_STATE,
6
- SuggesterContext,
7
- actions,
8
- } from './state-management';
9
- import { Suggester } from './components';
10
- import DefaultLabelRenderer from './components/selection/default-label-renderer';
11
- import { DefaultOptionRenderer } from './components';
12
- import './default-style.scss';
13
-
14
- function getSearch(search, value) {
15
- if (search && search.length) {
16
- return search;
17
- }
18
- return value;
19
- }
20
-
21
- function SuggesterWrapper({
22
- id,
23
- className,
24
- version,
25
- labelledBy,
26
- placeholderList,
27
- optionRenderer,
28
- onSelect,
29
- searching,
30
- labelRenderer,
31
- disabled,
32
- value,
33
- }) {
34
- const [state, dispatch] = useReducer(reducer, INITIAL_STATE);
35
- const { search, selectedIndex, options } = state;
36
-
37
- useEffect(
38
- function () {
39
- async function doIt() {
40
- try {
41
- const what = getSearch(search, value);
42
- if (what && typeof searching === 'function') {
43
- const { results, search: old } = await searching(what);
44
- dispatch(actions.onUpdateOptions(results, old));
45
- } else {
46
- dispatch(actions.onDeleteSearch());
47
- }
48
- } catch (e) {
49
- console.error(e);
50
- dispatch(actions.onError('Une erreur est survenue.'));
51
- }
52
- }
53
- doIt();
54
- },
55
- [search, searching, value]
56
- );
57
-
58
- useEffect(
59
- function () {
60
- if (selectedIndex !== undefined) {
61
- onSelect(options[selectedIndex], selectedIndex);
62
- }
63
- },
64
- [selectedIndex, onSelect, options]
65
- );
66
-
67
- useEffect(
68
- function () {
69
- dispatch(actions.onInit({ id, disabled, value }));
70
- },
71
- [id, disabled, value]
72
- );
73
-
74
- return (
75
- <SuggesterContext.Provider value={[state, dispatch]}>
76
- <Suggester
77
- className={className}
78
- placeholderList={placeholderList}
79
- version={version}
80
- labelledBy={labelledBy}
81
- optionRenderer={optionRenderer}
82
- labelRenderer={labelRenderer}
83
- onSelect={onSelect}
84
- value={value}
85
- />
86
- </SuggesterContext.Provider>
87
- );
88
- }
89
-
90
- SuggesterWrapper.propTypes = {
91
- id: PropTypes.string,
92
- className: PropTypes.string,
93
- placeholderList: PropTypes.string,
94
- labelledBy: PropTypes.string,
95
- optionRenderer: PropTypes.func,
96
- labelRenderer: PropTypes.func,
97
- onSelect: PropTypes.func,
98
- storeInfo: PropTypes.object,
99
- value: PropTypes.oneOfType([
100
- PropTypes.string,
101
- PropTypes.number,
102
- PropTypes.bool,
103
- PropTypes.object,
104
- ]),
105
- searching: PropTypes.func,
106
- };
107
-
108
- SuggesterWrapper.defaultProps = {
109
- id: undefined,
110
- className: 'lunatic-suggester-default-style',
111
- labelledBy: undefined,
112
- placeholderList: 'Veuillez...',
113
- optionRenderer: DefaultOptionRenderer,
114
- labelRenderer: DefaultLabelRenderer,
115
- language: 'French',
116
- onSelect: () => null,
117
- value: undefined,
118
- searching: undefined,
119
- };
120
-
121
- export default SuggesterWrapper;
1
+ import React, { useReducer, useEffect } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import {
4
+ reducer,
5
+ INITIAL_STATE,
6
+ SuggesterContext,
7
+ actions,
8
+ } from './state-management';
9
+ import { Suggester } from './components';
10
+ import DefaultLabelRenderer from './components/selection/default-label-renderer';
11
+ import { DefaultOptionRenderer } from './components';
12
+ import './default-style.scss';
13
+
14
+ function getSearch(search, value) {
15
+ if (search && search.length) {
16
+ return search;
17
+ }
18
+ return value;
19
+ }
20
+
21
+ function SuggesterWrapper({
22
+ id,
23
+ className,
24
+ version,
25
+ labelledBy,
26
+ placeholderList,
27
+ optionRenderer,
28
+ onSelect,
29
+ searching,
30
+ labelRenderer,
31
+ disabled,
32
+ value,
33
+ focused,
34
+ response,
35
+ logFunction,
36
+ }) {
37
+ const [state, dispatch] = useReducer(reducer, INITIAL_STATE);
38
+ const { search, selectedIndex, options, expended } = state;
39
+
40
+ useEffect(
41
+ function () {
42
+ async function doIt() {
43
+ try {
44
+ const what = getSearch(search, value);
45
+ if (what && typeof searching === 'function') {
46
+ const { results, search: old } = await searching(what);
47
+ dispatch(actions.onUpdateOptions(results, old));
48
+ } else {
49
+ dispatch(actions.onDeleteSearch());
50
+ }
51
+ } catch (e) {
52
+ console.error(e);
53
+ dispatch(actions.onError('Une erreur est survenue.'));
54
+ }
55
+ }
56
+ doIt();
57
+ },
58
+ [search, searching, value]
59
+ );
60
+
61
+ useEffect(
62
+ function () {
63
+ if (selectedIndex !== undefined && !expended) {
64
+ onSelect(options[selectedIndex], selectedIndex);
65
+ }
66
+ },
67
+ [selectedIndex, onSelect, options, expended]
68
+ );
69
+
70
+ useEffect(
71
+ function () {
72
+ dispatch(actions.onInit({ id, disabled, value }));
73
+ },
74
+ [id, disabled, value]
75
+ );
76
+
77
+ return (
78
+ <SuggesterContext.Provider value={[state, dispatch]}>
79
+ <Suggester
80
+ className={className}
81
+ placeholderList={placeholderList}
82
+ version={version}
83
+ labelledBy={labelledBy}
84
+ optionRenderer={optionRenderer}
85
+ labelRenderer={labelRenderer}
86
+ onSelect={onSelect}
87
+ value={value}
88
+ focused={focused}
89
+ response={response}
90
+ logFunction={logFunction}
91
+ />
92
+ </SuggesterContext.Provider>
93
+ );
94
+ }
95
+
96
+ SuggesterWrapper.propTypes = {
97
+ id: PropTypes.string,
98
+ className: PropTypes.string,
99
+ placeholderList: PropTypes.string,
100
+ labelledBy: PropTypes.string,
101
+ optionRenderer: PropTypes.func,
102
+ labelRenderer: PropTypes.func,
103
+ onSelect: PropTypes.func,
104
+ storeInfo: PropTypes.object,
105
+ value: PropTypes.oneOfType([
106
+ PropTypes.string,
107
+ PropTypes.number,
108
+ PropTypes.bool,
109
+ PropTypes.object,
110
+ ]),
111
+ searching: PropTypes.func,
112
+ };
113
+
114
+ SuggesterWrapper.defaultProps = {
115
+ id: undefined,
116
+ className: 'lunatic-suggester-default-style',
117
+ labelledBy: undefined,
118
+ placeholderList: 'Veuillez...',
119
+ optionRenderer: DefaultOptionRenderer,
120
+ labelRenderer: DefaultLabelRenderer,
121
+ language: 'French',
122
+ onSelect: () => null,
123
+ value: undefined,
124
+ searching: undefined,
125
+ };
126
+
127
+ export default SuggesterWrapper;
@@ -1,67 +1,67 @@
1
- import React, { useEffect, useState } from 'react';
2
- import { createAppendTask } from '../../utils/suggester-workers/append-to-index';
3
- import Progress from './progress';
4
- import { clearStoreData } from '../../utils/store-tools';
5
-
6
- function empty() {}
7
-
8
- function Loader({ start, db, store, idbVersion, fetch, post, handleClick }) {
9
- const [progress, setProgress] = useState(0);
10
- const [entities, setEntities] = useState(undefined);
11
-
12
- useEffect(
13
- function () {
14
- async function load() {
15
- if (typeof fetch === 'function' && start) {
16
- const e = await fetch();
17
- setEntities(e);
18
- }
19
- }
20
- load();
21
- },
22
- [fetch, start]
23
- );
24
-
25
- function log({ message }) {
26
- const { type, percent } = message;
27
- if (type === 'bulk-insert/complete') {
28
- setProgress(percent);
29
- }
30
- }
31
-
32
- useEffect(
33
- function () {
34
- let abort;
35
- async function go() {
36
- try {
37
- if (entities && db && idbVersion && store) {
38
- const [startT, abort_] = createAppendTask(store, idbVersion, log);
39
- abort = abort_;
40
- clearStoreData(db);
41
- await startT(entities);
42
- post(store.name, entities.length);
43
- }
44
- } catch (e) {
45
- console.warn(e);
46
- }
47
- }
48
-
49
- go();
50
-
51
- return function () {
52
- if (abort) {
53
- abort();
54
- }
55
- };
56
- },
57
- [store, db, entities, idbVersion, post]
58
- );
59
-
60
- return (
61
- <Progress percent={progress} display={true} handleClick={handleClick} />
62
- );
63
- }
64
-
65
- Loader.defaultProps = { idbVersion: '1', post: empty, handleClick: empty };
66
-
67
- export default Loader;
1
+ import React, { useEffect, useState } from 'react';
2
+ import { createAppendTask } from '../../utils/suggester-workers/append-to-index';
3
+ import Progress from './progress';
4
+ import { clearStoreData } from '../../utils/store-tools';
5
+
6
+ function empty() {}
7
+
8
+ function Loader({ start, db, store, idbVersion, fetch, post, handleClick }) {
9
+ const [progress, setProgress] = useState(0);
10
+ const [entities, setEntities] = useState(undefined);
11
+
12
+ useEffect(
13
+ function () {
14
+ async function load() {
15
+ if (typeof fetch === 'function' && start) {
16
+ const e = await fetch();
17
+ setEntities(e);
18
+ }
19
+ }
20
+ load();
21
+ },
22
+ [fetch, start]
23
+ );
24
+
25
+ function log({ message }) {
26
+ const { type, percent } = message;
27
+ if (type === 'bulk-insert/complete') {
28
+ setProgress(percent);
29
+ }
30
+ }
31
+
32
+ useEffect(
33
+ function () {
34
+ let abort;
35
+ async function go() {
36
+ try {
37
+ if (entities && db && idbVersion && store) {
38
+ const [startT, abort_] = createAppendTask(store, idbVersion, log);
39
+ abort = abort_;
40
+ clearStoreData(db);
41
+ await startT(entities);
42
+ post(store.name, entities.length);
43
+ }
44
+ } catch (e) {
45
+ console.warn(e);
46
+ }
47
+ }
48
+
49
+ go();
50
+
51
+ return function () {
52
+ if (abort) {
53
+ abort();
54
+ }
55
+ };
56
+ },
57
+ [store, db, entities, idbVersion, post]
58
+ );
59
+
60
+ return (
61
+ <Progress percent={progress} display={true} handleClick={handleClick} />
62
+ );
63
+ }
64
+
65
+ Loader.defaultProps = { idbVersion: '1', post: empty, handleClick: empty };
66
+
67
+ export default Loader;
@@ -1,123 +1,123 @@
1
- import React, { useEffect, useState, useCallback, useRef } from 'react';
2
- import PropTypes from 'prop-types';
3
- import classnames from 'classnames';
4
- import LoaderRow from './loader-row';
5
- import { Tools, ActionTool } from './tools';
6
- import { IsNetwork } from '../../utils/components/is-network';
7
- import WidgetContainer from './widget-container';
8
- import Dragger from '../../utils/components/dragger';
9
- import OnDragIcon from '../../utils/icons/on-drag.icon';
10
- import './widget.scss';
11
-
12
- function empty() {}
13
-
14
- function SuggesterLoaderWidget({ source, getStoreInfo, onRefresh, absolute }) {
15
- const { suggesters } = source;
16
- const containerEl = useRef();
17
- const { current } = containerEl;
18
- const [stores, setStores] = useState(undefined);
19
- const [rows, setRows] = useState([]);
20
- const [disabled, setDisabled] = useState(false);
21
- const [drag, setDrag] = useState(false);
22
-
23
- useEffect(
24
- function () {
25
- if (suggesters) {
26
- const str = suggesters.reduce(function (current, storeInfo) {
27
- const { name } = storeInfo;
28
-
29
- return { ...current, [name]: { storeInfo, ...getStoreInfo(name) } };
30
- }, {});
31
-
32
- setStores(str);
33
- }
34
- },
35
- [suggesters, getStoreInfo]
36
- );
37
-
38
- const notify = useCallback(function (online) {
39
- setDisabled(!online);
40
- }, []);
41
-
42
- const onDrag = useCallback(
43
- function (status) {
44
- if (!drag && status) {
45
- setDrag(true);
46
- } else if (drag && !status) {
47
- setDrag(false);
48
- }
49
- },
50
- [drag]
51
- );
52
-
53
- useEffect(
54
- function () {
55
- if (stores) {
56
- setRows(
57
- Object.entries(stores).map(function ([
58
- name,
59
- { storeInfo, idbVersion, fetch: fetchStore },
60
- ]) {
61
- return (
62
- <LoaderRow
63
- key={name}
64
- storeInfo={storeInfo}
65
- idbVersion={idbVersion}
66
- fetchStore={fetchStore}
67
- onRefresh={onRefresh}
68
- disabled={disabled}
69
- />
70
- );
71
- })
72
- );
73
- }
74
- },
75
- [stores, disabled, onRefresh]
76
- );
77
-
78
- useEffect(
79
- function () {
80
- if (current && absolute) {
81
- current.style.top = '30px';
82
- current.style.left = '30px';
83
- }
84
- },
85
- [current, absolute]
86
- );
87
-
88
- return (
89
- <WidgetContainer ref={containerEl} drag={drag} absolute={absolute}>
90
- <Tools>
91
- <ActionTool
92
- className={classnames('', { drag })}
93
- ariaLabel="drag"
94
- display={absolute}
95
- title="drag"
96
- >
97
- <Dragger el={current} onDrag={onDrag}>
98
- <OnDragIcon className={classnames('on-drag-icon', { drag })} />
99
- </Dragger>
100
- </ActionTool>
101
- </Tools>
102
- <IsNetwork
103
- className={classnames('suggester-widget-network', { drag })}
104
- notify={notify}
105
- />
106
- {rows}
107
- </WidgetContainer>
108
- );
109
- }
110
-
111
- SuggesterLoaderWidget.propTypes = {
112
- absolute: PropTypes.bool,
113
- source: PropTypes.object.isRequired,
114
- getStoreInfo: PropTypes.func.isRequired,
115
- onRefresh: PropTypes.func,
116
- };
117
-
118
- SuggesterLoaderWidget.defaultProps = {
119
- onRefresh: empty,
120
- absolute: false,
121
- };
122
-
123
- export default SuggesterLoaderWidget;
1
+ import React, { useEffect, useState, useCallback, useRef } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import classnames from 'classnames';
4
+ import LoaderRow from './loader-row';
5
+ import { Tools, ActionTool } from './tools';
6
+ import { IsNetwork } from '../../utils/components/is-network';
7
+ import WidgetContainer from './widget-container';
8
+ import Dragger from '../../utils/components/dragger';
9
+ import OnDragIcon from '../../utils/icons/on-drag.icon';
10
+ import './widget.scss';
11
+
12
+ function empty() {}
13
+
14
+ function SuggesterLoaderWidget({ source, getStoreInfo, onRefresh, absolute }) {
15
+ const { suggesters } = source;
16
+ const containerEl = useRef();
17
+ const { current } = containerEl;
18
+ const [stores, setStores] = useState(undefined);
19
+ const [rows, setRows] = useState([]);
20
+ const [disabled, setDisabled] = useState(false);
21
+ const [drag, setDrag] = useState(false);
22
+
23
+ useEffect(
24
+ function () {
25
+ if (suggesters) {
26
+ const str = suggesters.reduce(function (current, storeInfo) {
27
+ const { name } = storeInfo;
28
+
29
+ return { ...current, [name]: { storeInfo, ...getStoreInfo(name) } };
30
+ }, {});
31
+
32
+ setStores(str);
33
+ }
34
+ },
35
+ [suggesters, getStoreInfo]
36
+ );
37
+
38
+ const notify = useCallback(function (online) {
39
+ setDisabled(!online);
40
+ }, []);
41
+
42
+ const onDrag = useCallback(
43
+ function (status) {
44
+ if (!drag && status) {
45
+ setDrag(true);
46
+ } else if (drag && !status) {
47
+ setDrag(false);
48
+ }
49
+ },
50
+ [drag]
51
+ );
52
+
53
+ useEffect(
54
+ function () {
55
+ if (stores) {
56
+ setRows(
57
+ Object.entries(stores).map(function ([
58
+ name,
59
+ { storeInfo, idbVersion, fetch: fetchStore },
60
+ ]) {
61
+ return (
62
+ <LoaderRow
63
+ key={name}
64
+ storeInfo={storeInfo}
65
+ idbVersion={idbVersion}
66
+ fetchStore={fetchStore}
67
+ onRefresh={onRefresh}
68
+ disabled={disabled}
69
+ />
70
+ );
71
+ })
72
+ );
73
+ }
74
+ },
75
+ [stores, disabled, onRefresh]
76
+ );
77
+
78
+ useEffect(
79
+ function () {
80
+ if (current && absolute) {
81
+ current.style.top = '30px';
82
+ current.style.left = '30px';
83
+ }
84
+ },
85
+ [current, absolute]
86
+ );
87
+
88
+ return (
89
+ <WidgetContainer ref={containerEl} drag={drag} absolute={absolute}>
90
+ <Tools>
91
+ <ActionTool
92
+ className={classnames('', { drag })}
93
+ ariaLabel="drag"
94
+ display={absolute}
95
+ title="drag"
96
+ >
97
+ <Dragger el={current} onDrag={onDrag}>
98
+ <OnDragIcon className={classnames('on-drag-icon', { drag })} />
99
+ </Dragger>
100
+ </ActionTool>
101
+ </Tools>
102
+ <IsNetwork
103
+ className={classnames('suggester-widget-network', { drag })}
104
+ notify={notify}
105
+ />
106
+ {rows}
107
+ </WidgetContainer>
108
+ );
109
+ }
110
+
111
+ SuggesterLoaderWidget.propTypes = {
112
+ absolute: PropTypes.bool,
113
+ source: PropTypes.object.isRequired,
114
+ getStoreInfo: PropTypes.func.isRequired,
115
+ onRefresh: PropTypes.func,
116
+ };
117
+
118
+ SuggesterLoaderWidget.defaultProps = {
119
+ onRefresh: empty,
120
+ absolute: false,
121
+ };
122
+
123
+ export default SuggesterLoaderWidget;