@wise/dynamic-flow-client 5.8.1 → 5.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/build/DynamicFlowCore.js +5 -0
  2. package/build/common/errorBoundary/ErrorBoundary.js +26 -0
  3. package/build/common/errorBoundary/ErrorBoundary.test.js +29 -0
  4. package/build/common/errorBoundary/ErrorBoundaryAlert.js +11 -0
  5. package/build/common/makeHttpClient/api-utils.js +3 -0
  6. package/build/common/makeHttpClient/index.js +1 -0
  7. package/build/common/makeHttpClient/makeHttpClient.js +10 -0
  8. package/build/common/makeHttpClient/makeHttpClient.test.js +186 -0
  9. package/build/common/messages/external-confirmation.messages.js +23 -0
  10. package/build/common/messages/file-upload.messages.js +13 -0
  11. package/build/common/messages/generic-error.messages.js +18 -0
  12. package/build/common/messages/help.messages.js +8 -0
  13. package/build/common/messages/multi-file-upload.messages.js +18 -0
  14. package/build/common/messages/multi-select.messages.js +8 -0
  15. package/build/common/messages/paragraph.messages.js +13 -0
  16. package/build/common/messages/repeatable.messages.js +23 -0
  17. package/build/common/messages/search.messages.js +8 -0
  18. package/build/common/messages/validation.array.messages.js +13 -0
  19. package/build/common/messages/validation.messages.js +53 -0
  20. package/build/controller/FlowController.js +368 -0
  21. package/build/controller/executePoll.js +49 -0
  22. package/build/controller/executeRefresh.js +39 -0
  23. package/build/controller/executeRequest.js +77 -0
  24. package/build/controller/executeSubmission.js +69 -0
  25. package/build/controller/getErrorMessage.js +7 -0
  26. package/build/controller/getRequestAbortController.js +13 -0
  27. package/build/controller/getResponseType.js +35 -0
  28. package/build/controller/getSafeHttpClient.js +8 -0
  29. package/build/controller/getStepCounter.js +16 -0
  30. package/build/controller/handleErrorResponse.js +26 -0
  31. package/build/controller/makeSafeHttpClient.js +8 -0
  32. package/build/controller/response-utils.js +72 -0
  33. package/build/domain/components/AlertComponent.js +1 -0
  34. package/build/domain/components/AllOfComponent.js +40 -0
  35. package/build/domain/components/BooleanInputComponent.js +50 -0
  36. package/build/domain/components/BoxComponent.js +3 -0
  37. package/build/domain/components/ButtonComponent.js +1 -0
  38. package/build/domain/components/ColumnsComponent.js +3 -0
  39. package/build/domain/components/ConstComponent.js +18 -0
  40. package/build/domain/components/ContainerComponent.js +3 -0
  41. package/build/domain/components/DateInputComponent.js +75 -0
  42. package/build/domain/components/DecisionComponent.js +1 -0
  43. package/build/domain/components/DividerComponent.js +1 -0
  44. package/build/domain/components/FormComponent.js +3 -0
  45. package/build/domain/components/FormattedValueComponent.js +44 -0
  46. package/build/domain/components/HeadingComponent.js +1 -0
  47. package/build/domain/components/ImageComponent.js +1 -0
  48. package/build/domain/components/InstructionsComponent.js +1 -0
  49. package/build/domain/components/IntegerInputComponent.js +74 -0
  50. package/build/domain/components/ListComponent.js +1 -0
  51. package/build/domain/components/LoadingIndicatorComponent.js +1 -0
  52. package/build/domain/components/MarkdownComponent.js +1 -0
  53. package/build/domain/components/MediaComponent.js +1 -0
  54. package/build/domain/components/ModalComponent.js +16 -0
  55. package/build/domain/components/ModalLayoutComponent.js +3 -0
  56. package/build/domain/components/MoneyInputComponent.js +57 -0
  57. package/build/domain/components/MultiSelectInputComponent.js +81 -0
  58. package/build/domain/components/MultiUploadInputComponent.js +88 -0
  59. package/build/domain/components/NumberInputComponent.js +73 -0
  60. package/build/domain/components/ObjectComponent.js +45 -0
  61. package/build/domain/components/ParagraphComponent.js +1 -0
  62. package/build/domain/components/PersistAsyncComponent.js +92 -0
  63. package/build/domain/components/ProgressComponent.js +1 -0
  64. package/build/domain/components/RepeatableComponent.js +103 -0
  65. package/build/domain/components/ReviewComponent.js +1 -0
  66. package/build/domain/components/RootDomainComponent.js +173 -0
  67. package/build/domain/components/SectionComponent.js +5 -0
  68. package/build/domain/components/SelectInputComponent.js +88 -0
  69. package/build/domain/components/StatusListComponent.js +1 -0
  70. package/build/domain/components/SubflowDomainComponent.js +9 -0
  71. package/build/domain/components/TabsComponent.js +1 -0
  72. package/build/domain/components/TextInputComponent.js +76 -0
  73. package/build/domain/components/TupleComponent.js +41 -0
  74. package/build/domain/components/UploadInputComponent.js +83 -0
  75. package/build/domain/components/UpsellComponent.js +25 -0
  76. package/build/domain/components/searchComponent/SearchComponent.js +92 -0
  77. package/build/domain/components/searchComponent/SearchComponent.test.js +190 -0
  78. package/build/domain/components/step/ExternalConfirmationComponent.js +28 -0
  79. package/build/domain/components/step/StepDomainComponent.js +73 -0
  80. package/build/domain/components/step/ToolbarComponent.js +1 -0
  81. package/build/domain/components/utils/WithUpdate.js +1 -0
  82. package/build/domain/components/utils/component-utils.js +12 -0
  83. package/build/domain/components/utils/debounce.js +34 -0
  84. package/build/domain/components/utils/debounce.test.js +67 -0
  85. package/build/domain/components/utils/file-utils.js +21 -0
  86. package/build/domain/components/utils/file-utils.test.js +27 -0
  87. package/build/domain/components/utils/getRandomId.js +1 -0
  88. package/build/domain/components/utils/isExactLocalValueMatch.js +14 -0
  89. package/build/domain/components/utils/isOrWasValid.js +5 -0
  90. package/build/domain/components/utils/isPartialModelMatch.js +18 -0
  91. package/build/domain/components/utils/isPartialModelMatch.test.js +74 -0
  92. package/build/domain/features/eventNames.js +24 -0
  93. package/build/domain/features/events.js +1 -0
  94. package/build/domain/features/persistAsync/getComponentMultiPersistAsync.js +50 -0
  95. package/build/domain/features/persistAsync/getInitialPersistedState.js +7 -0
  96. package/build/domain/features/persistAsync/getPerformPersistAsync.js +43 -0
  97. package/build/domain/features/persistAsync/getPerformPersistAsync.test.js +139 -0
  98. package/build/domain/features/polling/getStepPolling.js +43 -0
  99. package/build/domain/features/polling/getStepPolling.test.js +90 -0
  100. package/build/domain/features/prefetch/getStepPrefetch.js +43 -0
  101. package/build/domain/features/prefetch/request-cache.js +49 -0
  102. package/build/domain/features/prefetch/request-cache.test.js +70 -0
  103. package/build/domain/features/refreshAfter/getStepRefreshAfter.js +24 -0
  104. package/build/domain/features/refreshAfter/getStepRefreshAfter.test.js +40 -0
  105. package/build/domain/features/schema-on-change/getDebouncedSchemaOnChange.js +50 -0
  106. package/build/domain/features/schema-on-change/getSchemaOnChange.js +34 -0
  107. package/build/domain/features/search/getPerformSearchFunction.js +75 -0
  108. package/build/domain/features/search/getPerformSearchFunction.test.js +301 -0
  109. package/build/domain/features/summary/summary-utils.js +40 -0
  110. package/build/domain/features/summary/summary-utils.test.js +125 -0
  111. package/build/domain/features/utils/http-utils.js +21 -0
  112. package/build/domain/features/utils/response-utils.js +9 -0
  113. package/build/domain/features/validation/spec-utils.js +19 -0
  114. package/build/domain/features/validation/validateStringPattern.js +24 -0
  115. package/build/domain/features/validation/validation-functions.js +6 -0
  116. package/build/domain/features/validation/validation-functions.test.js +108 -0
  117. package/build/domain/features/validation/value-checks.js +125 -0
  118. package/build/domain/features/validation/value-checks.test.js +262 -0
  119. package/build/domain/features/validationAsync/getComponentValidationAsync.js +53 -0
  120. package/build/domain/features/validationAsync/getComponentValidationAsync.test.js +67 -0
  121. package/build/domain/features/validationAsync/getInitialValidationAsyncState.js +5 -0
  122. package/build/domain/features/validationAsync/getPerformValidationAsync.js +45 -0
  123. package/build/domain/features/validationAsync/getPerformValidationAsync.test.js +143 -0
  124. package/build/domain/mappers/layout/alertLayoutToComponent.js +16 -0
  125. package/build/domain/mappers/layout/boxLayoutToComponent.js +13 -0
  126. package/build/domain/mappers/layout/buttonLayoutToComponent.js +77 -0
  127. package/build/domain/mappers/layout/columnsLayoutToComponent.js +13 -0
  128. package/build/domain/mappers/layout/decisionLayoutToComponent.js +22 -0
  129. package/build/domain/mappers/layout/deprecatedListLayoutToComponent.js +30 -0
  130. package/build/domain/mappers/layout/dividerLayoutToComponent.js +2 -0
  131. package/build/domain/mappers/layout/formLayoutToComponent.js +19 -0
  132. package/build/domain/mappers/layout/headingLayoutToComponent.js +12 -0
  133. package/build/domain/mappers/layout/imageLayoutToComponent.js +20 -0
  134. package/build/domain/mappers/layout/infoLayoutToComponent.js +12 -0
  135. package/build/domain/mappers/layout/instructionsLayoutToComponent.js +12 -0
  136. package/build/domain/mappers/layout/listLayoutToComponent.js +39 -0
  137. package/build/domain/mappers/layout/loadingIndicatorLayoutToComponent.js +9 -0
  138. package/build/domain/mappers/layout/markdownLayoutToComponent.js +12 -0
  139. package/build/domain/mappers/layout/mediaLayoutToComponent.js +12 -0
  140. package/build/domain/mappers/layout/modalLayoutToComponent.js +17 -0
  141. package/build/domain/mappers/layout/modalToComponent.js +8 -0
  142. package/build/domain/mappers/layout/paragraphLayoutToComponent.js +12 -0
  143. package/build/domain/mappers/layout/progressLayoutToComponent.js +15 -0
  144. package/build/domain/mappers/layout/reviewLayoutToComponent.js +48 -0
  145. package/build/domain/mappers/layout/searchLayoutToComponent.js +44 -0
  146. package/build/domain/mappers/layout/sectionLayoutToComponent.js +15 -0
  147. package/build/domain/mappers/layout/statusListLayoutToComponent.js +15 -0
  148. package/build/domain/mappers/layout/tabsLayoutToComponent.js +16 -0
  149. package/build/domain/mappers/layout/upsellLayoutToComponent.js +25 -0
  150. package/build/domain/mappers/mapLayoutToComponent.js +81 -0
  151. package/build/domain/mappers/mapSchemaToComponent.js +61 -0
  152. package/build/domain/mappers/mapSchemaToComponent.test.js +112 -0
  153. package/build/domain/mappers/mapStepSchemas.js +17 -0
  154. package/build/domain/mappers/mapStepToComponent.js +132 -0
  155. package/build/domain/mappers/mapStepToComponent.test.js +221 -0
  156. package/build/domain/mappers/mapToolbarToComponent.js +15 -0
  157. package/build/domain/mappers/schema/allOfSchemaToComponent.js +16 -0
  158. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToComponent.js +26 -0
  159. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiSelectComponent.js +55 -0
  160. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiUploadComponent.js +67 -0
  161. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToRepeatableComponent.js +57 -0
  162. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToTupleComponent.js +20 -0
  163. package/build/domain/mappers/schema/blobSchemaToComponent.js +15 -0
  164. package/build/domain/mappers/schema/booleanSchemaToComponent.js +29 -0
  165. package/build/domain/mappers/schema/constSchemaToComponent.js +23 -0
  166. package/build/domain/mappers/schema/integerSchemaToComponent.js +28 -0
  167. package/build/domain/mappers/schema/numberSchemaToComponent.js +26 -0
  168. package/build/domain/mappers/schema/objectSchemaToComponent/assertDisplayOrder.js +23 -0
  169. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToFormattedValueComponent.js +9 -0
  170. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToMoneyInputComponent.js +119 -0
  171. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToMoneyInputComponent.test.js +96 -0
  172. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToObjectComponent.js +31 -0
  173. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToObjectComponent.test.js +99 -0
  174. package/build/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.js +76 -0
  175. package/build/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.test.js +265 -0
  176. package/build/domain/mappers/schema/persistAsyncSchemaToComponent.js +29 -0
  177. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.js +18 -0
  178. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.test.js +133 -0
  179. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToDateInputComponent.js +48 -0
  180. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToTextInputComponent.js +37 -0
  181. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToUploadInputComponent.js +28 -0
  182. package/build/domain/mappers/schema/tests/test-utils.js +16 -0
  183. package/build/domain/mappers/schema/types.js +1 -0
  184. package/build/domain/mappers/schema/utils/getPerformPersistAsyncFn.js +19 -0
  185. package/build/domain/mappers/schema/utils/getValidationAsyncInitialState.js +23 -0
  186. package/build/domain/mappers/schema/utils/mapCommonSchemaProps.js +16 -0
  187. package/build/domain/mappers/types.js +1 -0
  188. package/build/domain/mappers/utils/FeatureFlags.js +22 -0
  189. package/build/domain/mappers/utils/behavior-utils.js +44 -0
  190. package/build/domain/mappers/utils/call-to-action-utils.js +21 -0
  191. package/build/domain/mappers/utils/getAutocompleteString.js +76 -0
  192. package/build/domain/mappers/utils/getAutocompleteString.test.js +21 -0
  193. package/build/domain/mappers/utils/groupLayoutByPinned.js +38 -0
  194. package/build/domain/mappers/utils/groupLayoutByPinned.test.js +166 -0
  195. package/build/domain/mappers/utils/image.js +9 -0
  196. package/build/domain/mappers/utils/layout-utils.js +11 -0
  197. package/build/domain/mappers/utils/legacy-utils.js +49 -0
  198. package/build/domain/mappers/utils/media-utils.js +14 -0
  199. package/build/domain/mappers/utils/suggestions-utils.js +26 -0
  200. package/build/domain/mappers/utils/suggestions-utils.test.js +36 -0
  201. package/build/domain/mappers/utils/tags-utils.js +1 -0
  202. package/build/domain/mappers/utils/utils.js +35 -0
  203. package/build/domain/types.js +1 -0
  204. package/build/getSubflowCallbacks.js +38 -0
  205. package/build/i18n/index.js +40 -0
  206. package/build/index.js +8 -0
  207. package/build/main.js +112 -54
  208. package/build/main.mjs +111 -53
  209. package/build/renderers/CoreContainerRenderer.js +5 -0
  210. package/build/renderers/CoreRootRenderer.js +12 -0
  211. package/build/renderers/EmptyLoadingStateRenderer.js +5 -0
  212. package/build/renderers/getRenderFunction.js +24 -0
  213. package/build/renderers/getSchemaErrorMessageFunction.js +97 -0
  214. package/build/renderers/mappers/alertComponentToProps.js +2 -0
  215. package/build/renderers/mappers/allOfComponentToProps.js +6 -0
  216. package/build/renderers/mappers/booleanInputComponentToProps.js +5 -0
  217. package/build/renderers/mappers/boxComponentToProps.js +13 -0
  218. package/build/renderers/mappers/buttonComponentToProps.js +4 -0
  219. package/build/renderers/mappers/columnsComponentToProps.js +11 -0
  220. package/build/renderers/mappers/componentToRendererProps.js +164 -0
  221. package/build/renderers/mappers/constComponentToProps.js +5 -0
  222. package/build/renderers/mappers/containerComponentToProps.js +7 -0
  223. package/build/renderers/mappers/dateInputComponentToProps.js +2 -0
  224. package/build/renderers/mappers/decisionComponentToProps.js +16 -0
  225. package/build/renderers/mappers/dividerComponentToProps.js +2 -0
  226. package/build/renderers/mappers/externalComponentToProps.js +3 -0
  227. package/build/renderers/mappers/formComponentToProps.js +12 -0
  228. package/build/renderers/mappers/formattedValueComponentToProps.js +5 -0
  229. package/build/renderers/mappers/headingComponentToProps.js +2 -0
  230. package/build/renderers/mappers/hiddenComponentToProps.js +4 -0
  231. package/build/renderers/mappers/imageComponentToProps.js +2 -0
  232. package/build/renderers/mappers/instructionsComponentToProps.js +2 -0
  233. package/build/renderers/mappers/integerInputComponentToProps.js +2 -0
  234. package/build/renderers/mappers/listComponentToProps.js +2 -0
  235. package/build/renderers/mappers/loadingIndicatorComponentToProps.js +2 -0
  236. package/build/renderers/mappers/markdownComponentToProps.js +2 -0
  237. package/build/renderers/mappers/mediaComponentToProps.js +2 -0
  238. package/build/renderers/mappers/modalComponentToProps.js +11 -0
  239. package/build/renderers/mappers/modalLayoutComponentToProps.js +16 -0
  240. package/build/renderers/mappers/moneyInputComponentToProps.js +36 -0
  241. package/build/renderers/mappers/multiSelectComponentToProps.js +23 -0
  242. package/build/renderers/mappers/multiUploadInputComponentToProps.js +12 -0
  243. package/build/renderers/mappers/numberInputComponentToProps.js +2 -0
  244. package/build/renderers/mappers/objectComponentToProps.js +8 -0
  245. package/build/renderers/mappers/paragraphComponentToProps.js +2 -0
  246. package/build/renderers/mappers/persistAsyncComponentToProps.js +8 -0
  247. package/build/renderers/mappers/progressComponentToProps.js +2 -0
  248. package/build/renderers/mappers/repeatableComponentToProps.js +30 -0
  249. package/build/renderers/mappers/reviewComponentToProps.js +2 -0
  250. package/build/renderers/mappers/rootComponentToProps.js +21 -0
  251. package/build/renderers/mappers/searchComponentToProps.js +57 -0
  252. package/build/renderers/mappers/sectionComponentToProps.js +6 -0
  253. package/build/renderers/mappers/selectInputComponentToProps.js +26 -0
  254. package/build/renderers/mappers/statusListComponentToProps.js +2 -0
  255. package/build/renderers/mappers/subflowComponentToRendererProps.js +4 -0
  256. package/build/renderers/mappers/tabsComponentToProps.js +14 -0
  257. package/build/renderers/mappers/textInputComponentToProps.js +2 -0
  258. package/build/renderers/mappers/tupleComponentToProps.js +8 -0
  259. package/build/renderers/mappers/uploadInputComponentToProps.js +8 -0
  260. package/build/renderers/mappers/upsellComponentToProps.js +2 -0
  261. package/build/renderers/mappers/utils/getValidationState.js +12 -0
  262. package/build/renderers/mappers/utils/inputComponentToProps.js +26 -0
  263. package/build/renderers/mappers/utils/mapErrorsToValidationState.js +9 -0
  264. package/build/renderers/mappers/utils/pick.js +8 -0
  265. package/build/renderers/mappers/utils/selectInputOptionsToProps.js +11 -0
  266. package/build/renderers/stepComponentToProps.js +32 -0
  267. package/build/renderers/utils.js +69 -0
  268. package/build/renderers/utils.test.js +70 -0
  269. package/build/stories/dev-tools/ContainerQueries.story.js +66 -0
  270. package/build/stories/dev-tools/Debugger.story.js +38 -0
  271. package/build/stories/dev-tools/FixtureSelect.story.js +23 -0
  272. package/build/stories/dev-tools/TestServer.story.js +32 -0
  273. package/build/stories/examples/NativeFlow.story.js +80 -0
  274. package/build/stories/examples/Recipients.story.js +568 -0
  275. package/build/stories/spec/behavior/Copy.story.js +59 -0
  276. package/build/stories/spec/behavior/Modal.story.js +76 -0
  277. package/build/stories/spec/behavior/Subflow.story.js +267 -0
  278. package/build/stories/spec/layouts/Decision.story.js +241 -0
  279. package/build/stories/spec/layouts/Image.story.js +42 -0
  280. package/build/stories/spec/layouts/Modal.story.js +81 -0
  281. package/build/stories/spec/layouts/Search.story.js +325 -0
  282. package/build/stories/spec/layouts/Upsell.story.js +55 -0
  283. package/build/stories/spec/layouts/button/Button.story.js +100 -0
  284. package/build/stories/spec/layouts/button/PinnedButton.story.js +81 -0
  285. package/build/stories/spec/response/ActionResponse.story.js +66 -0
  286. package/build/stories/spec/schemas/MultiSelect.story.js +148 -0
  287. package/build/stories/spec/schemas/Upload.story.js +168 -0
  288. package/build/stories/spec/schemas/const/ConstLayout.story.js +159 -0
  289. package/build/stories/spec/schemas/const/ObjectConst.story.js +94 -0
  290. package/build/stories/spec/schemas/features/PersistAsync.story.js +176 -0
  291. package/build/stories/spec/schemas/features/ValidationAsync.story.js +103 -0
  292. package/build/stories/spec/schemas/object/FormattedValue.story.js +92 -0
  293. package/build/stories/spec/schemas/object/MoneyInput.story.js +240 -0
  294. package/build/stories/spec/schemas/oneOf/OneOfInitialisation.story.js +55 -0
  295. package/build/stories/spec/step/Controls.story.js +109 -0
  296. package/build/stories/spec/step/DFModal.story.js +58 -0
  297. package/build/stories/spec/step/Footer.story.js +70 -0
  298. package/build/stories/spec/step/Navigation.story.js +20 -0
  299. package/build/stories/spec/step/Tags.story.js +39 -0
  300. package/build/stories/spec/step/ToolBar.story.js +60 -0
  301. package/build/stories/spec/step/features/ErrorHandling.story.js +92 -0
  302. package/build/stories/spec/step/features/External.story.js +44 -0
  303. package/build/stories/spec/step/features/Polling.story.js +108 -0
  304. package/build/stories/spec/step/features/RefreshAfter.story.js +92 -0
  305. package/build/stories/spec/step/features/refresh/Refresh.story.js +258 -0
  306. package/build/stories/spec/step/features/refresh/RefreshWithPersistAsync.story.js +958 -0
  307. package/build/stories/types.js +1 -0
  308. package/build/stories/utils/fixtureHttpClient.js +70 -0
  309. package/build/stories/utils/getBasicStep.js +223 -0
  310. package/build/stories/utils/mockSearchHandler.js +71 -0
  311. package/build/stories/utils/render-utils.js +41 -0
  312. package/build/stories/visual-tests/layouts/NotUsingListItem.story.js +17 -0
  313. package/build/test-utils/DynamicFlowWise.js +32 -0
  314. package/build/test-utils/DynamicFlowWiseModal.js +34 -0
  315. package/build/test-utils/NeptuneProviders.js +11 -0
  316. package/build/test-utils/component-utils.js +5 -0
  317. package/build/test-utils/fetch-utils.js +45 -0
  318. package/build/test-utils/getMergedTestRenderers.js +34 -0
  319. package/build/test-utils/getRandomId.js +1 -0
  320. package/build/test-utils/index.js +3 -0
  321. package/build/test-utils/rtl-utils.js +7 -0
  322. package/build/test-utils/step-utils.js +6 -0
  323. package/build/test-utils/wait.js +3 -0
  324. package/build/tests/AlertLayout.test.js +78 -0
  325. package/build/tests/ArrayTuple.test.js +118 -0
  326. package/build/tests/ButtonLayout.test.js +308 -0
  327. package/build/tests/ConstLayout.test.js +95 -0
  328. package/build/tests/DateInput.test.js +163 -0
  329. package/build/tests/DecisionLayout.test.js +146 -0
  330. package/build/tests/DynamicFlow.test.js +147 -0
  331. package/build/tests/External.test.js +169 -0
  332. package/build/tests/Flow.test.js +328 -0
  333. package/build/tests/FormLayout.test.js +28 -0
  334. package/build/tests/FormattedValue.test.js +107 -0
  335. package/build/tests/ImageRenderer.test.js +78 -0
  336. package/build/tests/InitialAction.test.js +179 -0
  337. package/build/tests/InitialStep.test.js +168 -0
  338. package/build/tests/InstructionsLayout.test.js +45 -0
  339. package/build/tests/ListLayout.test.js +145 -0
  340. package/build/tests/Logging.test.js +53 -0
  341. package/build/tests/ModalBehavior.test.js +149 -0
  342. package/build/tests/MoneyInput.test.js +316 -0
  343. package/build/tests/MultiUpload.test.js +293 -0
  344. package/build/tests/NativeBack.test.js +267 -0
  345. package/build/tests/OneOfInitialisation.test.js +571 -0
  346. package/build/tests/PersistAsync.test.js +653 -0
  347. package/build/tests/Polling.test.js +617 -0
  348. package/build/tests/Prefetching.test.js +230 -0
  349. package/build/tests/RefreshAfter.test.js +63 -0
  350. package/build/tests/RefreshOnChange.ResponseHandling.test.js +205 -0
  351. package/build/tests/RefreshOnChange.test.js +233 -0
  352. package/build/tests/RefreshOnChange.with.Segmented.test.js +348 -0
  353. package/build/tests/RefreshOnChange.with.Tabs.test.js +358 -0
  354. package/build/tests/RefreshOnChangePreserve.test.js +224 -0
  355. package/build/tests/RendererProps.test.js +342 -0
  356. package/build/tests/Repeatable.test.js +107 -0
  357. package/build/tests/Rerendering.test.js +67 -0
  358. package/build/tests/ReviewLayout.test.js +274 -0
  359. package/build/tests/SchemaOnChange.test.js +133 -0
  360. package/build/tests/ScrollToError.test.js +217 -0
  361. package/build/tests/SegmentedControl.test.js +49 -0
  362. package/build/tests/SingleFileUpload.test.js +88 -0
  363. package/build/tests/StatusList.test.js +85 -0
  364. package/build/tests/Subflow.test.js +710 -0
  365. package/build/tests/Submission.ResponseHandling.test.js +557 -0
  366. package/build/tests/Submission.merging.test.js +202 -0
  367. package/build/tests/Submission.test.js +523 -0
  368. package/build/tests/Tags.test.js +475 -0
  369. package/build/tests/Upsell.test.js +126 -0
  370. package/build/tests/ValidationAsync.test.js +295 -0
  371. package/build/tests/legacy/Actions.test.js +158 -0
  372. package/build/tests/legacy/BackButton.test.js +114 -0
  373. package/build/tests/legacy/HiddenSchemas.test.js +246 -0
  374. package/build/tests/legacy/MultiSelect.test.js +497 -0
  375. package/build/tests/legacy/MultipleFileUploadSchema.test.js +341 -0
  376. package/build/tests/legacy/PersistAsync.blob-schema.test.js +224 -0
  377. package/build/tests/legacy/PersistAsync.string-schema.test.js +211 -0
  378. package/build/tests/legacy/RefreshStepOnChange.debouncing.test.js +209 -0
  379. package/build/tests/legacy/RefreshStepOnChange.test.js +424 -0
  380. package/build/tests/legacy/Search.test.js +437 -0
  381. package/build/tests/renderers/MultiSelectInputRendererProps.test.js +58 -0
  382. package/build/tests/renderers/SelectInputRendererProps.test.js +42 -0
  383. package/build/tests/renderers/TextInputRenderer.test.js +51 -0
  384. package/build/types/domain/components/UpsellComponent.d.ts +2 -3
  385. package/build/types/domain/components/UpsellComponent.d.ts.map +1 -1
  386. package/build/types/domain/components/searchComponent/SearchComponent.d.ts +5 -4
  387. package/build/types/domain/components/searchComponent/SearchComponent.d.ts.map +1 -1
  388. package/build/types/domain/features/search/getPerformSearchFunction.d.ts +1 -1
  389. package/build/types/domain/features/search/getPerformSearchFunction.d.ts.map +1 -1
  390. package/build/types/domain/mappers/layout/searchLayoutToComponent.d.ts +2 -1
  391. package/build/types/domain/mappers/layout/searchLayoutToComponent.d.ts.map +1 -1
  392. package/build/types/domain/mappers/layout/upsellLayoutToComponent.d.ts +1 -1
  393. package/build/types/domain/mappers/layout/upsellLayoutToComponent.d.ts.map +1 -1
  394. package/build/types/renderers/EmptyLoadingStateRenderer.d.ts +3 -0
  395. package/build/types/renderers/EmptyLoadingStateRenderer.d.ts.map +1 -0
  396. package/build/types/renderers/mappers/rootComponentToProps.d.ts.map +1 -1
  397. package/build/types/renderers/mappers/searchComponentToProps.d.ts +1 -1
  398. package/build/types/renderers/mappers/searchComponentToProps.d.ts.map +1 -1
  399. package/build/types/renderers/mappers/upsellComponentToProps.d.ts +2 -2
  400. package/build/types/renderers/mappers/upsellComponentToProps.d.ts.map +1 -1
  401. package/build/types/test-utils/getMergedTestRenderers.d.ts +1 -1
  402. package/build/types/test-utils/getMergedTestRenderers.d.ts.map +1 -1
  403. package/build/types/useDynamicFlow.d.ts.map +1 -1
  404. package/build/types.js +1 -0
  405. package/build/useDynamicFlow.js +104 -0
  406. package/build/useDynamicFlowModal.js +58 -0
  407. package/build/utils/analyse-step.js +14 -0
  408. package/build/utils/component-utils.js +8 -0
  409. package/build/utils/component-utils.test.js +113 -0
  410. package/build/utils/getScrollToTop.js +12 -0
  411. package/build/utils/normalise-flow-id.js +1 -0
  412. package/build/utils/normalise-flow-id.test.js +24 -0
  413. package/build/utils/openLinkInNewTab.js +10 -0
  414. package/build/utils/recursiveMerge.js +40 -0
  415. package/build/utils/recursiveMerge.test.js +93 -0
  416. package/build/utils/type-utils.js +21 -0
  417. package/build/utils/type-validators.js +11 -0
  418. package/build/utils/type-validators.test.js +180 -0
  419. package/build/utils/useStableCallback.js +15 -0
  420. package/package.json +4 -4
@@ -0,0 +1,176 @@
1
+ import { getMockHttpClient, respondWith } from '../../../../test-utils';
2
+ import { respondWithDelay } from '../../../../test-utils/fetch-utils';
3
+ import DynamicFlowWise from '../../../../test-utils/DynamicFlowWise';
4
+ import { renderWithStep } from '../../../utils/render-utils';
5
+ const httpClient = getMockHttpClient({
6
+ '/submit': async () => respondWithDelay({
7
+ id: 'new-df-flow-id',
8
+ title: 'Success',
9
+ layout: [],
10
+ schemas: [],
11
+ }, 1000),
12
+ '/persist-async': async () => respondWith({ token: '123' }),
13
+ '/persist-async-delayed-2s': async () => respondWithDelay({ token: '123' }, 2000),
14
+ '/persist-async-delayed-5s': async () => respondWithDelay({ token: '345' }, 5000),
15
+ '/persist-async-generic-failure': async () => Promise.reject(new Error('Failed to persist')),
16
+ '/persist-async-validation-failure': async () => Promise.resolve(new Response(JSON.stringify({ validation: { param: 'Invalid field' } }), { status: 401 })),
17
+ '/persist-async-file-upload': async () => respondWithDelay({ token: '123' }, 1000),
18
+ '/persist-async-file-upload-fail': async () => respondWith({
19
+ validation: {
20
+ document: 'This is a custom, server-side, error message',
21
+ },
22
+ }, { status: 401 }),
23
+ });
24
+ export default {
25
+ component: DynamicFlowWise,
26
+ title: 'Spec/Schemas/Features/Persist Async',
27
+ parameters: {
28
+ chromatic: { disableSnapshot: true },
29
+ },
30
+ };
31
+ export function BasicPersistAsync() {
32
+ return renderWithStep(getBasicStep('/persist-async'), httpClient);
33
+ }
34
+ export function PersistAsyncWithDelay() {
35
+ return renderWithStep(getBasicStep('/persist-async-delayed-2s'), httpClient);
36
+ }
37
+ export function MultiplePersistAsyncWithDelay() {
38
+ return renderWithStep(getComplexStepWithDelay(), httpClient);
39
+ }
40
+ export function PersistAsyncGenericFailure() {
41
+ return renderWithStep(getBasicStep('/persist-async-generic-failure'), httpClient);
42
+ }
43
+ export function PersistAsyncValidationFailure() {
44
+ return renderWithStep(getBasicStep('/persist-async-validation-failure'), httpClient);
45
+ }
46
+ export function PersistAsyncFileUpload() {
47
+ return renderWithStep(getFileUploadStep(), httpClient);
48
+ }
49
+ export function PersistAsyncFileUploadWithAutoSubmit() {
50
+ return renderWithStep(getFileUploadStep(true), httpClient);
51
+ }
52
+ const getBasicStep = (url) => ({
53
+ id: 'step-id',
54
+ title: 'Persist async on text input',
55
+ schemas: [
56
+ {
57
+ $id: '#schema',
58
+ type: 'string',
59
+ persistAsync: {
60
+ method: 'POST',
61
+ url,
62
+ param: 'param',
63
+ idProperty: 'token',
64
+ schema: { title: 'Card number', type: 'number' },
65
+ },
66
+ },
67
+ ],
68
+ layout: [
69
+ { type: 'form', schemaId: '#schema' },
70
+ {
71
+ type: 'button',
72
+ title: 'Submit',
73
+ action: { url: '/submit', method: 'POST' },
74
+ },
75
+ ],
76
+ model: 'the-token',
77
+ });
78
+ const getComplexStepWithDelay = () => ({
79
+ id: 'step-id',
80
+ title: 'Persist async on text input',
81
+ schemas: [
82
+ {
83
+ $id: '#schema',
84
+ type: 'object',
85
+ displayOrder: ['name', 'number'],
86
+ properties: {
87
+ name: {
88
+ type: 'string',
89
+ persistAsync: {
90
+ method: 'POST',
91
+ url: '/persist-async-delayed-5s',
92
+ param: 'param',
93
+ idProperty: 'token',
94
+ schema: { title: 'Name on card', type: 'string' },
95
+ },
96
+ },
97
+ number: {
98
+ type: 'string',
99
+ persistAsync: {
100
+ method: 'POST',
101
+ url: '/persist-async-delayed-2s',
102
+ param: 'param',
103
+ idProperty: 'token',
104
+ schema: { title: 'Card number', type: 'string' },
105
+ },
106
+ },
107
+ },
108
+ },
109
+ ],
110
+ layout: [
111
+ { type: 'form', schemaId: '#schema' },
112
+ {
113
+ type: 'button',
114
+ title: 'Submit',
115
+ action: { url: '/submit', method: 'POST' },
116
+ },
117
+ ],
118
+ });
119
+ const getFileUploadStep = (submitOnChange = false) => ({
120
+ id: 'step-id',
121
+ title: 'Persist async on file upload',
122
+ schemas: [
123
+ {
124
+ $id: '#schema',
125
+ type: 'object',
126
+ displayOrder: ['okFile', 'failFile'],
127
+ properties: {
128
+ okFile: {
129
+ type: 'string',
130
+ persistAsync: {
131
+ method: 'POST',
132
+ url: '/persist-async-file-upload',
133
+ param: 'document',
134
+ idProperty: 'token',
135
+ schema: {
136
+ title: 'Upload any file',
137
+ description: 'The request should succeed.',
138
+ type: 'blob',
139
+ },
140
+ },
141
+ onChange: submitOnChange
142
+ ? {
143
+ type: 'action',
144
+ action: {
145
+ url: '/submit',
146
+ },
147
+ }
148
+ : undefined,
149
+ },
150
+ failFile: {
151
+ type: 'string',
152
+ persistAsync: {
153
+ method: 'POST',
154
+ url: '/persist-async-file-upload-fail',
155
+ param: 'document',
156
+ idProperty: 'token',
157
+ schema: {
158
+ title: 'Upload any file',
159
+ description: 'The request should fail with a custom error mesage.',
160
+ type: 'blob',
161
+ },
162
+ },
163
+ },
164
+ },
165
+ },
166
+ ],
167
+ layout: [
168
+ { type: 'form', schemaId: '#schema' },
169
+ {
170
+ type: 'button',
171
+ title: 'Submit',
172
+ control: 'primary',
173
+ action: { url: '/submit', method: 'POST' },
174
+ },
175
+ ],
176
+ });
@@ -0,0 +1,103 @@
1
+ import { getMockHttpClient, respondWith, respondWithEmptyOk } from '../../../../test-utils';
2
+ import DynamicFlowWise from '../../../../test-utils/DynamicFlowWise';
3
+ import { renderWithStep } from '../../../utils/render-utils';
4
+ const validationAsyncConfig = {
5
+ method: 'POST',
6
+ url: '/validate',
7
+ param: 'param',
8
+ };
9
+ const getHttpClient = (validateAsync = 'failValidation') => getMockHttpClient({
10
+ '/submit': async (input, init) => {
11
+ console.log(input, init && JSON.parse(init.body));
12
+ return respondWith({
13
+ title: 'Success',
14
+ schemas: [],
15
+ layout: [{ type: 'heading', title: 'Success' }],
16
+ });
17
+ },
18
+ '/validate': async (input, init) => {
19
+ switch (validateAsync) {
20
+ case 'failGenerically':
21
+ return Promise.reject(new Error('Failed to validate'));
22
+ case 'failValidation':
23
+ return Promise.resolve(new Response(JSON.stringify({ message: 'This field is invalid' }), {
24
+ status: 422,
25
+ }));
26
+ case 'succeedWithMessage':
27
+ return respondWith({ message: 'This field is super valid' });
28
+ case 'succeed':
29
+ default:
30
+ return respondWithEmptyOk();
31
+ }
32
+ },
33
+ '/persist-async': async (input, init) => {
34
+ return respondWith({ token: '123' });
35
+ },
36
+ });
37
+ export default {
38
+ component: DynamicFlowWise,
39
+ title: 'Spec/Schemas/Features/Validation Async',
40
+ parameters: {
41
+ chromatic: { disableSnapshot: true },
42
+ },
43
+ argTypes: {
44
+ validateAsync: {
45
+ options: ['succeed', 'succeedWithMessage', 'failGenerically', 'failValidation'],
46
+ type: 'select',
47
+ defaultValue: 'failValidation',
48
+ },
49
+ },
50
+ };
51
+ export const BasicTypes = {
52
+ args: { validateAsync: 'failValidation' },
53
+ render: ({ validateAsync }) => renderWithStep(getBasicTypesStep(), getHttpClient(validateAsync)),
54
+ };
55
+ const getBasicTypesStep = () => getStep('Basic inputs with validation async', {
56
+ $id: '#the-schema',
57
+ type: 'object',
58
+ displayOrder: ['name', 'boolean', 'rate', 'age'],
59
+ properties: {
60
+ name: {
61
+ type: 'string',
62
+ title: 'Name',
63
+ validationAsync: validationAsyncConfig,
64
+ },
65
+ boolean: {
66
+ type: 'boolean',
67
+ title: 'I accept the terms and conditions',
68
+ validationAsync: validationAsyncConfig,
69
+ },
70
+ rate: {
71
+ title: 'Conversion rate',
72
+ type: 'number',
73
+ validationAsync: validationAsyncConfig,
74
+ },
75
+ age: {
76
+ title: 'Age',
77
+ type: 'integer',
78
+ validationAsync: validationAsyncConfig,
79
+ },
80
+ },
81
+ });
82
+ const getStep = (title, schema) => ({
83
+ id: 'step-id',
84
+ title,
85
+ schemas: [
86
+ {
87
+ $id: '#schema',
88
+ type: 'object',
89
+ properties: {
90
+ schema,
91
+ },
92
+ displayOrder: ['schema'],
93
+ },
94
+ ],
95
+ layout: [
96
+ { type: 'form', schemaId: '#schema' },
97
+ {
98
+ type: 'button',
99
+ title: 'Submit',
100
+ action: { url: '/submit', method: 'POST' },
101
+ },
102
+ ],
103
+ });
@@ -0,0 +1,92 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getMockHttpClient, respondWith } from '../../../../test-utils';
3
+ import DynamicFlowWise from '../../../../test-utils/DynamicFlowWise';
4
+ import { renderWithStepAndOverrides } from '../../../utils/render-utils';
5
+ /**
6
+ * There is no default renderer for formatted-value on web,
7
+ * so we create a simple one here for testing purposes.
8
+ */
9
+ const FormattedValueRenderer = {
10
+ canRenderType: 'formatted-value',
11
+ render: (props) => {
12
+ const onBlur = (event) => {
13
+ try {
14
+ const newValue = JSON.parse(event.target.value);
15
+ props.onChange(newValue);
16
+ }
17
+ catch (_a) {
18
+ // ignore JSON parse errors
19
+ }
20
+ };
21
+ return (_jsxs("div", { children: [_jsx("p", { children: "This is a testing-only renderer for formatted-value. It is not available in the released packages." }), _jsx("p", { children: "Note that the value is not passed from the step model to the renderer. Only from the renderer to the domain layer component. If you need an example, you can copy-paste the following JSON:" }), _jsx("pre", { children: `{ "some-key": "some-value" }` }), _jsx("textarea", { style: { width: '100%', height: '200px' }, onBlur: onBlur }), "If the text is not valid JSON, onChange will not be triggered."] }));
22
+ },
23
+ };
24
+ const renderers = [FormattedValueRenderer];
25
+ const getStep = (title, description, onChange) => ({
26
+ id: 'step',
27
+ title,
28
+ description,
29
+ layout: [
30
+ {
31
+ type: 'form',
32
+ schemaId: '#schema',
33
+ },
34
+ {
35
+ type: 'button',
36
+ title: 'Submit',
37
+ control: 'primary',
38
+ action: {
39
+ url: '/submit',
40
+ },
41
+ },
42
+ ],
43
+ schemas: [
44
+ {
45
+ type: 'object',
46
+ $id: '#schema',
47
+ title: 'Formatted Value',
48
+ properties: {},
49
+ displayOrder: [],
50
+ format: 'banana',
51
+ onChange,
52
+ },
53
+ ],
54
+ model: {
55
+ 'model-key': 'model-value',
56
+ },
57
+ });
58
+ const getHttpClient = () => getMockHttpClient({
59
+ '/submit': async (input, init) => {
60
+ const payload = JSON.parse(init === null || init === void 0 ? void 0 : init.body);
61
+ return respondWith({
62
+ id: 'next-step',
63
+ title: 'Submission successful',
64
+ layout: [
65
+ {
66
+ type: 'markdown',
67
+ content: `You have successfully submitted the form with a formatted value.\n\`\`\`\n${JSON.stringify(payload, null, 2)}\n\`\`\``,
68
+ },
69
+ ],
70
+ schemas: [],
71
+ });
72
+ },
73
+ '/refresh': async () => {
74
+ return respondWith(null, { status: 304 });
75
+ },
76
+ });
77
+ export default {
78
+ component: DynamicFlowWise,
79
+ title: 'Spec/Schemas/Object/FormattedValue',
80
+ parameters: {
81
+ chromatic: { disableSnapshot: true },
82
+ },
83
+ };
84
+ export function Basic() {
85
+ return renderWithStepAndOverrides(getStep('Formatted Value', 'Example of FormattedValue with a fake renderer.'), { renderers, httpClient: getHttpClient() });
86
+ }
87
+ export function WithOnChange() {
88
+ return renderWithStepAndOverrides(getStep('Formatted Value with onChange', 'Modify the JSON value and then click outside the textarea to trigger onChange. No need to click submit.', {
89
+ type: 'action',
90
+ action: { url: '/submit' },
91
+ }), { renderers, httpClient: getHttpClient() });
92
+ }
@@ -0,0 +1,240 @@
1
+ import { getMockHttpClient, respondWith } from '../../../../test-utils';
2
+ import DynamicFlowWise from '../../../../test-utils/DynamicFlowWise';
3
+ import { renderWithStep } from '../../../utils/render-utils';
4
+ const getHttpClient = () => getMockHttpClient({
5
+ '/submit': async (input, init) => {
6
+ // console.log(input, init && JSON.parse(init.body as string));
7
+ const step = getStep(`Submission Successful`, `The form was submitted with body: ${init === null || init === void 0 ? void 0 : init.body}`);
8
+ return respondWith(step);
9
+ },
10
+ '/refresh': async () => {
11
+ return respondWith(null, { status: 304 });
12
+ },
13
+ });
14
+ export default {
15
+ component: DynamicFlowWise,
16
+ title: 'Spec/Schemas/Object/MoneyInput',
17
+ parameters: {
18
+ chromatic: { disableSnapshot: false },
19
+ },
20
+ };
21
+ export function Basic() {
22
+ return renderWithStep(getStep('Money Input', 'Basic money input: no placeholder, no default value, no model, no onChange.'), getHttpClient());
23
+ }
24
+ export function WithPlaceholder() {
25
+ const step = getStep('Money Input', 'Money input with placeholder in the amount.');
26
+ const schema = step.schemas[0];
27
+ schema.properties.amount.placeholder = '9.99';
28
+ return renderWithStep(step, getHttpClient());
29
+ }
30
+ export function WithDefaultValue() {
31
+ const step = getStep('Money Input', 'Money input with default value in the amount and currency.');
32
+ const schema = step.schemas[0];
33
+ schema.properties.amount.default = '49.99';
34
+ schema.properties.currency.default = 'GBP';
35
+ return renderWithStep(step, getHttpClient());
36
+ }
37
+ export function WithModel() {
38
+ const step = Object.assign(Object.assign({}, getStep('Money Input', 'Money input with model values for the amount and currency.')), { model: { currency: 'EUR', amount: '100.00' } });
39
+ return renderWithStep(step, getHttpClient());
40
+ }
41
+ export function WithOnChangeInTheAmount() {
42
+ const step = getStep('Money Input', 'Money input with onChange in the amount, which triggers a refresh after the debounce period.');
43
+ const schema = step.schemas[0];
44
+ schema.properties.amount.onChange = { type: 'refresh' };
45
+ return renderWithStep(step, getHttpClient());
46
+ }
47
+ export function WithOnChangeInTheCurrency() {
48
+ const step = getStep('Money Input', 'Money input with onChange in the currency, which triggers a refresh immediately.');
49
+ const schema = step.schemas[0];
50
+ schema.properties.currency.onChange = { type: 'refresh' };
51
+ return renderWithStep(step, getHttpClient());
52
+ }
53
+ export function WithExtraConstAndHiddenProperties() {
54
+ const step = getStep('Money Input', 'Money input with extra const and hidden properties in the object schema.');
55
+ const schema = step.schemas[0];
56
+ schema.properties.hiddenProp = {
57
+ type: 'string',
58
+ hidden: true,
59
+ const: 'hiddenValue',
60
+ };
61
+ schema.properties.constProp = {
62
+ const: 'constValue',
63
+ };
64
+ schema.properties.invalidSchema = {
65
+ type: 'number', // not hidden and not const, should be ignored
66
+ };
67
+ step.model = { amount: '99.99', currency: 'USD' };
68
+ return renderWithStep(step, getHttpClient());
69
+ }
70
+ export function WithValidationErrors() {
71
+ const step = getStep('Money Input', 'Money input with validation errors on the amount.');
72
+ step.model = { amount: '12', currency: 'EUR' };
73
+ step.errors = {
74
+ validation: {
75
+ amount: 'This error is in the step errors object.',
76
+ },
77
+ };
78
+ return renderWithStep(step, getHttpClient());
79
+ }
80
+ export function WithOnlyOneCurrencyOption() {
81
+ const step = getStep('Money Input', 'Money input with only one currency option, which should render as a const field.');
82
+ const schema = step.schemas[0];
83
+ schema.properties.currency = {
84
+ const: 'USD',
85
+ title: 'USD',
86
+ description: 'US Dollar',
87
+ };
88
+ step.model = { amount: '75.50', currency: 'USD' };
89
+ return renderWithStep(step, getHttpClient());
90
+ }
91
+ export function WithGroupingTags() {
92
+ const step = getStep('Money Input', 'Money input with grouping tags in the currency options.');
93
+ const schema = step.schemas[0];
94
+ const { oneOf } = schema.properties.currency;
95
+ oneOf.forEach((option, index) => {
96
+ const rnd = predictablyRandomNumbers[index];
97
+ const constSchemaOption = option;
98
+ constSchemaOption.tags = [];
99
+ if (rnd < 0.7)
100
+ return; // randomly skip some options
101
+ if (rnd >= 0.7 && rnd < 0.8) {
102
+ constSchemaOption.tags.push('recent');
103
+ }
104
+ if (rnd >= 0.75 && rnd < 0.85) {
105
+ constSchemaOption.tags.push('popular');
106
+ }
107
+ if (rnd >= 0.9) {
108
+ constSchemaOption.tags.push('currencies-with-account-details');
109
+ }
110
+ });
111
+ step.model = { amount: '150', currency: 'EUR' };
112
+ return renderWithStep(step, getHttpClient());
113
+ }
114
+ const getStep = (title, description) => ({
115
+ id: 'step',
116
+ title,
117
+ description,
118
+ layout: [
119
+ {
120
+ type: 'form',
121
+ schemaId: '#schema',
122
+ },
123
+ {
124
+ type: 'button',
125
+ title: 'Submit',
126
+ control: 'primary',
127
+ action: {
128
+ url: '/submit',
129
+ },
130
+ },
131
+ ],
132
+ schemas: [
133
+ {
134
+ $id: '#schema',
135
+ type: 'object',
136
+ title: 'Money Input (object schema title)',
137
+ description: 'A money input with amount and currency (object schema description)',
138
+ format: 'money',
139
+ properties: {
140
+ currency: {
141
+ oneOf: [
142
+ {
143
+ const: 'USD',
144
+ title: 'USD',
145
+ description: 'US Dollar',
146
+ keywords: ['American Dollar'],
147
+ },
148
+ {
149
+ const: 'EUR',
150
+ title: 'EUR',
151
+ description: 'Euro',
152
+ },
153
+ {
154
+ const: 'AUD',
155
+ title: 'AUD',
156
+ description: 'Australian Dollar',
157
+ keywords: ['Aussie Dollar'],
158
+ },
159
+ {
160
+ const: 'GBP',
161
+ title: 'GBP',
162
+ description: 'British Pound',
163
+ keywords: ['Blighty'],
164
+ },
165
+ {
166
+ const: 'JPY',
167
+ title: 'JPY',
168
+ description: 'Japanese Yen',
169
+ keywords: ['Nippon Yen'],
170
+ },
171
+ {
172
+ const: 'CAD',
173
+ title: 'CAD',
174
+ description: 'Canadian Dollar',
175
+ keywords: ['Loonie'],
176
+ },
177
+ { const: 'CHF', title: 'CHF', description: 'Swiss Franc', keywords: ['Swissie'] },
178
+ { const: 'CNY', title: 'CNY', description: 'Chinese Yuan', keywords: ['Renminbi'] },
179
+ { const: 'INR', title: 'INR', description: 'Indian Rupee', keywords: ['Rupee'] },
180
+ { const: 'MXN', title: 'MXN', description: 'Mexican Peso', keywords: ['Peso'] },
181
+ {
182
+ const: 'NZD',
183
+ title: 'NZD',
184
+ description: 'New Zealand Dollar',
185
+ keywords: ['Kiwi Dollar'],
186
+ },
187
+ { const: 'ZAR', title: 'ZAR', description: 'South African Rand', keywords: ['Rand'] },
188
+ { const: 'SEK', title: 'SEK', description: 'Swedish Krona', keywords: ['Krona'] },
189
+ { const: 'NOK', title: 'NOK', description: 'Norwegian Krone', keywords: ['Krone'] },
190
+ { const: 'DKK', title: 'DKK', description: 'Danish Krone', keywords: ['Krone'] },
191
+ { const: 'BRL', title: 'BRL', description: 'Brazilian Real', keywords: ['Real'] },
192
+ {
193
+ const: 'SGD',
194
+ title: 'SGD',
195
+ description: 'Singapore Dollar',
196
+ keywords: ['Sing Dollar'],
197
+ },
198
+ {
199
+ const: 'HKD',
200
+ title: 'HKD',
201
+ description: 'Hong Kong Dollar',
202
+ keywords: ['HK Dollar'],
203
+ },
204
+ { const: 'KRW', title: 'KRW', description: 'South Korean Won', keywords: ['Won'] },
205
+ { const: 'TRY', title: 'TRY', description: 'Turkish Lira', keywords: ['Lira'] },
206
+ {
207
+ const: 'IDR',
208
+ title: 'IDR',
209
+ description: 'Indonesian Rupiah',
210
+ keywords: ['Rupiah'],
211
+ },
212
+ { const: 'SAR', title: 'SAR', description: 'Saudi Riyal', keywords: ['Riyal'] },
213
+ { const: 'AED', title: 'AED', description: 'Emirati Dirham', keywords: ['Dirham'] },
214
+ {
215
+ const: 'PLN',
216
+ title: 'PLN',
217
+ description: 'Polish Zloty',
218
+ keywords: ['Zloty'],
219
+ },
220
+ {
221
+ const: 'THB',
222
+ title: 'THB',
223
+ description: 'Thai Baht',
224
+ keywords: ['Baht'],
225
+ },
226
+ ],
227
+ },
228
+ amount: { type: 'string', format: 'numeric', minLength: 5 },
229
+ },
230
+ displayOrder: ['currency', 'amount'],
231
+ required: ['currency', 'amount'],
232
+ },
233
+ ],
234
+ refreshUrl: '/refresh',
235
+ });
236
+ const predictablyRandomNumbers = [
237
+ 0.25, 0.7, 0.74, 0.81, 0.87, 0.53, 0.41, 0.19, 0.18, 0.2, 0.76, 0.66, 0.52, 0.1, 0.81, 0.19, 0.19,
238
+ 0.59, 0.9, 0.19, 0.28, 0.44, 0.01, 0.37, 0.12, 0.62, 0.37, 0.71, 0.07, 0.67, 0.82, 0.35, 0.81,
239
+ 0.8, 0.04, 0.88, 0.99, 0.29, 0.04, 0.21, 0.46, 0.84, 0.64, 0.2, 0.02, 0.34, 0.17, 0.1, 0.91, 0.83,
240
+ ];
@@ -0,0 +1,55 @@
1
+ import DynamicFlowWise from '../../../../test-utils/DynamicFlowWise';
2
+ import { renderWithStep } from '../../../utils/render-utils';
3
+ export default {
4
+ component: DynamicFlowWise,
5
+ title: 'Spec/Schemas/OneOf',
6
+ parameters: {
7
+ chromatic: { disableSnapshot: true },
8
+ },
9
+ };
10
+ export function AllOfAndOneOfInitialisation() {
11
+ return renderWithStep(allOfAndOneOfStep);
12
+ }
13
+ const allOfAndOneOfStep = {
14
+ id: 'step-id',
15
+ title: 'Step Title',
16
+ schemas: [
17
+ {
18
+ $id: '#root',
19
+ allOf: [
20
+ {
21
+ type: 'object',
22
+ displayOrder: ['email'],
23
+ properties: { email: { type: 'string', title: 'Email' } },
24
+ },
25
+ {
26
+ control: 'radio',
27
+ oneOf: [
28
+ {
29
+ title: 'Iban',
30
+ type: 'object',
31
+ displayOrder: ['iban', 'type'],
32
+ properties: { iban: { type: 'string', title: 'IBAN' }, type: { const: 'IBAN' } },
33
+ },
34
+ {
35
+ title: 'Bic',
36
+ type: 'object',
37
+ displayOrder: ['bic', 'type'],
38
+ properties: { bic: { type: 'string', title: 'BIC' }, type: { const: 'BIC' } },
39
+ },
40
+ ],
41
+ },
42
+ ],
43
+ },
44
+ ],
45
+ layout: [
46
+ {
47
+ type: 'form',
48
+ schemaId: '#root',
49
+ },
50
+ ],
51
+ model: {
52
+ email: 'marty.mcfly@wise.com',
53
+ type: 'IBAN',
54
+ },
55
+ };