@wise/dynamic-flow-client 5.10.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 (418) hide show
  1. package/build/i18n/fr.json +1 -1
  2. package/build/main.css +4 -0
  3. package/build/main.js +32 -17
  4. package/build/main.mjs +32 -17
  5. package/build/types/controller/FlowController.d.ts +0 -1
  6. package/build/types/controller/FlowController.d.ts.map +1 -1
  7. package/build/types/controller/executePoll.d.ts.map +1 -1
  8. package/build/types/domain/components/step/ExternalConfirmationComponent.d.ts +2 -3
  9. package/build/types/domain/components/step/ExternalConfirmationComponent.d.ts.map +1 -1
  10. package/build/types/domain/mappers/mapStepToComponent.d.ts.map +1 -1
  11. package/build/types/domain/mappers/schema/types.d.ts +1 -0
  12. package/build/types/domain/mappers/schema/types.d.ts.map +1 -1
  13. package/build/types/renderers/mappers/externalComponentToProps.d.ts.map +1 -1
  14. package/build/types/test-utils/openLinkInNewTab.d.ts.map +1 -0
  15. package/package.json +7 -7
  16. package/build/DynamicFlowCore.js +0 -5
  17. package/build/common/errorBoundary/ErrorBoundary.js +0 -26
  18. package/build/common/errorBoundary/ErrorBoundary.test.js +0 -29
  19. package/build/common/errorBoundary/ErrorBoundaryAlert.js +0 -11
  20. package/build/common/makeHttpClient/api-utils.js +0 -3
  21. package/build/common/makeHttpClient/index.js +0 -1
  22. package/build/common/makeHttpClient/makeHttpClient.js +0 -10
  23. package/build/common/makeHttpClient/makeHttpClient.test.js +0 -186
  24. package/build/common/messages/external-confirmation.messages.js +0 -23
  25. package/build/common/messages/file-upload.messages.js +0 -13
  26. package/build/common/messages/generic-error.messages.js +0 -18
  27. package/build/common/messages/help.messages.js +0 -8
  28. package/build/common/messages/multi-file-upload.messages.js +0 -18
  29. package/build/common/messages/multi-select.messages.js +0 -8
  30. package/build/common/messages/paragraph.messages.js +0 -13
  31. package/build/common/messages/repeatable.messages.js +0 -23
  32. package/build/common/messages/search.messages.js +0 -8
  33. package/build/common/messages/validation.array.messages.js +0 -13
  34. package/build/common/messages/validation.messages.js +0 -53
  35. package/build/controller/FlowController.js +0 -372
  36. package/build/controller/executePoll.js +0 -49
  37. package/build/controller/executeRefresh.js +0 -45
  38. package/build/controller/executeRequest.js +0 -80
  39. package/build/controller/executeSubmission.js +0 -70
  40. package/build/controller/getErrorMessage.js +0 -7
  41. package/build/controller/getRequestAbortController.js +0 -13
  42. package/build/controller/getResponseType.js +0 -35
  43. package/build/controller/getSafeHttpClient.js +0 -8
  44. package/build/controller/getStepCounter.js +0 -16
  45. package/build/controller/handleErrorResponse.js +0 -26
  46. package/build/controller/makeSafeHttpClient.js +0 -8
  47. package/build/controller/response-utils.js +0 -72
  48. package/build/domain/components/AlertComponent.js +0 -1
  49. package/build/domain/components/AllOfComponent.js +0 -40
  50. package/build/domain/components/BooleanInputComponent.js +0 -50
  51. package/build/domain/components/BoxComponent.js +0 -3
  52. package/build/domain/components/ButtonComponent.js +0 -1
  53. package/build/domain/components/ColumnsComponent.js +0 -3
  54. package/build/domain/components/ConstComponent.js +0 -18
  55. package/build/domain/components/ContainerComponent.js +0 -3
  56. package/build/domain/components/DateInputComponent.js +0 -75
  57. package/build/domain/components/DecisionComponent.js +0 -1
  58. package/build/domain/components/DividerComponent.js +0 -1
  59. package/build/domain/components/FormComponent.js +0 -3
  60. package/build/domain/components/FormattedValueComponent.js +0 -44
  61. package/build/domain/components/HeadingComponent.js +0 -1
  62. package/build/domain/components/ImageComponent.js +0 -1
  63. package/build/domain/components/InstructionsComponent.js +0 -1
  64. package/build/domain/components/IntegerInputComponent.js +0 -74
  65. package/build/domain/components/ListComponent.js +0 -1
  66. package/build/domain/components/LoadingIndicatorComponent.js +0 -1
  67. package/build/domain/components/MarkdownComponent.js +0 -1
  68. package/build/domain/components/MediaComponent.js +0 -1
  69. package/build/domain/components/ModalComponent.js +0 -16
  70. package/build/domain/components/ModalLayoutComponent.js +0 -3
  71. package/build/domain/components/MoneyInputComponent.js +0 -57
  72. package/build/domain/components/MultiSelectInputComponent.js +0 -81
  73. package/build/domain/components/MultiUploadInputComponent.js +0 -88
  74. package/build/domain/components/NumberInputComponent.js +0 -73
  75. package/build/domain/components/ObjectComponent.js +0 -45
  76. package/build/domain/components/ParagraphComponent.js +0 -1
  77. package/build/domain/components/PersistAsyncComponent.js +0 -92
  78. package/build/domain/components/ProgressComponent.js +0 -1
  79. package/build/domain/components/RepeatableComponent.js +0 -103
  80. package/build/domain/components/ReviewComponent.js +0 -1
  81. package/build/domain/components/RootDomainComponent.js +0 -173
  82. package/build/domain/components/SectionComponent.js +0 -5
  83. package/build/domain/components/SelectInputComponent.js +0 -88
  84. package/build/domain/components/StatusListComponent.js +0 -1
  85. package/build/domain/components/SubflowDomainComponent.js +0 -9
  86. package/build/domain/components/TabsComponent.js +0 -1
  87. package/build/domain/components/TextInputComponent.js +0 -76
  88. package/build/domain/components/TupleComponent.js +0 -41
  89. package/build/domain/components/UploadInputComponent.js +0 -83
  90. package/build/domain/components/UpsellComponent.js +0 -25
  91. package/build/domain/components/searchComponent/SearchComponent.js +0 -92
  92. package/build/domain/components/searchComponent/SearchComponent.test.js +0 -190
  93. package/build/domain/components/step/ExternalConfirmationComponent.js +0 -28
  94. package/build/domain/components/step/StepDomainComponent.js +0 -78
  95. package/build/domain/components/step/ToolbarComponent.js +0 -1
  96. package/build/domain/components/utils/WithUpdate.js +0 -1
  97. package/build/domain/components/utils/component-utils.js +0 -12
  98. package/build/domain/components/utils/debounce.js +0 -34
  99. package/build/domain/components/utils/debounce.test.js +0 -67
  100. package/build/domain/components/utils/file-utils.js +0 -21
  101. package/build/domain/components/utils/file-utils.test.js +0 -27
  102. package/build/domain/components/utils/getRandomId.js +0 -1
  103. package/build/domain/components/utils/isExactLocalValueMatch.js +0 -14
  104. package/build/domain/components/utils/isOrWasValid.js +0 -5
  105. package/build/domain/components/utils/isPartialModelMatch.js +0 -18
  106. package/build/domain/components/utils/isPartialModelMatch.test.js +0 -74
  107. package/build/domain/features/eventNames.js +0 -24
  108. package/build/domain/features/events.js +0 -1
  109. package/build/domain/features/persistAsync/getComponentMultiPersistAsync.js +0 -50
  110. package/build/domain/features/persistAsync/getInitialPersistedState.js +0 -7
  111. package/build/domain/features/persistAsync/getPerformPersistAsync.js +0 -43
  112. package/build/domain/features/persistAsync/getPerformPersistAsync.test.js +0 -139
  113. package/build/domain/features/polling/getStepPolling.js +0 -43
  114. package/build/domain/features/polling/getStepPolling.test.js +0 -90
  115. package/build/domain/features/prefetch/getStepPrefetch.js +0 -43
  116. package/build/domain/features/prefetch/request-cache.js +0 -49
  117. package/build/domain/features/prefetch/request-cache.test.js +0 -70
  118. package/build/domain/features/refreshAfter/getStepRefreshAfter.js +0 -24
  119. package/build/domain/features/refreshAfter/getStepRefreshAfter.test.js +0 -40
  120. package/build/domain/features/schema-on-change/getDebouncedSchemaOnChange.js +0 -50
  121. package/build/domain/features/schema-on-change/getSchemaOnChange.js +0 -34
  122. package/build/domain/features/search/getPerformSearchFunction.js +0 -75
  123. package/build/domain/features/search/getPerformSearchFunction.test.js +0 -301
  124. package/build/domain/features/summary/summary-utils.js +0 -40
  125. package/build/domain/features/summary/summary-utils.test.js +0 -125
  126. package/build/domain/features/utils/http-utils.js +0 -21
  127. package/build/domain/features/utils/response-utils.js +0 -9
  128. package/build/domain/features/validation/spec-utils.js +0 -19
  129. package/build/domain/features/validation/validateStringPattern.js +0 -24
  130. package/build/domain/features/validation/validation-functions.js +0 -6
  131. package/build/domain/features/validation/validation-functions.test.js +0 -108
  132. package/build/domain/features/validation/value-checks.js +0 -125
  133. package/build/domain/features/validation/value-checks.test.js +0 -262
  134. package/build/domain/features/validationAsync/getComponentValidationAsync.js +0 -53
  135. package/build/domain/features/validationAsync/getComponentValidationAsync.test.js +0 -67
  136. package/build/domain/features/validationAsync/getInitialValidationAsyncState.js +0 -5
  137. package/build/domain/features/validationAsync/getPerformValidationAsync.js +0 -45
  138. package/build/domain/features/validationAsync/getPerformValidationAsync.test.js +0 -143
  139. package/build/domain/mappers/layout/alertLayoutToComponent.js +0 -16
  140. package/build/domain/mappers/layout/boxLayoutToComponent.js +0 -13
  141. package/build/domain/mappers/layout/buttonLayoutToComponent.js +0 -77
  142. package/build/domain/mappers/layout/columnsLayoutToComponent.js +0 -13
  143. package/build/domain/mappers/layout/decisionLayoutToComponent.js +0 -22
  144. package/build/domain/mappers/layout/deprecatedListLayoutToComponent.js +0 -30
  145. package/build/domain/mappers/layout/dividerLayoutToComponent.js +0 -2
  146. package/build/domain/mappers/layout/formLayoutToComponent.js +0 -19
  147. package/build/domain/mappers/layout/headingLayoutToComponent.js +0 -12
  148. package/build/domain/mappers/layout/imageLayoutToComponent.js +0 -20
  149. package/build/domain/mappers/layout/infoLayoutToComponent.js +0 -12
  150. package/build/domain/mappers/layout/instructionsLayoutToComponent.js +0 -12
  151. package/build/domain/mappers/layout/listLayoutToComponent.js +0 -39
  152. package/build/domain/mappers/layout/loadingIndicatorLayoutToComponent.js +0 -9
  153. package/build/domain/mappers/layout/markdownLayoutToComponent.js +0 -12
  154. package/build/domain/mappers/layout/mediaLayoutToComponent.js +0 -12
  155. package/build/domain/mappers/layout/modalLayoutToComponent.js +0 -17
  156. package/build/domain/mappers/layout/modalToComponent.js +0 -8
  157. package/build/domain/mappers/layout/paragraphLayoutToComponent.js +0 -12
  158. package/build/domain/mappers/layout/progressLayoutToComponent.js +0 -15
  159. package/build/domain/mappers/layout/reviewLayoutToComponent.js +0 -48
  160. package/build/domain/mappers/layout/searchLayoutToComponent.js +0 -44
  161. package/build/domain/mappers/layout/sectionLayoutToComponent.js +0 -15
  162. package/build/domain/mappers/layout/statusListLayoutToComponent.js +0 -15
  163. package/build/domain/mappers/layout/tabsLayoutToComponent.js +0 -16
  164. package/build/domain/mappers/layout/upsellLayoutToComponent.js +0 -25
  165. package/build/domain/mappers/mapLayoutToComponent.js +0 -81
  166. package/build/domain/mappers/mapSchemaToComponent.js +0 -61
  167. package/build/domain/mappers/mapSchemaToComponent.test.js +0 -112
  168. package/build/domain/mappers/mapStepSchemas.js +0 -15
  169. package/build/domain/mappers/mapStepToComponent.js +0 -133
  170. package/build/domain/mappers/mapStepToComponent.test.js +0 -221
  171. package/build/domain/mappers/mapToolbarToComponent.js +0 -15
  172. package/build/domain/mappers/schema/allOfSchemaToComponent.js +0 -16
  173. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToComponent.js +0 -26
  174. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiSelectComponent.js +0 -55
  175. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiUploadComponent.js +0 -67
  176. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToRepeatableComponent.js +0 -57
  177. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToTupleComponent.js +0 -20
  178. package/build/domain/mappers/schema/blobSchemaToComponent.js +0 -15
  179. package/build/domain/mappers/schema/booleanSchemaToComponent.js +0 -29
  180. package/build/domain/mappers/schema/constSchemaToComponent.js +0 -23
  181. package/build/domain/mappers/schema/integerSchemaToComponent.js +0 -28
  182. package/build/domain/mappers/schema/numberSchemaToComponent.js +0 -26
  183. package/build/domain/mappers/schema/objectSchemaToComponent/assertDisplayOrder.js +0 -23
  184. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToFormattedValueComponent.js +0 -9
  185. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToMoneyInputComponent.js +0 -119
  186. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToMoneyInputComponent.test.js +0 -96
  187. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToObjectComponent.js +0 -31
  188. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToObjectComponent.test.js +0 -99
  189. package/build/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.js +0 -66
  190. package/build/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.test.js +0 -225
  191. package/build/domain/mappers/schema/persistAsyncSchemaToComponent.js +0 -29
  192. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.js +0 -18
  193. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.test.js +0 -133
  194. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToDateInputComponent.js +0 -48
  195. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToTextInputComponent.js +0 -37
  196. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToUploadInputComponent.js +0 -28
  197. package/build/domain/mappers/schema/tests/test-utils.js +0 -16
  198. package/build/domain/mappers/schema/types.js +0 -1
  199. package/build/domain/mappers/schema/utils/getPerformPersistAsyncFn.js +0 -19
  200. package/build/domain/mappers/schema/utils/getValidationAsyncInitialState.js +0 -23
  201. package/build/domain/mappers/schema/utils/mapCommonSchemaProps.js +0 -16
  202. package/build/domain/mappers/types.js +0 -1
  203. package/build/domain/mappers/utils/FeatureFlags.js +0 -22
  204. package/build/domain/mappers/utils/behavior-utils.js +0 -44
  205. package/build/domain/mappers/utils/call-to-action-utils.js +0 -21
  206. package/build/domain/mappers/utils/getAutocompleteString.js +0 -76
  207. package/build/domain/mappers/utils/getAutocompleteString.test.js +0 -21
  208. package/build/domain/mappers/utils/groupLayoutByPinned.js +0 -38
  209. package/build/domain/mappers/utils/groupLayoutByPinned.test.js +0 -166
  210. package/build/domain/mappers/utils/image.js +0 -9
  211. package/build/domain/mappers/utils/layout-utils.js +0 -11
  212. package/build/domain/mappers/utils/legacy-utils.js +0 -49
  213. package/build/domain/mappers/utils/media-utils.js +0 -14
  214. package/build/domain/mappers/utils/suggestions-utils.js +0 -26
  215. package/build/domain/mappers/utils/suggestions-utils.test.js +0 -36
  216. package/build/domain/mappers/utils/tags-utils.js +0 -1
  217. package/build/domain/mappers/utils/utils.js +0 -35
  218. package/build/domain/types.js +0 -1
  219. package/build/getSubflowCallbacks.js +0 -38
  220. package/build/i18n/index.js +0 -40
  221. package/build/index.js +0 -8
  222. package/build/renderers/CoreContainerRenderer.js +0 -5
  223. package/build/renderers/CoreRootRenderer.js +0 -12
  224. package/build/renderers/EmptyLoadingStateRenderer.js +0 -5
  225. package/build/renderers/getRenderFunction.js +0 -24
  226. package/build/renderers/getSchemaErrorMessageFunction.js +0 -97
  227. package/build/renderers/mappers/alertComponentToProps.js +0 -2
  228. package/build/renderers/mappers/allOfComponentToProps.js +0 -6
  229. package/build/renderers/mappers/booleanInputComponentToProps.js +0 -5
  230. package/build/renderers/mappers/boxComponentToProps.js +0 -13
  231. package/build/renderers/mappers/buttonComponentToProps.js +0 -4
  232. package/build/renderers/mappers/columnsComponentToProps.js +0 -11
  233. package/build/renderers/mappers/componentToRendererProps.js +0 -164
  234. package/build/renderers/mappers/constComponentToProps.js +0 -5
  235. package/build/renderers/mappers/containerComponentToProps.js +0 -7
  236. package/build/renderers/mappers/dateInputComponentToProps.js +0 -2
  237. package/build/renderers/mappers/decisionComponentToProps.js +0 -16
  238. package/build/renderers/mappers/dividerComponentToProps.js +0 -2
  239. package/build/renderers/mappers/externalComponentToProps.js +0 -3
  240. package/build/renderers/mappers/formComponentToProps.js +0 -12
  241. package/build/renderers/mappers/formattedValueComponentToProps.js +0 -5
  242. package/build/renderers/mappers/headingComponentToProps.js +0 -2
  243. package/build/renderers/mappers/hiddenComponentToProps.js +0 -4
  244. package/build/renderers/mappers/imageComponentToProps.js +0 -2
  245. package/build/renderers/mappers/instructionsComponentToProps.js +0 -2
  246. package/build/renderers/mappers/integerInputComponentToProps.js +0 -2
  247. package/build/renderers/mappers/listComponentToProps.js +0 -2
  248. package/build/renderers/mappers/loadingIndicatorComponentToProps.js +0 -2
  249. package/build/renderers/mappers/markdownComponentToProps.js +0 -2
  250. package/build/renderers/mappers/mediaComponentToProps.js +0 -2
  251. package/build/renderers/mappers/modalComponentToProps.js +0 -11
  252. package/build/renderers/mappers/modalLayoutComponentToProps.js +0 -16
  253. package/build/renderers/mappers/moneyInputComponentToProps.js +0 -36
  254. package/build/renderers/mappers/multiSelectComponentToProps.js +0 -23
  255. package/build/renderers/mappers/multiUploadInputComponentToProps.js +0 -12
  256. package/build/renderers/mappers/numberInputComponentToProps.js +0 -2
  257. package/build/renderers/mappers/objectComponentToProps.js +0 -8
  258. package/build/renderers/mappers/paragraphComponentToProps.js +0 -2
  259. package/build/renderers/mappers/persistAsyncComponentToProps.js +0 -8
  260. package/build/renderers/mappers/progressComponentToProps.js +0 -2
  261. package/build/renderers/mappers/repeatableComponentToProps.js +0 -30
  262. package/build/renderers/mappers/reviewComponentToProps.js +0 -2
  263. package/build/renderers/mappers/rootComponentToProps.js +0 -21
  264. package/build/renderers/mappers/searchComponentToProps.js +0 -57
  265. package/build/renderers/mappers/sectionComponentToProps.js +0 -6
  266. package/build/renderers/mappers/selectInputComponentToProps.js +0 -34
  267. package/build/renderers/mappers/statusListComponentToProps.js +0 -2
  268. package/build/renderers/mappers/subflowComponentToRendererProps.js +0 -4
  269. package/build/renderers/mappers/tabsComponentToProps.js +0 -14
  270. package/build/renderers/mappers/textInputComponentToProps.js +0 -2
  271. package/build/renderers/mappers/tupleComponentToProps.js +0 -8
  272. package/build/renderers/mappers/uploadInputComponentToProps.js +0 -8
  273. package/build/renderers/mappers/upsellComponentToProps.js +0 -2
  274. package/build/renderers/mappers/utils/getValidationState.js +0 -12
  275. package/build/renderers/mappers/utils/inputComponentToProps.js +0 -26
  276. package/build/renderers/mappers/utils/mapErrorsToValidationState.js +0 -9
  277. package/build/renderers/mappers/utils/pick.js +0 -8
  278. package/build/renderers/mappers/utils/selectInputOptionsToProps.js +0 -11
  279. package/build/renderers/stepComponentToProps.js +0 -32
  280. package/build/renderers/utils.js +0 -69
  281. package/build/renderers/utils.test.js +0 -70
  282. package/build/stories/dev-tools/ContainerQueries.story.js +0 -66
  283. package/build/stories/dev-tools/Debugger.story.js +0 -38
  284. package/build/stories/dev-tools/FixtureSelect.story.js +0 -23
  285. package/build/stories/dev-tools/TestServer.story.js +0 -32
  286. package/build/stories/examples/NativeFlow.story.js +0 -80
  287. package/build/stories/examples/Recipients.story.js +0 -568
  288. package/build/stories/spec/behavior/Copy.story.js +0 -71
  289. package/build/stories/spec/behavior/Link.story.js +0 -40
  290. package/build/stories/spec/behavior/Modal.story.js +0 -79
  291. package/build/stories/spec/behavior/Subflow.story.js +0 -267
  292. package/build/stories/spec/layouts/Decision.story.js +0 -241
  293. package/build/stories/spec/layouts/Image.story.js +0 -42
  294. package/build/stories/spec/layouts/Modal.story.js +0 -81
  295. package/build/stories/spec/layouts/Search.story.js +0 -325
  296. package/build/stories/spec/layouts/Upsell.story.js +0 -55
  297. package/build/stories/spec/layouts/button/Button.story.js +0 -100
  298. package/build/stories/spec/layouts/button/PinnedButton.story.js +0 -81
  299. package/build/stories/spec/response/ActionResponse.story.js +0 -66
  300. package/build/stories/spec/schemas/MultiSelect.story.js +0 -148
  301. package/build/stories/spec/schemas/Upload.story.js +0 -168
  302. package/build/stories/spec/schemas/const/ConstLayout.story.js +0 -159
  303. package/build/stories/spec/schemas/const/ObjectConst.story.js +0 -94
  304. package/build/stories/spec/schemas/features/PersistAsync.story.js +0 -211
  305. package/build/stories/spec/schemas/features/ValidationAsync.story.js +0 -103
  306. package/build/stories/spec/schemas/object/FormattedValue.story.js +0 -92
  307. package/build/stories/spec/schemas/object/MoneyInput.story.js +0 -240
  308. package/build/stories/spec/schemas/oneOf/OneOfInitialisation.story.js +0 -55
  309. package/build/stories/spec/schemas/oneOf/OneOfWithSingleOption.story.js +0 -114
  310. package/build/stories/spec/step/Controls.story.js +0 -109
  311. package/build/stories/spec/step/DFModal.story.js +0 -58
  312. package/build/stories/spec/step/Footer.story.js +0 -70
  313. package/build/stories/spec/step/Navigation.story.js +0 -20
  314. package/build/stories/spec/step/Tags.story.js +0 -39
  315. package/build/stories/spec/step/ToolBar.story.js +0 -60
  316. package/build/stories/spec/step/features/ErrorHandling.story.js +0 -92
  317. package/build/stories/spec/step/features/External.story.js +0 -91
  318. package/build/stories/spec/step/features/Polling.story.js +0 -108
  319. package/build/stories/spec/step/features/RefreshAfter.story.js +0 -92
  320. package/build/stories/spec/step/features/refresh/Refresh.story.js +0 -258
  321. package/build/stories/spec/step/features/refresh/RefreshWithPersistAsync.story.js +0 -958
  322. package/build/stories/types.js +0 -1
  323. package/build/stories/utils/fixtureHttpClient.js +0 -70
  324. package/build/stories/utils/getBasicStep.js +0 -223
  325. package/build/stories/utils/mockSearchHandler.js +0 -71
  326. package/build/stories/utils/render-utils.js +0 -41
  327. package/build/stories/visual-tests/layouts/NotUsingListItem.story.js +0 -17
  328. package/build/test-utils/DynamicFlowWise.js +0 -32
  329. package/build/test-utils/DynamicFlowWiseModal.js +0 -34
  330. package/build/test-utils/NeptuneProviders.js +0 -11
  331. package/build/test-utils/component-utils.js +0 -5
  332. package/build/test-utils/fetch-utils.js +0 -45
  333. package/build/test-utils/getMergedTestRenderers.js +0 -34
  334. package/build/test-utils/getRandomId.js +0 -1
  335. package/build/test-utils/index.js +0 -3
  336. package/build/test-utils/rtl-utils.js +0 -7
  337. package/build/test-utils/step-utils.js +0 -6
  338. package/build/test-utils/wait.js +0 -3
  339. package/build/tests/AlertLayout.test.js +0 -78
  340. package/build/tests/ArrayTuple.test.js +0 -118
  341. package/build/tests/ButtonLayout.test.js +0 -308
  342. package/build/tests/ConstLayout.test.js +0 -95
  343. package/build/tests/DateInput.test.js +0 -163
  344. package/build/tests/DecisionLayout.test.js +0 -146
  345. package/build/tests/DynamicFlow.test.js +0 -147
  346. package/build/tests/External.test.js +0 -169
  347. package/build/tests/Flow.test.js +0 -328
  348. package/build/tests/FormLayout.test.js +0 -28
  349. package/build/tests/FormattedValue.test.js +0 -107
  350. package/build/tests/ImageRenderer.test.js +0 -78
  351. package/build/tests/InitialAction.test.js +0 -179
  352. package/build/tests/InitialStep.test.js +0 -168
  353. package/build/tests/InstructionsLayout.test.js +0 -45
  354. package/build/tests/ListLayout.test.js +0 -145
  355. package/build/tests/Logging.test.js +0 -53
  356. package/build/tests/ModalBehavior.test.js +0 -149
  357. package/build/tests/MoneyInput.test.js +0 -316
  358. package/build/tests/MultiUpload.test.js +0 -293
  359. package/build/tests/NativeBack.test.js +0 -267
  360. package/build/tests/NoOp.test.js +0 -194
  361. package/build/tests/OneOfInitialisation.test.js +0 -571
  362. package/build/tests/PersistAsync.test.js +0 -687
  363. package/build/tests/Polling.test.js +0 -617
  364. package/build/tests/Prefetching.test.js +0 -230
  365. package/build/tests/RefreshAfter.test.js +0 -63
  366. package/build/tests/RefreshOnChange.ResponseHandling.test.js +0 -205
  367. package/build/tests/RefreshOnChange.test.js +0 -233
  368. package/build/tests/RefreshOnChange.with.Segmented.test.js +0 -348
  369. package/build/tests/RefreshOnChange.with.Tabs.test.js +0 -358
  370. package/build/tests/RefreshOnChangePreserve.test.js +0 -224
  371. package/build/tests/RendererProps.test.js +0 -342
  372. package/build/tests/Repeatable.test.js +0 -107
  373. package/build/tests/Rerendering.test.js +0 -67
  374. package/build/tests/ReviewLayout.test.js +0 -274
  375. package/build/tests/SchemaOnChange.test.js +0 -133
  376. package/build/tests/SchemaReferences.test.js +0 -88
  377. package/build/tests/ScrollToError.test.js +0 -217
  378. package/build/tests/SegmentedControl.test.js +0 -49
  379. package/build/tests/SingleFileUpload.test.js +0 -88
  380. package/build/tests/StatusList.test.js +0 -85
  381. package/build/tests/Subflow.test.js +0 -710
  382. package/build/tests/Submission.ResponseHandling.test.js +0 -557
  383. package/build/tests/Submission.merging.test.js +0 -202
  384. package/build/tests/Submission.test.js +0 -748
  385. package/build/tests/Tags.test.js +0 -475
  386. package/build/tests/Upsell.test.js +0 -154
  387. package/build/tests/ValidationAsync.test.js +0 -295
  388. package/build/tests/legacy/Actions.test.js +0 -158
  389. package/build/tests/legacy/BackButton.test.js +0 -114
  390. package/build/tests/legacy/HiddenSchemas.test.js +0 -246
  391. package/build/tests/legacy/MultiSelect.test.js +0 -501
  392. package/build/tests/legacy/MultipleFileUploadSchema.test.js +0 -341
  393. package/build/tests/legacy/PersistAsync.blob-schema.test.js +0 -224
  394. package/build/tests/legacy/PersistAsync.string-schema.test.js +0 -211
  395. package/build/tests/legacy/RefreshStepOnChange.debouncing.test.js +0 -209
  396. package/build/tests/legacy/RefreshStepOnChange.test.js +0 -424
  397. package/build/tests/legacy/Search.test.js +0 -437
  398. package/build/tests/renderers/MultiSelectInputRendererProps.test.js +0 -58
  399. package/build/tests/renderers/SelectInputRendererProps.test.js +0 -43
  400. package/build/tests/renderers/TextInputRenderer.test.js +0 -51
  401. package/build/types/utils/openLinkInNewTab.d.ts.map +0 -1
  402. package/build/types.js +0 -1
  403. package/build/useDynamicFlow.js +0 -104
  404. package/build/useDynamicFlowModal.js +0 -58
  405. package/build/utils/analyse-step.js +0 -14
  406. package/build/utils/component-utils.js +0 -8
  407. package/build/utils/component-utils.test.js +0 -113
  408. package/build/utils/getScrollToTop.js +0 -12
  409. package/build/utils/normalise-flow-id.js +0 -1
  410. package/build/utils/normalise-flow-id.test.js +0 -24
  411. package/build/utils/openLinkInNewTab.js +0 -10
  412. package/build/utils/recursiveMerge.js +0 -40
  413. package/build/utils/recursiveMerge.test.js +0 -93
  414. package/build/utils/type-utils.js +0 -21
  415. package/build/utils/type-validators.js +0 -11
  416. package/build/utils/type-validators.test.js +0 -180
  417. package/build/utils/useStableCallback.js +0 -15
  418. /package/build/types/{utils → test-utils}/openLinkInNewTab.d.ts +0 -0
@@ -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
- };