@wise/dynamic-flow-client 5.11.0 → 5.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/build/main.js +15 -1
  2. package/build/main.mjs +15 -1
  3. package/build/types/controller/executePoll.d.ts.map +1 -1
  4. package/package.json +1 -1
  5. package/build/DynamicFlowCore.js +0 -5
  6. package/build/common/errorBoundary/ErrorBoundary.js +0 -26
  7. package/build/common/errorBoundary/ErrorBoundary.test.js +0 -29
  8. package/build/common/errorBoundary/ErrorBoundaryAlert.js +0 -11
  9. package/build/common/makeHttpClient/api-utils.js +0 -3
  10. package/build/common/makeHttpClient/index.js +0 -1
  11. package/build/common/makeHttpClient/makeHttpClient.js +0 -10
  12. package/build/common/makeHttpClient/makeHttpClient.test.js +0 -186
  13. package/build/common/messages/external-confirmation.messages.js +0 -23
  14. package/build/common/messages/file-upload.messages.js +0 -13
  15. package/build/common/messages/generic-error.messages.js +0 -18
  16. package/build/common/messages/help.messages.js +0 -8
  17. package/build/common/messages/multi-file-upload.messages.js +0 -18
  18. package/build/common/messages/multi-select.messages.js +0 -8
  19. package/build/common/messages/paragraph.messages.js +0 -13
  20. package/build/common/messages/repeatable.messages.js +0 -23
  21. package/build/common/messages/search.messages.js +0 -8
  22. package/build/common/messages/validation.array.messages.js +0 -13
  23. package/build/common/messages/validation.messages.js +0 -53
  24. package/build/controller/FlowController.js +0 -373
  25. package/build/controller/executePoll.js +0 -49
  26. package/build/controller/executeRefresh.js +0 -45
  27. package/build/controller/executeRequest.js +0 -80
  28. package/build/controller/executeSubmission.js +0 -70
  29. package/build/controller/getErrorMessage.js +0 -7
  30. package/build/controller/getRequestAbortController.js +0 -13
  31. package/build/controller/getResponseType.js +0 -35
  32. package/build/controller/getSafeHttpClient.js +0 -8
  33. package/build/controller/getStepCounter.js +0 -16
  34. package/build/controller/handleErrorResponse.js +0 -26
  35. package/build/controller/makeSafeHttpClient.js +0 -8
  36. package/build/controller/response-utils.js +0 -72
  37. package/build/domain/components/AlertComponent.js +0 -1
  38. package/build/domain/components/AllOfComponent.js +0 -40
  39. package/build/domain/components/BooleanInputComponent.js +0 -50
  40. package/build/domain/components/BoxComponent.js +0 -3
  41. package/build/domain/components/ButtonComponent.js +0 -1
  42. package/build/domain/components/ColumnsComponent.js +0 -3
  43. package/build/domain/components/ConstComponent.js +0 -18
  44. package/build/domain/components/ContainerComponent.js +0 -3
  45. package/build/domain/components/DateInputComponent.js +0 -75
  46. package/build/domain/components/DecisionComponent.js +0 -1
  47. package/build/domain/components/DividerComponent.js +0 -1
  48. package/build/domain/components/FormComponent.js +0 -3
  49. package/build/domain/components/FormattedValueComponent.js +0 -44
  50. package/build/domain/components/HeadingComponent.js +0 -1
  51. package/build/domain/components/ImageComponent.js +0 -1
  52. package/build/domain/components/InstructionsComponent.js +0 -1
  53. package/build/domain/components/IntegerInputComponent.js +0 -74
  54. package/build/domain/components/ListComponent.js +0 -1
  55. package/build/domain/components/LoadingIndicatorComponent.js +0 -1
  56. package/build/domain/components/MarkdownComponent.js +0 -1
  57. package/build/domain/components/MediaComponent.js +0 -1
  58. package/build/domain/components/ModalComponent.js +0 -16
  59. package/build/domain/components/ModalLayoutComponent.js +0 -3
  60. package/build/domain/components/MoneyInputComponent.js +0 -57
  61. package/build/domain/components/MultiSelectInputComponent.js +0 -81
  62. package/build/domain/components/MultiUploadInputComponent.js +0 -88
  63. package/build/domain/components/NumberInputComponent.js +0 -73
  64. package/build/domain/components/ObjectComponent.js +0 -45
  65. package/build/domain/components/ParagraphComponent.js +0 -1
  66. package/build/domain/components/PersistAsyncComponent.js +0 -92
  67. package/build/domain/components/ProgressComponent.js +0 -1
  68. package/build/domain/components/RepeatableComponent.js +0 -103
  69. package/build/domain/components/ReviewComponent.js +0 -1
  70. package/build/domain/components/RootDomainComponent.js +0 -173
  71. package/build/domain/components/SectionComponent.js +0 -5
  72. package/build/domain/components/SelectInputComponent.js +0 -88
  73. package/build/domain/components/StatusListComponent.js +0 -1
  74. package/build/domain/components/SubflowDomainComponent.js +0 -9
  75. package/build/domain/components/TabsComponent.js +0 -1
  76. package/build/domain/components/TextInputComponent.js +0 -76
  77. package/build/domain/components/TupleComponent.js +0 -41
  78. package/build/domain/components/UploadInputComponent.js +0 -83
  79. package/build/domain/components/UpsellComponent.js +0 -25
  80. package/build/domain/components/searchComponent/SearchComponent.js +0 -92
  81. package/build/domain/components/searchComponent/SearchComponent.test.js +0 -190
  82. package/build/domain/components/step/ExternalConfirmationComponent.js +0 -24
  83. package/build/domain/components/step/StepDomainComponent.js +0 -78
  84. package/build/domain/components/step/ToolbarComponent.js +0 -1
  85. package/build/domain/components/utils/WithUpdate.js +0 -1
  86. package/build/domain/components/utils/component-utils.js +0 -12
  87. package/build/domain/components/utils/debounce.js +0 -34
  88. package/build/domain/components/utils/debounce.test.js +0 -67
  89. package/build/domain/components/utils/file-utils.js +0 -21
  90. package/build/domain/components/utils/file-utils.test.js +0 -27
  91. package/build/domain/components/utils/getRandomId.js +0 -1
  92. package/build/domain/components/utils/isExactLocalValueMatch.js +0 -14
  93. package/build/domain/components/utils/isOrWasValid.js +0 -5
  94. package/build/domain/components/utils/isPartialModelMatch.js +0 -18
  95. package/build/domain/components/utils/isPartialModelMatch.test.js +0 -74
  96. package/build/domain/features/eventNames.js +0 -24
  97. package/build/domain/features/events.js +0 -1
  98. package/build/domain/features/persistAsync/getComponentMultiPersistAsync.js +0 -50
  99. package/build/domain/features/persistAsync/getInitialPersistedState.js +0 -7
  100. package/build/domain/features/persistAsync/getPerformPersistAsync.js +0 -43
  101. package/build/domain/features/persistAsync/getPerformPersistAsync.test.js +0 -139
  102. package/build/domain/features/polling/getStepPolling.js +0 -43
  103. package/build/domain/features/polling/getStepPolling.test.js +0 -90
  104. package/build/domain/features/prefetch/getStepPrefetch.js +0 -43
  105. package/build/domain/features/prefetch/request-cache.js +0 -49
  106. package/build/domain/features/prefetch/request-cache.test.js +0 -70
  107. package/build/domain/features/refreshAfter/getStepRefreshAfter.js +0 -24
  108. package/build/domain/features/refreshAfter/getStepRefreshAfter.test.js +0 -40
  109. package/build/domain/features/schema-on-change/getDebouncedSchemaOnChange.js +0 -50
  110. package/build/domain/features/schema-on-change/getSchemaOnChange.js +0 -34
  111. package/build/domain/features/search/getPerformSearchFunction.js +0 -75
  112. package/build/domain/features/search/getPerformSearchFunction.test.js +0 -301
  113. package/build/domain/features/summary/summary-utils.js +0 -40
  114. package/build/domain/features/summary/summary-utils.test.js +0 -125
  115. package/build/domain/features/utils/http-utils.js +0 -21
  116. package/build/domain/features/utils/response-utils.js +0 -9
  117. package/build/domain/features/validation/spec-utils.js +0 -19
  118. package/build/domain/features/validation/validateStringPattern.js +0 -24
  119. package/build/domain/features/validation/validation-functions.js +0 -6
  120. package/build/domain/features/validation/validation-functions.test.js +0 -108
  121. package/build/domain/features/validation/value-checks.js +0 -125
  122. package/build/domain/features/validation/value-checks.test.js +0 -262
  123. package/build/domain/features/validationAsync/getComponentValidationAsync.js +0 -53
  124. package/build/domain/features/validationAsync/getComponentValidationAsync.test.js +0 -67
  125. package/build/domain/features/validationAsync/getInitialValidationAsyncState.js +0 -5
  126. package/build/domain/features/validationAsync/getPerformValidationAsync.js +0 -45
  127. package/build/domain/features/validationAsync/getPerformValidationAsync.test.js +0 -143
  128. package/build/domain/mappers/layout/alertLayoutToComponent.js +0 -16
  129. package/build/domain/mappers/layout/boxLayoutToComponent.js +0 -13
  130. package/build/domain/mappers/layout/buttonLayoutToComponent.js +0 -77
  131. package/build/domain/mappers/layout/columnsLayoutToComponent.js +0 -13
  132. package/build/domain/mappers/layout/decisionLayoutToComponent.js +0 -22
  133. package/build/domain/mappers/layout/deprecatedListLayoutToComponent.js +0 -30
  134. package/build/domain/mappers/layout/dividerLayoutToComponent.js +0 -2
  135. package/build/domain/mappers/layout/formLayoutToComponent.js +0 -19
  136. package/build/domain/mappers/layout/headingLayoutToComponent.js +0 -12
  137. package/build/domain/mappers/layout/imageLayoutToComponent.js +0 -20
  138. package/build/domain/mappers/layout/infoLayoutToComponent.js +0 -12
  139. package/build/domain/mappers/layout/instructionsLayoutToComponent.js +0 -12
  140. package/build/domain/mappers/layout/listLayoutToComponent.js +0 -39
  141. package/build/domain/mappers/layout/loadingIndicatorLayoutToComponent.js +0 -9
  142. package/build/domain/mappers/layout/markdownLayoutToComponent.js +0 -12
  143. package/build/domain/mappers/layout/mediaLayoutToComponent.js +0 -12
  144. package/build/domain/mappers/layout/modalLayoutToComponent.js +0 -17
  145. package/build/domain/mappers/layout/modalToComponent.js +0 -8
  146. package/build/domain/mappers/layout/paragraphLayoutToComponent.js +0 -12
  147. package/build/domain/mappers/layout/progressLayoutToComponent.js +0 -15
  148. package/build/domain/mappers/layout/reviewLayoutToComponent.js +0 -48
  149. package/build/domain/mappers/layout/searchLayoutToComponent.js +0 -44
  150. package/build/domain/mappers/layout/sectionLayoutToComponent.js +0 -15
  151. package/build/domain/mappers/layout/statusListLayoutToComponent.js +0 -15
  152. package/build/domain/mappers/layout/tabsLayoutToComponent.js +0 -16
  153. package/build/domain/mappers/layout/upsellLayoutToComponent.js +0 -25
  154. package/build/domain/mappers/mapLayoutToComponent.js +0 -81
  155. package/build/domain/mappers/mapSchemaToComponent.js +0 -61
  156. package/build/domain/mappers/mapSchemaToComponent.test.js +0 -112
  157. package/build/domain/mappers/mapStepSchemas.js +0 -15
  158. package/build/domain/mappers/mapStepToComponent.js +0 -133
  159. package/build/domain/mappers/mapStepToComponent.test.js +0 -221
  160. package/build/domain/mappers/mapToolbarToComponent.js +0 -15
  161. package/build/domain/mappers/schema/allOfSchemaToComponent.js +0 -16
  162. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToComponent.js +0 -26
  163. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiSelectComponent.js +0 -55
  164. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiUploadComponent.js +0 -67
  165. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToRepeatableComponent.js +0 -57
  166. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToTupleComponent.js +0 -20
  167. package/build/domain/mappers/schema/blobSchemaToComponent.js +0 -15
  168. package/build/domain/mappers/schema/booleanSchemaToComponent.js +0 -29
  169. package/build/domain/mappers/schema/constSchemaToComponent.js +0 -23
  170. package/build/domain/mappers/schema/integerSchemaToComponent.js +0 -28
  171. package/build/domain/mappers/schema/numberSchemaToComponent.js +0 -26
  172. package/build/domain/mappers/schema/objectSchemaToComponent/assertDisplayOrder.js +0 -23
  173. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToFormattedValueComponent.js +0 -9
  174. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToMoneyInputComponent.js +0 -119
  175. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToMoneyInputComponent.test.js +0 -96
  176. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToObjectComponent.js +0 -31
  177. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToObjectComponent.test.js +0 -99
  178. package/build/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.js +0 -66
  179. package/build/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.test.js +0 -225
  180. package/build/domain/mappers/schema/persistAsyncSchemaToComponent.js +0 -29
  181. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.js +0 -18
  182. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.test.js +0 -133
  183. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToDateInputComponent.js +0 -48
  184. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToTextInputComponent.js +0 -37
  185. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToUploadInputComponent.js +0 -28
  186. package/build/domain/mappers/schema/tests/test-utils.js +0 -16
  187. package/build/domain/mappers/schema/types.js +0 -1
  188. package/build/domain/mappers/schema/utils/getPerformPersistAsyncFn.js +0 -19
  189. package/build/domain/mappers/schema/utils/getValidationAsyncInitialState.js +0 -23
  190. package/build/domain/mappers/schema/utils/mapCommonSchemaProps.js +0 -16
  191. package/build/domain/mappers/types.js +0 -1
  192. package/build/domain/mappers/utils/FeatureFlags.js +0 -22
  193. package/build/domain/mappers/utils/behavior-utils.js +0 -44
  194. package/build/domain/mappers/utils/call-to-action-utils.js +0 -21
  195. package/build/domain/mappers/utils/getAutocompleteString.js +0 -76
  196. package/build/domain/mappers/utils/getAutocompleteString.test.js +0 -21
  197. package/build/domain/mappers/utils/groupLayoutByPinned.js +0 -38
  198. package/build/domain/mappers/utils/groupLayoutByPinned.test.js +0 -166
  199. package/build/domain/mappers/utils/image.js +0 -9
  200. package/build/domain/mappers/utils/layout-utils.js +0 -11
  201. package/build/domain/mappers/utils/legacy-utils.js +0 -49
  202. package/build/domain/mappers/utils/media-utils.js +0 -14
  203. package/build/domain/mappers/utils/suggestions-utils.js +0 -26
  204. package/build/domain/mappers/utils/suggestions-utils.test.js +0 -36
  205. package/build/domain/mappers/utils/tags-utils.js +0 -1
  206. package/build/domain/mappers/utils/utils.js +0 -35
  207. package/build/domain/types.js +0 -1
  208. package/build/getSubflowCallbacks.js +0 -38
  209. package/build/i18n/index.js +0 -40
  210. package/build/index.js +0 -8
  211. package/build/renderers/CoreContainerRenderer.js +0 -5
  212. package/build/renderers/CoreRootRenderer.js +0 -12
  213. package/build/renderers/EmptyLoadingStateRenderer.js +0 -5
  214. package/build/renderers/getRenderFunction.js +0 -24
  215. package/build/renderers/getSchemaErrorMessageFunction.js +0 -97
  216. package/build/renderers/mappers/alertComponentToProps.js +0 -2
  217. package/build/renderers/mappers/allOfComponentToProps.js +0 -6
  218. package/build/renderers/mappers/booleanInputComponentToProps.js +0 -5
  219. package/build/renderers/mappers/boxComponentToProps.js +0 -13
  220. package/build/renderers/mappers/buttonComponentToProps.js +0 -4
  221. package/build/renderers/mappers/columnsComponentToProps.js +0 -11
  222. package/build/renderers/mappers/componentToRendererProps.js +0 -164
  223. package/build/renderers/mappers/constComponentToProps.js +0 -5
  224. package/build/renderers/mappers/containerComponentToProps.js +0 -7
  225. package/build/renderers/mappers/dateInputComponentToProps.js +0 -2
  226. package/build/renderers/mappers/decisionComponentToProps.js +0 -16
  227. package/build/renderers/mappers/dividerComponentToProps.js +0 -2
  228. package/build/renderers/mappers/externalComponentToProps.js +0 -3
  229. package/build/renderers/mappers/formComponentToProps.js +0 -12
  230. package/build/renderers/mappers/formattedValueComponentToProps.js +0 -5
  231. package/build/renderers/mappers/headingComponentToProps.js +0 -2
  232. package/build/renderers/mappers/hiddenComponentToProps.js +0 -4
  233. package/build/renderers/mappers/imageComponentToProps.js +0 -2
  234. package/build/renderers/mappers/instructionsComponentToProps.js +0 -2
  235. package/build/renderers/mappers/integerInputComponentToProps.js +0 -2
  236. package/build/renderers/mappers/listComponentToProps.js +0 -2
  237. package/build/renderers/mappers/loadingIndicatorComponentToProps.js +0 -2
  238. package/build/renderers/mappers/markdownComponentToProps.js +0 -2
  239. package/build/renderers/mappers/mediaComponentToProps.js +0 -2
  240. package/build/renderers/mappers/modalComponentToProps.js +0 -11
  241. package/build/renderers/mappers/modalLayoutComponentToProps.js +0 -16
  242. package/build/renderers/mappers/moneyInputComponentToProps.js +0 -36
  243. package/build/renderers/mappers/multiSelectComponentToProps.js +0 -23
  244. package/build/renderers/mappers/multiUploadInputComponentToProps.js +0 -12
  245. package/build/renderers/mappers/numberInputComponentToProps.js +0 -2
  246. package/build/renderers/mappers/objectComponentToProps.js +0 -8
  247. package/build/renderers/mappers/paragraphComponentToProps.js +0 -2
  248. package/build/renderers/mappers/persistAsyncComponentToProps.js +0 -8
  249. package/build/renderers/mappers/progressComponentToProps.js +0 -2
  250. package/build/renderers/mappers/repeatableComponentToProps.js +0 -30
  251. package/build/renderers/mappers/reviewComponentToProps.js +0 -2
  252. package/build/renderers/mappers/rootComponentToProps.js +0 -21
  253. package/build/renderers/mappers/searchComponentToProps.js +0 -57
  254. package/build/renderers/mappers/sectionComponentToProps.js +0 -6
  255. package/build/renderers/mappers/selectInputComponentToProps.js +0 -34
  256. package/build/renderers/mappers/statusListComponentToProps.js +0 -2
  257. package/build/renderers/mappers/subflowComponentToRendererProps.js +0 -4
  258. package/build/renderers/mappers/tabsComponentToProps.js +0 -14
  259. package/build/renderers/mappers/textInputComponentToProps.js +0 -2
  260. package/build/renderers/mappers/tupleComponentToProps.js +0 -8
  261. package/build/renderers/mappers/uploadInputComponentToProps.js +0 -8
  262. package/build/renderers/mappers/upsellComponentToProps.js +0 -2
  263. package/build/renderers/mappers/utils/getValidationState.js +0 -12
  264. package/build/renderers/mappers/utils/inputComponentToProps.js +0 -26
  265. package/build/renderers/mappers/utils/mapErrorsToValidationState.js +0 -9
  266. package/build/renderers/mappers/utils/pick.js +0 -8
  267. package/build/renderers/mappers/utils/selectInputOptionsToProps.js +0 -11
  268. package/build/renderers/stepComponentToProps.js +0 -32
  269. package/build/renderers/utils.js +0 -69
  270. package/build/renderers/utils.test.js +0 -70
  271. package/build/stories/dev-tools/ContainerQueries.story.js +0 -66
  272. package/build/stories/dev-tools/Debugger.story.js +0 -38
  273. package/build/stories/dev-tools/FixtureSelect.story.js +0 -23
  274. package/build/stories/dev-tools/TestServer.story.js +0 -32
  275. package/build/stories/examples/NativeFlow.story.js +0 -80
  276. package/build/stories/examples/Recipients.story.js +0 -568
  277. package/build/stories/spec/behavior/Copy.story.js +0 -71
  278. package/build/stories/spec/behavior/Link.story.js +0 -40
  279. package/build/stories/spec/behavior/Modal.story.js +0 -79
  280. package/build/stories/spec/behavior/Subflow.story.js +0 -267
  281. package/build/stories/spec/layouts/Decision.story.js +0 -241
  282. package/build/stories/spec/layouts/Image.story.js +0 -42
  283. package/build/stories/spec/layouts/Modal.story.js +0 -81
  284. package/build/stories/spec/layouts/Search.story.js +0 -325
  285. package/build/stories/spec/layouts/Upsell.story.js +0 -55
  286. package/build/stories/spec/layouts/button/Button.story.js +0 -100
  287. package/build/stories/spec/layouts/button/PinnedButton.story.js +0 -81
  288. package/build/stories/spec/response/ActionResponse.story.js +0 -66
  289. package/build/stories/spec/schemas/MultiSelect.story.js +0 -148
  290. package/build/stories/spec/schemas/Upload.story.js +0 -168
  291. package/build/stories/spec/schemas/const/ConstLayout.story.js +0 -159
  292. package/build/stories/spec/schemas/const/ObjectConst.story.js +0 -94
  293. package/build/stories/spec/schemas/features/PersistAsync.story.js +0 -211
  294. package/build/stories/spec/schemas/features/ValidationAsync.story.js +0 -103
  295. package/build/stories/spec/schemas/object/FormattedValue.story.js +0 -92
  296. package/build/stories/spec/schemas/object/MoneyInput.story.js +0 -240
  297. package/build/stories/spec/schemas/oneOf/OneOfInitialisation.story.js +0 -55
  298. package/build/stories/spec/schemas/oneOf/OneOfWithSingleOption.story.js +0 -114
  299. package/build/stories/spec/step/Controls.story.js +0 -109
  300. package/build/stories/spec/step/DFModal.story.js +0 -58
  301. package/build/stories/spec/step/Footer.story.js +0 -70
  302. package/build/stories/spec/step/Navigation.story.js +0 -20
  303. package/build/stories/spec/step/ScrollToBottom.story.js +0 -103
  304. package/build/stories/spec/step/Tags.story.js +0 -39
  305. package/build/stories/spec/step/ToolBar.story.js +0 -60
  306. package/build/stories/spec/step/features/ErrorHandling.story.js +0 -92
  307. package/build/stories/spec/step/features/External.story.js +0 -91
  308. package/build/stories/spec/step/features/Polling.story.js +0 -108
  309. package/build/stories/spec/step/features/RefreshAfter.story.js +0 -92
  310. package/build/stories/spec/step/features/refresh/Refresh.story.js +0 -258
  311. package/build/stories/spec/step/features/refresh/RefreshWithPersistAsync.story.js +0 -958
  312. package/build/stories/types.js +0 -1
  313. package/build/stories/utils/fixtureHttpClient.js +0 -70
  314. package/build/stories/utils/getBasicStep.js +0 -223
  315. package/build/stories/utils/mockSearchHandler.js +0 -71
  316. package/build/stories/utils/render-utils.js +0 -41
  317. package/build/stories/visual-tests/layouts/NotUsingListItem.story.js +0 -17
  318. package/build/test-utils/DynamicFlowWise.js +0 -32
  319. package/build/test-utils/DynamicFlowWiseModal.js +0 -34
  320. package/build/test-utils/NeptuneProviders.js +0 -11
  321. package/build/test-utils/component-utils.js +0 -5
  322. package/build/test-utils/fetch-utils.js +0 -45
  323. package/build/test-utils/getMergedTestRenderers.js +0 -34
  324. package/build/test-utils/getRandomId.js +0 -1
  325. package/build/test-utils/index.js +0 -3
  326. package/build/test-utils/openLinkInNewTab.js +0 -15
  327. package/build/test-utils/rtl-utils.js +0 -7
  328. package/build/test-utils/step-utils.js +0 -6
  329. package/build/test-utils/wait.js +0 -3
  330. package/build/tests/AlertLayout.test.js +0 -78
  331. package/build/tests/ArrayTuple.test.js +0 -118
  332. package/build/tests/ButtonLayout.test.js +0 -308
  333. package/build/tests/ConstLayout.test.js +0 -95
  334. package/build/tests/DateInput.test.js +0 -163
  335. package/build/tests/DecisionLayout.test.js +0 -146
  336. package/build/tests/DynamicFlow.test.js +0 -147
  337. package/build/tests/External.test.js +0 -169
  338. package/build/tests/Flow.test.js +0 -328
  339. package/build/tests/FormLayout.test.js +0 -28
  340. package/build/tests/FormattedValue.test.js +0 -107
  341. package/build/tests/ImageRenderer.test.js +0 -78
  342. package/build/tests/InitialAction.test.js +0 -179
  343. package/build/tests/InitialStep.test.js +0 -168
  344. package/build/tests/InstructionsLayout.test.js +0 -45
  345. package/build/tests/ListLayout.test.js +0 -145
  346. package/build/tests/Logging.test.js +0 -53
  347. package/build/tests/ModalBehavior.test.js +0 -149
  348. package/build/tests/MoneyInput.test.js +0 -316
  349. package/build/tests/MultiUpload.test.js +0 -293
  350. package/build/tests/NativeBack.test.js +0 -267
  351. package/build/tests/NoOp.test.js +0 -194
  352. package/build/tests/OneOfInitialisation.test.js +0 -571
  353. package/build/tests/PersistAsync.test.js +0 -687
  354. package/build/tests/Polling.test.js +0 -617
  355. package/build/tests/Prefetching.test.js +0 -230
  356. package/build/tests/RefreshAfter.test.js +0 -63
  357. package/build/tests/RefreshOnChange.ResponseHandling.test.js +0 -205
  358. package/build/tests/RefreshOnChange.test.js +0 -233
  359. package/build/tests/RefreshOnChange.with.Segmented.test.js +0 -348
  360. package/build/tests/RefreshOnChange.with.Tabs.test.js +0 -358
  361. package/build/tests/RefreshOnChangePreserve.test.js +0 -224
  362. package/build/tests/RendererProps.test.js +0 -342
  363. package/build/tests/Repeatable.test.js +0 -107
  364. package/build/tests/Rerendering.test.js +0 -67
  365. package/build/tests/ReviewLayout.test.js +0 -274
  366. package/build/tests/SchemaOnChange.test.js +0 -133
  367. package/build/tests/SchemaReferences.test.js +0 -88
  368. package/build/tests/ScrollToBottom.test.js +0 -122
  369. package/build/tests/ScrollToError.test.js +0 -217
  370. package/build/tests/SegmentedControl.test.js +0 -49
  371. package/build/tests/SingleFileUpload.test.js +0 -168
  372. package/build/tests/StatusList.test.js +0 -85
  373. package/build/tests/Subflow.test.js +0 -710
  374. package/build/tests/Submission.ResponseHandling.test.js +0 -557
  375. package/build/tests/Submission.merging.test.js +0 -202
  376. package/build/tests/Submission.test.js +0 -748
  377. package/build/tests/Tags.test.js +0 -475
  378. package/build/tests/Upsell.test.js +0 -154
  379. package/build/tests/ValidationAsync.test.js +0 -295
  380. package/build/tests/legacy/Actions.test.js +0 -158
  381. package/build/tests/legacy/BackButton.test.js +0 -114
  382. package/build/tests/legacy/HiddenSchemas.test.js +0 -246
  383. package/build/tests/legacy/MultiSelect.test.js +0 -501
  384. package/build/tests/legacy/MultipleFileUploadSchema.test.js +0 -341
  385. package/build/tests/legacy/PersistAsync.blob-schema.test.js +0 -224
  386. package/build/tests/legacy/PersistAsync.string-schema.test.js +0 -211
  387. package/build/tests/legacy/RefreshStepOnChange.debouncing.test.js +0 -209
  388. package/build/tests/legacy/RefreshStepOnChange.test.js +0 -424
  389. package/build/tests/legacy/Search.test.js +0 -437
  390. package/build/tests/renderers/MultiSelectInputRendererProps.test.js +0 -58
  391. package/build/tests/renderers/SelectInputRendererProps.test.js +0 -43
  392. package/build/tests/renderers/TextInputRenderer.test.js +0 -51
  393. package/build/types.js +0 -1
  394. package/build/useDynamicFlow.js +0 -104
  395. package/build/useDynamicFlowModal.js +0 -58
  396. package/build/utils/analyse-step.js +0 -14
  397. package/build/utils/component-utils.js +0 -8
  398. package/build/utils/component-utils.test.js +0 -113
  399. package/build/utils/getScrollToTop.js +0 -12
  400. package/build/utils/normalise-flow-id.js +0 -1
  401. package/build/utils/normalise-flow-id.test.js +0 -24
  402. package/build/utils/recursiveMerge.js +0 -40
  403. package/build/utils/recursiveMerge.test.js +0 -93
  404. package/build/utils/type-utils.js +0 -21
  405. package/build/utils/type-validators.js +0 -11
  406. package/build/utils/type-validators.test.js +0 -180
  407. package/build/utils/useStableCallback.js +0 -15
@@ -1,125 +0,0 @@
1
- import { isArray, isNullish, isNumber, isString, isValidDate, } from '../../../utils/type-validators';
2
- import { validateStringPattern } from './validateStringPattern';
3
- export const getAboveMaxItemsCheck = ({ maxItems }, messageFunctions) => (value) => {
4
- if (isNumber(maxItems) && isArray(value) && value.length > maxItems) {
5
- return messageFunctions.maxItems(maxItems);
6
- }
7
- return null;
8
- };
9
- export const getBelowMinFilesCheck = ({ minItems }, messageFunctions) => (value) => {
10
- if (isNumber(minItems) && isArray(value) && value.length > 0 && value.length < minItems) {
11
- return messageFunctions.minFiles(minItems);
12
- }
13
- return null;
14
- };
15
- export const getAboveMaxFilesCheck = ({ maxItems }, messageFunctions) => (value) => {
16
- if (isNumber(maxItems) && isArray(value) && value.length > maxItems) {
17
- return messageFunctions.maxFiles(maxItems);
18
- }
19
- return null;
20
- };
21
- export const getFileSizeCheck = (schema, messageFunctions) => (value) => {
22
- const maxSize = 'persistAsync' in schema ? schema.persistAsync.schema.maxSize : schema.maxSize;
23
- if (maxSize && value && value.size > maxSize) {
24
- return messageFunctions.maxSize();
25
- }
26
- return null;
27
- };
28
- export const getFileTypeCheck = (schema, messageFunctions) => (value) => {
29
- const accepts = 'persistAsync' in schema ? schema.persistAsync.schema.accepts : schema.accepts;
30
- if (accepts && value && !accepts.includes(value.type)) {
31
- return messageFunctions.accepts();
32
- }
33
- return null;
34
- };
35
- export const getBelowMinItemsCheck = ({ minItems }, messageFunctions) => (value) => {
36
- if (isNumber(minItems) && isArray(value) && value.length > 0 && value.length < minItems) {
37
- return messageFunctions.minItems(minItems);
38
- }
39
- return null;
40
- };
41
- export const getAboveMaxLengthCheck = ({ maxLength }, messageFunctions) => (value) => {
42
- if (isNumber(maxLength) && isString(value) && value.length > maxLength) {
43
- return messageFunctions.maxLength(maxLength);
44
- }
45
- return null;
46
- };
47
- export const getBelowMinLengthCheck = ({ minLength }, messageFunctions) => (value) => {
48
- if (isNumber(minLength) && isString(value) && value && value.length < minLength) {
49
- return messageFunctions.minLength(minLength);
50
- }
51
- return null;
52
- };
53
- export const getAboveMaximumCheck = ({ maximum }, messageFunctions) => (value) => {
54
- if (isNumber(maximum) && isNumber(value) && value > maximum) {
55
- return messageFunctions.maximum(maximum);
56
- }
57
- return null;
58
- };
59
- export const getBelowMinimumCheck = ({ minimum }, messageFunctions) => (value) => {
60
- if (isNumber(minimum) && isNumber(value) && value < minimum) {
61
- return messageFunctions.minimum(minimum);
62
- }
63
- return null;
64
- };
65
- export const getAboveMaximumMoneyAmountCheck = ({ maximum }, messageFunctions) => (value) => {
66
- const numericValue = value != null ? Number.parseFloat(value) : null;
67
- const numericMax = maximum != null ? Number.parseFloat(maximum) : null;
68
- if (maximum != null &&
69
- isNumber(numericMax) &&
70
- isNumber(numericValue) &&
71
- numericValue > numericMax) {
72
- return messageFunctions.maximum(maximum);
73
- }
74
- return null;
75
- };
76
- export const getBelowMinimumMoneyAmountCheck = ({ minimum }, messageFunctions) => (value) => {
77
- const numericValue = value != null ? Number.parseFloat(value) : null;
78
- const numericMin = minimum != null ? Number.parseFloat(minimum) : null;
79
- if (minimum != null &&
80
- isNumber(numericMin) &&
81
- isNumber(numericValue) &&
82
- numericValue < numericMin) {
83
- return messageFunctions.minimum(minimum);
84
- }
85
- return null;
86
- };
87
- export const getAboveMaximumDateCheck = ({ maximum }, messageFunctions) => (value) => {
88
- if (isString(maximum) && isString(value) && value > maximum) {
89
- return messageFunctions.maximumDate(maximum);
90
- }
91
- return null;
92
- };
93
- export const getBelowMinimumDateCheck = ({ minimum }, messageFunctions) => (value) => {
94
- if (isString(minimum) && isString(value) && value && value < minimum) {
95
- return messageFunctions.minimumDate(minimum);
96
- }
97
- return null;
98
- };
99
- export const getNotAdheringToPatternCheck = ({ pattern }, messageFunctions, options) => {
100
- validateStringPattern(pattern, options === null || options === void 0 ? void 0 : options.logEvent);
101
- return (value) => {
102
- if (isString(pattern) && isString(value) && value) {
103
- return new RegExp(pattern).test(value) ? null : messageFunctions.pattern();
104
- }
105
- return null;
106
- };
107
- };
108
- export const getRequiredCheck = (required, messageFunctions) => (value) => {
109
- if (!required) {
110
- return null;
111
- }
112
- if (isArray(value) && value.length === 0) {
113
- return messageFunctions.required();
114
- }
115
- if (value === '') {
116
- return messageFunctions.required();
117
- }
118
- return isNullish(value) ? messageFunctions.required() : null;
119
- };
120
- export const getValidDateCheck = (required, messageFunctions) => (value) => {
121
- if (required && !isValidDate(value)) {
122
- return messageFunctions.required();
123
- }
124
- return null;
125
- };
@@ -1,262 +0,0 @@
1
- import { getAboveMaxLengthCheck, getBelowMinLengthCheck, getAboveMaximumCheck, getBelowMinimumCheck, getAboveMaximumDateCheck, getBelowMinimumDateCheck, getNotAdheringToPatternCheck, getAboveMaxItemsCheck, getBelowMinItemsCheck, getAboveMaxFilesCheck, getBelowMinFilesCheck, getValidDateCheck, } from './value-checks';
2
- import { mockErrorMessageFunctions } from './spec-utils';
3
- import { vi } from 'vitest';
4
- describe('value checks', () => {
5
- describe('getAboveMaxLengthCheck', () => {
6
- it('should return null if the string length is below or equal to the maxLength', () => {
7
- const schema = { type: 'string', maxLength: 5 };
8
- const check = getAboveMaxLengthCheck(schema, mockErrorMessageFunctions);
9
- const belowLength = check('0');
10
- const atLength = check('01234');
11
- expect(belowLength).toBeNull();
12
- expect(atLength).toBeNull();
13
- });
14
- it('should return an error message if the string length is above the maxLength', () => {
15
- const schema = { type: 'string', maxLength: 5 };
16
- const check = getAboveMaxLengthCheck(schema, mockErrorMessageFunctions);
17
- expect(check('012345')).toBe('maxLength');
18
- });
19
- });
20
- describe('getBelowMinLengthCheck', () => {
21
- it('should return null if the string length is above or equal to the minLength', () => {
22
- const schema = { type: 'string', minLength: 5 };
23
- const check = getBelowMinLengthCheck(schema, mockErrorMessageFunctions);
24
- const atLength = check('01234');
25
- const aboveLength = check('0123456789');
26
- expect(atLength).toBeNull();
27
- expect(aboveLength).toBeNull();
28
- });
29
- it('should return null if the string is empty', () => {
30
- const schema = { type: 'string', minLength: 5 };
31
- const check = getBelowMinLengthCheck(schema, mockErrorMessageFunctions);
32
- expect(check('')).toBeNull();
33
- });
34
- it('should return an error message if the string length is below the minLength', () => {
35
- const schema = { type: 'string', minLength: 5 };
36
- const check = getBelowMinLengthCheck(schema, mockErrorMessageFunctions);
37
- expect(check('0')).toBe('minLength');
38
- });
39
- });
40
- describe('getAboveMaximumCheck', () => {
41
- it('should return null if the number is below or equal to the maximum', () => {
42
- const schema = { type: 'number', maximum: 10 };
43
- const check = getAboveMaximumCheck(schema, mockErrorMessageFunctions);
44
- const atMax = check(5);
45
- const belowMax = check(10);
46
- expect(atMax).toBeNull();
47
- expect(belowMax).toBeNull();
48
- });
49
- it('should return an error message if the number is above the maximum', () => {
50
- const schema = { type: 'number', maximum: 10 };
51
- const check = getAboveMaximumCheck(schema, mockErrorMessageFunctions);
52
- expect(check(15)).toBe('maximum');
53
- });
54
- });
55
- describe('getBelowMinimumCheck', () => {
56
- it('should return null if the number is above or equal to the minimum', () => {
57
- const schema = { type: 'integer', minimum: 5 };
58
- const check = getBelowMinimumCheck(schema, mockErrorMessageFunctions);
59
- const atMinimum = check(5);
60
- const aboveMinimum = check(10);
61
- expect(atMinimum).toBeNull();
62
- expect(aboveMinimum).toBeNull();
63
- });
64
- it('should return an error message if the number is below the minimum', () => {
65
- const schema = { type: 'integer', minimum: 10 };
66
- const check = getBelowMinimumCheck(schema, mockErrorMessageFunctions);
67
- expect(check(5)).toBe('minimum');
68
- });
69
- });
70
- describe('getAboveMaximumDateCheck', () => {
71
- it('should return null if the date is below or equal to the maximum', () => {
72
- const schema = { type: 'string', format: 'date', maximum: '2022-01-01' };
73
- const check = getAboveMaximumDateCheck(schema, mockErrorMessageFunctions);
74
- const atDate = check('2022-01-01');
75
- const belowDate = check('2021-12-31');
76
- expect(atDate).toBeNull();
77
- expect(belowDate).toBeNull();
78
- });
79
- it('should return an error message if the date is above the maximum', () => {
80
- const schema = { type: 'string', format: 'date', maximum: '2022-01-01' };
81
- const check = getAboveMaximumDateCheck(schema, mockErrorMessageFunctions);
82
- expect(check('2022-01-02')).toBe('maximumDate');
83
- });
84
- });
85
- describe('getBelowMinimumDateCheck', () => {
86
- it('should return null if the date is above or equal to the minimum', () => {
87
- const schema = { type: 'string', format: 'date', minimum: '2022-01-01' };
88
- const check = getBelowMinimumDateCheck(schema, mockErrorMessageFunctions);
89
- const atDate = check('2022-01-01');
90
- const aboveDate = check('2022-01-02');
91
- expect(atDate).toBeNull();
92
- expect(aboveDate).toBeNull();
93
- });
94
- it('should return an error message if the date is below the minimum', () => {
95
- const schema = { type: 'string', format: 'date', minimum: '2022-01-01' };
96
- const check = getBelowMinimumDateCheck(schema, mockErrorMessageFunctions);
97
- expect(check('2021-12-31')).toBe('minimumDate');
98
- });
99
- });
100
- describe('getNotAdheringToPatternCheck', () => {
101
- it('should return null if the string adheres to the pattern', () => {
102
- const schema = { type: 'string', pattern: '[A-Za-z]+' };
103
- const check = getNotAdheringToPatternCheck(schema, mockErrorMessageFunctions);
104
- expect(check('Hello')).toBeNull();
105
- });
106
- it('should return null if the string is empty', () => {
107
- const schema = { type: 'string', pattern: '[A-Za-z]+' };
108
- const check = getNotAdheringToPatternCheck(schema, mockErrorMessageFunctions);
109
- expect(check('')).toBeNull();
110
- });
111
- it('should return an error message if the string does not adhere to the pattern', () => {
112
- const schema = { type: 'string', pattern: '[A-Za-z]+' };
113
- const check = getNotAdheringToPatternCheck(schema, mockErrorMessageFunctions);
114
- expect(check('01234')).toBe('pattern');
115
- });
116
- // Unicode support has been disabled for now
117
- describe('unicode support (temporarily disabled)', () => {
118
- it.skip('should return null if string adheres to the pattern', () => {
119
- const schema = { type: 'string', pattern: '^[A-Za-z0-9\\s\\p{P}]*$' };
120
- const check = getNotAdheringToPatternCheck(schema, mockErrorMessageFunctions);
121
- expect(check('23 Bananas!')).toBeNull();
122
- });
123
- it.skip('should return an error message if the string does not adhere to the pattern', () => {
124
- const schema = { type: 'string', pattern: '^[A-Za-z0-9\\s\\p{P}]*$' };
125
- const check = getNotAdheringToPatternCheck(schema, mockErrorMessageFunctions);
126
- expect(check('é')).toBe('pattern');
127
- expect(check('ñ')).toBe('pattern');
128
- expect(check('❌')).toBe('pattern');
129
- });
130
- describe('when a pattern is valid without Unicode support but invalid with Unicode support', () => {
131
- const logEvent = vi.fn();
132
- const schema = { type: 'string', pattern: '^\\d{3}\\-?\\d{3}$' };
133
- it('a logging event should be emitted', () => {
134
- const check = getNotAdheringToPatternCheck(schema, mockErrorMessageFunctions, {
135
- logEvent,
136
- });
137
- expect(logEvent).toHaveBeenCalledWith('warning', expect.stringMatching(/Failed to instantiate RegExp with Unicode support/), expect.any(Object));
138
- });
139
- it(`the check function still works, because it doesn't use Unicode support`, () => {
140
- const check = getNotAdheringToPatternCheck(schema, mockErrorMessageFunctions, {
141
- logEvent,
142
- });
143
- expect(check('123-123')).toBeNull();
144
- expect(check('123123')).toBeNull();
145
- expect(check('123')).toBe('pattern');
146
- });
147
- });
148
- });
149
- });
150
- describe('getAboveMaxItemsCheck', () => {
151
- const arraySchema = {
152
- type: 'array',
153
- items: { type: 'string' },
154
- addItemTitle: '',
155
- editItemTitle: '',
156
- maxItems: 5,
157
- };
158
- it('should return null if the array length is below or equal to the maxItems', () => {
159
- const check = getAboveMaxItemsCheck(arraySchema, mockErrorMessageFunctions);
160
- const belowLength = check(['0']);
161
- const atLength = check(['0', '1', '2', '3', '4']);
162
- expect(belowLength).toBeNull();
163
- expect(atLength).toBeNull();
164
- });
165
- it('should return an error message if the array length is above the maxItems', () => {
166
- const check = getAboveMaxItemsCheck(arraySchema, mockErrorMessageFunctions);
167
- expect(check(['0', '1', '2', '3', '4', '5'])).toBe('maxItems');
168
- });
169
- });
170
- describe('getBelowMinItemsCheck', () => {
171
- const arraySchema = {
172
- type: 'array',
173
- items: { type: 'string' },
174
- addItemTitle: '',
175
- editItemTitle: '',
176
- minItems: 3,
177
- };
178
- it('should return null if the array length is above or equal to the minItems', () => {
179
- const check = getBelowMinItemsCheck(arraySchema, mockErrorMessageFunctions);
180
- const atLength = check(['0', '1', '2']);
181
- const aboveLength = check(['0', '1', '2', '3']);
182
- expect(atLength).toBeNull();
183
- expect(aboveLength).toBeNull();
184
- });
185
- it('should return null if the array is empty', () => {
186
- const check = getBelowMinItemsCheck(arraySchema, mockErrorMessageFunctions);
187
- const empty = check([]);
188
- expect(empty).toBeNull();
189
- });
190
- it('should return an error message if the array length is below the minItems', () => {
191
- const check = getBelowMinItemsCheck(arraySchema, mockErrorMessageFunctions);
192
- expect(check(['0', '1'])).toBe('minItems');
193
- });
194
- });
195
- describe('getAboveMaxFilesCheck', () => {
196
- const arraySchema = {
197
- type: 'array',
198
- items: { type: 'string' },
199
- addItemTitle: '',
200
- editItemTitle: '',
201
- maxItems: 2,
202
- };
203
- it('should return null if the array length is below or equal to the maxItems', () => {
204
- const check = getAboveMaxFilesCheck(arraySchema, mockErrorMessageFunctions);
205
- const belowLength = check([new File([new Blob()], '0')]);
206
- const atLength = check([new File([new Blob()], '0'), new File([new Blob()], '1')]);
207
- expect(belowLength).toBeNull();
208
- expect(atLength).toBeNull();
209
- });
210
- it('should return an error message if the array length is above the maxItems', () => {
211
- const check = getAboveMaxFilesCheck(arraySchema, mockErrorMessageFunctions);
212
- expect(check([
213
- new File([new Blob()], '0'),
214
- new File([new Blob()], '1'),
215
- new File([new Blob()], '2'),
216
- ])).toBe('maxFiles');
217
- });
218
- });
219
- describe('getBelowMinFilesCheck', () => {
220
- const arraySchema = {
221
- type: 'array',
222
- items: { type: 'string' },
223
- addItemTitle: '',
224
- editItemTitle: '',
225
- minItems: 2,
226
- };
227
- it('should return null if the array length is above or equal to the minItems', () => {
228
- const check = getBelowMinFilesCheck(arraySchema, mockErrorMessageFunctions);
229
- const atLength = check([new File([new Blob()], '0'), new File([new Blob()], '1')]);
230
- const aboveLength = check([
231
- new File([new Blob()], '0'),
232
- new File([new Blob()], '1'),
233
- new File([new Blob()], '2'),
234
- ]);
235
- expect(atLength).toBeNull();
236
- expect(aboveLength).toBeNull();
237
- });
238
- it('should return null if the array is empty', () => {
239
- const check = getBelowMinFilesCheck(arraySchema, mockErrorMessageFunctions);
240
- const empty = check([]);
241
- expect(empty).toBeNull();
242
- });
243
- it('should return an error message if the array length is below the minItems', () => {
244
- const check = getBelowMinFilesCheck(arraySchema, mockErrorMessageFunctions);
245
- expect(check([new File([new Blob()], '0')])).toBe('minFiles');
246
- });
247
- });
248
- describe('getValidDateCheck', () => {
249
- it('should return null for partial date strings when not required', () => {
250
- const check = getValidDateCheck(false, mockErrorMessageFunctions);
251
- expect(check('2012-01')).toBeNull();
252
- });
253
- it('should return null for valid date strings when required', () => {
254
- const check = getValidDateCheck(true, mockErrorMessageFunctions);
255
- expect(check('2012-01-01')).toBeNull();
256
- });
257
- it('should return a validation for partial date strings when required', () => {
258
- const check = getValidDateCheck(true, mockErrorMessageFunctions);
259
- expect(check('2012-01')).not.toBeNull();
260
- });
261
- });
262
- });
@@ -1,53 +0,0 @@
1
- import { isNullish } from '../../../utils/type-validators';
2
- import { debounce } from '../../components/utils/debounce';
3
- import { abortAndResetController } from '../utils/http-utils';
4
- /**
5
- * Creates an onValidateAsync handler for a component.
6
- */
7
- export const getComponentValidationAsync = (update, performValidationAsync) =>
8
- /**
9
- * Will update the validationAsyncState when a new request is made, and will update
10
- * the description or set errors when the request completes.
11
- */
12
- async (component, currentValue) => {
13
- const { abortController } = component.validationAsyncState;
14
- const newAbortController = abortAndResetController(abortController);
15
- if (isNullish(currentValue)) {
16
- update(component, (draft) => {
17
- draft.validationAsyncState = {
18
- abortController: newAbortController,
19
- lastSubmitted: currentValue,
20
- messages: {},
21
- };
22
- });
23
- return;
24
- }
25
- const { signal } = newAbortController;
26
- const newSubmission = performValidationAsync({ value: currentValue, signal })
27
- .then((message) => {
28
- update(component, (draft) => {
29
- if (message) {
30
- draft.validationAsyncState.messages.success = message;
31
- }
32
- });
33
- return message;
34
- })
35
- .catch((error) => {
36
- if (error instanceof DOMException && error.name === 'AbortError') {
37
- // No op, the request was aborted
38
- return null;
39
- }
40
- update(component, (draft) => {
41
- draft.validationAsyncState.messages.error = error.message;
42
- });
43
- });
44
- update(component, (draft) => {
45
- draft.validationAsyncState = {
46
- abortController: newAbortController,
47
- lastSubmitted: currentValue,
48
- messages: {},
49
- };
50
- });
51
- return newSubmission;
52
- };
53
- export const getDebouncedComponentValidationAsync = (update, performValidationAsync) => debounce(getComponentValidationAsync(update, performValidationAsync), 1000);
@@ -1,67 +0,0 @@
1
- import { waitFor } from '@testing-library/react';
2
- import { vi } from 'vitest';
3
- import { abortableDelay } from '../../../test-utils/fetch-utils';
4
- import { createTextInputComponent } from '../../components/TextInputComponent';
5
- import { getInputUpdateFunction } from '../../components/utils/component-utils';
6
- import { getUpdateFunctionMock } from '../../mappers/schema/tests/test-utils';
7
- import { getComponentValidationAsync } from './getComponentValidationAsync';
8
- import { getInitialValidationAsyncState } from './getInitialValidationAsyncState';
9
- const defaultProps = {
10
- uid: '123',
11
- checks: [],
12
- analyticsId: 'analyticsId',
13
- autoComplete: 'off',
14
- disabled: true,
15
- errors: [],
16
- hidden: false,
17
- id: 'id',
18
- required: false,
19
- validationAsyncState: getInitialValidationAsyncState(),
20
- value: '',
21
- onPersistAsync: undefined,
22
- performRefresh: undefined,
23
- schemaOnChange: undefined,
24
- onValueChange: () => { },
25
- summariser: () => ({}),
26
- };
27
- describe('getComponentValidationAsync', () => {
28
- it('should make request and update message if response is ok', async () => {
29
- const performValidationAsync = vi.fn().mockResolvedValue('Everything is ok');
30
- const mockUpdateFunction = getUpdateFunctionMock(() => inputComponent);
31
- const inputComponent = createTextInputComponent(Object.assign(Object.assign({}, defaultProps), { performValidationAsync, value: 'test' }), mockUpdateFunction);
32
- const update = getInputUpdateFunction(mockUpdateFunction);
33
- const validate = getComponentValidationAsync(update, performValidationAsync);
34
- void validate(inputComponent, inputComponent.getLocalValue());
35
- expect(performValidationAsync).toHaveBeenCalledWith(expect.objectContaining({ value: 'test' }));
36
- await waitFor(() => expect(inputComponent.validationAsyncState.messages.success).toBe('Everything is ok'));
37
- });
38
- it('should set component errors if validation fails', async () => {
39
- const errorMessage = 'This field is invalid';
40
- const performValidationAsync = vi.fn().mockRejectedValue(new Error(errorMessage));
41
- const mockUpdateFunction = getUpdateFunctionMock(() => inputComponent);
42
- const inputComponent = createTextInputComponent(Object.assign(Object.assign({}, defaultProps), { performValidationAsync, value: 'test' }), mockUpdateFunction);
43
- const update = getInputUpdateFunction(mockUpdateFunction);
44
- const validate = getComponentValidationAsync(update, performValidationAsync);
45
- void validate(inputComponent, inputComponent.getLocalValue());
46
- await waitFor(() => expect(inputComponent.validationAsyncState.messages.error).toEqual(errorMessage));
47
- });
48
- it('should ignore previous responses if a second persist has been triggered', async () => {
49
- const performValidationAsync = vi
50
- .fn()
51
- .mockImplementationOnce(async ({ signal }) => abortableDelay(200, signal).then(() => 'response-1'))
52
- .mockImplementationOnce(async ({ signal }) => abortableDelay(10, signal).then(() => 'response-2'));
53
- const mockUpdateFunction = getUpdateFunctionMock(() => inputComponent);
54
- const inputComponent = createTextInputComponent(Object.assign(Object.assign({}, defaultProps), { performValidationAsync, value: 'test' }), mockUpdateFunction);
55
- const update = getInputUpdateFunction(mockUpdateFunction);
56
- const validate = getComponentValidationAsync(update, performValidationAsync);
57
- void validate(inputComponent, inputComponent.getLocalValue());
58
- inputComponent.onChange('new-value');
59
- void validate(inputComponent, inputComponent.getLocalValue());
60
- // Second callback has resolved
61
- await vi.advanceTimersByTimeAsync(100);
62
- await waitFor(() => expect(inputComponent.validationAsyncState.messages.success).toBe('response-2'));
63
- // First callback has resolved, but value is ignored
64
- await vi.advanceTimersByTimeAsync(100);
65
- await waitFor(() => expect(inputComponent.validationAsyncState.messages.success).toBe('response-2'));
66
- });
67
- });
@@ -1,5 +0,0 @@
1
- export const getInitialValidationAsyncState = () => ({
2
- abortController: new AbortController(),
3
- lastSubmitted: null,
4
- messages: {},
5
- });
@@ -1,45 +0,0 @@
1
- import { isObject, isString } from '../../../utils/type-validators';
2
- import { constructPayload } from '../utils/http-utils';
3
- import { getAnalyticsFromErrorResponse } from '../utils/response-utils';
4
- /**
5
- * Takes an httpClient and schema validation async config and returns a function that can
6
- * execute a validation async request.
7
- */
8
- export const getPerformValidationAsync = ({ httpClient, validationAsyncConfig, schemaId, trackEvent, }) => {
9
- const { method, param, url } = validationAsyncConfig;
10
- const trackFailureAndReturn = (json) => {
11
- const analytics = getAnalyticsFromErrorResponse(json);
12
- trackEvent('ValidationAsync Failed', Object.assign({ schema: schemaId }, analytics));
13
- return null;
14
- };
15
- return async function performValidationAsync({ value, signal }) {
16
- let response;
17
- trackEvent('ValidationAsync Triggered', { schema: schemaId });
18
- try {
19
- response = await httpClient(url, constructPayload({ value, signal, requestConfig: { method, param } }));
20
- }
21
- catch (e) {
22
- return trackFailureAndReturn();
23
- }
24
- const json = (await response.json().catch(() => null));
25
- const message = getValidationMessage(json);
26
- if (response.ok) {
27
- trackEvent('ValidationAsync Succeeded', { schema: schemaId });
28
- return message;
29
- }
30
- if (response.status === 422) {
31
- if (message) {
32
- trackEvent('ValidationAsync Succeeded', { schema: schemaId });
33
- throw new Error(message);
34
- }
35
- }
36
- return trackFailureAndReturn(json);
37
- };
38
- };
39
- const getValidationMessage = (json) => {
40
- if (!isObject(json)) {
41
- return null;
42
- }
43
- const { message } = json;
44
- return isString(message) ? message : null;
45
- };