@wise/dynamic-flow-client 5.28.0 → 5.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (469) hide show
  1. package/build/tsconfig.types.tsbuildinfo +1 -1
  2. package/package.json +1 -1
  3. package/build/DynamicFlowCore.js +0 -5
  4. package/build/common/capabilities/getHttpClientWithCapabilities.js +0 -41
  5. package/build/common/capabilities/getHttpClientWithCapabilities.test.js +0 -106
  6. package/build/common/capabilities/index.js +0 -1
  7. package/build/common/errorBoundary/ErrorBoundary.js +0 -26
  8. package/build/common/errorBoundary/ErrorBoundary.test.js +0 -29
  9. package/build/common/errorBoundary/ErrorBoundaryAlert.js +0 -11
  10. package/build/common/makeHttpClient/api-utils.js +0 -3
  11. package/build/common/makeHttpClient/index.js +0 -1
  12. package/build/common/makeHttpClient/makeHttpClient.js +0 -10
  13. package/build/common/makeHttpClient/makeHttpClient.test.js +0 -186
  14. package/build/common/messages/download.messages.js +0 -18
  15. package/build/common/messages/external-confirmation.messages.js +0 -23
  16. package/build/common/messages/file-upload.messages.js +0 -13
  17. package/build/common/messages/generic-error.messages.js +0 -18
  18. package/build/common/messages/help.messages.js +0 -8
  19. package/build/common/messages/multi-file-upload.messages.js +0 -18
  20. package/build/common/messages/multi-select.messages.js +0 -8
  21. package/build/common/messages/paragraph.messages.js +0 -13
  22. package/build/common/messages/repeatable.messages.js +0 -23
  23. package/build/common/messages/search.messages.js +0 -8
  24. package/build/common/messages/validation.array.messages.js +0 -13
  25. package/build/common/messages/validation.messages.js +0 -53
  26. package/build/controller/FlowController.js +0 -400
  27. package/build/controller/executeDownload.js +0 -86
  28. package/build/controller/executePoll.js +0 -65
  29. package/build/controller/executeRefresh.js +0 -45
  30. package/build/controller/executeRequest.js +0 -93
  31. package/build/controller/executeSubflow.js +0 -71
  32. package/build/controller/executeSubmission.js +0 -68
  33. package/build/controller/getErrorMessage.js +0 -7
  34. package/build/controller/getFilenameFromContentDisposition.js +0 -47
  35. package/build/controller/getFilenameFromContentDisposition.test.js +0 -47
  36. package/build/controller/getRequestAbortController.js +0 -13
  37. package/build/controller/getResponseType.js +0 -35
  38. package/build/controller/getSafeHttpClient.js +0 -8
  39. package/build/controller/getStepCounter.js +0 -16
  40. package/build/controller/handleErrorResponse.js +0 -26
  41. package/build/controller/makeSafeHttpClient.js +0 -8
  42. package/build/controller/response-utils.js +0 -72
  43. package/build/controller/response-utils.test.js +0 -52
  44. package/build/domain/components/AlertComponent.js +0 -2
  45. package/build/domain/components/AllOfComponent.js +0 -47
  46. package/build/domain/components/BooleanInputComponent.js +0 -48
  47. package/build/domain/components/BoxComponent.js +0 -12
  48. package/build/domain/components/ButtonComponent.js +0 -2
  49. package/build/domain/components/ColumnsComponent.js +0 -12
  50. package/build/domain/components/ConstComponent.js +0 -20
  51. package/build/domain/components/ContainerComponent.js +0 -12
  52. package/build/domain/components/DateInputComponent.js +0 -73
  53. package/build/domain/components/DecisionComponent.js +0 -2
  54. package/build/domain/components/DividerComponent.js +0 -2
  55. package/build/domain/components/FormComponent.js +0 -12
  56. package/build/domain/components/FormattedValueComponent.js +0 -47
  57. package/build/domain/components/HeadingComponent.js +0 -2
  58. package/build/domain/components/ImageComponent.js +0 -2
  59. package/build/domain/components/InstructionsComponent.js +0 -2
  60. package/build/domain/components/IntegerInputComponent.js +0 -75
  61. package/build/domain/components/ListComponent.js +0 -2
  62. package/build/domain/components/LoadingIndicatorComponent.js +0 -2
  63. package/build/domain/components/MarkdownComponent.js +0 -2
  64. package/build/domain/components/MediaComponent.js +0 -2
  65. package/build/domain/components/ModalComponent.js +0 -20
  66. package/build/domain/components/ModalLayoutComponent.js +0 -12
  67. package/build/domain/components/MoneyInputComponent.js +0 -56
  68. package/build/domain/components/MultiSelectInputComponent.js +0 -86
  69. package/build/domain/components/MultiUploadInputComponent.js +0 -86
  70. package/build/domain/components/NumberInputComponent.js +0 -74
  71. package/build/domain/components/ObjectComponent.js +0 -54
  72. package/build/domain/components/ParagraphComponent.js +0 -2
  73. package/build/domain/components/PersistAsyncComponent.js +0 -96
  74. package/build/domain/components/ProgressComponent.js +0 -2
  75. package/build/domain/components/RepeatableComponent.js +0 -106
  76. package/build/domain/components/ReviewComponent.js +0 -2
  77. package/build/domain/components/RootDomainComponent.js +0 -193
  78. package/build/domain/components/SectionComponent.js +0 -12
  79. package/build/domain/components/SelectInputComponent.js +0 -96
  80. package/build/domain/components/StatusListComponent.js +0 -2
  81. package/build/domain/components/SubflowComponent.js +0 -19
  82. package/build/domain/components/TabsComponent.js +0 -2
  83. package/build/domain/components/TextInputComponent.js +0 -77
  84. package/build/domain/components/TupleComponent.js +0 -48
  85. package/build/domain/components/UpdatableComponent.js +0 -46
  86. package/build/domain/components/UploadInputComponent.js +0 -78
  87. package/build/domain/components/UpsellComponent.js +0 -26
  88. package/build/domain/components/collectionComponent/CollectionComponent.js +0 -174
  89. package/build/domain/components/collectionComponent/CollectionComponent.test.js +0 -286
  90. package/build/domain/components/collectionComponent/types.js +0 -1
  91. package/build/domain/components/searchComponent/SearchComponent.js +0 -91
  92. package/build/domain/components/searchComponent/SearchComponent.test.js +0 -190
  93. package/build/domain/components/step/ExternalConfirmationComponent.js +0 -27
  94. package/build/domain/components/step/StepDomainComponent.js +0 -153
  95. package/build/domain/components/step/ToolbarComponent.js +0 -1
  96. package/build/domain/components/utils/component-utils.js +0 -12
  97. package/build/domain/components/utils/debounce.js +0 -34
  98. package/build/domain/components/utils/debounce.test.js +0 -67
  99. package/build/domain/components/utils/file-utils.js +0 -21
  100. package/build/domain/components/utils/file-utils.test.js +0 -27
  101. package/build/domain/components/utils/getRandomId.js +0 -1
  102. package/build/domain/components/utils/isExactLocalValueMatch.js +0 -14
  103. package/build/domain/components/utils/isOrWasValid.js +0 -5
  104. package/build/domain/components/utils/isPartialModelMatch.js +0 -18
  105. package/build/domain/components/utils/isPartialModelMatch.test.js +0 -74
  106. package/build/domain/features/collection/getPerformCollectionQuery.js +0 -80
  107. package/build/domain/features/collection/getPerformCollectionQuery.test.js +0 -223
  108. package/build/domain/features/delay/getStepDelays.js +0 -37
  109. package/build/domain/features/delay/getStepDelays.test.js +0 -69
  110. package/build/domain/features/domain-event-bus/DomainEventBus.js +0 -24
  111. package/build/domain/features/domain-event-bus/index.js +0 -1
  112. package/build/domain/features/domain-event-bus/types.js +0 -1
  113. package/build/domain/features/eventNames.js +0 -41
  114. package/build/domain/features/events.js +0 -5
  115. package/build/domain/features/persistAsync/getComponentMultiPersistAsync.js +0 -50
  116. package/build/domain/features/persistAsync/getInitialPersistedState.js +0 -7
  117. package/build/domain/features/persistAsync/getPerformPersistAsync.js +0 -43
  118. package/build/domain/features/persistAsync/getPerformPersistAsync.test.js +0 -139
  119. package/build/domain/features/polling/getStepPolling.js +0 -50
  120. package/build/domain/features/polling/getStepPolling.test.js +0 -115
  121. package/build/domain/features/prefetch/getStepPrefetch.js +0 -56
  122. package/build/domain/features/prefetch/request-cache.js +0 -49
  123. package/build/domain/features/prefetch/request-cache.test.js +0 -70
  124. package/build/domain/features/refreshAfter/getStepRefreshAfter.js +0 -24
  125. package/build/domain/features/refreshAfter/getStepRefreshAfter.test.js +0 -40
  126. package/build/domain/features/schema-on-change/getDebouncedSchemaOnChange.js +0 -50
  127. package/build/domain/features/schema-on-change/getSchemaOnChange.js +0 -38
  128. package/build/domain/features/search/getPerformSearchFunction.js +0 -75
  129. package/build/domain/features/search/getPerformSearchFunction.test.js +0 -301
  130. package/build/domain/features/summary/summary-utils.js +0 -37
  131. package/build/domain/features/summary/summary-utils.test.js +0 -125
  132. package/build/domain/features/updatable/getPerformUpdateQuery.js +0 -52
  133. package/build/domain/features/utils/http-utils.js +0 -21
  134. package/build/domain/features/utils/response-utils.js +0 -9
  135. package/build/domain/features/validation/date-availability.js +0 -54
  136. package/build/domain/features/validation/date-availability.test.js +0 -54
  137. package/build/domain/features/validation/getPatternRegExp.js +0 -25
  138. package/build/domain/features/validation/spec-utils.js +0 -23
  139. package/build/domain/features/validation/validation-functions.js +0 -6
  140. package/build/domain/features/validation/validation-functions.test.js +0 -108
  141. package/build/domain/features/validation/value-checks.js +0 -130
  142. package/build/domain/features/validation/value-checks.test.js +0 -297
  143. package/build/domain/features/validationAsync/getComponentValidationAsync.js +0 -57
  144. package/build/domain/features/validationAsync/getComponentValidationAsync.test.js +0 -67
  145. package/build/domain/features/validationAsync/getInitialValidationAsyncState.js +0 -6
  146. package/build/domain/features/validationAsync/getPerformValidationAsync.js +0 -46
  147. package/build/domain/features/validationAsync/getPerformValidationAsync.test.js +0 -162
  148. package/build/domain/handlers/dismissHandler.js +0 -11
  149. package/build/domain/mappers/layout/alertLayoutToComponent.js +0 -18
  150. package/build/domain/mappers/layout/boxLayoutToComponent.js +0 -13
  151. package/build/domain/mappers/layout/buttonLayoutToComponent.js +0 -77
  152. package/build/domain/mappers/layout/collectionLayoutToComponent.js +0 -49
  153. package/build/domain/mappers/layout/columnsLayoutToComponent.js +0 -13
  154. package/build/domain/mappers/layout/decisionLayoutToComponent.js +0 -24
  155. package/build/domain/mappers/layout/deprecatedListLayoutToComponent.js +0 -30
  156. package/build/domain/mappers/layout/dividerLayoutToComponent.js +0 -2
  157. package/build/domain/mappers/layout/formLayoutToComponent.js +0 -19
  158. package/build/domain/mappers/layout/headingLayoutToComponent.js +0 -12
  159. package/build/domain/mappers/layout/imageLayoutToComponent.js +0 -17
  160. package/build/domain/mappers/layout/infoLayoutToComponent.js +0 -12
  161. package/build/domain/mappers/layout/instructionsLayoutToComponent.js +0 -12
  162. package/build/domain/mappers/layout/listLayoutToComponent.js +0 -39
  163. package/build/domain/mappers/layout/loadingIndicatorLayoutToComponent.js +0 -9
  164. package/build/domain/mappers/layout/markdownLayoutToComponent.js +0 -12
  165. package/build/domain/mappers/layout/mediaLayoutToComponent.js +0 -12
  166. package/build/domain/mappers/layout/modalLayoutToComponent.js +0 -17
  167. package/build/domain/mappers/layout/modalToComponent.js +0 -8
  168. package/build/domain/mappers/layout/paragraphLayoutToComponent.js +0 -12
  169. package/build/domain/mappers/layout/progressLayoutToComponent.js +0 -15
  170. package/build/domain/mappers/layout/reviewLayoutToComponent.js +0 -49
  171. package/build/domain/mappers/layout/searchLayoutToComponent.js +0 -44
  172. package/build/domain/mappers/layout/sectionLayoutToComponent.js +0 -16
  173. package/build/domain/mappers/layout/statusListLayoutToComponent.js +0 -15
  174. package/build/domain/mappers/layout/tabsLayoutToComponent.js +0 -16
  175. package/build/domain/mappers/layout/updatableLayoutToComponent.js +0 -39
  176. package/build/domain/mappers/layout/upsellLayoutToComponent.js +0 -18
  177. package/build/domain/mappers/mapLayoutToComponent.js +0 -87
  178. package/build/domain/mappers/mapSchemaToComponent.js +0 -65
  179. package/build/domain/mappers/mapSchemaToComponent.test.js +0 -116
  180. package/build/domain/mappers/mapStepSchemas.js +0 -14
  181. package/build/domain/mappers/mapStepToComponent.js +0 -145
  182. package/build/domain/mappers/mapStepToComponent.test.js +0 -319
  183. package/build/domain/mappers/mapToolbarToComponent.js +0 -15
  184. package/build/domain/mappers/schema/allOfSchemaToComponent.js +0 -17
  185. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToComponent.js +0 -26
  186. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiSelectComponent.js +0 -56
  187. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiUploadComponent.js +0 -66
  188. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToRepeatableComponent.js +0 -58
  189. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToTupleComponent.js +0 -18
  190. package/build/domain/mappers/schema/blobSchemaToComponent.js +0 -15
  191. package/build/domain/mappers/schema/booleanSchemaToComponent.js +0 -29
  192. package/build/domain/mappers/schema/constSchemaToComponent.js +0 -23
  193. package/build/domain/mappers/schema/dateSchemaToComponent.js +0 -56
  194. package/build/domain/mappers/schema/dateSchemaToComponent.test.js +0 -112
  195. package/build/domain/mappers/schema/integerSchemaToComponent.js +0 -28
  196. package/build/domain/mappers/schema/numberSchemaToComponent.js +0 -26
  197. package/build/domain/mappers/schema/objectSchemaToComponent/assertDisplayOrder.js +0 -23
  198. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToFormattedValueComponent.js +0 -9
  199. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToMoneyInputComponent.js +0 -119
  200. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToMoneyInputComponent.test.js +0 -97
  201. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToObjectComponent.js +0 -32
  202. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToObjectComponent.test.js +0 -99
  203. package/build/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.js +0 -67
  204. package/build/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.test.js +0 -225
  205. package/build/domain/mappers/schema/persistAsyncSchemaToComponent.js +0 -29
  206. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.js +0 -18
  207. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.test.js +0 -133
  208. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToTextInputComponent.js +0 -38
  209. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToUploadInputComponent.js +0 -28
  210. package/build/domain/mappers/schema/tests/test-utils.js +0 -16
  211. package/build/domain/mappers/schema/types.js +0 -1
  212. package/build/domain/mappers/schema/utils/getPerformPersistAsyncFn.js +0 -19
  213. package/build/domain/mappers/schema/utils/getValidationAsyncInitialState.js +0 -23
  214. package/build/domain/mappers/schema/utils/mapCommonSchemaProps.js +0 -16
  215. package/build/domain/mappers/types.js +0 -1
  216. package/build/domain/mappers/utils/FeatureFlags.js +0 -22
  217. package/build/domain/mappers/utils/behavior-utils.js +0 -52
  218. package/build/domain/mappers/utils/call-to-action-utils.js +0 -24
  219. package/build/domain/mappers/utils/getAutocompleteString.js +0 -76
  220. package/build/domain/mappers/utils/getAutocompleteString.test.js +0 -21
  221. package/build/domain/mappers/utils/getHrefWithTracking.js +0 -16
  222. package/build/domain/mappers/utils/groupLayoutByPinned.js +0 -38
  223. package/build/domain/mappers/utils/groupLayoutByPinned.test.js +0 -166
  224. package/build/domain/mappers/utils/image.js +0 -6
  225. package/build/domain/mappers/utils/layout-utils.js +0 -11
  226. package/build/domain/mappers/utils/legacy-utils.js +0 -49
  227. package/build/domain/mappers/utils/media-utils.js +0 -14
  228. package/build/domain/mappers/utils/suggestions-utils.js +0 -26
  229. package/build/domain/mappers/utils/suggestions-utils.test.js +0 -36
  230. package/build/domain/mappers/utils/tags-utils.js +0 -1
  231. package/build/domain/mappers/utils/utils.js +0 -45
  232. package/build/domain/types.js +0 -1
  233. package/build/i18n/index.js +0 -40
  234. package/build/index.js +0 -9
  235. package/build/renderers/CoreContainerRenderer.js +0 -5
  236. package/build/renderers/CoreRootRenderer.js +0 -12
  237. package/build/renderers/EmptyLoadingStateRenderer.js +0 -5
  238. package/build/renderers/getRenderFunction.js +0 -24
  239. package/build/renderers/getSchemaErrorMessageFunction.js +0 -111
  240. package/build/renderers/mappers/alertComponentToProps.js +0 -3
  241. package/build/renderers/mappers/allOfComponentToProps.js +0 -6
  242. package/build/renderers/mappers/booleanInputComponentToProps.js +0 -3
  243. package/build/renderers/mappers/boxComponentToProps.js +0 -13
  244. package/build/renderers/mappers/buttonComponentToProps.js +0 -4
  245. package/build/renderers/mappers/collectionComponentToProps.js +0 -11
  246. package/build/renderers/mappers/columnsComponentToProps.js +0 -8
  247. package/build/renderers/mappers/componentToRendererProps.js +0 -168
  248. package/build/renderers/mappers/constComponentToProps.js +0 -5
  249. package/build/renderers/mappers/containerComponentToProps.js +0 -8
  250. package/build/renderers/mappers/dateInputComponentToProps.js +0 -3
  251. package/build/renderers/mappers/decisionComponentToProps.js +0 -16
  252. package/build/renderers/mappers/dividerComponentToProps.js +0 -2
  253. package/build/renderers/mappers/externalComponentToProps.js +0 -4
  254. package/build/renderers/mappers/formComponentToProps.js +0 -8
  255. package/build/renderers/mappers/formattedValueComponentToProps.js +0 -5
  256. package/build/renderers/mappers/headingComponentToProps.js +0 -2
  257. package/build/renderers/mappers/hiddenComponentToProps.js +0 -1
  258. package/build/renderers/mappers/imageComponentToProps.js +0 -2
  259. package/build/renderers/mappers/instructionsComponentToProps.js +0 -2
  260. package/build/renderers/mappers/integerInputComponentToProps.js +0 -3
  261. package/build/renderers/mappers/listComponentToProps.js +0 -3
  262. package/build/renderers/mappers/loadingIndicatorComponentToProps.js +0 -2
  263. package/build/renderers/mappers/markdownComponentToProps.js +0 -2
  264. package/build/renderers/mappers/mediaComponentToProps.js +0 -2
  265. package/build/renderers/mappers/modalComponentToProps.js +0 -8
  266. package/build/renderers/mappers/modalLayoutComponentToProps.js +0 -13
  267. package/build/renderers/mappers/moneyInputComponentToProps.js +0 -36
  268. package/build/renderers/mappers/multiSelectComponentToProps.js +0 -19
  269. package/build/renderers/mappers/multiUploadInputComponentToProps.js +0 -7
  270. package/build/renderers/mappers/numberInputComponentToProps.js +0 -3
  271. package/build/renderers/mappers/objectComponentToProps.js +0 -8
  272. package/build/renderers/mappers/paragraphComponentToProps.js +0 -2
  273. package/build/renderers/mappers/persistAsyncComponentToProps.js +0 -7
  274. package/build/renderers/mappers/progressComponentToProps.js +0 -2
  275. package/build/renderers/mappers/repeatableComponentToProps.js +0 -22
  276. package/build/renderers/mappers/reviewComponentToProps.js +0 -3
  277. package/build/renderers/mappers/rootComponentToProps.js +0 -20
  278. package/build/renderers/mappers/searchComponentToProps.js +0 -45
  279. package/build/renderers/mappers/sectionComponentToProps.js +0 -7
  280. package/build/renderers/mappers/selectInputComponentToProps.js +0 -34
  281. package/build/renderers/mappers/statusListComponentToProps.js +0 -3
  282. package/build/renderers/mappers/subflowComponentToRendererProps.js +0 -26
  283. package/build/renderers/mappers/tabsComponentToProps.js +0 -14
  284. package/build/renderers/mappers/textInputComponentToProps.js +0 -3
  285. package/build/renderers/mappers/tupleComponentToProps.js +0 -8
  286. package/build/renderers/mappers/updatableComponentToProps.js +0 -6
  287. package/build/renderers/mappers/uploadInputComponentToProps.js +0 -5
  288. package/build/renderers/mappers/upsellComponentToProps.js +0 -3
  289. package/build/renderers/mappers/utils/getValidationState.js +0 -12
  290. package/build/renderers/mappers/utils/inputComponentToProps.js +0 -17
  291. package/build/renderers/mappers/utils/mapCallToAction.js +0 -23
  292. package/build/renderers/mappers/utils/mapErrorsToValidationState.js +0 -9
  293. package/build/renderers/mappers/utils/mapRendererLoadingState.js +0 -1
  294. package/build/renderers/mappers/utils/pick.js +0 -8
  295. package/build/renderers/mappers/utils/selectInputOptionsToProps.js +0 -11
  296. package/build/renderers/stepComponentToProps.js +0 -32
  297. package/build/renderers/subflow/getDynamicSubflowRenderer.js +0 -13
  298. package/build/renderers/subflow/getNativeSubflowRenderer.js +0 -26
  299. package/build/renderers/utils.js +0 -72
  300. package/build/renderers/utils.test.js +0 -70
  301. package/build/stories/dev-tools/ContainerQueries.story.js +0 -66
  302. package/build/stories/dev-tools/Debugger.story.js +0 -107
  303. package/build/stories/dev-tools/FixtureSelect.story.js +0 -23
  304. package/build/stories/dev-tools/TestServer.story.js +0 -118
  305. package/build/stories/examples/NativeFlow.story.js +0 -80
  306. package/build/stories/examples/Recipients.story.js +0 -568
  307. package/build/stories/spec/behavior/Copy.story.js +0 -71
  308. package/build/stories/spec/behavior/Download.story.js +0 -254
  309. package/build/stories/spec/behavior/DynamicSubflow.story.js +0 -272
  310. package/build/stories/spec/behavior/Link.story.js +0 -40
  311. package/build/stories/spec/behavior/Modal.story.js +0 -79
  312. package/build/stories/spec/behavior/NativeSubflow.story.js +0 -249
  313. package/build/stories/spec/layouts/Alert.story.js +0 -107
  314. package/build/stories/spec/layouts/Box.Container-Widths.3-sizes.story.js +0 -59
  315. package/build/stories/spec/layouts/Box.Container-Widths.story.js +0 -57
  316. package/build/stories/spec/layouts/Box.Viewport-Widths.story.js +0 -64
  317. package/build/stories/spec/layouts/Collection.story.js +0 -294
  318. package/build/stories/spec/layouts/Decision.story.js +0 -241
  319. package/build/stories/spec/layouts/Image.Illustrations.Animated.story.js +0 -37
  320. package/build/stories/spec/layouts/Image.Sizes.story.js +0 -58
  321. package/build/stories/spec/layouts/Modal.story.js +0 -81
  322. package/build/stories/spec/layouts/Search.story.js +0 -325
  323. package/build/stories/spec/layouts/Updatable.story.js +0 -135
  324. package/build/stories/spec/layouts/Upsell.story.js +0 -55
  325. package/build/stories/spec/layouts/button/Button.story.js +0 -111
  326. package/build/stories/spec/layouts/button/PinnedButton.story.js +0 -81
  327. package/build/stories/spec/response/ActionResponse.story.js +0 -66
  328. package/build/stories/spec/schemas/InlineAlert.story.js +0 -134
  329. package/build/stories/spec/schemas/MultiSelect.story.js +0 -206
  330. package/build/stories/spec/schemas/Upload.story.js +0 -168
  331. package/build/stories/spec/schemas/const/ConstLayout.story.js +0 -159
  332. package/build/stories/spec/schemas/const/ObjectConst.story.js +0 -94
  333. package/build/stories/spec/schemas/date/DateSchema.story.js +0 -59
  334. package/build/stories/spec/schemas/features/PersistAsync.story.js +0 -230
  335. package/build/stories/spec/schemas/features/ValidationAsync.story.js +0 -137
  336. package/build/stories/spec/schemas/object/FormattedValue.story.js +0 -92
  337. package/build/stories/spec/schemas/object/MoneyInput.story.js +0 -240
  338. package/build/stories/spec/schemas/oneOf/OneOfInitialisation.story.js +0 -55
  339. package/build/stories/spec/schemas/oneOf/OneOfWithSingleOption.story.js +0 -114
  340. package/build/stories/spec/step/Controls.story.js +0 -110
  341. package/build/stories/spec/step/DFModal.story.js +0 -58
  342. package/build/stories/spec/step/Footer.story.js +0 -90
  343. package/build/stories/spec/step/Navigation.story.js +0 -46
  344. package/build/stories/spec/step/ScrollToBottom.story.js +0 -103
  345. package/build/stories/spec/step/Tags.story.js +0 -39
  346. package/build/stories/spec/step/ToolBar.story.js +0 -60
  347. package/build/stories/spec/step/features/ErrorHandling.story.js +0 -92
  348. package/build/stories/spec/step/features/External.story.js +0 -91
  349. package/build/stories/spec/step/features/LongFormError.story.js +0 -88
  350. package/build/stories/spec/step/features/Polling.story.js +0 -108
  351. package/build/stories/spec/step/features/RefreshAfter.story.js +0 -92
  352. package/build/stories/spec/step/features/refresh/Refresh.story.js +0 -260
  353. package/build/stories/spec/step/features/refresh/RefreshWithPersistAsync.story.js +0 -958
  354. package/build/stories/types.js +0 -1
  355. package/build/stories/utils/fixtureHttpClient.js +0 -70
  356. package/build/stories/utils/getBasicStep.js +0 -223
  357. package/build/stories/utils/mockSearchHandler.js +0 -71
  358. package/build/stories/utils/render-utils.js +0 -59
  359. package/build/stories/visual-tests/layouts/NotUsingListItem.story.js +0 -17
  360. package/build/test-utils/DynamicFlowWise.js +0 -41
  361. package/build/test-utils/DynamicFlowWiseModal.js +0 -34
  362. package/build/test-utils/NeptuneProviders.js +0 -11
  363. package/build/test-utils/component-utils.js +0 -5
  364. package/build/test-utils/dummy-native-subflows-handlers/dummySubflowHandlers.js +0 -45
  365. package/build/test-utils/dummy-native-subflows-handlers/geolocationSubflowHandler.js +0 -30
  366. package/build/test-utils/dummy-native-subflows-handlers/index.js +0 -9
  367. package/build/test-utils/dummy-native-subflows-handlers/notificationPermissionSubflowHandler.js +0 -17
  368. package/build/test-utils/fetch-utils.js +0 -47
  369. package/build/test-utils/getMergedTestRenderers.js +0 -36
  370. package/build/test-utils/getRandomId.js +0 -1
  371. package/build/test-utils/index.js +0 -3
  372. package/build/test-utils/mockIntersectionObserver.js +0 -23
  373. package/build/test-utils/openLinkInNewTab.js +0 -15
  374. package/build/test-utils/rtl-utils.js +0 -7
  375. package/build/test-utils/step-utils.js +0 -6
  376. package/build/test-utils/useSnackBar.js +0 -4
  377. package/build/test-utils/wait.js +0 -3
  378. package/build/tests/AlertLayout.test.js +0 -228
  379. package/build/tests/ArrayTuple.test.js +0 -118
  380. package/build/tests/ButtonLayout.test.js +0 -356
  381. package/build/tests/CollectionLayout.test.js +0 -516
  382. package/build/tests/ConstLayout.test.js +0 -95
  383. package/build/tests/DateInput.test.js +0 -190
  384. package/build/tests/DateSchema.test.js +0 -84
  385. package/build/tests/DecisionLayout.test.js +0 -146
  386. package/build/tests/DelayBehavior.test.js +0 -186
  387. package/build/tests/Download.test.js +0 -201
  388. package/build/tests/DynamicFlow.test.js +0 -147
  389. package/build/tests/External.test.js +0 -169
  390. package/build/tests/Flow.test.js +0 -328
  391. package/build/tests/FormLayout.test.js +0 -28
  392. package/build/tests/FormattedValue.test.js +0 -107
  393. package/build/tests/ImageRenderer.test.js +0 -78
  394. package/build/tests/InitialAction.test.js +0 -235
  395. package/build/tests/InitialStep.test.js +0 -168
  396. package/build/tests/InstructionsLayout.test.js +0 -45
  397. package/build/tests/ListLayout.test.js +0 -165
  398. package/build/tests/Logging.test.js +0 -53
  399. package/build/tests/ModalBehavior.test.js +0 -149
  400. package/build/tests/MoneyInput.test.js +0 -313
  401. package/build/tests/MultiUpload.test.js +0 -293
  402. package/build/tests/NativeBack.test.js +0 -267
  403. package/build/tests/NoOp.test.js +0 -194
  404. package/build/tests/OnLoad.test.js +0 -153
  405. package/build/tests/OneOfInitialisation.test.js +0 -571
  406. package/build/tests/PersistAsync.test.js +0 -687
  407. package/build/tests/Polling.test.js +0 -708
  408. package/build/tests/Prefetching.test.js +0 -229
  409. package/build/tests/RefreshAfter.test.js +0 -63
  410. package/build/tests/RefreshOnChange.ResponseHandling.test.js +0 -199
  411. package/build/tests/RefreshOnChange.test.js +0 -233
  412. package/build/tests/RefreshOnChange.with.Segmented.test.js +0 -351
  413. package/build/tests/RefreshOnChange.with.Tabs.test.js +0 -359
  414. package/build/tests/RefreshOnChangePreserve.test.js +0 -221
  415. package/build/tests/RendererProps.test.js +0 -372
  416. package/build/tests/Repeatable.test.js +0 -104
  417. package/build/tests/Rerendering.test.js +0 -67
  418. package/build/tests/ReviewLayout.test.js +0 -271
  419. package/build/tests/SchemaOnChange.test.js +0 -133
  420. package/build/tests/SchemaReferences.test.js +0 -88
  421. package/build/tests/ScrollToBottom.test.js +0 -101
  422. package/build/tests/ScrollToError.test.js +0 -359
  423. package/build/tests/ScrollToTop.test.js +0 -95
  424. package/build/tests/SegmentedControl.test.js +0 -49
  425. package/build/tests/SingleFileUpload.test.js +0 -168
  426. package/build/tests/StatusList.test.js +0 -85
  427. package/build/tests/Subflow.dynamic.test.js +0 -887
  428. package/build/tests/Subflow.native.test.js +0 -448
  429. package/build/tests/Submission.Const.test.js +0 -70
  430. package/build/tests/Submission.ResponseHandling.test.js +0 -557
  431. package/build/tests/Submission.merging.test.js +0 -202
  432. package/build/tests/Submission.test.js +0 -821
  433. package/build/tests/Tags.test.js +0 -466
  434. package/build/tests/UpdatableLayout.test.js +0 -343
  435. package/build/tests/Upsell.test.js +0 -154
  436. package/build/tests/ValidationAsync.test.js +0 -295
  437. package/build/tests/behavior/events.test.js +0 -348
  438. package/build/tests/legacy/Actions.test.js +0 -158
  439. package/build/tests/legacy/BackButton.test.js +0 -114
  440. package/build/tests/legacy/HiddenSchemas.test.js +0 -250
  441. package/build/tests/legacy/MultiSelect.test.js +0 -546
  442. package/build/tests/legacy/MultipleFileUploadSchema.test.js +0 -350
  443. package/build/tests/legacy/PersistAsync.blob-schema.test.js +0 -224
  444. package/build/tests/legacy/PersistAsync.string-schema.test.js +0 -211
  445. package/build/tests/legacy/RefreshStepOnChange.debouncing.test.js +0 -209
  446. package/build/tests/legacy/RefreshStepOnChange.test.js +0 -421
  447. package/build/tests/legacy/Search.test.js +0 -439
  448. package/build/tests/renderers/InlineAlertInSchemas.test.js +0 -82
  449. package/build/tests/renderers/MediaRenderer.test.js +0 -74
  450. package/build/tests/renderers/MultiSelectInputRendererProps.test.js +0 -58
  451. package/build/tests/renderers/SelectInputRendererProps.test.js +0 -43
  452. package/build/tests/renderers/TextInputRenderer.test.js +0 -48
  453. package/build/types.js +0 -1
  454. package/build/useDynamicFlow.js +0 -110
  455. package/build/useDynamicFlowModal.js +0 -58
  456. package/build/utils/analyse-step.js +0 -14
  457. package/build/utils/component-utils.js +0 -8
  458. package/build/utils/component-utils.test.js +0 -113
  459. package/build/utils/getScrollToTop.js +0 -12
  460. package/build/utils/normalise-flow-id.js +0 -1
  461. package/build/utils/normalise-flow-id.test.js +0 -24
  462. package/build/utils/recursiveMerge.js +0 -40
  463. package/build/utils/recursiveMerge.test.js +0 -93
  464. package/build/utils/safe-parse-link.js +0 -14
  465. package/build/utils/safe-parse-link.test.js +0 -19
  466. package/build/utils/type-utils.js +0 -22
  467. package/build/utils/type-validators.js +0 -11
  468. package/build/utils/type-validators.test.js +0 -180
  469. package/build/utils/useStableCallback.js +0 -15
@@ -1,343 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { act, screen, waitFor } from '@testing-library/react';
3
- import userEvent from '@testing-library/user-event';
4
- import { vi } from 'vitest';
5
- import { renderWithProviders, respondWith, respondWithDelay } from '../test-utils';
6
- import DynamicFlowWise from '../test-utils/DynamicFlowWise';
7
- const user = userEvent.setup({ advanceTimers: vi.advanceTimersByTime });
8
- const getDefaultProps = () => ({
9
- flowId: 'flow-id',
10
- httpClient: vi.fn(),
11
- onCompletion: vi.fn(),
12
- onError: vi.fn(),
13
- onEvent: vi.fn(),
14
- onLog: vi.fn(),
15
- });
16
- const getUpdatableLayout = (overrides = {}) => (Object.assign({ type: 'updatable', baseRequest: {
17
- url: '/update-content',
18
- method: 'POST',
19
- body: { source: 'updatable-layout' },
20
- }, trigger: {
21
- type: 'on-event',
22
- eventName: 'update-content',
23
- }, initialState: {
24
- components: [{ type: 'paragraph', text: 'Initial content' }],
25
- } }, overrides));
26
- const getInitialStep = (updatableLayout = getUpdatableLayout(), dispatchedEventName = 'update-content') => ({
27
- id: 'step-id',
28
- title: 'Step with updatable content',
29
- model: { name: 'Ada' },
30
- schemas: [
31
- {
32
- $id: '#details',
33
- type: 'object',
34
- displayOrder: ['name'],
35
- properties: {
36
- name: { type: 'string', title: 'Name' },
37
- },
38
- },
39
- ],
40
- layout: [
41
- { type: 'form', schemaId: '#details' },
42
- updatableLayout,
43
- {
44
- type: 'button',
45
- title: 'Update content',
46
- behavior: { type: 'dispatch-event', eventName: dispatchedEventName },
47
- },
48
- ],
49
- });
50
- const rejectOnAbort = async ({ signal }) => new Promise((resolve, reject) => {
51
- signal === null || signal === void 0 ? void 0 : signal.addEventListener('abort', () => {
52
- reject(new DOMException('Aborted', 'AbortError'));
53
- });
54
- });
55
- describe('UpdatableLayout', () => {
56
- it('renders its initial state', () => {
57
- const props = getDefaultProps();
58
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props, { initialStep: getInitialStep() })));
59
- expect(screen.getByText('Initial content')).toBeInTheDocument();
60
- expect(props.httpClient).not.toHaveBeenCalled();
61
- });
62
- it('replaces its content with the response when its event is dispatched', async () => {
63
- const httpClient = vi.fn().mockResolvedValue(respondWith({
64
- components: [{ type: 'paragraph', text: 'Updated content' }],
65
- }));
66
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: getInitialStep() })));
67
- await user.click(screen.getByRole('button', { name: 'Update content' }));
68
- await waitFor(() => {
69
- expect(screen.getByText('Updated content')).toBeInTheDocument();
70
- });
71
- expect(screen.queryByText('Initial content')).not.toBeInTheDocument();
72
- expect(httpClient).toHaveBeenCalledWith('/update-content', expect.objectContaining({
73
- method: 'POST',
74
- headers: { 'Content-Type': 'application/json' },
75
- body: JSON.stringify({ source: 'updatable-layout', name: 'Ada' }),
76
- }));
77
- });
78
- describe('when a fallback layout is provided', () => {
79
- it('renders the fallback layout when an update fails (server error)', async () => {
80
- const httpClient = vi.fn().mockResolvedValueOnce(respondWith({}, { status: 400 }));
81
- const updatableLayout = getUpdatableLayout({
82
- onError: {
83
- fallbackLayout: [{ type: 'paragraph', text: 'Unable to update content' }],
84
- },
85
- });
86
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: getInitialStep(updatableLayout) })));
87
- await user.click(screen.getByRole('button', { name: 'Update content' }));
88
- await waitFor(() => {
89
- expect(screen.getByText('Unable to update content')).toBeInTheDocument();
90
- });
91
- expect(screen.queryByText('Initial content')).not.toBeInTheDocument();
92
- });
93
- it('renders the fallback layout when an update fails (network error)', async () => {
94
- const httpClient = vi.fn().mockRejectedValue(new Error('Request failed'));
95
- const updatableLayout = getUpdatableLayout({
96
- onError: {
97
- fallbackLayout: [{ type: 'paragraph', text: 'Unable to update content' }],
98
- },
99
- });
100
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: getInitialStep(updatableLayout) })));
101
- await user.click(screen.getByRole('button', { name: 'Update content' }));
102
- await waitFor(() => {
103
- expect(screen.getByText('Unable to update content')).toBeInTheDocument();
104
- });
105
- expect(screen.queryByText('Initial content')).not.toBeInTheDocument();
106
- });
107
- it('uses its fallback layout when a successful response is invalid', async () => {
108
- const httpClient = vi.fn().mockResolvedValue(respondWith({
109
- components: [{ type: 'unknown-layout' }],
110
- }));
111
- const updatableLayout = getUpdatableLayout({
112
- onError: {
113
- fallbackLayout: [{ type: 'paragraph', text: 'Invalid response fallback' }],
114
- },
115
- });
116
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: getInitialStep(updatableLayout) })));
117
- await user.click(screen.getByRole('button', { name: 'Update content' }));
118
- await waitFor(() => {
119
- expect(screen.getByText('Invalid response fallback')).toBeInTheDocument();
120
- });
121
- expect(screen.queryByText('Initial content')).not.toBeInTheDocument();
122
- });
123
- });
124
- it('ignores events with a different name', async () => {
125
- const props = getDefaultProps();
126
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props, { initialStep: getInitialStep(getUpdatableLayout(), 'unrelated-event') })));
127
- await user.click(screen.getByRole('button', { name: 'Update content' }));
128
- expect(props.httpClient).not.toHaveBeenCalled();
129
- expect(screen.getByText('Initial content')).toBeInTheDocument();
130
- });
131
- describe('when no fallback layout is provided', () => {
132
- it('preserves its content when an update fails (network error)', async () => {
133
- const httpClient = vi.fn().mockRejectedValue(new Error('Request failed'));
134
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: getInitialStep() })));
135
- await user.click(screen.getByRole('button', { name: 'Update content' }));
136
- await waitFor(() => {
137
- expect(httpClient).toHaveBeenCalledOnce();
138
- });
139
- expect(screen.getByText('Initial content')).toBeInTheDocument();
140
- });
141
- it('preserves its content when an update fails (server error)', async () => {
142
- const httpClient = vi.fn().mockResolvedValueOnce(respondWith({}, { status: 400 }));
143
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: getInitialStep() })));
144
- await user.click(screen.getByRole('button', { name: 'Update content' }));
145
- await waitFor(() => {
146
- expect(httpClient).toHaveBeenCalledOnce();
147
- });
148
- expect(screen.getByText('Initial content')).toBeInTheDocument();
149
- });
150
- it('preserves its content when a successful response is invalid', async () => {
151
- const httpClient = vi.fn().mockResolvedValue(respondWith({
152
- components: [{ type: 'unknown-layout' }],
153
- }));
154
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: getInitialStep() })));
155
- await user.click(screen.getByRole('button', { name: 'Update content' }));
156
- await waitFor(() => {
157
- expect(httpClient).toHaveBeenCalledOnce();
158
- });
159
- expect(screen.getByText('Initial content')).toBeInTheDocument();
160
- });
161
- });
162
- it('preserves its content when the response omits components', async () => {
163
- const httpClient = vi.fn().mockResolvedValue(respondWith({}));
164
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: getInitialStep() })));
165
- await user.click(screen.getByRole('button', { name: 'Update content' }));
166
- await waitFor(() => {
167
- expect(httpClient).toHaveBeenCalledOnce();
168
- });
169
- expect(screen.getByText('Initial content')).toBeInTheDocument();
170
- });
171
- it('clears its content when the response contains an empty components array', async () => {
172
- const httpClient = vi.fn().mockResolvedValue(respondWith({ components: [] }));
173
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: getInitialStep() })));
174
- await user.click(screen.getByRole('button', { name: 'Update content' }));
175
- await waitFor(() => {
176
- expect(screen.queryByText('Initial content')).not.toBeInTheDocument();
177
- });
178
- });
179
- it('recursively merges the base request body with the current step value', async () => {
180
- const httpClient = vi.fn().mockResolvedValue(respondWith({ components: [] }));
181
- const updatableLayout = getUpdatableLayout({
182
- baseRequest: {
183
- url: '/update-content',
184
- method: 'POST',
185
- body: {
186
- requestId: 'request-id',
187
- profile: { name: 'Base name', source: 'base-request' },
188
- },
189
- },
190
- });
191
- const initialStep = Object.assign(Object.assign({}, getInitialStep(updatableLayout)), { model: { profile: { name: 'Ada' } }, schemas: [
192
- {
193
- $id: '#details',
194
- type: 'object',
195
- displayOrder: ['profile'],
196
- properties: {
197
- profile: {
198
- type: 'object',
199
- displayOrder: ['name'],
200
- properties: {
201
- name: { type: 'string', title: 'Name' },
202
- },
203
- },
204
- },
205
- },
206
- ] });
207
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: initialStep })));
208
- await user.click(screen.getByRole('button', { name: 'Update content' }));
209
- await waitFor(() => {
210
- expect(httpClient).toHaveBeenCalledWith('/update-content', expect.objectContaining({
211
- body: JSON.stringify({
212
- requestId: 'request-id',
213
- profile: { name: 'Ada', source: 'base-request' },
214
- }),
215
- }));
216
- });
217
- });
218
- it('does not include a request body for methods that do not support one', async () => {
219
- const httpClient = vi.fn().mockResolvedValue(respondWith({ components: [] }));
220
- const updatableLayout = getUpdatableLayout({
221
- baseRequest: {
222
- url: '/update-content',
223
- method: 'GET',
224
- body: { ignored: true },
225
- },
226
- });
227
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: getInitialStep(updatableLayout) })));
228
- await user.click(screen.getByRole('button', { name: 'Update content' }));
229
- await waitFor(() => {
230
- expect(httpClient).toHaveBeenCalledWith('/update-content', expect.objectContaining({ body: undefined, method: 'GET' }));
231
- });
232
- });
233
- it('aborts the previous request and ignores its response when another event is dispatched', async () => {
234
- const httpClient = vi
235
- .fn()
236
- .mockImplementationOnce(() => respondWithDelay({ components: [{ type: 'paragraph', text: 'Stale content' }] }, 1000))
237
- .mockImplementationOnce(() => respondWithDelay({ components: [{ type: 'paragraph', text: 'Latest content' }] }, 100));
238
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: getInitialStep() })));
239
- const updateButton = screen.getByRole('button', { name: 'Update content' });
240
- await user.click(updateButton);
241
- await user.click(updateButton);
242
- await act(async () => vi.advanceTimersByTimeAsync(100));
243
- expect(screen.getByText('Latest content')).toBeInTheDocument();
244
- await act(async () => vi.advanceTimersByTimeAsync(900));
245
- expect(screen.getByText('Latest content')).toBeInTheDocument();
246
- expect(screen.queryByText('Stale content')).not.toBeInTheDocument();
247
- });
248
- it('passes the loading state to the renderer while an update is in progress', async () => {
249
- const httpClient = vi
250
- .fn()
251
- .mockImplementation(() => respondWithDelay({ components: [{ type: 'paragraph', text: 'Updated content' }] }, 1000));
252
- const updatableRenderer = {
253
- canRenderType: 'updatable',
254
- render: vi.fn(),
255
- };
256
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: getInitialStep(), renderers: [updatableRenderer] })));
257
- expect(updatableRenderer.render).toHaveBeenLastCalledWith(expect.objectContaining({ isLoading: false }));
258
- await user.click(screen.getByRole('button', { name: 'Update content' }));
259
- await waitFor(() => {
260
- expect(updatableRenderer.render).toHaveBeenLastCalledWith(expect.objectContaining({ isLoading: true }));
261
- });
262
- await act(async () => vi.advanceTimersByTimeAsync(1000));
263
- expect(updatableRenderer.render).toHaveBeenLastCalledWith(expect.objectContaining({ isLoading: false }));
264
- });
265
- describe('when an update is aborted by another event', () => {
266
- it('keeps the loading state when the aborted request resolves before the latest one', async () => {
267
- const httpClient = vi
268
- .fn()
269
- .mockImplementationOnce(() => respondWithDelay({ components: [{ type: 'paragraph', text: 'Stale content' }] }, 100))
270
- .mockImplementationOnce(() => respondWithDelay({ components: [{ type: 'paragraph', text: 'Latest content' }] }, 1000));
271
- const updatableRenderer = {
272
- canRenderType: 'updatable',
273
- render: vi.fn(),
274
- };
275
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: getInitialStep(), renderers: [updatableRenderer] })));
276
- const updateButton = screen.getByRole('button', { name: 'Update content' });
277
- await user.click(updateButton);
278
- await user.click(updateButton);
279
- await act(async () => vi.advanceTimersByTimeAsync(100));
280
- expect(updatableRenderer.render).toHaveBeenLastCalledWith(expect.objectContaining({ isLoading: true }));
281
- await act(async () => vi.advanceTimersByTimeAsync(900));
282
- expect(updatableRenderer.render).toHaveBeenLastCalledWith(expect.objectContaining({ isLoading: false }));
283
- });
284
- it('keeps the loading state when the aborted request rejects', async () => {
285
- const httpClient = vi
286
- .fn()
287
- .mockImplementationOnce(async (url, init) => rejectOnAbort(init))
288
- .mockImplementationOnce(() => respondWithDelay({ components: [{ type: 'paragraph', text: 'Latest content' }] }, 1000));
289
- const updatableRenderer = {
290
- canRenderType: 'updatable',
291
- render: vi.fn(),
292
- };
293
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: getInitialStep(), renderers: [updatableRenderer] })));
294
- const updateButton = screen.getByRole('button', { name: 'Update content' });
295
- await user.click(updateButton);
296
- await user.click(updateButton);
297
- await act(async () => vi.advanceTimersByTimeAsync(100));
298
- expect(updatableRenderer.render).toHaveBeenLastCalledWith(expect.objectContaining({ isLoading: true }));
299
- await act(async () => vi.advanceTimersByTimeAsync(900));
300
- expect(updatableRenderer.render).toHaveBeenLastCalledWith(expect.objectContaining({ isLoading: false }));
301
- });
302
- });
303
- it('updates multiple layouts that listen to the same event independently', async () => {
304
- const httpClient = vi.fn(async (input) => {
305
- const url = String(input);
306
- return respondWith({
307
- components: [
308
- {
309
- type: 'paragraph',
310
- text: url === '/first-update' ? 'First updated content' : 'Second updated content',
311
- },
312
- ],
313
- });
314
- });
315
- const firstLayout = getUpdatableLayout({
316
- baseRequest: { url: '/first-update', method: 'POST' },
317
- initialState: { components: [{ type: 'paragraph', text: 'First initial content' }] },
318
- });
319
- const secondLayout = getUpdatableLayout({
320
- baseRequest: { url: '/second-update', method: 'POST' },
321
- initialState: { components: [{ type: 'paragraph', text: 'Second initial content' }] },
322
- });
323
- const initialStep = Object.assign(Object.assign({}, getInitialStep()), { layout: [
324
- { type: 'form', schemaId: '#details' },
325
- firstLayout,
326
- secondLayout,
327
- {
328
- type: 'button',
329
- title: 'Update content',
330
- behavior: { type: 'dispatch-event', eventName: 'update-content' },
331
- },
332
- ] });
333
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, getDefaultProps(), { httpClient: httpClient, initialStep: initialStep })));
334
- await user.click(screen.getByRole('button', { name: 'Update content' }));
335
- await waitFor(() => {
336
- expect(screen.getByText('First updated content')).toBeInTheDocument();
337
- expect(screen.getByText('Second updated content')).toBeInTheDocument();
338
- });
339
- expect(httpClient).toHaveBeenCalledTimes(2);
340
- expect(httpClient).toHaveBeenCalledWith('/first-update', expect.any(Object));
341
- expect(httpClient).toHaveBeenCalledWith('/second-update', expect.any(Object));
342
- });
343
- });
@@ -1,154 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /* eslint-disable @typescript-eslint/no-non-null-assertion */
3
- import { screen, waitFor } from '@testing-library/react';
4
- import { userEvent } from '@testing-library/user-event';
5
- import { vi } from 'vitest';
6
- import { renderWithProviders, respondWith } from '../test-utils';
7
- import DynamicFlowWise from '../test-utils/DynamicFlowWise';
8
- const user = userEvent.setup({ advanceTimers: vi.advanceTimersByTime });
9
- const getProps = (initialStep) => ({
10
- flowId: 'flow-id',
11
- initialStep,
12
- httpClient: vi.fn(),
13
- onCompletion: vi.fn(),
14
- onError: vi.fn(),
15
- onEvent: vi.fn(),
16
- onLog: vi.fn(),
17
- });
18
- const getCloseButton = () => screen.queryByRole('button', { name: /close/i });
19
- describe('Upsell component', () => {
20
- describe('when upsell does not contain onDismiss', () => {
21
- const props = getProps({
22
- id: 'step-1',
23
- title: 'Step 1',
24
- schemas: [],
25
- layout: [
26
- {
27
- type: 'upsell',
28
- text: 'Try our premium features!',
29
- callToAction: {
30
- title: 'Upgrade now',
31
- behavior: {
32
- type: 'link',
33
- url: '/upgrade',
34
- },
35
- },
36
- },
37
- ],
38
- });
39
- it('renders upsell without a close button', () => {
40
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
41
- expect(screen.getByText('Try our premium features!')).toBeInTheDocument();
42
- expect(screen.getByText('Upgrade now')).toBeInTheDocument();
43
- expect(getCloseButton()).not.toBeInTheDocument();
44
- });
45
- describe('when the call to action is clicked', () => {
46
- it('triggers the specified behavior (or for a link, has the correct attributes)', () => {
47
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
48
- const link = screen.getByRole('link', { name: /upgrade now/i });
49
- expect(link).toHaveAttribute('href', '/upgrade');
50
- expect(link).toHaveAttribute('target', '_blank');
51
- });
52
- });
53
- });
54
- describe('when the upsell has onDismiss', () => {
55
- const props = getProps({
56
- id: 'step-1',
57
- title: 'Step 1',
58
- schemas: [],
59
- layout: [
60
- {
61
- type: 'upsell',
62
- text: 'Try our premium features!',
63
- callToAction: {
64
- title: 'Upgrade now',
65
- behavior: {
66
- type: 'link',
67
- url: '/upgrade',
68
- },
69
- },
70
- onDismiss: {
71
- url: '/dismiss-upsell',
72
- method: 'POST',
73
- body: { upsellId: 'upsell-123' },
74
- },
75
- },
76
- {
77
- type: 'button',
78
- title: 'Submit',
79
- control: 'primary',
80
- behavior: {
81
- type: 'action',
82
- action: { url: '/submit-step', method: 'POST' },
83
- },
84
- },
85
- ],
86
- });
87
- it('can be dismissed using the close button, and it becomes hidden', async () => {
88
- const httpClient = vi.fn().mockResolvedValue({ status: 200 });
89
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props, { httpClient: httpClient })));
90
- await user.click(getCloseButton());
91
- await waitFor(() => {
92
- expect(screen.queryByText('Try our premium features!')).not.toBeInTheDocument();
93
- });
94
- expect(httpClient).toHaveBeenCalledWith('/dismiss-upsell', {
95
- method: 'POST',
96
- body: JSON.stringify({ upsellId: 'upsell-123' }),
97
- });
98
- expect(screen.queryByText('Try our premium features!')).not.toBeInTheDocument();
99
- });
100
- describe('when displaying errors after upsell dismissal', () => {
101
- it('does not show the upsell again after it has been dismissed', async () => {
102
- const httpClient = async (url) => {
103
- if (url === '/dismiss-upsell') {
104
- return respondWith(null, { status: 200 });
105
- }
106
- if (url === '/submit-step') {
107
- return respondWith({ error: 'There was an error' }, { status: 422 });
108
- }
109
- return respondWith(null, { status: 404 });
110
- };
111
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props, { httpClient: httpClient })));
112
- await user.click(getCloseButton());
113
- await waitFor(() => {
114
- expect(screen.queryByText('Try our premium features!')).not.toBeInTheDocument();
115
- });
116
- await user.click(screen.getByRole('button', { name: /submit/i }));
117
- await waitFor(() => {
118
- expect(screen.getByText('There was an error')).toBeInTheDocument();
119
- });
120
- // Ensure the upsell does not re-appear when displaying errors
121
- expect(screen.queryByText('Try our premium features!')).not.toBeInTheDocument();
122
- });
123
- });
124
- });
125
- describe('when the upsell has a link behavior', () => {
126
- it('does not trigger twice (the renderer handles the href, so the onLink is not called)', async () => {
127
- const onLink = vi.fn();
128
- const props = getProps({
129
- id: 'step-1',
130
- title: 'Step 1',
131
- schemas: [],
132
- layout: [
133
- {
134
- type: 'upsell',
135
- text: 'Try our premium features!',
136
- callToAction: {
137
- title: 'Upgrade now',
138
- behavior: {
139
- type: 'link',
140
- url: '/upgrade',
141
- },
142
- },
143
- },
144
- ],
145
- });
146
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props, { onLink: onLink })));
147
- const link = screen.getByRole('link');
148
- expect(link).toHaveAttribute('href', '/upgrade');
149
- expect(link).toHaveAttribute('target', '_blank');
150
- await user.click(link);
151
- expect(onLink).not.toHaveBeenCalled();
152
- });
153
- });
154
- });