@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,78 +0,0 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
11
- };
12
- import { getLocalValues, getSubmittableData, getSubmittableDataSync, } from '../../../utils/component-utils';
13
- import { getInputUpdateFunction } from '../utils/component-utils';
14
- export const createStepComponent = (stepProps) => {
15
- const { uid, stepPolling, stepRefreshAfter, stepPrefetch, onComponentUpdate } = stepProps, rest = __rest(stepProps, ["uid", "stepPolling", "stepRefreshAfter", "stepPrefetch", "onComponentUpdate"]);
16
- const update = getInputUpdateFunction(onComponentUpdate);
17
- const component = Object.assign(Object.assign({ uid }, rest), { type: 'step', kind: 'step', modals: [], requestCache: stepPrefetch.requestCache, dismissModal() {
18
- var _a;
19
- (_a = this.modals.at(-1)) === null || _a === void 0 ? void 0 : _a.close();
20
- },
21
- dismissAllModals() {
22
- this._update((draft) => {
23
- draft.modals = draft.modals.map((m) => (Object.assign(Object.assign({}, m), { open: false })));
24
- });
25
- },
26
- showModal(modal) {
27
- this._update((draft) => {
28
- draft.modals = [...draft.modals, modal];
29
- });
30
- },
31
- _update(updateFn) {
32
- update(this, updateFn);
33
- },
34
- getChildren() {
35
- return this.externalConfirmation
36
- ? [...this.layoutComponents, this.externalConfirmation]
37
- : this.layoutComponents;
38
- },
39
- getModals() {
40
- return this.modals;
41
- },
42
- async getSubmittableValue() {
43
- return getSubmittableData(this.schemaComponents);
44
- },
45
- getSubmittableValueSync() {
46
- return getSubmittableDataSync(this.schemaComponents);
47
- },
48
- getLocalValue() {
49
- return getLocalValues(this.schemaComponents);
50
- },
51
- validate() {
52
- return this.schemaComponents.every((inputComponent) => {
53
- var _a;
54
- return this.referencedSchemaIds.includes((_a = inputComponent.schemaId) !== null && _a !== void 0 ? _a : '')
55
- ? inputComponent.validate()
56
- : true;
57
- });
58
- },
59
- setLoadingState(loadingState) {
60
- this._update((draft) => {
61
- draft.loadingState = loadingState;
62
- });
63
- },
64
- start() {
65
- stepPolling === null || stepPolling === void 0 ? void 0 : stepPolling.start();
66
- stepRefreshAfter === null || stepRefreshAfter === void 0 ? void 0 : stepRefreshAfter.start();
67
- stepPrefetch.start(this.getSubmittableValueSync());
68
- },
69
- stop() {
70
- stepPolling === null || stepPolling === void 0 ? void 0 : stepPolling.stop();
71
- stepRefreshAfter === null || stepRefreshAfter === void 0 ? void 0 : stepRefreshAfter.stop();
72
- stepPrefetch.stop();
73
- this._update((draft) => {
74
- draft.modals = [];
75
- });
76
- } });
77
- return component;
78
- };
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,12 +0,0 @@
1
- /**
2
- * Helper function to update a component.
3
- *
4
- * @param onComponentUpdate the function that will notify the view layer that something has changed in the domain layer
5
- * @returns a function that can be used to update components without the linter shouting at us.
6
- */
7
- export const getInputUpdateFunction = (onComponentUpdate) => {
8
- return (component, updateFn) => {
9
- updateFn(component);
10
- onComponentUpdate();
11
- };
12
- };
@@ -1,34 +0,0 @@
1
- export const debounce = (callback, waitMs) => {
2
- let timeoutId = null;
3
- let lastArgs = null;
4
- const clearTimer = () => {
5
- if (timeoutId) {
6
- clearTimeout(timeoutId);
7
- timeoutId = null;
8
- }
9
- lastArgs = null;
10
- };
11
- const debouncedFn = (...args) => {
12
- lastArgs = args;
13
- if (timeoutId !== null) {
14
- clearTimeout(timeoutId);
15
- }
16
- timeoutId = setTimeout(() => {
17
- callback(...lastArgs);
18
- timeoutId = null;
19
- lastArgs = null;
20
- }, waitMs);
21
- };
22
- debouncedFn.cancel = () => {
23
- if (timeoutId !== null) {
24
- clearTimer();
25
- }
26
- };
27
- debouncedFn.flush = () => {
28
- if (timeoutId !== null) {
29
- callback(...lastArgs);
30
- clearTimer();
31
- }
32
- };
33
- return debouncedFn;
34
- };
@@ -1,67 +0,0 @@
1
- import { vi } from 'vitest';
2
- import { debounce } from './debounce';
3
- describe('debounce', () => {
4
- it('will delay function execution until the wait period has passed', () => {
5
- const fn = vi.fn();
6
- const debouncedFn = debounce(fn, 5);
7
- debouncedFn();
8
- expect(fn).toHaveBeenCalledTimes(0);
9
- vi.advanceTimersByTime(5);
10
- expect(fn).toHaveBeenCalledTimes(1);
11
- });
12
- it('will call function with provided arguments', () => {
13
- const fn = vi.fn();
14
- const debouncedFn = debounce(fn, 5);
15
- debouncedFn('a', 'b', 'c');
16
- vi.advanceTimersByTime(5);
17
- expect(fn).toHaveBeenCalledTimes(1);
18
- expect(fn).toHaveBeenCalledWith('a', 'b', 'c');
19
- });
20
- it('will reset the wait period and ignore previous executions if called within the wait period', () => {
21
- const fn = vi.fn();
22
- const debouncedFn = debounce(fn, 5);
23
- debouncedFn(1, 2, 3);
24
- vi.advanceTimersByTime(4);
25
- debouncedFn('a', 'b', 'c');
26
- vi.advanceTimersByTime(5);
27
- expect(fn).toHaveBeenCalledTimes(1);
28
- expect(fn).toHaveBeenCalledWith('a', 'b', 'c');
29
- });
30
- it('will call the same function twice if invoked after the wait period', () => {
31
- const fn = vi.fn();
32
- const debouncedFn = debounce(fn, 5);
33
- debouncedFn();
34
- vi.advanceTimersByTime(5);
35
- debouncedFn();
36
- vi.advanceTimersByTime(5);
37
- expect(fn).toHaveBeenCalledTimes(2);
38
- });
39
- describe('flush', () => {
40
- it('will call the callback immediately', () => {
41
- const fn = vi.fn();
42
- const debouncedFn = debounce(fn, 5);
43
- debouncedFn();
44
- debouncedFn.flush();
45
- expect(fn).toHaveBeenCalledTimes(1);
46
- });
47
- it('uses the last passed args', () => {
48
- const fn = vi.fn();
49
- const debouncedFn = debounce(fn, 5);
50
- debouncedFn(1, 2, 3);
51
- debouncedFn('a', 'b', 'c');
52
- debouncedFn.flush();
53
- expect(fn).toHaveBeenCalledTimes(1);
54
- expect(fn).toHaveBeenCalledWith('a', 'b', 'c');
55
- });
56
- });
57
- describe('cancel', () => {
58
- it('cancels any waiting callback', () => {
59
- const fn = vi.fn();
60
- const debouncedFn = debounce(fn, 5);
61
- debouncedFn();
62
- debouncedFn.cancel();
63
- vi.advanceTimersByTime(5);
64
- expect(fn).toHaveBeenCalledTimes(0);
65
- });
66
- });
67
- });
@@ -1,21 +0,0 @@
1
- export const toBase64 = async (file) => new Promise((resolve, reject) => {
2
- const reader = new FileReader();
3
- reader.addEventListener('load', () => resolve(reader.result));
4
- reader.addEventListener('error', reject);
5
- reader.readAsDataURL(file);
6
- });
7
- export const base64dataUrltoFile = (dataurl, filename) => {
8
- if (!isBase64DataUrl(dataurl)) {
9
- return null;
10
- }
11
- const [, base64data] = dataurl.split(',');
12
- return new File([base64ToBytes(base64data)], filename, { type: getMimeType(dataurl) });
13
- };
14
- const isBase64DataUrl = (dataurl) => dataurl.startsWith('data:') && dataurl.includes('base64') && dataurl.includes(',');
15
- const getMimeType = (base64dataUrl) => base64dataUrl.substring('data:'.length).split(';')[0];
16
- const base64ToBytes = (base64) => {
17
- const charCodes = atob(base64)
18
- .split('')
19
- .map((m) => m.charCodeAt(0));
20
- return Uint8Array.from(charCodes);
21
- };
@@ -1,27 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-non-null-assertion */
2
- import { base64dataUrltoFile, toBase64 } from './file-utils';
3
- describe('toBase64', () => {
4
- describe('given a valid file', () => {
5
- it('should return a base64 string', async () => {
6
- const file = new File(['hello'], 'test.txt', { type: 'text/plain' });
7
- await expect(toBase64(file)).resolves.toBe('data:text/plain;base64,aGVsbG8=');
8
- });
9
- });
10
- });
11
- describe('dataURLtoFile', () => {
12
- describe('given a valid data URL', () => {
13
- const dataurl = 'data:text/plain;base64,aGVsbG8=';
14
- it('should return a file that can be encoded back to the given string', async () => {
15
- const file = base64dataUrltoFile(dataurl, 'test.txt');
16
- expect(file).toBeInstanceOf(File);
17
- expect(file.type).toBe('text/plain');
18
- expect(file.name).toBe('test.txt');
19
- await expect(toBase64(file)).resolves.toBe(dataurl);
20
- });
21
- });
22
- describe('given an invalid data URL', () => {
23
- it('should return null', () => {
24
- expect(base64dataUrltoFile('invalid', 'test.txt')).toBeNull();
25
- });
26
- });
27
- });
@@ -1 +0,0 @@
1
- export const getRandomId = () => Math.random().toString(36).substring(2);
@@ -1,14 +0,0 @@
1
- import { isArrayLocalValue, isObjectLocalValue } from '../../../utils/type-utils';
2
- export const isExactLocalValueMatch = (valueA, valueB) => {
3
- if (isArrayLocalValue(valueA) && isArrayLocalValue(valueB)) {
4
- return (valueA.length === valueB.length &&
5
- valueA.every((value, index) => isExactLocalValueMatch(value, valueB[index])));
6
- }
7
- if (isObjectLocalValue(valueA) && isObjectLocalValue(valueB)) {
8
- const keysA = Object.keys(valueA);
9
- const keysB = Object.keys(valueB);
10
- return (keysA.length === keysB.length &&
11
- keysA.every((key) => isExactLocalValueMatch(valueA[key], valueB[key])));
12
- }
13
- return valueA === valueB;
14
- };
@@ -1,5 +0,0 @@
1
- export const isOrWasValid = (getErrors, previous, current) => {
2
- const wasValid = getErrors(previous).length === 0 && previous !== null;
3
- const isValid = getErrors(current).length === 0;
4
- return wasValid || isValid;
5
- };
@@ -1,18 +0,0 @@
1
- import { isArrayModel, isObjectModel } from '../../../utils/type-utils';
2
- import { isNullish } from '../../../utils/type-validators';
3
- export const isPartialModelMatch = (localModel, incomingModel) => {
4
- if (isArrayModel(localModel) && isArrayModel(incomingModel)) {
5
- return (localModel.length === incomingModel.length &&
6
- localModel.every((value, index) => isPartialModelMatch(value, incomingModel[index])));
7
- }
8
- if (isObjectModel(localModel) && isObjectModel(incomingModel)) {
9
- if (Object.keys(localModel).length === 0 && Object.keys(incomingModel).length === 0) {
10
- return true;
11
- }
12
- const nonNullishKeysInBoth = nonNullishKeys(localModel).filter((key) => nonNullishKeys(incomingModel).includes(key));
13
- return (nonNullishKeysInBoth.length > 0 &&
14
- nonNullishKeysInBoth.every((key) => isPartialModelMatch(localModel[key], incomingModel[key])));
15
- }
16
- return localModel === incomingModel;
17
- };
18
- const nonNullishKeys = (model) => Object.keys(model).filter((key) => !isNullish(model[key]));
@@ -1,74 +0,0 @@
1
- import { isPartialModelMatch } from './isPartialModelMatch';
2
- describe('isPartialModelMatch', () => {
3
- describe('when both models are arrays', () => {
4
- it('will return true if both models are empty', () => {
5
- expect(isPartialModelMatch([], [])).toBe(true);
6
- });
7
- it('will return false if the models have different lengths', () => {
8
- expect(isPartialModelMatch([1], [1, 2])).toBe(false);
9
- expect(isPartialModelMatch([1, 2], [1])).toBe(false);
10
- });
11
- it('will return false if any of the items in the array do not partially match', () => {
12
- expect(isPartialModelMatch([1], [2])).toBe(false);
13
- expect(isPartialModelMatch([[1]], [[2]])).toBe(false);
14
- expect(isPartialModelMatch([{ prop: 'value' }], [{ prop: 'different value' }])).toBe(false);
15
- });
16
- it('will return true if all items in the arrays partially match', () => {
17
- expect(isPartialModelMatch([1], [1])).toBe(true);
18
- });
19
- });
20
- describe('when both models are objects', () => {
21
- it('wil return true if both localModel and incomingModel are empty', () => {
22
- expect(isPartialModelMatch({}, {})).toBe(true);
23
- });
24
- it('will return false if localModel is empty', () => {
25
- expect(isPartialModelMatch({}, { prop: 1 })).toBe(false);
26
- });
27
- it('will return false if incomingModel is empty', () => {
28
- expect(isPartialModelMatch({ prop: 1 }, {})).toBe(false);
29
- });
30
- it('will return false if the models have matching keys with different values', () => {
31
- expect(isPartialModelMatch({ key: 1 }, { key: 2 })).toBe(false);
32
- expect(isPartialModelMatch({ key: 2 }, { key: 1 })).toBe(false);
33
- });
34
- it('will return true if matching keys have the same value', () => {
35
- expect(isPartialModelMatch({ key: 1 }, { key: 1 })).toBe(true);
36
- });
37
- it('will ignore the value of non-matching keys', () => {
38
- expect(isPartialModelMatch({ matchingKey: 1 }, { matchingKey: 1, otherKey: 2 })).toBe(true);
39
- expect(isPartialModelMatch({ otherKey: 2, matchingKey: 1 }, { matchingKey: 1 })).toBe(true);
40
- });
41
- it('will ignore the value of nullish keys', () => {
42
- expect(isPartialModelMatch({ matchingKey: 1, otherKey: 2 }, { matchingKey: 1, otherKey: null })).toBe(true);
43
- expect(isPartialModelMatch({ otherKey: null, matchingKey: 1 }, { matchingKey: 1, otherKey: 2 })).toBe(true);
44
- expect(isPartialModelMatch({ matchingKey: 1, otherKey: null }, { matchingKey: 1 })).toBe(true);
45
- expect(isPartialModelMatch({ matchingKey: 1 }, { matchingKey: 1, otherKey: null })).toBe(true);
46
- });
47
- it('looks for matches recursively', () => {
48
- expect(isPartialModelMatch({ matchingKey: [{ matchingKey: 2 }] }, { matchingKey: [{ matchingKey: 2 }] })).toBe(true);
49
- expect(isPartialModelMatch({ matchingKey: [{ matchingKey: 2 }] }, { matchingKey: [{ matchingKey: 3 }] })).toBe(false);
50
- });
51
- });
52
- describe('when both models are matching primitives', () => {
53
- it('will return true if the models are equal', () => {
54
- expect(isPartialModelMatch(1, 1)).toBe(true);
55
- expect(isPartialModelMatch('value', 'value')).toBe(true);
56
- expect(isPartialModelMatch(true, true)).toBe(true);
57
- });
58
- it('will return false if the models are not equal', () => {
59
- expect(isPartialModelMatch(1, 2)).toBe(false);
60
- expect(isPartialModelMatch('value', 'different value')).toBe(false);
61
- expect(isPartialModelMatch(true, false)).toBe(false);
62
- });
63
- });
64
- describe('when models are of different types', () => {
65
- it('will always return false', () => {
66
- expect(isPartialModelMatch(null, 1)).toBe(false);
67
- expect(isPartialModelMatch(1, null)).toBe(false);
68
- expect(isPartialModelMatch({}, [])).toBe(false);
69
- expect(isPartialModelMatch([], {})).toBe(false);
70
- expect(isPartialModelMatch(1, {})).toBe(false);
71
- expect(isPartialModelMatch({}, 1)).toBe(false);
72
- });
73
- });
74
- });
@@ -1,24 +0,0 @@
1
- export const eventNames = [
2
- 'Initiated',
3
- 'Succeeded',
4
- 'Failed',
5
- 'Cancelled',
6
- 'Step Shown',
7
- 'Action Triggered',
8
- 'Action Succeeded',
9
- 'Action Aborted',
10
- 'Action Failed',
11
- 'Refresh Triggered',
12
- 'Refresh Succeeded',
13
- 'Refresh Aborted',
14
- 'Refresh Failed',
15
- 'OneOf Selected',
16
- 'OneOf Option Selected',
17
- 'PersistAsync Triggered',
18
- 'PersistAsync Succeeded',
19
- 'PersistAsync Failed',
20
- 'Polling Failed',
21
- 'ValidationAsync Triggered',
22
- 'ValidationAsync Succeeded',
23
- 'ValidationAsync Failed',
24
- ];
@@ -1 +0,0 @@
1
- export {};
@@ -1,50 +0,0 @@
1
- import { isNullish } from '../../../utils/type-validators';
2
- import { getRandomId } from '../../components/utils/getRandomId';
3
- /**
4
- * Creates an onPersistAsync handler for a component.
5
- */
6
- export const getComponentMultiPersistAsync = (update, performPersistAsync) =>
7
- /**
8
- * Will update the persistedState when a new request is made, and will update
9
- * the value or set errors when the request completes.
10
- */
11
- async (component, index, value) => {
12
- if (isNullish(value)) {
13
- throw new Error('Value must be a file or base64 string.');
14
- }
15
- const newAbortController = new AbortController();
16
- const { signal } = newAbortController;
17
- const newSubmission = performPersistAsync({ value, signal })
18
- .then((newValue) => {
19
- update(component, (draft) => {
20
- draft.persistedState[index].lastResponse = newValue;
21
- });
22
- return newValue;
23
- })
24
- .catch((error) => {
25
- update(component, (draft) => {
26
- // The file was not persisted, so delete it
27
- draft.persistedState = [
28
- ...draft.persistedState.slice(0, index),
29
- ...draft.persistedState.slice(index + 1),
30
- ];
31
- draft.value.splice(index, 1);
32
- draft.files.splice(index, 1);
33
- });
34
- throw error;
35
- });
36
- update(component, (draft) => {
37
- draft.persistedState = [
38
- ...draft.persistedState.slice(0, index),
39
- {
40
- id: getRandomId(),
41
- abortController: newAbortController,
42
- lastResponse: null,
43
- lastSubmitted: null,
44
- submission: newSubmission,
45
- },
46
- ...draft.persistedState.slice(index),
47
- ];
48
- });
49
- return newSubmission;
50
- };
@@ -1,7 +0,0 @@
1
- import { isNullish } from '../../../utils/type-validators';
2
- export const getInitialPersistedState = (lastSubmitted, model) => ({
3
- abortController: new AbortController(),
4
- lastSubmitted: !isNullish(model) ? (lastSubmitted !== null && lastSubmitted !== void 0 ? lastSubmitted : null) : null,
5
- lastResponse: model !== null && model !== void 0 ? model : null,
6
- submission: Promise.resolve(model !== null && model !== void 0 ? model : null),
7
- });
@@ -1,43 +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 persist async config and returns a function that can
6
- * execute a persist async request.
7
- */
8
- export const getPerformPersistAsync = ({ genericErrorMessage, httpClient, persistAsyncConfig, schemaId, logEvent, trackEvent, }) => {
9
- const { idProperty, param, method, url } = persistAsyncConfig;
10
- const trackFailure = (json) => {
11
- const analytics = getAnalyticsFromErrorResponse(json);
12
- trackEvent('PersistAsync Failed', Object.assign({ schema: schemaId }, analytics));
13
- };
14
- return async function performPersistAsync({ value, signal }) {
15
- let response;
16
- let json;
17
- try {
18
- trackEvent('PersistAsync Triggered', { schema: schemaId });
19
- response = await httpClient(url, constructPayload({ value, signal, requestConfig: { method, param } }));
20
- json = (await response.json());
21
- if (response.ok && isObject(json)) {
22
- trackEvent('PersistAsync Succeeded', { schema: schemaId });
23
- if (json[idProperty] === undefined) {
24
- logEvent('error', `Response from persist async did not contain expected property ${idProperty}.`);
25
- throw new Error(genericErrorMessage);
26
- }
27
- return json[idProperty];
28
- }
29
- }
30
- catch (_a) {
31
- trackFailure();
32
- throw new Error(genericErrorMessage);
33
- }
34
- const validationError = !response.ok && isObject(json) ? getValidationError(param, json) : null;
35
- trackFailure(json);
36
- throw new Error(validationError !== null && validationError !== void 0 ? validationError : genericErrorMessage);
37
- };
38
- };
39
- const getValidationError = (param, response) => {
40
- var _a;
41
- const message = (_a = response.validation) === null || _a === void 0 ? void 0 : _a[param];
42
- return isString(message) ? message : null;
43
- };
@@ -1,139 +0,0 @@
1
- import { vi } from 'vitest';
2
- import { getMockHttpClient, respondWith } from '../../../test-utils';
3
- import { getPerformPersistAsync } from './getPerformPersistAsync';
4
- describe('getPerformPersistAsync', () => {
5
- const genericErrorMessage = 'Error';
6
- const trackEvent = vi.fn();
7
- const logEvent = vi.fn();
8
- const signal = {};
9
- const persistAsyncConfig = {
10
- idProperty: 'id',
11
- method: 'POST',
12
- param: 'param',
13
- url: '/persist',
14
- };
15
- it('should make the request using the specified parameter', async () => {
16
- const spyHttpClient = vi.fn().mockResolvedValue(respondWith({ id: 1 }));
17
- const spyTrackEvent = vi.fn();
18
- const performPersistAsync = getPerformPersistAsync({
19
- httpClient: spyHttpClient,
20
- trackEvent: spyTrackEvent,
21
- logEvent,
22
- persistAsyncConfig,
23
- genericErrorMessage,
24
- schemaId: 'schemaId',
25
- });
26
- await performPersistAsync({ value: 'value', signal });
27
- expect(spyHttpClient).toHaveBeenCalledWith('/persist', {
28
- body: '{"param":"value"}',
29
- headers: { 'Content-Type': 'application/json' },
30
- method: 'POST',
31
- signal,
32
- });
33
- expect(spyTrackEvent).toHaveBeenCalledWith('PersistAsync Triggered', expect.objectContaining({ schema: 'schemaId' }));
34
- });
35
- it('should wrap blobs in form data before submitting', async () => {
36
- const spyHttpClient = vi.fn().mockResolvedValue(respondWith({ id: 1 }));
37
- const performPersistAsync = getPerformPersistAsync({
38
- httpClient: spyHttpClient,
39
- trackEvent,
40
- logEvent,
41
- persistAsyncConfig,
42
- genericErrorMessage,
43
- });
44
- const file = new File(['file'], 'file.txt');
45
- await performPersistAsync({ value: file, signal });
46
- expect(spyHttpClient).toHaveBeenCalledWith('/persist', {
47
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
48
- body: expect.any(FormData),
49
- headers: {},
50
- method: 'POST',
51
- signal,
52
- });
53
- });
54
- describe('when the response is ok', () => {
55
- it('should read response value from idProperty', async () => {
56
- const httpClient = getMockHttpClient({
57
- '/persist': async () => respondWith({ id: 1 }),
58
- });
59
- const spyTrackEvent = vi.fn();
60
- const performPersistAsync = getPerformPersistAsync({
61
- httpClient,
62
- trackEvent: spyTrackEvent,
63
- logEvent,
64
- persistAsyncConfig,
65
- genericErrorMessage,
66
- schemaId: 'schemaId',
67
- });
68
- const result = await performPersistAsync({ value: 'value', signal });
69
- expect(result).toBe(1);
70
- expect(spyTrackEvent).toHaveBeenLastCalledWith('PersistAsync Succeeded', expect.objectContaining({ schema: 'schemaId' }));
71
- });
72
- it('should throw a generic error if the response is not an object', async () => {
73
- const httpClient = getMockHttpClient({
74
- '/persist': async () => respondWith(1),
75
- });
76
- const spyTrackEvent = vi.fn();
77
- const performPersistAsync = getPerformPersistAsync({
78
- httpClient,
79
- trackEvent: spyTrackEvent,
80
- logEvent,
81
- persistAsyncConfig,
82
- genericErrorMessage,
83
- schemaId: 'schemaId',
84
- });
85
- await expect(performPersistAsync({ value: 'value', signal })).rejects.toThrow(genericErrorMessage);
86
- expect(spyTrackEvent).toHaveBeenLastCalledWith('PersistAsync Failed', expect.objectContaining({ schema: 'schemaId' }));
87
- });
88
- });
89
- describe.each([[401], [422], [504]])('when the response is %s', (errorStatusCode) => {
90
- it('should throw if the response includes a validation message', async () => {
91
- const httpClient = getMockHttpClient({
92
- '/persist': async () => respondWith({ validation: { param: 'error with this field' } }, { status: errorStatusCode }),
93
- });
94
- const spyTrackEvent = vi.fn();
95
- const performPersistAsync = getPerformPersistAsync({
96
- httpClient,
97
- trackEvent: spyTrackEvent,
98
- logEvent,
99
- persistAsyncConfig,
100
- genericErrorMessage,
101
- schemaId: 'schemaId',
102
- });
103
- await expect(performPersistAsync({ value: 'value', signal })).rejects.toThrow('error with this field');
104
- expect(spyTrackEvent).toHaveBeenLastCalledWith('PersistAsync Failed', expect.objectContaining({ schema: 'schemaId' }));
105
- });
106
- it('should include analytics if passed', async () => {
107
- const httpClient = getMockHttpClient({
108
- '/persist': async () => respondWith({ validation: { param: 'error with this field' }, analytics: { some: 'extras' } }, { status: errorStatusCode }),
109
- });
110
- const spyTrackEvent = vi.fn();
111
- const performPersistAsync = getPerformPersistAsync({
112
- httpClient,
113
- trackEvent: spyTrackEvent,
114
- logEvent,
115
- persistAsyncConfig,
116
- genericErrorMessage,
117
- schemaId: 'schemaId',
118
- });
119
- await expect(performPersistAsync({ value: 'value', signal })).rejects.toThrow('error with this field');
120
- expect(spyTrackEvent).toHaveBeenLastCalledWith('PersistAsync Failed', expect.objectContaining({ schema: 'schemaId', some: 'extras' }));
121
- });
122
- });
123
- it('should throw a generic error if request fails', async () => {
124
- const httpClient = getMockHttpClient({
125
- '/persist': async () => Promise.reject(new Error()),
126
- });
127
- const spyTrackEvent = vi.fn();
128
- const performPersistAsync = getPerformPersistAsync({
129
- httpClient,
130
- trackEvent: spyTrackEvent,
131
- logEvent,
132
- persistAsyncConfig,
133
- genericErrorMessage,
134
- schemaId: 'schemaId',
135
- });
136
- await expect(performPersistAsync({ value: 'value', signal })).rejects.toThrow(genericErrorMessage);
137
- expect(spyTrackEvent).toHaveBeenLastCalledWith('PersistAsync Failed', expect.objectContaining({ schema: 'schemaId' }));
138
- });
139
- });