@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,293 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { screen, waitFor } from '@testing-library/react';
3
- import { arraySchemaToMultiUploadComponent } from '../domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiUploadComponent';
4
- import { getMockMapperProps, getMockSchemaMapperProps, getUpdateFunctionMock, } from '../domain/mappers/schema/tests/test-utils';
5
- import { renderWithProviders, respondWith } from '../test-utils';
6
- import DynamicFlowWise from '../test-utils/DynamicFlowWise';
7
- import userEvent from '@testing-library/user-event';
8
- import { vi } from 'vitest';
9
- const user = userEvent.setup({ advanceTimers: vi.advanceTimersByTime });
10
- describe('given a multi-file upload schema', () => {
11
- describe('that has a per-file validation (accepts/maxSize)', () => {
12
- const schema = {
13
- type: 'array',
14
- addItemTitle: '',
15
- editItemTitle: '',
16
- validationMessages: {
17
- accepts: 'This should not be used',
18
- },
19
- items: {
20
- type: 'string',
21
- accepts: ['application/pdf'],
22
- title: 'Upload your passport',
23
- validationMessages: {
24
- accepts: 'Sorry, that file format is not supported. Please upload a different file',
25
- },
26
- format: 'base64url',
27
- maxSize: 10,
28
- },
29
- };
30
- describe('and the uploaded file is valid', () => {
31
- it('does not set an error message in the error map', async () => {
32
- const mockUpdateFn = getUpdateFunctionMock(() => component);
33
- const component = arraySchemaToMultiUploadComponent(Object.assign(Object.assign({}, getMockSchemaMapperProps({ schema })), { model: null }), Object.assign(Object.assign({}, getMockMapperProps()), { onComponentUpdate: mockUpdateFn }));
34
- const file = new File(['fooo'], 'file.pdf', {
35
- type: 'application/pdf',
36
- });
37
- await component.onInsertFile(0, file);
38
- expect(component.files[0].errors).toStrictEqual([]);
39
- });
40
- });
41
- describe('and the uploaded file is invalid', () => {
42
- it('because it is the wrong type, sets the file errors in the in the error map', async () => {
43
- const mockUpdateFn = getUpdateFunctionMock(() => component);
44
- const component = arraySchemaToMultiUploadComponent(Object.assign(Object.assign({}, getMockSchemaMapperProps({ schema })), { model: null }), Object.assign(Object.assign({}, getMockMapperProps()), { onComponentUpdate: mockUpdateFn }));
45
- const file = new File(['foo'], 'file.png', { type: 'image/png' });
46
- await component.onInsertFile(0, file);
47
- expect(component.files[0].errors).toStrictEqual(['accepts']);
48
- });
49
- it('because it is too big, sets the file errors in the in the error map', async () => {
50
- const mockUpdateFn = getUpdateFunctionMock(() => component);
51
- const component = arraySchemaToMultiUploadComponent(Object.assign(Object.assign({}, getMockSchemaMapperProps({ schema })), { model: null }), Object.assign(Object.assign({}, getMockMapperProps()), { onComponentUpdate: mockUpdateFn }));
52
- const file = new File(['foooooooooo'], 'file.pdf', {
53
- type: 'application/pdf',
54
- });
55
- await component.onInsertFile(0, file);
56
- expect(component.files[0].errors).toStrictEqual(['maxSize']);
57
- });
58
- it('uses validationMessages from the items schema, not the array schema', async () => {
59
- const mockUpdateFn = getUpdateFunctionMock(() => component);
60
- const getErrorMessageFunctions = vi
61
- .fn()
62
- .mockImplementation((validationMessages) => ({
63
- accepts: () => {
64
- return validationMessages.accepts;
65
- },
66
- }));
67
- const component = arraySchemaToMultiUploadComponent(Object.assign(Object.assign({}, getMockSchemaMapperProps({ schema })), { model: null }), Object.assign(Object.assign({}, getMockMapperProps()), { onComponentUpdate: mockUpdateFn, getErrorMessageFunctions }));
68
- getErrorMessageFunctions.mockClear();
69
- const file = new File(['foo'], 'file.png', { type: 'image/png' });
70
- await component.onInsertFile(0, file);
71
- expect(component.files[0].errors).toStrictEqual([
72
- 'Sorry, that file format is not supported. Please upload a different file',
73
- ]);
74
- });
75
- });
76
- });
77
- describe('that has persist-async', () => {
78
- describe('when deleting an uploaded file, while there are multiple', () => {
79
- it('deleting an uploaded file should remove only that file, leaving the others intact', async () => {
80
- const step = {
81
- id: 'step-id',
82
- title: 'Blob Upload (Multiple, Persist Async)',
83
- schemas: [
84
- {
85
- $id: '#id',
86
- type: 'array',
87
- title: 'Upload label',
88
- maxItems: 5,
89
- addItemTitle: 'Add',
90
- editItemTitle: 'Edit',
91
- items: {
92
- type: 'string',
93
- persistAsync: {
94
- method: 'POST',
95
- url: '/persist-async',
96
- param: 'param',
97
- idProperty: 'token',
98
- schema: {
99
- type: 'blob',
100
- source: 'file',
101
- title: 'Upload label',
102
- description: 'PNG, JPG, or PDF, less than 5mb',
103
- accepts: ['image/png', 'image/jpeg', 'application/pdf'],
104
- maxSize: 5242000,
105
- validationMessages: {
106
- maxSize: 'Your file is too large',
107
- },
108
- },
109
- },
110
- },
111
- },
112
- ],
113
- layout: [
114
- {
115
- type: 'form',
116
- schemaId: '#id',
117
- },
118
- {
119
- type: 'button',
120
- title: 'Submit',
121
- action: {
122
- url: '/submit',
123
- method: 'POST',
124
- },
125
- },
126
- ],
127
- };
128
- const httpClient = vi
129
- .fn()
130
- .mockImplementationOnce(async () => {
131
- return respondWith({ token: '123' });
132
- })
133
- .mockImplementationOnce(async () => {
134
- return respondWith({ token: '456' });
135
- })
136
- .mockImplementationOnce(async () => {
137
- return respondWith({ token: '789' });
138
- })
139
- .mockImplementationOnce(async () => {
140
- return respondWith(null, { headers: { 'X-DF-Response-Type': 'exit' } });
141
- });
142
- renderWithProviders(_jsx(DynamicFlowWise, { flowId: "id", initialStep: step, httpClient: httpClient, onCompletion: vi.fn(), onError: vi.fn() }));
143
- await user.upload(screen.getByTestId('uploadInput'), new File([''], 'file.png', { type: 'image/png' }));
144
- await waitFor(() => {
145
- expect(screen.getByText('Uploaded')).toBeInTheDocument();
146
- });
147
- await user.upload(screen.getByTestId('uploadInput'), new File([''], 'file.jpg', { type: 'image/jpeg' }));
148
- await user.upload(screen.getByTestId('uploadInput'), new File([''], 'file.pdf', { type: 'application/pdf' }));
149
- await waitFor(() => {
150
- expect(screen.getAllByText('Uploaded')).toHaveLength(3);
151
- });
152
- await user.click(screen.getAllByTestId('bin-icon')[1]);
153
- httpClient.mockClear();
154
- await waitFor(() => {
155
- expect(screen.getByRole('button', { name: 'Remove' })).toBeInTheDocument();
156
- });
157
- await user.click(screen.getByRole('button', { name: 'Remove' }));
158
- await waitFor(() => {
159
- expect(screen.getAllByText('Uploaded')).toHaveLength(2);
160
- });
161
- await user.click(screen.getByRole('button', { name: 'Submit' }));
162
- await waitFor(() => {
163
- expect(httpClient).toHaveBeenCalledWith('/submit', expect.objectContaining({ body: '["123","789"]' }));
164
- });
165
- });
166
- });
167
- });
168
- describe('and the first file upload fails server validation, and then a second file is uploaded', () => {
169
- const step = {
170
- id: 'step-id',
171
- title: 'Blob Upload (Multiple, Persist Async)',
172
- schemas: [
173
- {
174
- $id: '#id',
175
- type: 'array',
176
- title: 'Upload label',
177
- maxItems: 5,
178
- addItemTitle: 'Add',
179
- editItemTitle: 'Edit',
180
- items: {
181
- type: 'string',
182
- persistAsync: {
183
- method: 'POST',
184
- url: '/persist-async',
185
- param: 'param',
186
- idProperty: 'token',
187
- schema: {
188
- type: 'blob',
189
- source: 'file',
190
- title: 'Upload label',
191
- description: 'PNG, JPG, or PDF, less than 5mb',
192
- accepts: ['image/png', 'image/jpg', 'application/pdf'],
193
- maxSize: 5242000,
194
- validationMessages: {
195
- maxSize: 'Your file is too large',
196
- },
197
- },
198
- },
199
- },
200
- },
201
- ],
202
- layout: [
203
- {
204
- type: 'form',
205
- schemaId: '#id',
206
- },
207
- {
208
- type: 'button',
209
- title: 'Submit',
210
- action: {
211
- url: '/submit',
212
- method: 'POST',
213
- },
214
- },
215
- ],
216
- };
217
- it('correctly uploads the second file, and has removed the first', async () => {
218
- const httpClient = vi
219
- .fn()
220
- .mockImplementationOnce(async () => {
221
- return respondWith({}, { status: 422 });
222
- })
223
- .mockImplementationOnce(async () => {
224
- return respondWith({ token: '12345' });
225
- });
226
- renderWithProviders(_jsx(DynamicFlowWise, { flowId: "id", initialStep: step, httpClient: httpClient, onCompletion: vi.fn(), onError: vi.fn() }));
227
- await user.upload(screen.getByTestId('uploadInput'), new File([''], 'file.png', { type: 'image/png' }));
228
- await waitFor(() => {
229
- expect(screen.getByText('Something went wrong.')).toBeInTheDocument();
230
- });
231
- await user.click(screen.getByTestId('bin-icon'));
232
- await user.upload(screen.getByTestId('uploadInput'), new File([''], 'file.png', { type: 'image/png' }));
233
- await waitFor(() => {
234
- expect(screen.getByText('Uploaded')).toBeInTheDocument();
235
- });
236
- });
237
- });
238
- describe('and the array schema has hidden: true', () => {
239
- const step = {
240
- id: 'step-id',
241
- title: 'Blob Upload (Multiple, Persist Async)',
242
- schemas: [
243
- {
244
- $id: '#id',
245
- type: 'array',
246
- hidden: true,
247
- title: 'Upload label',
248
- maxItems: 5,
249
- addItemTitle: 'Add',
250
- editItemTitle: 'Edit',
251
- items: {
252
- type: 'string',
253
- persistAsync: {
254
- method: 'POST',
255
- url: '/persist-async',
256
- param: 'param',
257
- idProperty: 'token',
258
- schema: {
259
- type: 'blob',
260
- source: 'file',
261
- title: 'Upload label',
262
- description: 'PNG, JPG, or PDF, less than 5mb',
263
- accepts: ['image/png', 'image/jpg', 'application/pdf'],
264
- maxSize: 5242000,
265
- validationMessages: {
266
- maxSize: 'Your file is too large',
267
- },
268
- },
269
- },
270
- },
271
- },
272
- ],
273
- layout: [
274
- {
275
- type: 'form',
276
- schemaId: '#id',
277
- },
278
- {
279
- type: 'button',
280
- title: 'Submit',
281
- action: {
282
- url: '/submit',
283
- method: 'POST',
284
- },
285
- },
286
- ],
287
- };
288
- it('does not render the upload', () => {
289
- renderWithProviders(_jsx(DynamicFlowWise, { flowId: "id", initialStep: step, httpClient: vi.fn(), onCompletion: vi.fn(), onError: vi.fn() }));
290
- expect(screen.queryByLabelText('Upload label')).not.toBeInTheDocument();
291
- });
292
- });
293
- });
@@ -1,267 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { renderWithProviders, respondWith } from '../test-utils';
3
- import DynamicFlowWise from '../test-utils/DynamicFlowWise';
4
- import { act, screen, waitFor } from '@testing-library/react';
5
- import userEvent from '@testing-library/user-event';
6
- import { respondWithDelay } from '../test-utils/fetch-utils';
7
- import { vi } from 'vitest';
8
- const user = userEvent.setup({ advanceTimers: vi.advanceTimersByTime });
9
- describe('native back', () => {
10
- const getDefaultProps = () => ({
11
- flowId: 'flow-id',
12
- features: {
13
- nativeBack: true,
14
- },
15
- httpClient: vi.fn(),
16
- onCompletion: vi.fn(),
17
- onError: vi.fn(),
18
- onEvent: vi.fn(),
19
- onLog: vi.fn(),
20
- });
21
- const step = {
22
- id: 'step-id',
23
- title: 'Initial step',
24
- layout: [
25
- {
26
- type: 'button',
27
- title: 'Submit',
28
- behavior: {
29
- type: 'action',
30
- action: {
31
- url: '/submit',
32
- },
33
- },
34
- },
35
- ],
36
- schemas: [],
37
- };
38
- describe('given no stack behavior', () => {
39
- const getMockHttpClient = () => {
40
- let stepCount = 1;
41
- return vi.fn().mockImplementation(async (input) => {
42
- if (input === '/upload') {
43
- return respondWith({ token: '123' });
44
- }
45
- stepCount += 1;
46
- return respondWith(Object.assign(Object.assign({}, step), { title: `Step ${stepCount}` }));
47
- });
48
- };
49
- it('shows a back button on the initial step that cancels the flow if onCancellation is provided', async () => {
50
- const onCancellation = vi.fn();
51
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({ initialStep: step }, getDefaultProps(), { httpClient: getMockHttpClient(), onCancellation: onCancellation })));
52
- expect(screen.getByText('Initial step')).toBeInTheDocument();
53
- expect(screen.getByRole('button', { name: 'Back' })).toBeInTheDocument();
54
- await user.click(screen.getByRole('button', { name: 'Back' }));
55
- expect(onCancellation).toHaveBeenCalled();
56
- });
57
- it('does not show a back button on the initial step if onCancellation is not provided', async () => {
58
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({ initialStep: step }, getDefaultProps(), { httpClient: getMockHttpClient() })));
59
- expect(screen.getByText('Initial step')).toBeInTheDocument();
60
- expect(screen.queryByRole('button', { name: 'Back' })).not.toBeInTheDocument();
61
- });
62
- it('adds new steps that can be navigated back from', async () => {
63
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({ initialStep: step }, getDefaultProps(), { httpClient: getMockHttpClient() })));
64
- expect(screen.getByText('Initial step')).toBeInTheDocument();
65
- await user.click(screen.getByRole('button', { name: 'Submit' }));
66
- expect(screen.getByText('Step 2')).toBeInTheDocument();
67
- await user.click(screen.getByRole('button', { name: 'Submit' }));
68
- expect(screen.getByText('Step 3')).toBeInTheDocument();
69
- await user.click(screen.getByRole('button', { name: 'Back' }));
70
- expect(screen.getByText('Step 2')).toBeInTheDocument();
71
- await user.click(screen.getByRole('button', { name: 'Back' }));
72
- expect(screen.getByText('Initial step')).toBeInTheDocument();
73
- await user.click(screen.getByRole('button', { name: 'Submit' }));
74
- await waitFor(() => {
75
- expect(screen.getByText('Step 4')).toBeInTheDocument();
76
- });
77
- });
78
- it('restores state from the previous step', async () => {
79
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({ initialStep: Object.assign(Object.assign({}, step), { schemas: [
80
- {
81
- $id: '#schema',
82
- type: 'string',
83
- title: 'Name',
84
- },
85
- ], layout: [
86
- {
87
- type: 'form',
88
- schemaId: '#schema',
89
- },
90
- ...step.layout,
91
- ] }) }, getDefaultProps(), { httpClient: getMockHttpClient() })));
92
- expect(screen.getByText('Initial step')).toBeInTheDocument();
93
- await user.type(screen.getByLabelText('Name'), 'John Doe');
94
- await user.click(screen.getByRole('button', { name: 'Submit' }));
95
- expect(screen.getByText('Step 2')).toBeInTheDocument();
96
- await user.click(screen.getByRole('button', { name: 'Back' }));
97
- expect(screen.getByDisplayValue('John Doe')).toBeInTheDocument();
98
- });
99
- it('restores (visual) state from the previous step when there is an upload', async () => {
100
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({ initialStep: Object.assign(Object.assign({}, step), { schemas: [
101
- {
102
- $id: '#schema',
103
- type: 'string',
104
- persistAsync: {
105
- param: 'file',
106
- idProperty: 'token',
107
- method: 'POST',
108
- url: '/upload',
109
- schema: {
110
- type: 'blob',
111
- },
112
- },
113
- },
114
- ], layout: [
115
- {
116
- type: 'form',
117
- schemaId: '#schema',
118
- },
119
- ...step.layout,
120
- ] }) }, getDefaultProps(), { httpClient: getMockHttpClient() })));
121
- expect(screen.getByText('Initial step')).toBeInTheDocument();
122
- await user.upload(screen.getByTestId('uploadInput'), new File([''], 'my_file.png', { type: 'image/png' }));
123
- expect(screen.getByText('my_file.png')).toBeInTheDocument();
124
- await user.click(screen.getByRole('button', { name: 'Submit' }));
125
- await waitFor(() => {
126
- expect(screen.getByText('Step 2')).toBeInTheDocument();
127
- });
128
- await user.click(screen.getByRole('button', { name: 'Back' }));
129
- expect(screen.getByText('my_file.png')).toBeInTheDocument();
130
- });
131
- it('removes previous step if it has polling', async () => {
132
- const httpClient = vi
133
- .fn()
134
- .mockImplementationOnce(async () => {
135
- return respondWith(Object.assign(Object.assign({}, step), { title: 'Polling step', polling: {
136
- delay: 1,
137
- url: '/poll',
138
- maxAttempts: 5,
139
- onError: { behavior: { type: 'action', action: {} } },
140
- } }));
141
- })
142
- .mockImplementationOnce(async () => {
143
- return respondWithDelay(Object.assign(Object.assign({}, step), { title: 'Step after polling' }), 1000, {
144
- headers: { 'X-DF-Response-Type': 'step' },
145
- });
146
- });
147
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({ initialStep: step }, getDefaultProps(), { httpClient: httpClient })));
148
- expect(screen.getByText('Initial step')).toBeInTheDocument();
149
- await user.click(screen.getByRole('button', { name: 'Submit' }));
150
- expect(screen.getByText('Polling step')).toBeInTheDocument();
151
- await act(async () => {
152
- await vi.advanceTimersByTimeAsync(1000);
153
- });
154
- await waitFor(() => {
155
- expect(screen.getByText('Step after polling')).toBeInTheDocument();
156
- });
157
- await user.click(screen.getByRole('button', { name: 'Back' }));
158
- expect(screen.getByText('Initial step')).toBeInTheDocument();
159
- });
160
- it('restores refreshAfter from previous step', async () => {
161
- const httpClient = vi.fn().mockImplementation(async (input) => {
162
- if (input === '/refresh') {
163
- return respondWith(Object.assign(Object.assign({}, step), { title: 'Refreshed step' }));
164
- }
165
- return respondWith(Object.assign(Object.assign({}, step), { title: 'Next step' }));
166
- });
167
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({ initialStep: Object.assign(Object.assign({}, step), { refreshAfter: new Date(Date.now() + 5000).toISOString(), refreshUrl: '/refresh' }) }, getDefaultProps(), { httpClient: httpClient })));
168
- expect(screen.getByText('Initial step')).toBeInTheDocument();
169
- await user.click(screen.getByRole('button', { name: 'Submit' }));
170
- expect(screen.getByText('Next step')).toBeInTheDocument();
171
- await user.click(screen.getByRole('button', { name: 'Back' }));
172
- expect(screen.getByText('Initial step')).toBeInTheDocument();
173
- await act(async () => {
174
- await vi.advanceTimersByTimeAsync(6000);
175
- });
176
- expect(screen.getByText('Refreshed step')).toBeInTheDocument();
177
- });
178
- });
179
- describe('given stack behavior', () => {
180
- describe('replace-current', () => {
181
- const getMockHttpClient = () => {
182
- let stepCount = 1;
183
- return vi.fn().mockImplementation(async () => {
184
- stepCount += 1;
185
- return respondWith(Object.assign(Object.assign({}, step), { title: `Step ${stepCount}`, navigation: { stackBehavior: stepCount > 2 ? 'replace-current' : undefined } }));
186
- });
187
- };
188
- it('adds new steps that replace the current step', async () => {
189
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({ initialStep: step }, getDefaultProps(), { httpClient: getMockHttpClient() })));
190
- // initial step
191
- expect(screen.getByText('Initial step')).toBeInTheDocument();
192
- await user.click(screen.getByRole('button', { name: 'Submit' }));
193
- await waitFor(async () => {
194
- // no stack behavior
195
- expect(screen.getByText('Step 2')).toBeInTheDocument();
196
- });
197
- await user.click(screen.getByRole('button', { name: 'Submit' }));
198
- await waitFor(async () => {
199
- // replace-current step
200
- expect(screen.getByText('Step 3')).toBeInTheDocument();
201
- });
202
- await user.click(screen.getByRole('button', { name: 'Back' }));
203
- await waitFor(async () => {
204
- expect(screen.getByText('Initial step')).toBeInTheDocument();
205
- });
206
- });
207
- });
208
- describe('remove-previous', () => {
209
- const getMockHttpClient = () => {
210
- let stepCount = 1;
211
- return vi.fn().mockImplementation(async () => {
212
- stepCount += 1;
213
- return respondWith(Object.assign(Object.assign({}, step), { title: `Step ${stepCount}`, navigation: { stackBehavior: stepCount > 2 ? 'remove-previous' : undefined } }));
214
- });
215
- };
216
- it('adds new steps that replace the current step', async () => {
217
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({ initialStep: step }, getDefaultProps(), { httpClient: getMockHttpClient() })));
218
- // initial step
219
- expect(screen.getByText('Initial step')).toBeInTheDocument();
220
- await user.click(screen.getByRole('button', { name: 'Submit' }));
221
- // no stack behavior
222
- expect(screen.getByText('Step 2')).toBeInTheDocument();
223
- await user.click(screen.getByRole('button', { name: 'Submit' }));
224
- // remove-previous step
225
- expect(screen.getByText('Step 3')).toBeInTheDocument();
226
- await user.click(screen.getByRole('button', { name: 'Back' }));
227
- expect(screen.getByText('Initial step')).toBeInTheDocument();
228
- });
229
- });
230
- describe('remove-all', () => {
231
- const getMockHttpClient = () => {
232
- let stepCount = 1;
233
- return vi.fn().mockImplementation(async () => {
234
- stepCount += 1;
235
- return respondWith(Object.assign(Object.assign({}, step), { title: `Step ${stepCount}`, navigation: { stackBehavior: stepCount > 2 ? 'remove-all' : undefined } }));
236
- });
237
- };
238
- it('adds new steps that replace the current step', async () => {
239
- const onCancellation = vi.fn();
240
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({ initialStep: step }, getDefaultProps(), { httpClient: getMockHttpClient(), onCancellation: onCancellation })));
241
- // initial step
242
- expect(screen.getByText('Initial step')).toBeInTheDocument();
243
- await user.click(screen.getByRole('button', { name: 'Submit' }));
244
- // no stack behavior
245
- expect(screen.getByText('Step 2')).toBeInTheDocument();
246
- await user.click(screen.getByRole('button', { name: 'Submit' }));
247
- // remove-all step
248
- expect(screen.getByText('Step 3')).toBeInTheDocument();
249
- await user.click(screen.getByRole('button', { name: 'Back' }));
250
- expect(onCancellation).toHaveBeenCalled();
251
- expect(screen.getByText('Step 3')).toBeInTheDocument();
252
- });
253
- it('does not show back button on initial step after clearing the stack if no onCancellation is provided', async () => {
254
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({ initialStep: step }, getDefaultProps(), { httpClient: getMockHttpClient() })));
255
- // initial step
256
- expect(screen.getByText('Initial step')).toBeInTheDocument();
257
- await user.click(screen.getByRole('button', { name: 'Submit' }));
258
- // no stack behavior
259
- expect(screen.getByText('Step 2')).toBeInTheDocument();
260
- await user.click(screen.getByRole('button', { name: 'Submit' }));
261
- // remove-all step
262
- expect(screen.getByText('Step 3')).toBeInTheDocument();
263
- expect(screen.queryByRole('button', { name: 'Back' })).not.toBeInTheDocument();
264
- });
265
- });
266
- });
267
- });