@legalplace/wizardx-core 2.6.4 → 2.7.1

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 (348) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/dist/App.js +13 -4
  3. package/dist/PluginLoader.d.ts +3 -1
  4. package/dist/PluginLoader.js +12 -0
  5. package/dist/ThemeLoader.d.ts +2 -2
  6. package/dist/components/SmartScript.d.ts +2 -2
  7. package/dist/components/SmartScript.js +2 -0
  8. package/dist/componentsConnectors/connectBox.d.ts +3 -1
  9. package/dist/componentsConnectors/connectDocument.d.ts +3 -1
  10. package/dist/componentsConnectors/connectHeader.d.ts +3 -1
  11. package/dist/componentsConnectors/connectMetaTitle.d.ts +3 -1
  12. package/dist/componentsConnectors/connectOption.d.ts +6 -2
  13. package/dist/componentsConnectors/connectOption.js +1 -1
  14. package/dist/componentsConnectors/connectPagination.d.ts +3 -1
  15. package/dist/componentsConnectors/connectPreview.d.ts +3 -1
  16. package/dist/componentsConnectors/connectProgress.d.ts +3 -1
  17. package/dist/componentsConnectors/connectRootOption.d.ts +3 -1
  18. package/dist/componentsConnectors/connectSection.d.ts +3 -1
  19. package/dist/componentsConnectors/connectSection.js +7 -10
  20. package/dist/componentsConnectors/connectSummary.d.ts +3 -1
  21. package/dist/componentsConnectors/connectSummaryItem.d.ts +3 -1
  22. package/dist/componentsConnectors/connectVariable.d.ts +6 -2
  23. package/dist/componentsConnectors/connectVariable.js +1 -1
  24. package/dist/componentsConnectors/connectWizardWrapper.d.ts +3 -1
  25. package/dist/componentsConnectors/connector/componentConnector.d.ts +5 -1
  26. package/dist/componentsConnectors/connector/componentConnector.js +43 -4
  27. package/dist/componentsConnectors/connector/index.d.ts +1 -0
  28. package/dist/componentsConnectors/connector/index.js +1 -0
  29. package/dist/componentsConnectors/index.d.ts +17 -0
  30. package/dist/componentsConnectors/index.js +17 -0
  31. package/dist/componentsConnectors/library.d.ts +43 -15
  32. package/dist/helpers/apiEndpoint.d.ts +1 -0
  33. package/dist/helpers/apiEndpoint.js +4 -0
  34. package/dist/helpers/index.d.ts +4 -0
  35. package/dist/helpers/index.js +4 -0
  36. package/dist/helpers/propsEqualityCheck.d.ts +1 -0
  37. package/dist/helpers/propsEqualityCheck.js +10 -0
  38. package/dist/hooks/index.d.ts +4 -0
  39. package/dist/hooks/index.js +4 -0
  40. package/dist/hooks/useActions.d.ts +2 -0
  41. package/dist/hooks/useActions.js +4 -0
  42. package/dist/hooks/useDispatch.d.ts +1 -0
  43. package/dist/hooks/useDispatch.js +4 -0
  44. package/dist/hooks/useSelectors.d.ts +2 -0
  45. package/dist/hooks/useSelectors.js +4 -0
  46. package/dist/index.d.ts +13 -0
  47. package/dist/index.js +13 -0
  48. package/dist/libs/PathReader.d.ts +10 -6
  49. package/dist/libs/PathReader.js +47 -28
  50. package/dist/libs/index.d.ts +5 -0
  51. package/dist/libs/index.js +5 -0
  52. package/dist/redux/actions/index.d.ts +9 -0
  53. package/dist/redux/actions/index.js +9 -0
  54. package/dist/redux/actions/library.d.ts +59 -63
  55. package/dist/redux/actions/sagas/index.d.ts +3 -0
  56. package/dist/redux/actions/sagas/index.js +3 -0
  57. package/dist/redux/actions/sagas/model.d.ts +1 -5
  58. package/dist/redux/constants/app.d.ts +2 -0
  59. package/dist/redux/constants/app.js +2 -0
  60. package/dist/redux/constants/index.d.ts +8 -0
  61. package/dist/redux/constants/index.js +8 -0
  62. package/dist/redux/constants/sagas/index.d.ts +3 -0
  63. package/dist/redux/constants/sagas/index.js +3 -0
  64. package/dist/redux/index.d.ts +5 -0
  65. package/dist/redux/index.js +5 -0
  66. package/dist/redux/middlewares/conditionsWatcherMiddleware.js +11 -5
  67. package/dist/redux/middlewares/conditionsWatcherMiddleware.test.js +120 -113
  68. package/dist/redux/middlewares/paginationWatcherMiddleware.js +2 -2
  69. package/dist/redux/middlewares/smartscriptMiddleware.js +8 -0
  70. package/dist/redux/reducers/pluginsStore.d.ts +3 -0
  71. package/dist/redux/reducers/pluginsStore.js +12 -0
  72. package/dist/redux/routerHistory.js +2 -2
  73. package/dist/redux/sagas/fetchModel.js +22 -6
  74. package/dist/redux/sagas/initInputs.js +6 -7
  75. package/dist/redux/sagas/saveData.js +2 -0
  76. package/dist/redux/selectors/app.js +13 -18
  77. package/dist/redux/selectors/cache.d.ts +17 -0
  78. package/dist/redux/selectors/cache.js +35 -0
  79. package/dist/redux/selectors/conditions.js +7 -7
  80. package/dist/redux/selectors/index.d.ts +8 -0
  81. package/dist/redux/selectors/index.js +8 -0
  82. package/dist/redux/selectors/inputs.js +3 -3
  83. package/dist/redux/selectors/library.d.ts +2 -2
  84. package/dist/redux/selectors/references.js +26 -26
  85. package/dist/redux/selectors/selectors.d.ts +2 -2
  86. package/dist/redux/selectors/selectors.js +19 -8
  87. package/dist/redux/selectors/selectors.test.js +6 -6
  88. package/dist/redux/selectors/user.js +5 -5
  89. package/dist/redux/store.d.ts +1 -1
  90. package/dist/redux/store.js +12 -4
  91. package/dist/service/api.manager.d.ts +1 -6
  92. package/dist/service/index.d.ts +3 -0
  93. package/dist/service/index.js +3 -0
  94. package/dist/types/PluginConfig.type.d.ts +57 -0
  95. package/dist/types/PluginConfig.type.js +1 -0
  96. package/dist/types/State.type.d.ts +6 -0
  97. package/dist/types/config.type.d.ts +3 -1
  98. package/dist/types/index.d.ts +11 -0
  99. package/dist/types/index.js +11 -0
  100. package/package.json +13 -13
  101. package/.depcheckrc +0 -1
  102. package/.eslintignore +0 -2
  103. package/.eslintrc +0 -5
  104. package/__mocks__/fileMock.js +0 -1
  105. package/babel.config.json +0 -3
  106. package/jest.config.ts +0 -193
  107. package/setupJest.ts +0 -8
  108. package/src/App.test.tsx +0 -41
  109. package/src/App.tsx +0 -152
  110. package/src/Globals.ts +0 -69
  111. package/src/Loader.tsx +0 -8
  112. package/src/PluginLoader.test.tsx +0 -70
  113. package/src/PluginLoader.tsx +0 -407
  114. package/src/Shimmer.tsx +0 -108
  115. package/src/ThemeLoader.test.tsx +0 -82
  116. package/src/ThemeLoader.tsx +0 -95
  117. package/src/components/PluginRoute.tsx +0 -48
  118. package/src/components/SmartScript.tsx +0 -166
  119. package/src/components/UserLocked/UserLockedComponent.tsx +0 -33
  120. package/src/components/View.test.tsx +0 -110
  121. package/src/components/View.tsx +0 -114
  122. package/src/componentsConnectors/connectBox.test.tsx +0 -226
  123. package/src/componentsConnectors/connectBox.tsx +0 -70
  124. package/src/componentsConnectors/connectDocument.test.tsx +0 -108
  125. package/src/componentsConnectors/connectDocument.tsx +0 -64
  126. package/src/componentsConnectors/connectHeader.tsx +0 -21
  127. package/src/componentsConnectors/connectMetaTitle.test.tsx +0 -40
  128. package/src/componentsConnectors/connectMetaTitle.tsx +0 -8
  129. package/src/componentsConnectors/connectOption.tsx +0 -222
  130. package/src/componentsConnectors/connectPagination.tsx +0 -102
  131. package/src/componentsConnectors/connectPreview.tsx +0 -5
  132. package/src/componentsConnectors/connectProgress.tsx +0 -59
  133. package/src/componentsConnectors/connectRootOption.tsx +0 -95
  134. package/src/componentsConnectors/connectSection.tsx +0 -79
  135. package/src/componentsConnectors/connectSummary.tsx +0 -21
  136. package/src/componentsConnectors/connectSummaryItem.tsx +0 -102
  137. package/src/componentsConnectors/connectTermsheet.tsx +0 -359
  138. package/src/componentsConnectors/connectVariable.tsx +0 -191
  139. package/src/componentsConnectors/connectWizardWrapper.tsx +0 -30
  140. package/src/componentsConnectors/connector/componentConnector.tsx +0 -219
  141. package/src/componentsConnectors/library.ts +0 -35
  142. package/src/config.test.ts +0 -63
  143. package/src/config.ts +0 -11
  144. package/src/constants/emailValidation.ts +0 -2
  145. package/src/constants/phoneValidation.ts +0 -4
  146. package/src/definitions/path.join.d.ts +0 -4
  147. package/src/helpers/outputsParsing.ts +0 -412
  148. package/src/helpers/preloadTheme.ts +0 -17
  149. package/src/helpers/scriptsLoader.ts +0 -20
  150. package/src/hooks/usePrevious.ts +0 -9
  151. package/src/libs/ConditionsInitiator.ts +0 -164
  152. package/src/libs/ConditionsRunner/DataPopulator.ts +0 -266
  153. package/src/libs/ConditionsRunner.ts +0 -454
  154. package/src/libs/DocumentsOutputs.ts +0 -171
  155. package/src/libs/Eval/EvalBase.ts +0 -116
  156. package/src/libs/Eval/EvalFunctions.ts +0 -724
  157. package/src/libs/Eval/NumbersToLetters.ts +0 -185
  158. package/src/libs/EvalVariable.ts +0 -265
  159. package/src/libs/EventsTracking.ts +0 -250
  160. package/src/libs/InputsInitiator.ts +0 -136
  161. package/src/libs/NumAuto.test.ts +0 -55
  162. package/src/libs/NumAuto.ts +0 -56
  163. package/src/libs/OvcConverter.ts +0 -285
  164. package/src/libs/PathReader.ts +0 -272
  165. package/src/libs/SectionValidity.test.ts +0 -146
  166. package/src/libs/SectionValidity.ts +0 -110
  167. package/src/libs/SmartScriptStore.ts +0 -492
  168. package/src/misc/test_model.ts +0 -14603
  169. package/src/misc/test_models/connectDocumen.testmodel.json +0 -178
  170. package/src/misc/test_models/setDefaults.testmodel.json +0 -279
  171. package/src/misc/test_models/testmodel.json +0 -1
  172. package/src/polyfills/index.ts +0 -5
  173. package/src/polyfills/objectValues.ts +0 -4
  174. package/src/polyfills/prepend.ts +0 -31
  175. package/src/polyfills/stringRepeat.ts +0 -44
  176. package/src/redux/actions/app.test.ts +0 -123
  177. package/src/redux/actions/app.ts +0 -249
  178. package/src/redux/actions/conditions.test.ts +0 -84
  179. package/src/redux/actions/conditions.ts +0 -135
  180. package/src/redux/actions/inputs.test.ts +0 -85
  181. package/src/redux/actions/inputs.ts +0 -111
  182. package/src/redux/actions/library.ts +0 -23
  183. package/src/redux/actions/mandatories.ts +0 -98
  184. package/src/redux/actions/references.test.ts +0 -48
  185. package/src/redux/actions/references.ts +0 -37
  186. package/src/redux/actions/sagas/data.test.ts +0 -11
  187. package/src/redux/actions/sagas/data.ts +0 -18
  188. package/src/redux/actions/sagas/model.test.ts +0 -14
  189. package/src/redux/actions/sagas/model.ts +0 -48
  190. package/src/redux/actions/sagas/user.ts +0 -25
  191. package/src/redux/actions/smartscript.ts +0 -55
  192. package/src/redux/actions/user.test.ts +0 -18
  193. package/src/redux/actions/user.ts +0 -41
  194. package/src/redux/constants/app.ts +0 -36
  195. package/src/redux/constants/conditions.ts +0 -25
  196. package/src/redux/constants/inputs.ts +0 -15
  197. package/src/redux/constants/mandatories.ts +0 -11
  198. package/src/redux/constants/references.ts +0 -7
  199. package/src/redux/constants/sagas/data.ts +0 -1
  200. package/src/redux/constants/sagas/model.ts +0 -2
  201. package/src/redux/constants/sagas/user.ts +0 -2
  202. package/src/redux/constants/smartscript.ts +0 -9
  203. package/src/redux/constants/user.ts +0 -6
  204. package/src/redux/listeners/subscriber.test.ts +0 -45
  205. package/src/redux/listeners/subscriber.ts +0 -29
  206. package/src/redux/middlewares/conditionsWatcherMiddleware.test.ts +0 -370
  207. package/src/redux/middlewares/conditionsWatcherMiddleware.ts +0 -321
  208. package/src/redux/middlewares/evaluationsWatcherMiddleware.test.ts +0 -323
  209. package/src/redux/middlewares/evaluationsWatcherMiddleware.ts +0 -250
  210. package/src/redux/middlewares/mandatoriesWatcherMiddleware.ts +0 -473
  211. package/src/redux/middlewares/multiplesActionsMiddleware.test.ts +0 -230
  212. package/src/redux/middlewares/multiplesActionsMiddleware.ts +0 -121
  213. package/src/redux/middlewares/paginationWatcherMiddleware.ts +0 -251
  214. package/src/redux/middlewares/pluginsHookMiddleware.ts +0 -24
  215. package/src/redux/middlewares/prefillerWatcherMiddleware.test.ts +0 -118
  216. package/src/redux/middlewares/prefillerWatcherMiddleware.ts +0 -462
  217. package/src/redux/middlewares/smartscriptMiddleware.ts +0 -228
  218. package/src/redux/middlewares/thirdpartyScriptsMiddleware.ts +0 -41
  219. package/src/redux/reducers/app/customizations/initCustomizationAutoDefault.ts +0 -16
  220. package/src/redux/reducers/app/customizations/initCustomizationMeta.ts +0 -16
  221. package/src/redux/reducers/app/instance/initInstance.ts +0 -29
  222. package/src/redux/reducers/app/instance/setDataStatus.ts +0 -16
  223. package/src/redux/reducers/app/instance/updateInstance.ts +0 -30
  224. package/src/redux/reducers/app/instance/updateInstancePaid.ts +0 -20
  225. package/src/redux/reducers/app/instance.test.ts +0 -106
  226. package/src/redux/reducers/app/meta/fetchModelFailed.ts +0 -11
  227. package/src/redux/reducers/app/meta/fetchModelNonBlocking.ts +0 -11
  228. package/src/redux/reducers/app/meta/fetchModelSucceeded.ts +0 -11
  229. package/src/redux/reducers/app/meta/fetchModelUnhealthy.ts +0 -18
  230. package/src/redux/reducers/app/meta/fetchModelUserLocked.ts +0 -11
  231. package/src/redux/reducers/app/meta/initMeta.ts +0 -22
  232. package/src/redux/reducers/app/meta/setModelUuid.ts +0 -17
  233. package/src/redux/reducers/app/meta.test.ts +0 -90
  234. package/src/redux/reducers/app/pagination/goNextPage.ts +0 -69
  235. package/src/redux/reducers/app/pagination/goPage.ts +0 -81
  236. package/src/redux/reducers/app/pagination/goPreviousPage.ts +0 -60
  237. package/src/redux/reducers/app/pagination/initPagination.ts +0 -46
  238. package/src/redux/reducers/app/pagination/updateAvailableAppStates.ts +0 -77
  239. package/src/redux/reducers/app/pagination.test.ts +0 -363
  240. package/src/redux/reducers/app/wizard/updateAvailableSections.ts +0 -40
  241. package/src/redux/reducers/app/wizard.test.ts +0 -84
  242. package/src/redux/reducers/app.test.ts +0 -336
  243. package/src/redux/reducers/app.ts +0 -150
  244. package/src/redux/reducers/conditions/addMultipleOccurency.test.ts +0 -131
  245. package/src/redux/reducers/conditions/addMultipleOccurency.ts +0 -155
  246. package/src/redux/reducers/conditions/deleteMultipleOccurency.test.ts +0 -95
  247. package/src/redux/reducers/conditions/deleteMultipleOccurency.ts +0 -141
  248. package/src/redux/reducers/conditions/initConditions.ts +0 -18
  249. package/src/redux/reducers/conditions/updateDocumentConditions.test.ts +0 -47
  250. package/src/redux/reducers/conditions/updateDocumentConditions.ts +0 -21
  251. package/src/redux/reducers/conditions/updateOptionConditions.ts +0 -24
  252. package/src/redux/reducers/conditions/updateOptionValidatorCondition.test.ts +0 -50
  253. package/src/redux/reducers/conditions/updateOptionValidatorCondition.ts +0 -28
  254. package/src/redux/reducers/conditions/updatePrefillerConditions.ts +0 -29
  255. package/src/redux/reducers/conditions/updateSectionConditions.ts +0 -28
  256. package/src/redux/reducers/conditions/updateVariableConditions.ts +0 -25
  257. package/src/redux/reducers/conditions/updateVariableValidatorCondition.test.ts +0 -50
  258. package/src/redux/reducers/conditions/updateVariableValidatorCondition.ts +0 -28
  259. package/src/redux/reducers/conditions.test.ts +0 -241
  260. package/src/redux/reducers/conditions.ts +0 -68
  261. package/src/redux/reducers/inputs/addMultipleOccurency.test.ts +0 -117
  262. package/src/redux/reducers/inputs/addMultipleOccurency.ts +0 -50
  263. package/src/redux/reducers/inputs/deleteMultipleOccurency.test.ts +0 -70
  264. package/src/redux/reducers/inputs/deleteMultipleOccurency.ts +0 -50
  265. package/src/redux/reducers/inputs/initOption.ts +0 -16
  266. package/src/redux/reducers/inputs/initVariable.ts +0 -16
  267. package/src/redux/reducers/inputs/updateOptionInput.ts +0 -24
  268. package/src/redux/reducers/inputs/updateVariableInput.ts +0 -24
  269. package/src/redux/reducers/inputs.test.ts +0 -221
  270. package/src/redux/reducers/inputs.ts +0 -51
  271. package/src/redux/reducers/mandatories/addMultipleOccurency.ts +0 -52
  272. package/src/redux/reducers/mandatories/deleteMultipleOccurency.ts +0 -55
  273. package/src/redux/reducers/mandatories/initMandatoryOption.ts +0 -17
  274. package/src/redux/reducers/mandatories/initMandatoryVariable.ts +0 -17
  275. package/src/redux/reducers/mandatories/setMandatoryIgnore.ts +0 -17
  276. package/src/redux/reducers/mandatories/setMandatoryOption.ts +0 -25
  277. package/src/redux/reducers/mandatories/setMandatorySection.ts +0 -20
  278. package/src/redux/reducers/mandatories/setMandatoryVariable.ts +0 -24
  279. package/src/redux/reducers/mandatories.ts +0 -56
  280. package/src/redux/reducers/references/initReferences.ts +0 -37
  281. package/src/redux/reducers/references/updateOptionMeta.ts +0 -73
  282. package/src/redux/reducers/references/updateVariableMeta.ts +0 -72
  283. package/src/redux/reducers/references.ts +0 -59
  284. package/src/redux/reducers/smartscript/enableSmartScript.ts +0 -13
  285. package/src/redux/reducers/smartscript/initSmartScriptTriggers.ts +0 -14
  286. package/src/redux/reducers/smartscript/updateSmartscriptOptionHidden.ts +0 -30
  287. package/src/redux/reducers/smartscript/updateSmartscriptVariableHidden.ts +0 -30
  288. package/src/redux/reducers/smartscript.ts +0 -47
  289. package/src/redux/reducers/user/initUser.ts +0 -15
  290. package/src/redux/reducers/user/setUserStatus.ts +0 -13
  291. package/src/redux/reducers/user/setUserValidToken.ts +0 -13
  292. package/src/redux/reducers/user.test.ts +0 -51
  293. package/src/redux/reducers/user.ts +0 -40
  294. package/src/redux/routerHistore.test.ts +0 -19
  295. package/src/redux/routerHistory.ts +0 -26
  296. package/src/redux/sagas/fetchModel.test.ts +0 -76
  297. package/src/redux/sagas/fetchModel.ts +0 -683
  298. package/src/redux/sagas/homogeneousRadioInputsSaga.ts +0 -42
  299. package/src/redux/sagas/initInputs.ts +0 -110
  300. package/src/redux/sagas/runner.test.ts +0 -12
  301. package/src/redux/sagas/runner.ts +0 -26
  302. package/src/redux/sagas/saveData.test.ts +0 -125
  303. package/src/redux/sagas/saveData.ts +0 -55
  304. package/src/redux/sagas/setDefaults.test.ts +0 -100
  305. package/src/redux/sagas/setDefaults.ts +0 -167
  306. package/src/redux/sagas/setUserEmail.ts +0 -175
  307. package/src/redux/selectors/app.test.ts +0 -162
  308. package/src/redux/selectors/app.ts +0 -331
  309. package/src/redux/selectors/conditions.test.ts +0 -92
  310. package/src/redux/selectors/conditions.ts +0 -293
  311. package/src/redux/selectors/inputs.test.ts +0 -72
  312. package/src/redux/selectors/inputs.ts +0 -76
  313. package/src/redux/selectors/library.ts +0 -17
  314. package/src/redux/selectors/mandatories.ts +0 -83
  315. package/src/redux/selectors/references.test.ts +0 -660
  316. package/src/redux/selectors/references.ts +0 -413
  317. package/src/redux/selectors/selectors.test.ts +0 -21
  318. package/src/redux/selectors/selectors.ts +0 -87
  319. package/src/redux/selectors/smartscript.ts +0 -30
  320. package/src/redux/selectors/user.test.ts +0 -39
  321. package/src/redux/selectors/user.ts +0 -45
  322. package/src/redux/store.test.ts +0 -22
  323. package/src/redux/store.ts +0 -100
  324. package/src/service/api.manager.ts +0 -261
  325. package/src/service/auth.service.ts +0 -5
  326. package/src/service/pardot.service.ts +0 -10
  327. package/src/tests-misc/plugins/jestTestPlugin/after.tsx +0 -5
  328. package/src/tests-misc/plugins/jestTestPlugin/before.tsx +0 -11
  329. package/src/tests-misc/plugins/jestTestPlugin/index.ts +0 -11
  330. package/src/tests-misc/plugins/jestTestPlugin/title.tsx +0 -8
  331. package/src/tests-misc/themes/jestTestTheme/components/EmailComponent.tsx +0 -5
  332. package/src/tests-misc/themes/jestTestTheme/components/TermsheetComponent.tsx +0 -5
  333. package/src/tests-misc/themes/jestTestTheme/components/WizardComponent.tsx +0 -5
  334. package/src/tests-misc/themes/jestTestTheme/faltyIndex.ts +0 -3
  335. package/src/tests-misc/themes/jestTestTheme/faltyIndexLoader.ts +0 -1
  336. package/src/tests-misc/themes/jestTestTheme/index.ts +0 -13
  337. package/src/types/Actions.type.ts +0 -612
  338. package/src/types/Components.type.ts +0 -181
  339. package/src/types/State.type.ts +0 -323
  340. package/src/types/Termsheet.type.ts +0 -28
  341. package/src/types/api.type.ts +0 -37
  342. package/src/types/config.type.ts +0 -55
  343. package/src/types/env.type.ts +0 -5
  344. package/src/types/getActions.type.ts +0 -3
  345. package/src/types/getConnectors.type.ts +0 -5
  346. package/src/types/getSelectors.type.ts +0 -3
  347. package/src/wizard-params.ts +0 -56
  348. package/tsconfig.json +0 -43
@@ -1,473 +0,0 @@
1
- import { Dispatch, MiddlewareAPI } from "redux";
2
- import {
3
- UPDATE_OPTION_INPUT,
4
- UPDATE_VARIABLE_INPUT,
5
- ADD_MULTIPLE_OCCURENCY,
6
- DELETE_MULTIPLE_OCCURENCY,
7
- } from "../constants/inputs";
8
- import {
9
- selectVariableInputByIndex,
10
- selectOptionInputByIndex,
11
- selectOptionInput,
12
- } from "../selectors/inputs";
13
- import { ActionsType } from "../../types/Actions.type";
14
- import {
15
- SET_MANDATORY_OPTION,
16
- SET_MANDATORY_VARIABLE,
17
- } from "../constants/mandatories";
18
- import {
19
- selectOptionRelations,
20
- selectOptionReference,
21
- selectSectionReference,
22
- selectVariableRelations,
23
- selectAllSectionsReferences,
24
- selectRadioSiblings,
25
- } from "../selectors/references";
26
- import {
27
- selectMandatoryOption,
28
- selectMandatoryVariable,
29
- } from "../selectors/mandatories";
30
- import { StateType } from "../../types/State.type";
31
- import {
32
- setMandatoryOptionAction,
33
- setMandatorySectionAction,
34
- setMandatoryVariableAction,
35
- } from "../actions/mandatories";
36
- import {
37
- UPDATE_OPTION_CONDITION,
38
- UPDATE_VARIABLE_CONDITION,
39
- UPDATE_SECTION_CONDITION,
40
- } from "../constants/conditions";
41
- import {
42
- selectOptionConditionValue,
43
- selectVariableConditionValue,
44
- selectIsOptionDisplayed,
45
- selectIsVariableDisplayed,
46
- } from "../selectors/conditions";
47
- import { FETCH_MODEL_SUCCEEDED } from "../constants/app";
48
-
49
- export type WatcherActions =
50
- | ActionsType.Inputs.updateOptionInput
51
- | ActionsType.Inputs.updateVariableInput
52
- | ActionsType.Inputs.addMultipleOccurency
53
- | ActionsType.Inputs.deleteMultipleOccurency
54
- | ActionsType.Mandatories.setMandatoryOption
55
- | ActionsType.Mandatories.setMandatoryVariable;
56
-
57
- /**
58
- * Validates section mandatory children
59
- * @param mpi Middleware API
60
- * @param sectionId Section's ID
61
- */
62
- const validateSectionMandatory = (
63
- mpi: MiddlewareAPI<Dispatch, StateType>,
64
- sectionId: number
65
- ) => {
66
- // Parent section
67
- const parentSection = selectSectionReference(sectionId);
68
-
69
- // Getting all child options
70
- let childOptions: number[] = [...parentSection.options];
71
- let childVariables: number[] = [];
72
- parentSection.options.forEach((childOptionId) => {
73
- // we will take all childs of the selected radio
74
- let childOptionSelectedId;
75
- let otherOptions: number[] = [];
76
- const childReferenceOption = selectOptionReference(childOptionId);
77
- childReferenceOption.options.forEach((subChildOptionId) => {
78
- const optionReference = selectOptionReference(subChildOptionId);
79
- const { type: optionType } = optionReference.meta;
80
- // searching for selected radio
81
- if (["radio"].includes(optionType)) {
82
- // Make sure it is a selected value.
83
- if (selectOptionInput(subChildOptionId).every((v) => v === true))
84
- childOptionSelectedId = subChildOptionId;
85
- } else {
86
- otherOptions = [...otherOptions, subChildOptionId];
87
- childVariables = [
88
- ...childVariables,
89
- ...selectOptionRelations(childOptionId).children.variables,
90
- ];
91
- }
92
- });
93
- // if there is childOptionSelected
94
- if (childOptionSelectedId) {
95
- const childRelations = selectOptionRelations(childOptionSelectedId);
96
- childOptions = [
97
- ...childOptions,
98
- childOptionSelectedId,
99
- ...childRelations.children.options,
100
- ...otherOptions,
101
- ];
102
- childVariables = [
103
- ...childVariables,
104
- ...childRelations.children.variables,
105
- ];
106
- } else {
107
- // Code of Moncef: Initialization related to relations of childOptionId
108
- const childRelations = selectOptionRelations(childOptionId);
109
- childOptions = [...childOptions, ...childRelations.children.options];
110
- childVariables = [
111
- ...childVariables,
112
- ...childRelations.children.variables,
113
- ];
114
- }
115
- });
116
-
117
- // Delete Duplication of variablesIds
118
- childVariables = childVariables.filter(
119
- (item, pos, self) => self.indexOf(item) === pos
120
- );
121
-
122
- // Filtring children with mandatory displayed children only
123
- childOptions = childOptions.filter((childId) =>
124
- Object.prototype.hasOwnProperty.call(
125
- mpi.getState().mandatories.options,
126
- childId
127
- )
128
- );
129
- childVariables = childVariables.filter((childId) =>
130
- Object.prototype.hasOwnProperty.call(
131
- mpi.getState().mandatories.variables,
132
- childId
133
- )
134
- );
135
- // Getting child options values
136
- const sectionOptionsValues = childOptions.reduce(
137
- (previousValue, currentOptionId) => {
138
- const currentOptionValue = selectMandatoryOption(currentOptionId)
139
- .map((value, index) => {
140
- const displayed = selectIsOptionDisplayed(currentOptionId, index);
141
- let result = !displayed || (displayed && value);
142
- // When its multiple case we need to take the value of sibling
143
- if (result === false) {
144
- const siblings = selectRadioSiblings(currentOptionId);
145
- if (siblings && siblings.length) {
146
- siblings.forEach((siblingOptionId) => {
147
- if (result === false) {
148
- if (childOptions.includes(siblingOptionId)) {
149
- const displayedSibling = selectIsOptionDisplayed(
150
- currentOptionId,
151
- index
152
- );
153
- const selectedSibling =
154
- selectOptionInput(siblingOptionId)[index];
155
-
156
- result =
157
- !displayedSibling ||
158
- (displayedSibling &&
159
- selectMandatoryOption(siblingOptionId)[index] &&
160
- selectedSibling);
161
- } else if (selectOptionInput(siblingOptionId)[index]) {
162
- result = true;
163
- }
164
- }
165
- });
166
- }
167
- }
168
- return result;
169
- })
170
- .every((v) => v === true);
171
-
172
- return previousValue && currentOptionValue;
173
- },
174
- true
175
- );
176
-
177
- // Getting child variables values
178
- const sectionVariablesValues = childVariables.reduce(
179
- (previousValue, currentVariableId) => {
180
- // Checking whether child option itself is
181
- const currentVariableValue = selectMandatoryVariable(currentVariableId)
182
- .map((value, index) => {
183
- const displayed = selectIsVariableDisplayed(currentVariableId, index);
184
- return !displayed || (displayed && value);
185
- })
186
- .every((v) => v === true);
187
-
188
- return previousValue && currentVariableValue;
189
- },
190
- true
191
- );
192
-
193
- // Determining section value
194
- const sectionValue = sectionOptionsValues && sectionVariablesValues;
195
-
196
- // Setting new section's value if changed
197
- if (mpi.getState().mandatories.sections[sectionId] !== sectionValue) {
198
- mpi.dispatch(setMandatorySectionAction(sectionId, sectionValue));
199
- }
200
- };
201
-
202
- /**
203
- * Watching:
204
- * ADD_MULTIPLE_OCCURENCY
205
- * DELETE_MULTIPLE_OCCURENCY
206
- * SET_MANDATORY_OPTION
207
- * SET_MANDATORY_VARIABLE
208
- * UPDATE_SECTION_CONDITION
209
- * UPDATE_OPTION_CONDITION
210
- * UPDATE_OPTION_INPUT
211
-
212
- * actions
213
- * @param mpi MiddlewareAPI
214
- * @param next Dispatch function
215
- * @param action Actions
216
- */
217
- const watchSectionMandatory = (
218
- mpi: MiddlewareAPI<Dispatch, StateType>,
219
- next: Dispatch,
220
- action:
221
- | ActionsType.Inputs.addMultipleOccurency
222
- | ActionsType.Inputs.deleteMultipleOccurency
223
- | ActionsType.Mandatories.setMandatoryOption
224
- | ActionsType.Mandatories.setMandatoryVariable
225
- | ActionsType.Conditions.updateSectionCondition
226
- | ActionsType.Conditions.updateOptionCondition
227
- | ActionsType.Inputs.updateOptionInput
228
- ) => {
229
- const { type, id } = action;
230
-
231
- // Executing action
232
- next(action);
233
- let sectionId: number | undefined = id;
234
- if (action.type !== UPDATE_SECTION_CONDITION) {
235
- // Determine if it's a variable
236
- const isVariable = [SET_MANDATORY_VARIABLE].includes(type);
237
-
238
- // Getting root parent
239
- const { parents } = isVariable
240
- ? selectVariableRelations(id)
241
- : selectOptionRelations(id);
242
- const rootParentId = parents.length > 0 ? parents[parents.length - 1] : id;
243
-
244
- // Getting section id
245
- sectionId = Object.keys(selectAllSectionsReferences() || {})
246
- .map((v) => parseInt(v, 10))
247
- .find((currentSectionId) =>
248
- selectSectionReference(currentSectionId).options.includes(rootParentId)
249
- );
250
-
251
- // If we can't find the parent section
252
- // we have a huge problem, let's stop here
253
- // if (sectionId === undefined)
254
- // throw new Error(
255
- // `Unable to find parent section for option ${id} (rootParent: ${rootParentId})`
256
- // );
257
- }
258
- if (sectionId !== undefined) validateSectionMandatory(mpi, sectionId);
259
- };
260
-
261
- /**
262
- * Watching UPDATE_VARIABLE_INPUT and UPDATE_VARIABLE_CONDITION actions
263
- * @param mpi MiddlewareAPI
264
- * @param next Dispatch function
265
- * @param action Actions
266
- */
267
- const watchUpdateVariableInputCondition = (
268
- mpi: MiddlewareAPI<Dispatch, StateType>,
269
- next: Dispatch,
270
- action:
271
- | ActionsType.Inputs.updateVariableInput
272
- | ActionsType.Conditions.updateVariableCondition,
273
- ignoreNext?: boolean
274
- ) => {
275
- const { type, id, index, value } = action;
276
-
277
- // Executing action, ignoring in case ignoreNext is true
278
- // ignoreNext is set to true when we're checking option's
279
- // decendants (Check watchUpdateOptionInputCondition)
280
- if (ignoreNext !== true) next(action);
281
-
282
- // Making sure variable is mandatory
283
- if (mpi.getState().mandatories.variables[id] === undefined) return;
284
-
285
- // Getting input value
286
- const inputValue =
287
- type === UPDATE_VARIABLE_INPUT
288
- ? `${value}`.trim().length > 0
289
- : `${selectVariableInputByIndex(id, index)}`.trim().length > 0;
290
-
291
- // Getting condition value
292
- const conditionValue =
293
- action.type === UPDATE_VARIABLE_CONDITION
294
- ? action.value
295
- : selectVariableConditionValue(id, index) !== false;
296
-
297
- // Mandatory value
298
- const mandatoryValue = !conditionValue || (conditionValue && inputValue);
299
-
300
- mpi.dispatch(setMandatoryVariableAction(id, index, mandatoryValue));
301
- };
302
-
303
- /**
304
- * Watching UPDATE_OPTION_INPUT and UPDATE_OPTION_CONDITION actions
305
- * @param mpi MiddlewareAPI
306
- * @param next Dispatch function
307
- * @param action Actions
308
- */
309
- const watchUpdateOptionInputCondition = (
310
- mpi: MiddlewareAPI<Dispatch, StateType>,
311
- next: Dispatch,
312
- action:
313
- | ActionsType.Inputs.updateOptionInput
314
- | ActionsType.Conditions.updateOptionCondition,
315
- ignoreNext?: boolean
316
- ) => {
317
- const { type, id, index, value } = action;
318
-
319
- // Executing next action
320
- if (ignoreNext !== true) next(action);
321
-
322
- // Getting option refence
323
- const optionReference = selectOptionReference(id);
324
- const { type: optionType } = optionReference.meta;
325
-
326
- // Excluding all options except radio & checkbox
327
- if (["radio", "checkbox"].includes(optionType)) {
328
- // Getting input value
329
- const inputValue =
330
- type === UPDATE_OPTION_INPUT
331
- ? value
332
- : selectOptionInputByIndex(id, index) === true;
333
-
334
- // Getting condition value
335
- const conditionValue =
336
- type === UPDATE_OPTION_CONDITION
337
- ? value
338
- : selectOptionConditionValue(id, index) !== false;
339
-
340
- // Mandatory value
341
- const mandatoryValue = !conditionValue || (conditionValue && inputValue);
342
-
343
- if (optionType === "radio") {
344
- // Getting option's parents
345
- const { parents } = selectOptionRelations(id);
346
-
347
- // radio get ParentId else id
348
- const [parentId] = parents;
349
-
350
- // Getting siblings reduced value
351
- const parentOption = selectOptionReference(parentId);
352
- const siblingsMandatoryValues = parentOption?.options
353
- ?.filter(
354
- (optionId) =>
355
- optionId !== id &&
356
- selectOptionReference(optionId).meta.type === "radio"
357
- )
358
- .map((optionId) => {
359
- // Getting input value
360
- const siblingInputValue =
361
- selectOptionInputByIndex(optionId, index) === true;
362
-
363
- // Getting condition value
364
- const siblingConditionValue =
365
- selectOptionConditionValue(id, index) !== false;
366
-
367
- return (
368
- !siblingConditionValue ||
369
- (siblingConditionValue && siblingInputValue)
370
- );
371
- });
372
-
373
- const hasTruthfullSibling = siblingsMandatoryValues?.includes(true);
374
-
375
- if (mpi.getState().mandatories.options[parentId] === undefined) return;
376
- mpi.dispatch(
377
- setMandatoryOptionAction(
378
- parentId,
379
- index,
380
- mandatoryValue || hasTruthfullSibling
381
- )
382
- );
383
- } else {
384
- // Checkbox Case
385
- if (mpi.getState().mandatories.options[id] === undefined) return;
386
- mpi.dispatch(setMandatoryOptionAction(id, index, mandatoryValue));
387
- }
388
- }
389
- // Checking Mandatories for direct children
390
- const { options, variables } = selectOptionReference(id);
391
- if (options && options.length) {
392
- options.forEach((optionId) => {
393
- watchUpdateOptionInputCondition(
394
- mpi,
395
- next,
396
- {
397
- type: UPDATE_OPTION_CONDITION,
398
- id: optionId,
399
- index,
400
- value: selectOptionConditionValue(optionId, index) !== false,
401
- },
402
- true
403
- );
404
- });
405
- }
406
- if (variables && variables.length) {
407
- variables.forEach((variableId) => {
408
- watchUpdateVariableInputCondition(
409
- mpi,
410
- next,
411
- {
412
- type: UPDATE_VARIABLE_CONDITION,
413
- id: variableId,
414
- index,
415
- value: selectVariableConditionValue(variableId, index) !== false,
416
- },
417
- true
418
- );
419
- });
420
- }
421
- };
422
-
423
- /**
424
- * Watching FETCH_MODEL_SUCCEEDED action
425
- * @param mpi MiddlewareAPI
426
- * @param next Dispatch function
427
- * @param action Actions
428
- */
429
- const watchFetchModelSucceeded = (
430
- mpi: MiddlewareAPI<Dispatch, StateType>,
431
- next: Dispatch,
432
- action: ActionsType.App.fetchModelSucceeded
433
- ) => {
434
- next(action);
435
-
436
- // Initiating mandatory sections
437
- Object.keys(selectAllSectionsReferences() || {}).forEach((id) => {
438
- validateSectionMandatory(mpi, parseInt(id, 10));
439
- });
440
- };
441
-
442
- // Enumerating watchers
443
- const watchersEnum: Record<
444
- string,
445
- (mpi: MiddlewareAPI<Dispatch, StateType>, next: Dispatch, action: any) => void
446
- > = {
447
- [UPDATE_OPTION_INPUT]: watchUpdateOptionInputCondition,
448
- [UPDATE_OPTION_CONDITION]: watchUpdateOptionInputCondition,
449
- [UPDATE_VARIABLE_INPUT]: watchUpdateVariableInputCondition,
450
- [UPDATE_VARIABLE_CONDITION]: watchUpdateVariableInputCondition,
451
- [ADD_MULTIPLE_OCCURENCY]: watchSectionMandatory,
452
- [DELETE_MULTIPLE_OCCURENCY]: watchSectionMandatory,
453
- [SET_MANDATORY_OPTION]: watchSectionMandatory,
454
- [SET_MANDATORY_VARIABLE]: watchSectionMandatory,
455
- [UPDATE_SECTION_CONDITION]: watchSectionMandatory,
456
- [FETCH_MODEL_SUCCEEDED]: watchFetchModelSucceeded,
457
- };
458
-
459
- /**
460
- * Condition Watcher Middleware
461
- * @param mpi MiddlewareAPI
462
- * @param next Dispatch function
463
- * @param action Actions
464
- */
465
- const mandatoriesWatcherMiddleware =
466
- (mpi: MiddlewareAPI) => (next: Dispatch) => (action: WatcherActions) => {
467
- if (Object.prototype.hasOwnProperty.call(watchersEnum, action.type)) {
468
- return watchersEnum[action.type].apply(null, [mpi, next, action]);
469
- }
470
- return next(action);
471
- };
472
-
473
- export default mandatoriesWatcherMiddleware;
@@ -1,230 +0,0 @@
1
- import multiplesActionsMiddleware from './multiplesActionsMiddleware';
2
- import {
3
- addMultipleOccurencyAction,
4
- deleteMultipleOccurencyAction,
5
- } from '../actions/inputs';
6
- import { StateType } from '../../types/State.type';
7
-
8
- // Mocking MPI
9
- const mpi = {
10
- dispatch: jest.fn(),
11
- getState: () => ({
12
- conditions: {
13
- prefillers: {
14
- '3': [[false, false, false]],
15
- },
16
- },
17
- }),
18
- };
19
-
20
- // Mocking Next
21
- const next = jest.fn();
22
-
23
- const mockVariablesReferences: StateType.References.Variables = {
24
- 3: {
25
- id: 3,
26
- label: 'Variable',
27
- type: 'textarea',
28
- step: '*',
29
- prefillings: [
30
- {
31
- value: 'Option 4 selected',
32
- conditions: {
33
- selected: [
34
- {
35
- var: 'o.4',
36
- },
37
- ],
38
- },
39
- },
40
- {
41
- value: 'Option 3 selected',
42
- conditions: {
43
- selected: [
44
- {
45
- var: 'o.3',
46
- },
47
- ],
48
- },
49
- },
50
- {
51
- value: 'Variable 1 = Hello',
52
- conditions: {
53
- contains: [
54
- {
55
- var: 'v.1',
56
- },
57
- 'Hello',
58
- ],
59
- },
60
- },
61
- ],
62
- },
63
- };
64
-
65
- const mockOptionsRelations: StateType.References.Relations['options'] = {
66
- 2: {
67
- options: [],
68
- variables: [],
69
- sections: {},
70
- documents: [],
71
- prefillers: [],
72
- validators: {
73
- options: [],
74
- variables: [],
75
- },
76
- parents: [],
77
- children: {
78
- options: [3, 4],
79
- variables: [2, 3],
80
- },
81
- dependants: [7, 8],
82
- },
83
- };
84
-
85
- const mockOptionsReferences: StateType.References.Options = {
86
- 2: {
87
- meta: {
88
- id: 2,
89
- type: 'static',
90
- label: 'Multiple question',
91
- step: '*',
92
- tags: [],
93
- defaultRadio: 4,
94
- multiple: {
95
- enabled: true,
96
- },
97
- validator: {},
98
- },
99
- options: [3, 4],
100
- variables: [2, 3],
101
- },
102
- 3: {
103
- meta: {
104
- id: 3,
105
- type: 'radio',
106
- label: 'Option 1',
107
- step: '*',
108
- tags: [],
109
- defaultRadio: 0,
110
- validator: {},
111
- },
112
- options: [],
113
- variables: [],
114
- },
115
- 4: {
116
- meta: {
117
- id: 4,
118
- type: 'radio',
119
- label: 'Option 2',
120
- step: '*',
121
- tags: [],
122
- defaultRadio: 0,
123
- validator: {},
124
- },
125
- options: [],
126
- variables: [],
127
- },
128
- 7: {
129
- meta: {
130
- id: 4,
131
- type: 'hidden',
132
- label: 'Option 2',
133
- step: '*',
134
- tags: [],
135
- defaultRadio: 0,
136
- validator: {},
137
- },
138
- options: [],
139
- variables: [],
140
- },
141
- 8: {
142
- meta: {
143
- id: 4,
144
- type: 'hidden',
145
- label: 'Option 2',
146
- step: '*',
147
- tags: [],
148
- defaultRadio: 0,
149
- validator: {},
150
- },
151
- options: [],
152
- variables: [],
153
- },
154
- };
155
-
156
- // Mocking reference selecteor
157
- // ../selectors/references.ts
158
- jest.mock('../selectors/references', () => ({
159
- __esModule: true,
160
- selectVariableReference: (id: number) => mockVariablesReferences[id],
161
- selectOptionRelations: (id: number) => mockOptionsRelations[id],
162
- selectOptionReference: (id: number) => mockOptionsReferences[id],
163
- }));
164
-
165
- describe('Prefillers Watcher Middleware Test suit', () => {
166
- beforeEach(() => {
167
- jest.clearAllMocks();
168
- });
169
-
170
- it('Completes ADD_MULTIPLE_OCCURENCY action correctly', () => {
171
- // Running watcher
172
- multiplesActionsMiddleware(mpi)(next)(addMultipleOccurencyAction(2));
173
-
174
- expect(next.mock.calls.length).toBe(1);
175
- expect(next.mock.calls[0][0]).toStrictEqual({
176
- type: 'ADD_MULTIPLE_OCCURENCY',
177
- id: 2,
178
- optionRelations: mockOptionsRelations[2],
179
- optionsReferences: mockOptionsReferences,
180
- prefillersVariables: {
181
- '3': [
182
- {
183
- value: 'Option 4 selected',
184
- conditions: {
185
- selected: [
186
- {
187
- var: 'o.4',
188
- },
189
- ],
190
- },
191
- },
192
- {
193
- value: 'Option 3 selected',
194
- conditions: {
195
- selected: [
196
- {
197
- var: 'o.3',
198
- },
199
- ],
200
- },
201
- },
202
- {
203
- value: 'Variable 1 = Hello',
204
- conditions: {
205
- contains: [
206
- {
207
- var: 'v.1',
208
- },
209
- 'Hello',
210
- ],
211
- },
212
- },
213
- ],
214
- },
215
- });
216
- });
217
-
218
- it('Completes DELETE_MULTIPLE_OCCURENCY action correctly', () => {
219
- // Running watcher
220
- multiplesActionsMiddleware(mpi)(next)(deleteMultipleOccurencyAction(2, 3));
221
-
222
- expect(next.mock.calls.length).toBe(1);
223
- expect(next.mock.calls[0][0]).toStrictEqual({
224
- type: 'DELETE_MULTIPLE_OCCURENCY',
225
- id: 2,
226
- index: 3,
227
- optionRelations: mockOptionsRelations[2],
228
- });
229
- });
230
- });