@wise/dynamic-flow-client 5.30.1 → 5.30.2-experimental-949e5e5

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 (480) hide show
  1. package/build/tsconfig.types.tsbuildinfo +1 -1
  2. package/package.json +2 -2
  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 -14
  89. package/build/domain/components/collectionComponent/CollectionComponent.test.js +0 -447
  90. package/build/domain/components/collectionComponent/CollectionController.js +0 -138
  91. package/build/domain/components/collectionComponent/CollectionController.test.js +0 -58
  92. package/build/domain/components/collectionComponent/CollectionStack.js +0 -40
  93. package/build/domain/components/collectionComponent/CollectionStack.test.js +0 -173
  94. package/build/domain/components/collectionComponent/CollectionState.js +0 -39
  95. package/build/domain/components/collectionComponent/applyCollectionResponse.js +0 -9
  96. package/build/domain/components/collectionComponent/mergeSections.js +0 -28
  97. package/build/domain/components/collectionComponent/toggleFilterOption.js +0 -15
  98. package/build/domain/components/collectionComponent/types.js +0 -1
  99. package/build/domain/components/searchComponent/SearchComponent.js +0 -91
  100. package/build/domain/components/searchComponent/SearchComponent.test.js +0 -190
  101. package/build/domain/components/step/ExternalConfirmationComponent.js +0 -27
  102. package/build/domain/components/step/StepDomainComponent.js +0 -153
  103. package/build/domain/components/step/ToolbarComponent.js +0 -1
  104. package/build/domain/components/utils/component-utils.js +0 -12
  105. package/build/domain/components/utils/debounce.js +0 -34
  106. package/build/domain/components/utils/debounce.test.js +0 -67
  107. package/build/domain/components/utils/file-utils.js +0 -21
  108. package/build/domain/components/utils/file-utils.test.js +0 -27
  109. package/build/domain/components/utils/getRandomId.js +0 -1
  110. package/build/domain/components/utils/isExactLocalValueMatch.js +0 -14
  111. package/build/domain/components/utils/isOrWasValid.js +0 -5
  112. package/build/domain/components/utils/isPartialModelMatch.js +0 -18
  113. package/build/domain/components/utils/isPartialModelMatch.test.js +0 -74
  114. package/build/domain/features/collection/getPerformCollectionQuery.js +0 -80
  115. package/build/domain/features/collection/getPerformCollectionQuery.test.js +0 -215
  116. package/build/domain/features/delay/getStepDelays.js +0 -37
  117. package/build/domain/features/delay/getStepDelays.test.js +0 -69
  118. package/build/domain/features/domain-event-bus/DomainEventBus.js +0 -24
  119. package/build/domain/features/domain-event-bus/index.js +0 -1
  120. package/build/domain/features/domain-event-bus/types.js +0 -1
  121. package/build/domain/features/eventNames.js +0 -41
  122. package/build/domain/features/events.js +0 -5
  123. package/build/domain/features/persistAsync/getComponentMultiPersistAsync.js +0 -50
  124. package/build/domain/features/persistAsync/getInitialPersistedState.js +0 -7
  125. package/build/domain/features/persistAsync/getPerformPersistAsync.js +0 -43
  126. package/build/domain/features/persistAsync/getPerformPersistAsync.test.js +0 -139
  127. package/build/domain/features/polling/getStepPolling.js +0 -50
  128. package/build/domain/features/polling/getStepPolling.test.js +0 -115
  129. package/build/domain/features/prefetch/getStepPrefetch.js +0 -56
  130. package/build/domain/features/prefetch/request-cache.js +0 -49
  131. package/build/domain/features/prefetch/request-cache.test.js +0 -70
  132. package/build/domain/features/refreshAfter/getStepRefreshAfter.js +0 -24
  133. package/build/domain/features/refreshAfter/getStepRefreshAfter.test.js +0 -40
  134. package/build/domain/features/schema-on-change/getDebouncedSchemaOnChange.js +0 -50
  135. package/build/domain/features/schema-on-change/getSchemaOnChange.js +0 -38
  136. package/build/domain/features/search/getPerformSearchFunction.js +0 -75
  137. package/build/domain/features/search/getPerformSearchFunction.test.js +0 -301
  138. package/build/domain/features/summary/summary-utils.js +0 -37
  139. package/build/domain/features/summary/summary-utils.test.js +0 -125
  140. package/build/domain/features/updatable/getPerformUpdateQuery.js +0 -52
  141. package/build/domain/features/utils/http-utils.js +0 -21
  142. package/build/domain/features/utils/response-utils.js +0 -9
  143. package/build/domain/features/validation/date-availability.js +0 -54
  144. package/build/domain/features/validation/date-availability.test.js +0 -54
  145. package/build/domain/features/validation/getPatternRegExp.js +0 -25
  146. package/build/domain/features/validation/spec-utils.js +0 -23
  147. package/build/domain/features/validation/validation-functions.js +0 -6
  148. package/build/domain/features/validation/validation-functions.test.js +0 -108
  149. package/build/domain/features/validation/value-checks.js +0 -130
  150. package/build/domain/features/validation/value-checks.test.js +0 -297
  151. package/build/domain/features/validationAsync/getComponentValidationAsync.js +0 -57
  152. package/build/domain/features/validationAsync/getComponentValidationAsync.test.js +0 -67
  153. package/build/domain/features/validationAsync/getInitialValidationAsyncState.js +0 -6
  154. package/build/domain/features/validationAsync/getPerformValidationAsync.js +0 -46
  155. package/build/domain/features/validationAsync/getPerformValidationAsync.test.js +0 -162
  156. package/build/domain/handlers/dismissHandler.js +0 -11
  157. package/build/domain/mappers/layout/alertLayoutToComponent.js +0 -18
  158. package/build/domain/mappers/layout/boxLayoutToComponent.js +0 -13
  159. package/build/domain/mappers/layout/buttonLayoutToComponent.js +0 -77
  160. package/build/domain/mappers/layout/collectionLayoutToComponent.js +0 -66
  161. package/build/domain/mappers/layout/columnsLayoutToComponent.js +0 -13
  162. package/build/domain/mappers/layout/decisionLayoutToComponent.js +0 -24
  163. package/build/domain/mappers/layout/deprecatedListLayoutToComponent.js +0 -30
  164. package/build/domain/mappers/layout/dividerLayoutToComponent.js +0 -2
  165. package/build/domain/mappers/layout/formLayoutToComponent.js +0 -19
  166. package/build/domain/mappers/layout/headingLayoutToComponent.js +0 -12
  167. package/build/domain/mappers/layout/imageLayoutToComponent.js +0 -17
  168. package/build/domain/mappers/layout/infoLayoutToComponent.js +0 -12
  169. package/build/domain/mappers/layout/instructionsLayoutToComponent.js +0 -12
  170. package/build/domain/mappers/layout/listLayoutToComponent.js +0 -39
  171. package/build/domain/mappers/layout/loadingIndicatorLayoutToComponent.js +0 -9
  172. package/build/domain/mappers/layout/markdownLayoutToComponent.js +0 -12
  173. package/build/domain/mappers/layout/mediaLayoutToComponent.js +0 -12
  174. package/build/domain/mappers/layout/modalLayoutToComponent.js +0 -17
  175. package/build/domain/mappers/layout/modalToComponent.js +0 -8
  176. package/build/domain/mappers/layout/paragraphLayoutToComponent.js +0 -12
  177. package/build/domain/mappers/layout/progressLayoutToComponent.js +0 -15
  178. package/build/domain/mappers/layout/reviewLayoutToComponent.js +0 -49
  179. package/build/domain/mappers/layout/searchLayoutToComponent.js +0 -44
  180. package/build/domain/mappers/layout/sectionLayoutToComponent.js +0 -16
  181. package/build/domain/mappers/layout/statusListLayoutToComponent.js +0 -15
  182. package/build/domain/mappers/layout/tabsLayoutToComponent.js +0 -16
  183. package/build/domain/mappers/layout/updatableLayoutToComponent.js +0 -39
  184. package/build/domain/mappers/layout/upsellLayoutToComponent.js +0 -18
  185. package/build/domain/mappers/mapLayoutToComponent.js +0 -87
  186. package/build/domain/mappers/mapSchemaToComponent.js +0 -65
  187. package/build/domain/mappers/mapSchemaToComponent.test.js +0 -116
  188. package/build/domain/mappers/mapStepSchemas.js +0 -14
  189. package/build/domain/mappers/mapStepToComponent.js +0 -145
  190. package/build/domain/mappers/mapStepToComponent.test.js +0 -319
  191. package/build/domain/mappers/mapToolbarToComponent.js +0 -15
  192. package/build/domain/mappers/schema/allOfSchemaToComponent.js +0 -17
  193. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToComponent.js +0 -26
  194. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiSelectComponent.js +0 -56
  195. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiUploadComponent.js +0 -66
  196. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToRepeatableComponent.js +0 -58
  197. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToTupleComponent.js +0 -18
  198. package/build/domain/mappers/schema/blobSchemaToComponent.js +0 -15
  199. package/build/domain/mappers/schema/booleanSchemaToComponent.js +0 -29
  200. package/build/domain/mappers/schema/constSchemaToComponent.js +0 -23
  201. package/build/domain/mappers/schema/dateSchemaToComponent.js +0 -56
  202. package/build/domain/mappers/schema/dateSchemaToComponent.test.js +0 -117
  203. package/build/domain/mappers/schema/integerSchemaToComponent.js +0 -28
  204. package/build/domain/mappers/schema/numberSchemaToComponent.js +0 -26
  205. package/build/domain/mappers/schema/objectSchemaToComponent/assertDisplayOrder.js +0 -23
  206. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToFormattedValueComponent.js +0 -9
  207. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToMoneyInputComponent.js +0 -119
  208. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToMoneyInputComponent.test.js +0 -97
  209. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToObjectComponent.js +0 -32
  210. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToObjectComponent.test.js +0 -99
  211. package/build/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.js +0 -67
  212. package/build/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.test.js +0 -225
  213. package/build/domain/mappers/schema/persistAsyncSchemaToComponent.js +0 -29
  214. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.js +0 -18
  215. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.test.js +0 -133
  216. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToTextInputComponent.js +0 -38
  217. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToUploadInputComponent.js +0 -28
  218. package/build/domain/mappers/schema/tests/test-utils.js +0 -16
  219. package/build/domain/mappers/schema/types.js +0 -1
  220. package/build/domain/mappers/schema/utils/getPerformPersistAsyncFn.js +0 -19
  221. package/build/domain/mappers/schema/utils/getValidationAsyncInitialState.js +0 -23
  222. package/build/domain/mappers/schema/utils/mapCommonSchemaProps.js +0 -16
  223. package/build/domain/mappers/types.js +0 -1
  224. package/build/domain/mappers/utils/FeatureFlags.js +0 -22
  225. package/build/domain/mappers/utils/behavior-utils.js +0 -52
  226. package/build/domain/mappers/utils/call-to-action-utils.js +0 -24
  227. package/build/domain/mappers/utils/getAutocompleteString.js +0 -76
  228. package/build/domain/mappers/utils/getAutocompleteString.test.js +0 -21
  229. package/build/domain/mappers/utils/getHrefWithTracking.js +0 -16
  230. package/build/domain/mappers/utils/groupLayoutByPinned.js +0 -38
  231. package/build/domain/mappers/utils/groupLayoutByPinned.test.js +0 -166
  232. package/build/domain/mappers/utils/image.js +0 -6
  233. package/build/domain/mappers/utils/layout-utils.js +0 -11
  234. package/build/domain/mappers/utils/legacy-utils.js +0 -49
  235. package/build/domain/mappers/utils/media-utils.js +0 -14
  236. package/build/domain/mappers/utils/suggestions-utils.js +0 -26
  237. package/build/domain/mappers/utils/suggestions-utils.test.js +0 -36
  238. package/build/domain/mappers/utils/tags-utils.js +0 -1
  239. package/build/domain/mappers/utils/utils.js +0 -45
  240. package/build/domain/types.js +0 -1
  241. package/build/i18n/index.js +0 -40
  242. package/build/index.js +0 -9
  243. package/build/renderers/CoreContainerRenderer.js +0 -5
  244. package/build/renderers/CoreRootRenderer.js +0 -12
  245. package/build/renderers/EmptyLoadingStateRenderer.js +0 -5
  246. package/build/renderers/getRenderFunction.js +0 -24
  247. package/build/renderers/getSchemaErrorMessageFunction.js +0 -111
  248. package/build/renderers/mappers/alertComponentToProps.js +0 -3
  249. package/build/renderers/mappers/allOfComponentToProps.js +0 -6
  250. package/build/renderers/mappers/booleanInputComponentToProps.js +0 -3
  251. package/build/renderers/mappers/boxComponentToProps.js +0 -13
  252. package/build/renderers/mappers/buttonComponentToProps.js +0 -4
  253. package/build/renderers/mappers/collectionComponentToProps.js +0 -54
  254. package/build/renderers/mappers/columnsComponentToProps.js +0 -8
  255. package/build/renderers/mappers/componentToRendererProps.js +0 -168
  256. package/build/renderers/mappers/constComponentToProps.js +0 -5
  257. package/build/renderers/mappers/containerComponentToProps.js +0 -8
  258. package/build/renderers/mappers/dateInputComponentToProps.js +0 -3
  259. package/build/renderers/mappers/decisionComponentToProps.js +0 -16
  260. package/build/renderers/mappers/dividerComponentToProps.js +0 -2
  261. package/build/renderers/mappers/externalComponentToProps.js +0 -4
  262. package/build/renderers/mappers/formComponentToProps.js +0 -8
  263. package/build/renderers/mappers/formattedValueComponentToProps.js +0 -5
  264. package/build/renderers/mappers/headingComponentToProps.js +0 -2
  265. package/build/renderers/mappers/hiddenComponentToProps.js +0 -1
  266. package/build/renderers/mappers/imageComponentToProps.js +0 -2
  267. package/build/renderers/mappers/instructionsComponentToProps.js +0 -2
  268. package/build/renderers/mappers/integerInputComponentToProps.js +0 -3
  269. package/build/renderers/mappers/listComponentToProps.js +0 -3
  270. package/build/renderers/mappers/loadingIndicatorComponentToProps.js +0 -2
  271. package/build/renderers/mappers/markdownComponentToProps.js +0 -2
  272. package/build/renderers/mappers/mediaComponentToProps.js +0 -2
  273. package/build/renderers/mappers/modalComponentToProps.js +0 -8
  274. package/build/renderers/mappers/modalLayoutComponentToProps.js +0 -13
  275. package/build/renderers/mappers/moneyInputComponentToProps.js +0 -36
  276. package/build/renderers/mappers/multiSelectComponentToProps.js +0 -19
  277. package/build/renderers/mappers/multiUploadInputComponentToProps.js +0 -7
  278. package/build/renderers/mappers/numberInputComponentToProps.js +0 -3
  279. package/build/renderers/mappers/objectComponentToProps.js +0 -8
  280. package/build/renderers/mappers/paragraphComponentToProps.js +0 -2
  281. package/build/renderers/mappers/persistAsyncComponentToProps.js +0 -7
  282. package/build/renderers/mappers/progressComponentToProps.js +0 -2
  283. package/build/renderers/mappers/repeatableComponentToProps.js +0 -22
  284. package/build/renderers/mappers/reviewComponentToProps.js +0 -3
  285. package/build/renderers/mappers/rootComponentToProps.js +0 -20
  286. package/build/renderers/mappers/searchComponentToProps.js +0 -45
  287. package/build/renderers/mappers/sectionComponentToProps.js +0 -7
  288. package/build/renderers/mappers/selectInputComponentToProps.js +0 -34
  289. package/build/renderers/mappers/statusListComponentToProps.js +0 -3
  290. package/build/renderers/mappers/subflowComponentToRendererProps.js +0 -26
  291. package/build/renderers/mappers/tabsComponentToProps.js +0 -14
  292. package/build/renderers/mappers/textInputComponentToProps.js +0 -3
  293. package/build/renderers/mappers/tupleComponentToProps.js +0 -8
  294. package/build/renderers/mappers/updatableComponentToProps.js +0 -6
  295. package/build/renderers/mappers/uploadInputComponentToProps.js +0 -5
  296. package/build/renderers/mappers/upsellComponentToProps.js +0 -3
  297. package/build/renderers/mappers/utils/getValidationState.js +0 -12
  298. package/build/renderers/mappers/utils/inputComponentToProps.js +0 -17
  299. package/build/renderers/mappers/utils/mapCallToAction.js +0 -23
  300. package/build/renderers/mappers/utils/mapErrorsToValidationState.js +0 -9
  301. package/build/renderers/mappers/utils/mapRendererLoadingState.js +0 -1
  302. package/build/renderers/mappers/utils/pick.js +0 -8
  303. package/build/renderers/mappers/utils/selectInputOptionsToProps.js +0 -11
  304. package/build/renderers/stepComponentToProps.js +0 -32
  305. package/build/renderers/subflow/getDynamicSubflowRenderer.js +0 -13
  306. package/build/renderers/subflow/getNativeSubflowRenderer.js +0 -26
  307. package/build/renderers/utils.js +0 -82
  308. package/build/renderers/utils.test.js +0 -70
  309. package/build/stories/dev-tools/ContainerQueries.story.js +0 -66
  310. package/build/stories/dev-tools/Debugger.story.js +0 -107
  311. package/build/stories/dev-tools/FixtureSelect.story.js +0 -23
  312. package/build/stories/dev-tools/TestServer.story.js +0 -118
  313. package/build/stories/examples/NativeFlow.story.js +0 -80
  314. package/build/stories/examples/Recipients.story.js +0 -568
  315. package/build/stories/spec/behavior/Copy.story.js +0 -71
  316. package/build/stories/spec/behavior/Download.story.js +0 -254
  317. package/build/stories/spec/behavior/DynamicSubflow.story.js +0 -272
  318. package/build/stories/spec/behavior/Link.story.js +0 -40
  319. package/build/stories/spec/behavior/Modal.story.js +0 -79
  320. package/build/stories/spec/behavior/NativeSubflow.story.js +0 -249
  321. package/build/stories/spec/layouts/Alert.story.js +0 -107
  322. package/build/stories/spec/layouts/Box.Container-Widths.3-sizes.story.js +0 -59
  323. package/build/stories/spec/layouts/Box.Container-Widths.story.js +0 -57
  324. package/build/stories/spec/layouts/Box.Viewport-Widths.story.js +0 -64
  325. package/build/stories/spec/layouts/Collection.story.js +0 -326
  326. package/build/stories/spec/layouts/Decision.story.js +0 -241
  327. package/build/stories/spec/layouts/Image.Illustrations.Animated.story.js +0 -37
  328. package/build/stories/spec/layouts/Image.Sizes.story.js +0 -58
  329. package/build/stories/spec/layouts/List.story.js +0 -60
  330. package/build/stories/spec/layouts/Modal.story.js +0 -81
  331. package/build/stories/spec/layouts/Search.story.js +0 -325
  332. package/build/stories/spec/layouts/Updatable.story.js +0 -135
  333. package/build/stories/spec/layouts/Upsell.story.js +0 -55
  334. package/build/stories/spec/layouts/button/Button.story.js +0 -111
  335. package/build/stories/spec/layouts/button/PinnedButton.story.js +0 -81
  336. package/build/stories/spec/response/ActionResponse.story.js +0 -66
  337. package/build/stories/spec/schemas/InlineAlert.story.js +0 -134
  338. package/build/stories/spec/schemas/MultiSelect.story.js +0 -206
  339. package/build/stories/spec/schemas/Upload.story.js +0 -168
  340. package/build/stories/spec/schemas/const/ConstLayout.story.js +0 -159
  341. package/build/stories/spec/schemas/const/ObjectConst.story.js +0 -94
  342. package/build/stories/spec/schemas/date/DateSchema.story.js +0 -60
  343. package/build/stories/spec/schemas/features/PersistAsync.story.js +0 -230
  344. package/build/stories/spec/schemas/features/ValidationAsync.story.js +0 -137
  345. package/build/stories/spec/schemas/object/FormattedValue.story.js +0 -92
  346. package/build/stories/spec/schemas/object/MoneyInput.story.js +0 -240
  347. package/build/stories/spec/schemas/oneOf/OneOfInitialisation.story.js +0 -55
  348. package/build/stories/spec/schemas/oneOf/OneOfWithSingleOption.story.js +0 -114
  349. package/build/stories/spec/schemas/string/SsnInput.story.js +0 -38
  350. package/build/stories/spec/step/Controls.story.js +0 -110
  351. package/build/stories/spec/step/DFModal.story.js +0 -58
  352. package/build/stories/spec/step/Footer.story.js +0 -90
  353. package/build/stories/spec/step/Navigation.story.js +0 -46
  354. package/build/stories/spec/step/ScrollToBottom.story.js +0 -103
  355. package/build/stories/spec/step/Tags.story.js +0 -39
  356. package/build/stories/spec/step/ToolBar.story.js +0 -60
  357. package/build/stories/spec/step/features/ErrorHandling.story.js +0 -92
  358. package/build/stories/spec/step/features/External.story.js +0 -91
  359. package/build/stories/spec/step/features/LongFormError.story.js +0 -88
  360. package/build/stories/spec/step/features/Polling.story.js +0 -108
  361. package/build/stories/spec/step/features/RefreshAfter.story.js +0 -92
  362. package/build/stories/spec/step/features/refresh/Refresh.story.js +0 -260
  363. package/build/stories/spec/step/features/refresh/RefreshWithPersistAsync.story.js +0 -958
  364. package/build/stories/types.js +0 -1
  365. package/build/stories/utils/fixtureHttpClient.js +0 -70
  366. package/build/stories/utils/getBasicStep.js +0 -223
  367. package/build/stories/utils/mockSearchHandler.js +0 -71
  368. package/build/stories/utils/render-utils.js +0 -59
  369. package/build/stories/visual-tests/layouts/NotUsingListItem.story.js +0 -17
  370. package/build/test-utils/DynamicFlowWise.js +0 -41
  371. package/build/test-utils/DynamicFlowWiseModal.js +0 -34
  372. package/build/test-utils/NeptuneProviders.js +0 -11
  373. package/build/test-utils/component-utils.js +0 -5
  374. package/build/test-utils/dummy-native-subflows-handlers/dummySubflowHandlers.js +0 -45
  375. package/build/test-utils/dummy-native-subflows-handlers/geolocationSubflowHandler.js +0 -30
  376. package/build/test-utils/dummy-native-subflows-handlers/index.js +0 -9
  377. package/build/test-utils/dummy-native-subflows-handlers/notificationPermissionSubflowHandler.js +0 -17
  378. package/build/test-utils/fetch-utils.js +0 -47
  379. package/build/test-utils/getMergedTestRenderers.js +0 -36
  380. package/build/test-utils/getRandomId.js +0 -1
  381. package/build/test-utils/index.js +0 -3
  382. package/build/test-utils/mockIntersectionObserver.js +0 -23
  383. package/build/test-utils/openLinkInNewTab.js +0 -15
  384. package/build/test-utils/rtl-utils.js +0 -7
  385. package/build/test-utils/step-utils.js +0 -6
  386. package/build/test-utils/useSnackBar.js +0 -4
  387. package/build/test-utils/wait.js +0 -3
  388. package/build/tests/AlertLayout.test.js +0 -228
  389. package/build/tests/ArrayTuple.test.js +0 -118
  390. package/build/tests/ButtonLayout.test.js +0 -356
  391. package/build/tests/CollectionLayout.test.js +0 -722
  392. package/build/tests/CollectionLayout.v2.test.js +0 -350
  393. package/build/tests/ConstLayout.test.js +0 -95
  394. package/build/tests/DateInput.test.js +0 -190
  395. package/build/tests/DateSchema.test.js +0 -171
  396. package/build/tests/DecisionLayout.test.js +0 -146
  397. package/build/tests/DelayBehavior.test.js +0 -186
  398. package/build/tests/Download.test.js +0 -201
  399. package/build/tests/DynamicFlow.test.js +0 -147
  400. package/build/tests/External.test.js +0 -169
  401. package/build/tests/Flow.test.js +0 -328
  402. package/build/tests/FormLayout.test.js +0 -28
  403. package/build/tests/FormattedValue.test.js +0 -107
  404. package/build/tests/ImageRenderer.test.js +0 -78
  405. package/build/tests/InitialAction.test.js +0 -235
  406. package/build/tests/InitialStep.test.js +0 -168
  407. package/build/tests/InstructionsLayout.test.js +0 -45
  408. package/build/tests/ListLayout.test.js +0 -165
  409. package/build/tests/Logging.test.js +0 -53
  410. package/build/tests/ModalBehavior.test.js +0 -149
  411. package/build/tests/MoneyInput.test.js +0 -313
  412. package/build/tests/MultiUpload.test.js +0 -293
  413. package/build/tests/NativeBack.test.js +0 -267
  414. package/build/tests/NoOp.test.js +0 -194
  415. package/build/tests/OnLoad.test.js +0 -153
  416. package/build/tests/OneOfInitialisation.test.js +0 -571
  417. package/build/tests/PersistAsync.test.js +0 -687
  418. package/build/tests/Polling.test.js +0 -708
  419. package/build/tests/Prefetching.test.js +0 -229
  420. package/build/tests/RefreshAfter.test.js +0 -63
  421. package/build/tests/RefreshOnChange.ResponseHandling.test.js +0 -199
  422. package/build/tests/RefreshOnChange.test.js +0 -233
  423. package/build/tests/RefreshOnChange.with.Segmented.test.js +0 -351
  424. package/build/tests/RefreshOnChange.with.Tabs.test.js +0 -359
  425. package/build/tests/RefreshOnChangePreserve.test.js +0 -221
  426. package/build/tests/RendererProps.test.js +0 -372
  427. package/build/tests/Repeatable.test.js +0 -104
  428. package/build/tests/Rerendering.test.js +0 -67
  429. package/build/tests/ReviewLayout.test.js +0 -271
  430. package/build/tests/SchemaOnChange.test.js +0 -133
  431. package/build/tests/SchemaReferences.test.js +0 -88
  432. package/build/tests/ScrollToBottom.test.js +0 -101
  433. package/build/tests/ScrollToError.test.js +0 -359
  434. package/build/tests/ScrollToTop.test.js +0 -95
  435. package/build/tests/SegmentedControl.test.js +0 -49
  436. package/build/tests/SingleFileUpload.test.js +0 -168
  437. package/build/tests/StatusList.test.js +0 -85
  438. package/build/tests/Subflow.dynamic.test.js +0 -887
  439. package/build/tests/Subflow.native.test.js +0 -448
  440. package/build/tests/Submission.Const.test.js +0 -70
  441. package/build/tests/Submission.ResponseHandling.test.js +0 -557
  442. package/build/tests/Submission.merging.test.js +0 -202
  443. package/build/tests/Submission.test.js +0 -821
  444. package/build/tests/Tags.test.js +0 -466
  445. package/build/tests/UpdatableLayout.test.js +0 -343
  446. package/build/tests/Upsell.test.js +0 -154
  447. package/build/tests/ValidationAsync.test.js +0 -295
  448. package/build/tests/behavior/events.test.js +0 -348
  449. package/build/tests/legacy/Actions.test.js +0 -158
  450. package/build/tests/legacy/BackButton.test.js +0 -114
  451. package/build/tests/legacy/HiddenSchemas.test.js +0 -250
  452. package/build/tests/legacy/MultiSelect.test.js +0 -546
  453. package/build/tests/legacy/MultipleFileUploadSchema.test.js +0 -350
  454. package/build/tests/legacy/PersistAsync.blob-schema.test.js +0 -224
  455. package/build/tests/legacy/PersistAsync.string-schema.test.js +0 -211
  456. package/build/tests/legacy/RefreshStepOnChange.debouncing.test.js +0 -209
  457. package/build/tests/legacy/RefreshStepOnChange.test.js +0 -421
  458. package/build/tests/legacy/Search.test.js +0 -439
  459. package/build/tests/renderers/InlineAlertInSchemas.test.js +0 -82
  460. package/build/tests/renderers/MediaRenderer.test.js +0 -74
  461. package/build/tests/renderers/MultiSelectInputRendererProps.test.js +0 -58
  462. package/build/tests/renderers/SelectInputRendererProps.test.js +0 -43
  463. package/build/tests/renderers/TextInputRenderer.test.js +0 -48
  464. package/build/types.js +0 -1
  465. package/build/useDynamicFlow.js +0 -110
  466. package/build/useDynamicFlowModal.js +0 -58
  467. package/build/utils/analyse-step.js +0 -14
  468. package/build/utils/component-utils.js +0 -8
  469. package/build/utils/component-utils.test.js +0 -113
  470. package/build/utils/getScrollToTop.js +0 -12
  471. package/build/utils/normalise-flow-id.js +0 -1
  472. package/build/utils/normalise-flow-id.test.js +0 -24
  473. package/build/utils/recursiveMerge.js +0 -40
  474. package/build/utils/recursiveMerge.test.js +0 -93
  475. package/build/utils/safe-parse-link.js +0 -14
  476. package/build/utils/safe-parse-link.test.js +0 -19
  477. package/build/utils/type-utils.js +0 -22
  478. package/build/utils/type-validators.js +0 -11
  479. package/build/utils/type-validators.test.js +0 -180
  480. package/build/utils/useStableCallback.js +0 -15
@@ -1,350 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { act, screen } from '@testing-library/react';
3
- import { userEvent } from '@testing-library/user-event';
4
- import { vi, beforeEach } from 'vitest';
5
- import { renderWithProviders, respondWith } from '../test-utils';
6
- import { mockIntersectionObserver } from '../test-utils/mockIntersectionObserver';
7
- import DynamicFlowWise from '../test-utils/DynamicFlowWise';
8
- const user = userEvent.setup({ advanceTimers: vi.advanceTimersByTime });
9
- const collectionLayout = {
10
- type: 'collection',
11
- baseRequest: {
12
- url: '/collection',
13
- method: 'POST',
14
- },
15
- analyticsId: 'collection-aid',
16
- search: {
17
- param: 'query',
18
- title: 'Search',
19
- hint: 'Search items...',
20
- },
21
- initialState: {
22
- analytics: { source: 'initial', shared: 'initial' },
23
- nextCursor: 'page-2',
24
- filters: [
25
- {
26
- param: 'category',
27
- type: 'select',
28
- options: [
29
- { value: 'popular', title: 'Popular' },
30
- { value: 'recent', title: 'Recent' },
31
- ],
32
- },
33
- ],
34
- sections: [
35
- {
36
- type: 'items',
37
- id: 'section-1',
38
- title: 'Results',
39
- items: [
40
- {
41
- entityId: 'action-item',
42
- title: 'Action Item',
43
- description: 'Item with primary behavior',
44
- primaryBehavior: {
45
- type: 'action',
46
- action: { url: '/item-action' },
47
- },
48
- },
49
- {
50
- entityId: 'link-item',
51
- title: 'Link Item',
52
- description: 'Item with link behavior',
53
- primaryBehavior: {
54
- type: 'link',
55
- url: 'https://example.com',
56
- },
57
- },
58
- {
59
- entityId: 'cta-item',
60
- title: 'CTA Item',
61
- description: 'Item with call to action',
62
- callToAction: {
63
- title: 'Edit',
64
- behavior: {
65
- type: 'action',
66
- action: { url: '/cta-action' },
67
- },
68
- },
69
- },
70
- {
71
- entityId: 'cta-link-item',
72
- title: 'CTA Link Item',
73
- description: 'Item with link CTA',
74
- callToAction: {
75
- title: 'View',
76
- behavior: {
77
- type: 'link',
78
- url: 'https://cta-link.com',
79
- },
80
- },
81
- },
82
- {
83
- entityId: 'disabled-cta-item',
84
- title: 'Disabled CTA Action Item',
85
- description: 'Item with link CTA',
86
- disabled: true,
87
- callToAction: {
88
- title: 'View (Disabled)',
89
- behavior: {
90
- type: 'action',
91
- action: { url: '/item-action' },
92
- },
93
- },
94
- },
95
- {
96
- entityId: 'disabled-behavior-item',
97
- title: 'Disabled Behavior Action Item',
98
- disabled: true,
99
- primaryBehavior: {
100
- type: 'action',
101
- action: { url: '/item-action' },
102
- },
103
- },
104
- ],
105
- },
106
- ],
107
- },
108
- };
109
- const step = {
110
- id: 'collection-step',
111
- title: 'Collection Step',
112
- schemas: [],
113
- layout: [collectionLayout],
114
- };
115
- const getDefaultProps = () => ({
116
- flowId: 'flow-id',
117
- httpClient: vi.fn(),
118
- onCompletion: vi.fn(),
119
- onError: vi.fn(),
120
- onEvent: vi.fn(),
121
- onLog: vi.fn(),
122
- });
123
- describe('CollectionLayout v2', () => {
124
- beforeEach(() => {
125
- mockIntersectionObserver(false);
126
- vi.spyOn(window, 'scrollTo').mockImplementation(() => { });
127
- });
128
- describe('search', () => {
129
- const stepV2 = Object.assign(Object.assign({}, step), { layout: [Object.assign(Object.assign({}, collectionLayout), { control: 'contacts-collection-v2' })] });
130
- const searchResponse = {
131
- sections: [{ id: 'results', items: [{ title: 'Search Result' }] }],
132
- };
133
- it('keeps the previous results and hides the filters while the first search is running', async () => {
134
- let resolveSearch = () => { };
135
- const httpClient = vi.fn().mockImplementation(async () => new Promise((resolve) => {
136
- resolveSearch = resolve;
137
- }));
138
- const props = Object.assign(Object.assign({}, getDefaultProps()), { httpClient, initialStep: stepV2 });
139
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
140
- await user.type(screen.getByPlaceholderText('Search items...'), 'hello');
141
- await act(async () => vi.advanceTimersByTimeAsync(800));
142
- expect(httpClient).toHaveBeenCalledTimes(1);
143
- expect(screen.getByText('Action Item')).toBeInTheDocument();
144
- // hidden filters are aria-hidden, so they are not found by role
145
- expect(screen.queryByRole('radio', { name: 'Popular' })).not.toBeInTheDocument();
146
- await act(async () => {
147
- resolveSearch(respondWith(searchResponse));
148
- });
149
- expect(await screen.findByText('Search Result')).toBeInTheDocument();
150
- expect(screen.queryByText('Action Item')).not.toBeInTheDocument();
151
- expect(screen.getByRole('radio', { name: 'Popular' })).toBeInTheDocument();
152
- });
153
- it('retains the filters while the second search is running', async () => {
154
- let resolveSearch = () => { };
155
- const httpClient = vi.fn().mockImplementation(async () => new Promise((resolve) => {
156
- resolveSearch = resolve;
157
- }));
158
- const props = Object.assign(Object.assign({}, getDefaultProps()), { httpClient, initialStep: stepV2 });
159
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
160
- await user.type(screen.getByPlaceholderText('Search items...'), 'hello');
161
- await act(async () => vi.advanceTimersByTimeAsync(800));
162
- expect(httpClient).toHaveBeenCalledTimes(1);
163
- expect(screen.getByText('Action Item')).toBeInTheDocument();
164
- // hidden filters are aria-hidden, so they are not found by role
165
- expect(screen.queryByRole('radio', { name: 'Popular' })).not.toBeInTheDocument();
166
- await act(async () => {
167
- resolveSearch(respondWith(searchResponse));
168
- });
169
- expect(await screen.findByText('Search Result')).toBeInTheDocument();
170
- await user.type(screen.getByPlaceholderText('Search items...'), 'hello');
171
- await act(async () => vi.advanceTimersByTimeAsync(800));
172
- expect(httpClient).toHaveBeenCalledTimes(2);
173
- expect(screen.getByRole('radio', { name: 'Popular' })).toBeInTheDocument();
174
- });
175
- it('ignores filter selections while a search is running', async () => {
176
- const httpClient = vi
177
- .fn()
178
- .mockResolvedValueOnce(respondWith(searchResponse))
179
- .mockReturnValueOnce(new Promise(() => { }));
180
- const props = Object.assign(Object.assign({}, getDefaultProps()), { httpClient, initialStep: stepV2 });
181
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
182
- // the filters are hidden during the first search, so a second search keeps them visible
183
- await user.type(screen.getByPlaceholderText('Search items...'), 'hello');
184
- await act(async () => vi.advanceTimersByTimeAsync(800));
185
- expect(await screen.findByText('Search Result')).toBeInTheDocument();
186
- await user.type(screen.getByPlaceholderText('Search items...'), ' world');
187
- await act(async () => vi.advanceTimersByTimeAsync(800));
188
- expect(httpClient).toHaveBeenCalledTimes(2);
189
- await user.click(screen.getByText('Recent'));
190
- expect(httpClient).toHaveBeenCalledTimes(2);
191
- expect(screen.getByRole('radio', { name: 'Recent' })).not.toBeChecked();
192
- });
193
- it('shows an error instead of the results when a forked search fails, and retries it', async () => {
194
- const httpClient = vi
195
- .fn()
196
- .mockResolvedValueOnce(respondWith({}, { status: 500 }))
197
- .mockResolvedValueOnce(respondWith(searchResponse));
198
- const props = Object.assign(Object.assign({}, getDefaultProps()), { httpClient, initialStep: stepV2 });
199
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
200
- await user.type(screen.getByPlaceholderText('Search items...'), 'hello');
201
- await act(async () => vi.advanceTimersByTimeAsync(800));
202
- expect(await screen.findByRole('button', { name: 'Retry' })).toBeInTheDocument();
203
- expect(screen.queryByText('Action Item')).not.toBeInTheDocument();
204
- await user.click(screen.getByRole('button', { name: 'Retry' }));
205
- expect(await screen.findByText('Search Result')).toBeInTheDocument();
206
- expect(screen.queryByRole('button', { name: 'Retry' })).not.toBeInTheDocument();
207
- expect(screen.getByPlaceholderText('Search items...')).toHaveValue('hello');
208
- });
209
- it('forks when typing, and pops back to the original results when the search is cleared', async () => {
210
- const httpClient = vi.fn().mockImplementation(async () => respondWith(searchResponse));
211
- const props = Object.assign(Object.assign({}, getDefaultProps()), { httpClient, initialStep: stepV2 });
212
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
213
- const searchInput = screen.getByPlaceholderText('Search items...');
214
- await user.type(searchInput, 'hello');
215
- await act(async () => vi.advanceTimersByTimeAsync(800));
216
- expect(await screen.findByText('Search Result')).toBeInTheDocument();
217
- expect(screen.queryByText('Action Item')).not.toBeInTheDocument();
218
- await user.clear(searchInput);
219
- await act(async () => vi.advanceTimersByTimeAsync(800));
220
- expect(screen.getByText('Action Item')).toBeInTheDocument();
221
- expect(screen.queryByText('Search Result')).not.toBeInTheDocument();
222
- // the original results are restored without searching again
223
- expect(httpClient).toHaveBeenCalledTimes(1);
224
- });
225
- it('stays forked when the search is blurred', async () => {
226
- const httpClient = vi.fn().mockImplementation(async () => respondWith(searchResponse));
227
- const props = Object.assign(Object.assign({}, getDefaultProps()), { httpClient, initialStep: stepV2 });
228
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
229
- await user.type(screen.getByPlaceholderText('Search items...'), 'hello');
230
- await act(async () => vi.advanceTimersByTimeAsync(800));
231
- expect(await screen.findByText('Search Result')).toBeInTheDocument();
232
- await user.click(document.body);
233
- expect(screen.getByText('Search Result')).toBeInTheDocument();
234
- expect(screen.queryByText('Action Item')).not.toBeInTheDocument();
235
- });
236
- it('pops back to the original results when the clear button is clicked', async () => {
237
- const httpClient = vi.fn().mockImplementation(async () => respondWith(searchResponse));
238
- const props = Object.assign(Object.assign({}, getDefaultProps()), { httpClient, initialStep: stepV2 });
239
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
240
- await user.type(screen.getByPlaceholderText('Search items...'), 'hello');
241
- await act(async () => vi.advanceTimersByTimeAsync(800));
242
- expect(await screen.findByText('Search Result')).toBeInTheDocument();
243
- await user.click(screen.getByRole('button', { name: 'Clear text' }));
244
- await act(async () => vi.advanceTimersByTimeAsync(800));
245
- expect(screen.getByText('Action Item')).toBeInTheDocument();
246
- expect(screen.getByPlaceholderText('Search items...')).toHaveValue('');
247
- expect(httpClient).toHaveBeenCalledTimes(1);
248
- });
249
- it('hides the filters again when searching after the search was cleared', async () => {
250
- const httpClient = vi.fn().mockImplementation(async () => respondWith(searchResponse));
251
- const props = Object.assign(Object.assign({}, getDefaultProps()), { httpClient, initialStep: stepV2 });
252
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
253
- const searchInput = screen.getByPlaceholderText('Search items...');
254
- await user.type(searchInput, 'ab');
255
- await act(async () => vi.advanceTimersByTimeAsync(800));
256
- expect(await screen.findByText('Search Result')).toBeInTheDocument();
257
- await user.type(searchInput, '{Backspace}{Backspace}');
258
- expect(screen.getByText('Action Item')).toBeInTheDocument();
259
- expect(screen.getByRole('radio', { name: 'Popular' })).toBeInTheDocument();
260
- httpClient.mockImplementation(async () => new Promise(() => { }));
261
- await user.type(searchInput, 'c');
262
- await act(async () => vi.advanceTimersByTimeAsync(800));
263
- expect(httpClient).toHaveBeenCalledTimes(2);
264
- expect(searchInput).toHaveValue('c');
265
- expect(screen.getByText('Action Item')).toBeInTheDocument();
266
- expect(screen.queryByRole('radio', { name: 'Popular' })).not.toBeInTheDocument();
267
- });
268
- it('expands and hides search results tagged as hidden', async () => {
269
- const httpClient = vi.fn().mockImplementation(async () => respondWith({
270
- sections: [
271
- {
272
- id: 'results',
273
- items: [
274
- { title: 'Result One' },
275
- { title: 'Result Two' },
276
- { title: 'Hidden Result', tags: ['hidden'] },
277
- ],
278
- },
279
- ],
280
- }));
281
- const props = Object.assign(Object.assign({}, getDefaultProps()), { httpClient, initialStep: stepV2 });
282
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
283
- await user.type(screen.getByPlaceholderText('Search items...'), 'hello');
284
- await act(async () => vi.advanceTimersByTimeAsync(800));
285
- expect(await screen.findByText('Result One')).toBeInTheDocument();
286
- expect(screen.queryByText('Hidden Result')).not.toBeInTheDocument();
287
- await user.click(screen.getByRole('button', { name: 'Show all 3 results' }));
288
- expect(screen.getByText('Hidden Result')).toBeInTheDocument();
289
- await user.click(screen.getByRole('button', { name: 'Show less results' }));
290
- expect(screen.queryByText('Hidden Result')).not.toBeInTheDocument();
291
- expect(screen.getByText('Result One')).toBeInTheDocument();
292
- });
293
- it('retains the hidden section state on new results if the IDs match', async () => {
294
- let responseCount = 0;
295
- const httpClient = vi.fn().mockImplementation(async () => {
296
- responseCount += 1;
297
- return respondWith({
298
- sections: [
299
- {
300
- id: 'results',
301
- title: 'Constant section',
302
- items: [
303
- { entityId: 'one', title: 'Result One' },
304
- { entityId: 'two', title: 'Result Two' },
305
- { entityId: 'three', title: 'Hidden Result', tags: ['hidden'] },
306
- ],
307
- },
308
- {
309
- id: `dynamic-section`,
310
- title: 'Dynamic section',
311
- items: [
312
- { entityId: `${responseCount}-1`, title: 'Dynamic One' },
313
- {
314
- entityId: `${responseCount}-2`,
315
- title: 'Hidden Dynamic Result',
316
- tags: ['hidden'],
317
- },
318
- ],
319
- },
320
- ],
321
- });
322
- });
323
- const props = Object.assign(Object.assign({}, getDefaultProps()), { httpClient, initialStep: stepV2 });
324
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
325
- await user.type(screen.getByPlaceholderText('Search items...'), 'hello');
326
- await act(async () => vi.advanceTimersByTimeAsync(800));
327
- expect(await screen.findByText('Result One')).toBeInTheDocument();
328
- expect(screen.queryByText('Hidden Result')).not.toBeInTheDocument();
329
- await user.click(screen.getByRole('button', { name: 'Show all 3 results' }));
330
- await user.click(screen.getByRole('button', { name: 'Show all 2 results' }));
331
- expect(screen.getByText('Hidden Result')).toBeInTheDocument();
332
- expect(screen.getByText('Hidden Dynamic Result')).toBeInTheDocument();
333
- await user.type(screen.getByPlaceholderText('Search items...'), 'hello');
334
- await act(async () => vi.advanceTimersByTimeAsync(800));
335
- expect(screen.getByText('Hidden Result')).toBeInTheDocument();
336
- expect(screen.queryByText('Hidden Dynamic Result')).not.toBeInTheDocument();
337
- });
338
- it('focuses the search when the collection is tagged with autofocus', () => {
339
- const autofocusStep = Object.assign(Object.assign({}, step), { layout: [Object.assign(Object.assign({}, collectionLayout), { control: 'contacts-collection-v2', tags: ['autofocus'] })] });
340
- const props = Object.assign(Object.assign({}, getDefaultProps()), { initialStep: autofocusStep });
341
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
342
- expect(screen.getByPlaceholderText('Search items...')).toHaveFocus();
343
- });
344
- it('does not focus the search when the collection is not tagged with autofocus', () => {
345
- const props = Object.assign(Object.assign({}, getDefaultProps()), { initialStep: stepV2 });
346
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
347
- expect(screen.getByPlaceholderText('Search items...')).not.toHaveFocus();
348
- });
349
- });
350
- });
@@ -1,95 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { screen, waitFor } from '@testing-library/react';
3
- import { userEvent } from '@testing-library/user-event';
4
- import { vi } from 'vitest';
5
- import { renderWithProviders } from '../test-utils';
6
- import DynamicFlowWise from '../test-utils/DynamicFlowWise';
7
- const user = userEvent.setup({ advanceTimers: vi.advanceTimersByTime });
8
- describe('ConstSchemaLayout', () => {
9
- const getDefaultProps = () => ({
10
- flowId: 'flow-id',
11
- httpClient: vi.fn(),
12
- onCompletion: vi.fn(),
13
- onError: vi.fn(),
14
- onEvent: vi.fn(),
15
- onLog: vi.fn(),
16
- });
17
- const getInitialStep = (control, model) => ({
18
- id: 'const-layout-step',
19
- title: 'Const Schemas with Layout',
20
- schemas: [
21
- {
22
- $id: '#schema',
23
- control,
24
- oneOf: [
25
- {
26
- title: 'Option A',
27
- const: 'A',
28
- layout: [
29
- {
30
- type: 'heading',
31
- text: 'This is Option A heading',
32
- },
33
- {
34
- type: 'paragraph',
35
- text: 'Option A is a great choice because, it offers unique benefits and features that are tailored to your needs.',
36
- },
37
- ],
38
- },
39
- {
40
- title: 'Option B',
41
- const: 'B',
42
- layout: [
43
- {
44
- type: 'heading',
45
- text: 'This is Option B heading',
46
- },
47
- {
48
- type: 'paragraph',
49
- text: 'Option B stands out due to its innovative approach and user-friendly design, making it an excellent choice for those seeking simplicity and efficiency.',
50
- },
51
- ],
52
- },
53
- ],
54
- },
55
- ],
56
- layout: [
57
- {
58
- type: 'box',
59
- width: 'md',
60
- control: 'bordered',
61
- components: [
62
- {
63
- type: 'form',
64
- schemaId: '#schema',
65
- },
66
- ],
67
- },
68
- ],
69
- model,
70
- });
71
- describe.each(['tab', 'select', 'radio'])('When using %s', (control) => {
72
- it.each(['A', 'B'])('should render the layout for the pre-selected option %s', async (option) => {
73
- const props = Object.assign(Object.assign({}, getDefaultProps()), { initialStep: getInitialStep(control, option) });
74
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
75
- await waitFor(() => {
76
- expect(screen.getByText('Const Schemas with Layout')).toBeInTheDocument();
77
- });
78
- expect(screen.getByText(`This is Option ${option} heading`)).toBeInTheDocument();
79
- });
80
- });
81
- describe.each(['tab', 'radio'])('When using %s, and then selecting the other option', (control) => {
82
- it('renders the other option layout', async () => {
83
- const props = Object.assign(Object.assign({}, getDefaultProps()), { initialStep: getInitialStep(control, 'A') });
84
- renderWithProviders(_jsx(DynamicFlowWise, Object.assign({}, props)));
85
- await waitFor(() => {
86
- expect(screen.getByText('Const Schemas with Layout')).toBeInTheDocument();
87
- });
88
- expect(screen.getByText('This is Option A heading')).toBeInTheDocument();
89
- await user.click(screen.getByText('Option B'));
90
- await waitFor(() => {
91
- expect(screen.getByText('This is Option B heading')).toBeInTheDocument();
92
- });
93
- });
94
- });
95
- });
@@ -1,190 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { renderWithProviders } from '../test-utils';
3
- import DynamicFlowWise from '../test-utils/DynamicFlowWise';
4
- import userEvent from '@testing-library/user-event';
5
- import { screen, waitFor } from '@testing-library/react';
6
- const user = userEvent.setup({ advanceTimers: vi.advanceTimersByTime });
7
- describe('given a step with date input', () => {
8
- const step = (required, defaultValue) => ({
9
- id: 'step',
10
- title: 'step title',
11
- schemas: [
12
- {
13
- properties: {
14
- date: {
15
- format: 'date',
16
- title: 'This is a date',
17
- type: 'string',
18
- default: defaultValue,
19
- },
20
- },
21
- required: required ? ['date'] : undefined,
22
- displayOrder: ['date'],
23
- $id: '#schema',
24
- type: 'object',
25
- },
26
- ],
27
- layout: [
28
- {
29
- schemaId: '#schema',
30
- type: 'form',
31
- },
32
- {
33
- type: 'button',
34
- title: 'Submit',
35
- action: { url: '/submit' },
36
- },
37
- ],
38
- });
39
- describe('when a full date is provided', () => {
40
- it('submits successfully', async () => {
41
- vi.setSystemTime(new Date(2026, 1, 1, 12, 0));
42
- const httpClient = vi.fn();
43
- renderWithProviders(_jsx(DynamicFlowWise, { flowId: "flow-id", httpClient: httpClient, initialStep: step(true), onCompletion: vi.fn(), onError: vi.fn() }));
44
- await user.click(screen.getAllByText('Month')[0]);
45
- await waitFor(() => {
46
- expect(screen.getByText('January')).toBeInTheDocument();
47
- });
48
- await user.click(screen.getByText('January'));
49
- await user.type(screen.getByLabelText('Day'), '1');
50
- await user.type(screen.getByLabelText('Year'), '2024');
51
- await user.click(screen.getByText('Submit'));
52
- await waitFor(() => {
53
- expect(httpClient).toHaveBeenCalled();
54
- });
55
- expect(screen.queryByText('Please fill out this field.')).not.toBeInTheDocument();
56
- });
57
- });
58
- describe('when a partial date (YYYY-MM) is filled in', () => {
59
- describe('and the field is required', () => {
60
- it('blocks submission', async () => {
61
- const httpClient = vi.fn();
62
- renderWithProviders(_jsx(DynamicFlowWise, { flowId: "flow-id", httpClient: httpClient, initialStep: step(true), onCompletion: vi.fn(), onError: vi.fn() }));
63
- await waitFor(() => {
64
- expect(screen.getByText('step title')).toBeInTheDocument();
65
- });
66
- await user.click(screen.getAllByText('Month')[0]);
67
- await waitFor(() => {
68
- expect(screen.getByText('January')).toBeInTheDocument();
69
- });
70
- await user.click(screen.getByText('January'));
71
- await user.type(screen.getByLabelText('Year'), '2024');
72
- await user.click(screen.getByText('Submit'));
73
- await waitFor(() => {
74
- expect(httpClient).not.toHaveBeenCalled();
75
- });
76
- expect(screen.getByText('Please fill out this field.')).toBeInTheDocument();
77
- });
78
- });
79
- describe('and the field is optional', () => {
80
- it('submits null', async () => {
81
- const httpClient = vi.fn();
82
- renderWithProviders(_jsx(DynamicFlowWise, { flowId: "flow-id", httpClient: httpClient, initialStep: step(false), onCompletion: vi.fn(), onError: vi.fn() }));
83
- await waitFor(() => {
84
- expect(screen.getByText('step title')).toBeInTheDocument();
85
- });
86
- await user.click(screen.getAllByText('Month')[0]);
87
- await waitFor(() => {
88
- expect(screen.getByText('January')).toBeInTheDocument();
89
- });
90
- await user.click(screen.getByText('January'));
91
- await user.type(screen.getByLabelText('Year'), '2024');
92
- await user.click(screen.getByText('Submit'));
93
- await waitFor(() => {
94
- expect(httpClient).toHaveBeenCalledWith('/submit', expect.objectContaining({ body: '{}' }));
95
- });
96
- expect(screen.queryByText('Please fill out this field.')).not.toBeInTheDocument();
97
- });
98
- });
99
- });
100
- describe('when a partial date (YYYY-MM) is provided in the model', () => {
101
- describe('and the field is required', () => {
102
- it('blocks submission', async () => {
103
- const httpClient = vi.fn();
104
- renderWithProviders(_jsx(DynamicFlowWise, { flowId: "flow-id", httpClient: httpClient, initialStep: Object.assign(Object.assign({}, step(true)), { model: { date: '2024-07' } }), onCompletion: vi.fn(), onError: vi.fn() }));
105
- await user.click(screen.getByText('Submit'));
106
- await waitFor(() => {
107
- expect(httpClient).not.toHaveBeenCalled();
108
- });
109
- expect(screen.getByText('Please enter a date in the correct format.')).toBeInTheDocument();
110
- });
111
- });
112
- describe('and the field is optional', () => {
113
- it('submits null', async () => {
114
- const httpClient = vi.fn();
115
- renderWithProviders(_jsx(DynamicFlowWise, { flowId: "flow-id", httpClient: httpClient, initialStep: Object.assign(Object.assign({}, step(false)), { model: { date: '2024-07' } }), onCompletion: vi.fn(), onError: vi.fn() }));
116
- await user.click(screen.getByText('Submit'));
117
- await waitFor(() => {
118
- expect(httpClient).toHaveBeenCalledWith('/submit', expect.objectContaining({ body: '{}' }));
119
- });
120
- expect(screen.queryByText('Please fill out this field.')).not.toBeInTheDocument();
121
- });
122
- });
123
- });
124
- it('omits incomplete YYYY and YYYY-MM model values from submission', async () => {
125
- const httpClient = vi.fn();
126
- const partialDatesStep = Object.assign(Object.assign({}, step(false)), { model: { year: '2026', yearMonth: '2026-09' }, schemas: [
127
- {
128
- properties: {
129
- year: {
130
- format: 'date',
131
- title: 'Year',
132
- type: 'string',
133
- },
134
- yearMonth: {
135
- format: 'date',
136
- title: 'Year and month',
137
- type: 'string',
138
- },
139
- },
140
- displayOrder: ['year', 'yearMonth'],
141
- $id: '#schema',
142
- type: 'object',
143
- },
144
- ] });
145
- renderWithProviders(_jsx(DynamicFlowWise, { flowId: "flow-id", httpClient: httpClient, initialStep: partialDatesStep, onCompletion: vi.fn(), onError: vi.fn() }));
146
- await user.click(screen.getByText('Submit'));
147
- await waitFor(() => {
148
- expect(httpClient).toHaveBeenCalledWith('/submit', expect.objectContaining({ body: '{}' }));
149
- });
150
- });
151
- describe('when an invalid date is provided', () => {
152
- const cases = [
153
- { model: 'abcd-ef-gh', description: 'nonsense string in model' },
154
- { model: '25-10-1985', description: 'wrong format in model' },
155
- { default: 'abcd-ef-gh', description: 'nonsense string in default' },
156
- { default: '25-10-1985', description: 'wrong format in default' },
157
- ];
158
- cases.forEach(({ model, default: defaultValue, description }) => {
159
- it(`blocks submission for ${model !== null && model !== void 0 ? model : defaultValue} because "${description}"`, async () => {
160
- const httpClient = vi.fn();
161
- renderWithProviders(_jsx(DynamicFlowWise, { flowId: "flow-id", httpClient: httpClient, initialStep: Object.assign(Object.assign({}, step(true, defaultValue)), { model: { date: model !== null && model !== void 0 ? model : null } }), onCompletion: vi.fn(), onError: vi.fn() }));
162
- await user.click(screen.getByText('Submit'));
163
- await waitFor(() => {
164
- expect(httpClient).not.toHaveBeenCalled();
165
- });
166
- expect(screen.getByText('Please fill out this field.')).toBeInTheDocument();
167
- });
168
- });
169
- });
170
- describe('when a date-time value is provided in the model', () => {
171
- it('extracts and uses only the date portion', async () => {
172
- const httpClient = vi.fn();
173
- renderWithProviders(_jsx(DynamicFlowWise, { flowId: "flow-id", httpClient: httpClient, initialStep: Object.assign(Object.assign({}, step(true)), { model: { date: '1985-10-25T01:18:00.000-08:00' } }), onCompletion: vi.fn(), onError: vi.fn() }));
174
- await user.click(screen.getByText('Submit'));
175
- await waitFor(() => {
176
- expect(httpClient).toHaveBeenCalledWith('/submit', expect.objectContaining({ body: '{"date":"1985-10-25"}' }));
177
- });
178
- });
179
- });
180
- describe('when a date-time value is provided in the schema default', () => {
181
- it('extracts and uses only the date portion', async () => {
182
- const httpClient = vi.fn();
183
- renderWithProviders(_jsx(DynamicFlowWise, { flowId: "flow-id", httpClient: httpClient, initialStep: Object.assign({}, step(true, '1985-10-25T01:18:00.000-08:00')), onCompletion: vi.fn(), onError: vi.fn() }));
184
- await user.click(screen.getByText('Submit'));
185
- await waitFor(() => {
186
- expect(httpClient).toHaveBeenCalledWith('/submit', expect.objectContaining({ body: '{"date":"1985-10-25"}' }));
187
- });
188
- });
189
- });
190
- });