@wise/dynamic-flow-client 5.12.0 → 5.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) 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 +373 -0
  21. package/build/controller/executePoll.js +64 -0
  22. package/build/controller/executeRefresh.js +45 -0
  23. package/build/controller/executeRequest.js +80 -0
  24. package/build/controller/executeSubmission.js +70 -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 +24 -0
  79. package/build/domain/components/step/StepDomainComponent.js +78 -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 +15 -0
  154. package/build/domain/mappers/mapStepToComponent.js +133 -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 +66 -0
  175. package/build/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.test.js +225 -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/renderers/CoreContainerRenderer.js +5 -0
  208. package/build/renderers/CoreRootRenderer.js +12 -0
  209. package/build/renderers/EmptyLoadingStateRenderer.js +5 -0
  210. package/build/renderers/getRenderFunction.js +24 -0
  211. package/build/renderers/getSchemaErrorMessageFunction.js +97 -0
  212. package/build/renderers/mappers/alertComponentToProps.js +2 -0
  213. package/build/renderers/mappers/allOfComponentToProps.js +6 -0
  214. package/build/renderers/mappers/booleanInputComponentToProps.js +5 -0
  215. package/build/renderers/mappers/boxComponentToProps.js +13 -0
  216. package/build/renderers/mappers/buttonComponentToProps.js +4 -0
  217. package/build/renderers/mappers/columnsComponentToProps.js +11 -0
  218. package/build/renderers/mappers/componentToRendererProps.js +164 -0
  219. package/build/renderers/mappers/constComponentToProps.js +5 -0
  220. package/build/renderers/mappers/containerComponentToProps.js +7 -0
  221. package/build/renderers/mappers/dateInputComponentToProps.js +2 -0
  222. package/build/renderers/mappers/decisionComponentToProps.js +16 -0
  223. package/build/renderers/mappers/dividerComponentToProps.js +2 -0
  224. package/build/renderers/mappers/externalComponentToProps.js +3 -0
  225. package/build/renderers/mappers/formComponentToProps.js +12 -0
  226. package/build/renderers/mappers/formattedValueComponentToProps.js +5 -0
  227. package/build/renderers/mappers/headingComponentToProps.js +2 -0
  228. package/build/renderers/mappers/hiddenComponentToProps.js +4 -0
  229. package/build/renderers/mappers/imageComponentToProps.js +2 -0
  230. package/build/renderers/mappers/instructionsComponentToProps.js +2 -0
  231. package/build/renderers/mappers/integerInputComponentToProps.js +2 -0
  232. package/build/renderers/mappers/listComponentToProps.js +2 -0
  233. package/build/renderers/mappers/loadingIndicatorComponentToProps.js +2 -0
  234. package/build/renderers/mappers/markdownComponentToProps.js +2 -0
  235. package/build/renderers/mappers/mediaComponentToProps.js +2 -0
  236. package/build/renderers/mappers/modalComponentToProps.js +11 -0
  237. package/build/renderers/mappers/modalLayoutComponentToProps.js +16 -0
  238. package/build/renderers/mappers/moneyInputComponentToProps.js +36 -0
  239. package/build/renderers/mappers/multiSelectComponentToProps.js +23 -0
  240. package/build/renderers/mappers/multiUploadInputComponentToProps.js +12 -0
  241. package/build/renderers/mappers/numberInputComponentToProps.js +2 -0
  242. package/build/renderers/mappers/objectComponentToProps.js +8 -0
  243. package/build/renderers/mappers/paragraphComponentToProps.js +2 -0
  244. package/build/renderers/mappers/persistAsyncComponentToProps.js +8 -0
  245. package/build/renderers/mappers/progressComponentToProps.js +2 -0
  246. package/build/renderers/mappers/repeatableComponentToProps.js +30 -0
  247. package/build/renderers/mappers/reviewComponentToProps.js +2 -0
  248. package/build/renderers/mappers/rootComponentToProps.js +21 -0
  249. package/build/renderers/mappers/searchComponentToProps.js +57 -0
  250. package/build/renderers/mappers/sectionComponentToProps.js +6 -0
  251. package/build/renderers/mappers/selectInputComponentToProps.js +34 -0
  252. package/build/renderers/mappers/statusListComponentToProps.js +2 -0
  253. package/build/renderers/mappers/subflowComponentToRendererProps.js +4 -0
  254. package/build/renderers/mappers/tabsComponentToProps.js +14 -0
  255. package/build/renderers/mappers/textInputComponentToProps.js +2 -0
  256. package/build/renderers/mappers/tupleComponentToProps.js +8 -0
  257. package/build/renderers/mappers/uploadInputComponentToProps.js +8 -0
  258. package/build/renderers/mappers/upsellComponentToProps.js +2 -0
  259. package/build/renderers/mappers/utils/getValidationState.js +12 -0
  260. package/build/renderers/mappers/utils/inputComponentToProps.js +26 -0
  261. package/build/renderers/mappers/utils/mapErrorsToValidationState.js +9 -0
  262. package/build/renderers/mappers/utils/pick.js +8 -0
  263. package/build/renderers/mappers/utils/selectInputOptionsToProps.js +11 -0
  264. package/build/renderers/stepComponentToProps.js +32 -0
  265. package/build/renderers/utils.js +69 -0
  266. package/build/renderers/utils.test.js +70 -0
  267. package/build/stories/dev-tools/ContainerQueries.story.js +66 -0
  268. package/build/stories/dev-tools/Debugger.story.js +38 -0
  269. package/build/stories/dev-tools/FixtureSelect.story.js +23 -0
  270. package/build/stories/dev-tools/TestServer.story.js +32 -0
  271. package/build/stories/examples/NativeFlow.story.js +80 -0
  272. package/build/stories/examples/Recipients.story.js +568 -0
  273. package/build/stories/spec/behavior/Copy.story.js +71 -0
  274. package/build/stories/spec/behavior/Link.story.js +40 -0
  275. package/build/stories/spec/behavior/Modal.story.js +79 -0
  276. package/build/stories/spec/behavior/Subflow.story.js +267 -0
  277. package/build/stories/spec/layouts/Decision.story.js +241 -0
  278. package/build/stories/spec/layouts/Image.story.js +42 -0
  279. package/build/stories/spec/layouts/Modal.story.js +81 -0
  280. package/build/stories/spec/layouts/Search.story.js +325 -0
  281. package/build/stories/spec/layouts/Upsell.story.js +55 -0
  282. package/build/stories/spec/layouts/button/Button.story.js +100 -0
  283. package/build/stories/spec/layouts/button/PinnedButton.story.js +81 -0
  284. package/build/stories/spec/response/ActionResponse.story.js +66 -0
  285. package/build/stories/spec/schemas/MultiSelect.story.js +148 -0
  286. package/build/stories/spec/schemas/Upload.story.js +168 -0
  287. package/build/stories/spec/schemas/const/ConstLayout.story.js +159 -0
  288. package/build/stories/spec/schemas/const/ObjectConst.story.js +94 -0
  289. package/build/stories/spec/schemas/features/PersistAsync.story.js +211 -0
  290. package/build/stories/spec/schemas/features/ValidationAsync.story.js +103 -0
  291. package/build/stories/spec/schemas/object/FormattedValue.story.js +92 -0
  292. package/build/stories/spec/schemas/object/MoneyInput.story.js +240 -0
  293. package/build/stories/spec/schemas/oneOf/OneOfInitialisation.story.js +55 -0
  294. package/build/stories/spec/schemas/oneOf/OneOfWithSingleOption.story.js +114 -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/ScrollToBottom.story.js +103 -0
  300. package/build/stories/spec/step/Tags.story.js +39 -0
  301. package/build/stories/spec/step/ToolBar.story.js +60 -0
  302. package/build/stories/spec/step/features/ErrorHandling.story.js +92 -0
  303. package/build/stories/spec/step/features/External.story.js +91 -0
  304. package/build/stories/spec/step/features/Polling.story.js +108 -0
  305. package/build/stories/spec/step/features/RefreshAfter.story.js +92 -0
  306. package/build/stories/spec/step/features/refresh/Refresh.story.js +258 -0
  307. package/build/stories/spec/step/features/refresh/RefreshWithPersistAsync.story.js +958 -0
  308. package/build/stories/types.js +1 -0
  309. package/build/stories/utils/fixtureHttpClient.js +70 -0
  310. package/build/stories/utils/getBasicStep.js +223 -0
  311. package/build/stories/utils/mockSearchHandler.js +71 -0
  312. package/build/stories/utils/render-utils.js +41 -0
  313. package/build/stories/visual-tests/layouts/NotUsingListItem.story.js +17 -0
  314. package/build/test-utils/DynamicFlowWise.js +32 -0
  315. package/build/test-utils/DynamicFlowWiseModal.js +34 -0
  316. package/build/test-utils/NeptuneProviders.js +11 -0
  317. package/build/test-utils/component-utils.js +5 -0
  318. package/build/test-utils/fetch-utils.js +45 -0
  319. package/build/test-utils/getMergedTestRenderers.js +34 -0
  320. package/build/test-utils/getRandomId.js +1 -0
  321. package/build/test-utils/index.js +3 -0
  322. package/build/test-utils/openLinkInNewTab.js +15 -0
  323. package/build/test-utils/rtl-utils.js +7 -0
  324. package/build/test-utils/step-utils.js +6 -0
  325. package/build/test-utils/wait.js +3 -0
  326. package/build/tests/AlertLayout.test.js +78 -0
  327. package/build/tests/ArrayTuple.test.js +118 -0
  328. package/build/tests/ButtonLayout.test.js +308 -0
  329. package/build/tests/ConstLayout.test.js +95 -0
  330. package/build/tests/DateInput.test.js +163 -0
  331. package/build/tests/DecisionLayout.test.js +146 -0
  332. package/build/tests/DynamicFlow.test.js +147 -0
  333. package/build/tests/External.test.js +169 -0
  334. package/build/tests/Flow.test.js +328 -0
  335. package/build/tests/FormLayout.test.js +28 -0
  336. package/build/tests/FormattedValue.test.js +107 -0
  337. package/build/tests/ImageRenderer.test.js +78 -0
  338. package/build/tests/InitialAction.test.js +179 -0
  339. package/build/tests/InitialStep.test.js +168 -0
  340. package/build/tests/InstructionsLayout.test.js +45 -0
  341. package/build/tests/ListLayout.test.js +168 -0
  342. package/build/tests/Logging.test.js +53 -0
  343. package/build/tests/ModalBehavior.test.js +149 -0
  344. package/build/tests/MoneyInput.test.js +316 -0
  345. package/build/tests/MultiUpload.test.js +293 -0
  346. package/build/tests/NativeBack.test.js +267 -0
  347. package/build/tests/NoOp.test.js +194 -0
  348. package/build/tests/OneOfInitialisation.test.js +571 -0
  349. package/build/tests/PersistAsync.test.js +687 -0
  350. package/build/tests/Polling.test.js +702 -0
  351. package/build/tests/Prefetching.test.js +230 -0
  352. package/build/tests/RefreshAfter.test.js +63 -0
  353. package/build/tests/RefreshOnChange.ResponseHandling.test.js +205 -0
  354. package/build/tests/RefreshOnChange.test.js +233 -0
  355. package/build/tests/RefreshOnChange.with.Segmented.test.js +348 -0
  356. package/build/tests/RefreshOnChange.with.Tabs.test.js +358 -0
  357. package/build/tests/RefreshOnChangePreserve.test.js +224 -0
  358. package/build/tests/RendererProps.test.js +342 -0
  359. package/build/tests/Repeatable.test.js +107 -0
  360. package/build/tests/Rerendering.test.js +67 -0
  361. package/build/tests/ReviewLayout.test.js +274 -0
  362. package/build/tests/SchemaOnChange.test.js +133 -0
  363. package/build/tests/SchemaReferences.test.js +88 -0
  364. package/build/tests/ScrollToBottom.test.js +122 -0
  365. package/build/tests/ScrollToError.test.js +217 -0
  366. package/build/tests/SegmentedControl.test.js +49 -0
  367. package/build/tests/SingleFileUpload.test.js +168 -0
  368. package/build/tests/StatusList.test.js +85 -0
  369. package/build/tests/Subflow.test.js +710 -0
  370. package/build/tests/Submission.ResponseHandling.test.js +557 -0
  371. package/build/tests/Submission.merging.test.js +202 -0
  372. package/build/tests/Submission.test.js +748 -0
  373. package/build/tests/Tags.test.js +475 -0
  374. package/build/tests/Upsell.test.js +154 -0
  375. package/build/tests/ValidationAsync.test.js +295 -0
  376. package/build/tests/legacy/Actions.test.js +158 -0
  377. package/build/tests/legacy/BackButton.test.js +114 -0
  378. package/build/tests/legacy/HiddenSchemas.test.js +246 -0
  379. package/build/tests/legacy/MultiSelect.test.js +501 -0
  380. package/build/tests/legacy/MultipleFileUploadSchema.test.js +341 -0
  381. package/build/tests/legacy/PersistAsync.blob-schema.test.js +224 -0
  382. package/build/tests/legacy/PersistAsync.string-schema.test.js +211 -0
  383. package/build/tests/legacy/RefreshStepOnChange.debouncing.test.js +209 -0
  384. package/build/tests/legacy/RefreshStepOnChange.test.js +424 -0
  385. package/build/tests/legacy/Search.test.js +437 -0
  386. package/build/tests/renderers/MultiSelectInputRendererProps.test.js +58 -0
  387. package/build/tests/renderers/SelectInputRendererProps.test.js +43 -0
  388. package/build/tests/renderers/TextInputRenderer.test.js +51 -0
  389. package/build/tsconfig.types.tsbuildinfo +1 -0
  390. package/build/types.js +1 -0
  391. package/build/useDynamicFlow.js +104 -0
  392. package/build/useDynamicFlowModal.js +58 -0
  393. package/build/utils/analyse-step.js +14 -0
  394. package/build/utils/component-utils.js +8 -0
  395. package/build/utils/component-utils.test.js +113 -0
  396. package/build/utils/getScrollToTop.js +12 -0
  397. package/build/utils/normalise-flow-id.js +1 -0
  398. package/build/utils/normalise-flow-id.test.js +24 -0
  399. package/build/utils/recursiveMerge.js +40 -0
  400. package/build/utils/recursiveMerge.test.js +93 -0
  401. package/build/utils/type-utils.js +21 -0
  402. package/build/utils/type-validators.js +11 -0
  403. package/build/utils/type-validators.test.js +180 -0
  404. package/build/utils/useStableCallback.js +15 -0
  405. package/package.json +20 -21
@@ -0,0 +1,35 @@
1
+ import { isObject } from '../utils/type-validators';
2
+ const responseTypes = ['step', 'action', 'exit', 'modal', 'subflow', 'no-op'];
3
+ /**
4
+ * Returns either 'step', 'action', 'exit', 'modal', 'subflow', or 'no-op' based on the response headers and body.
5
+ * This function takes a response body parameter because, for legacy reasons, we still need to consider the body
6
+ * to determine the response type, in cases where the response headers are not set.
7
+ * Ideally it should just be a matter of checking the "X-Df-Response-Type" response header.
8
+ */
9
+ export const getResponseType = (headers, body) => {
10
+ const headerResponseType = getResponseTypeFromHeader(headers);
11
+ if (headerResponseType) {
12
+ return headerResponseType;
13
+ }
14
+ if (isObject(body) && body.action) {
15
+ // TODO: use Zod to validate the action object
16
+ return 'action';
17
+ }
18
+ return 'step';
19
+ };
20
+ export const getResponseTypeFromHeader = (headers) => {
21
+ if (headers === null || headers === void 0 ? void 0 : headers.has('X-Df-Response-Type')) {
22
+ const type = headers.get('X-Df-Response-Type');
23
+ assertDFResponseType(type);
24
+ return type;
25
+ }
26
+ if (headers === null || headers === void 0 ? void 0 : headers.has('X-Df-Exit')) {
27
+ return 'exit';
28
+ }
29
+ return undefined;
30
+ };
31
+ function assertDFResponseType(type) {
32
+ if (!responseTypes.includes(type)) {
33
+ throw new Error("Unsupported X-Df-Response-Type. Allowed values are 'step', 'action', 'exit', 'modal', 'subflow', 'no-op'.");
34
+ }
35
+ }
@@ -0,0 +1,8 @@
1
+ export const getSafeHttpClient = (httpClient) => async (input, init) => {
2
+ try {
3
+ return await httpClient(input, init);
4
+ }
5
+ catch (_a) {
6
+ return null;
7
+ }
8
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * To ensure there are no uid collisions between consecutive steps, we use a
3
+ * counter that is appended to the step id. This means that even steps with the
4
+ * same structure and ids will not have the same component uids.
5
+ */
6
+ export const getStepCounter = () => {
7
+ let count = 0;
8
+ return {
9
+ increment() {
10
+ count = (count + 1) % 100;
11
+ },
12
+ get current() {
13
+ return count;
14
+ },
15
+ };
16
+ };
@@ -0,0 +1,26 @@
1
+ import { parseResponseBodyAsJsonElement, isErrorResponseBody, parseResponseBodyAsText, } from './response-utils';
2
+ export const handleErrorResponse = async (response, actionId, trackEvent) => {
3
+ const body = await parseResponseBodyAsJsonElement(response.clone());
4
+ if (isErrorResponseBody(body)) {
5
+ const refreshUrl = body.refreshUrl || body.refreshFormUrl;
6
+ const { error, validation, analytics } = body;
7
+ trackEvent('Action Failed', Object.assign(Object.assign({}, analytics), { actionId, statusCode: response.status }));
8
+ const errors = { error, validation };
9
+ return refreshUrl
10
+ ? { type: 'refresh', body: { refreshUrl, errors } }
11
+ : {
12
+ type: 'error',
13
+ body: { errors, analytics },
14
+ httpError: { statusCode: response.status },
15
+ };
16
+ }
17
+ trackEvent('Action Failed', { actionId, statusCode: response.status });
18
+ const errorMessage = await parseResponseBodyAsText(response);
19
+ return {
20
+ type: 'error',
21
+ httpError: {
22
+ message: errorMessage || undefined,
23
+ statusCode: response.status,
24
+ },
25
+ };
26
+ };
@@ -0,0 +1,8 @@
1
+ export const makeSafeHttpClient = (httpClient) => async (...props) => {
2
+ try {
3
+ return await httpClient(...props);
4
+ }
5
+ catch (_a) {
6
+ return null;
7
+ }
8
+ };
@@ -0,0 +1,72 @@
1
+ import { validateActionResponse, validateSubflowResponse } from '@wise/dynamic-flow-types/spec';
2
+ import { isArray, isObject } from '../utils/type-validators';
3
+ export const parseResponseBodyAsJsonElement = async (response) => {
4
+ assertResponseIsValid(response);
5
+ try {
6
+ return (await response.json());
7
+ }
8
+ catch (_a) {
9
+ return null;
10
+ }
11
+ };
12
+ export const parseResponseBodyAsText = async (response) => {
13
+ try {
14
+ return await response.text();
15
+ }
16
+ catch (_a) {
17
+ return null;
18
+ }
19
+ };
20
+ export function isActionResponseBody(body) {
21
+ return validateActionResponse(body).valid;
22
+ }
23
+ export function assertActionResponseBody(body) {
24
+ // TODO: use zod to validate the action object instead of this
25
+ if (!isObject(body) || !isObject(body.action)) {
26
+ throw new Error('Incorrect response body in action response. Expected an object satisfying the type { action: Action }.');
27
+ }
28
+ }
29
+ // TODO make this a modal response body type
30
+ export function assertModalResponseBody(body) {
31
+ if (isObject(body)) {
32
+ if ('content' in body && isArray(body.content)) {
33
+ return;
34
+ }
35
+ }
36
+ throw new Error('Incorrect response body in modal response. Expected an object satisfying the type { title?: string, components: Layout[] }.');
37
+ }
38
+ export function assertSubflowResponseBody(body) {
39
+ const { valid } = validateSubflowResponse(body);
40
+ if (valid) {
41
+ return;
42
+ }
43
+ throw new Error('Incorrect response body in subflow response.');
44
+ }
45
+ export function isErrorResponseBody(body) {
46
+ return Boolean(isObject(body) &&
47
+ (body.refreshFormUrl || body.refreshUrl || body.validation || body.error || body.analytics));
48
+ }
49
+ export function assertErrorResponseBody(body) {
50
+ // TODO: use zod to validate the error object instead of this
51
+ if (!isErrorResponseBody(body)) {
52
+ throw new Error('Incorrect error response body in error response. Expected an object with either `refreshUrl`, `validation` or `error` properties.');
53
+ }
54
+ }
55
+ export function assertStepResponseBody(body) {
56
+ // TODO: use zod to validate the error object instead of this
57
+ if (!isObject(body)) {
58
+ throw new Error('Incorrect response body in step response. Expected an object.');
59
+ }
60
+ }
61
+ const assertResponseIsValid = (response) => {
62
+ if (!isResponse(response)) {
63
+ throw new Error('Incorrect type of response from fetch. Expected object of type Response.');
64
+ }
65
+ if (response.bodyUsed) {
66
+ throw new Error('The body of the provided Response object has already been used. Every request must respond with a new Response object.');
67
+ }
68
+ };
69
+ const isResponse = (response) => typeof response === 'object' &&
70
+ response !== null &&
71
+ 'clone' in response &&
72
+ 'bodyUsed' in response;
@@ -0,0 +1 @@
1
+ export const createAlertComponent = (alertProps) => (Object.assign({ type: 'alert', kind: 'layout' }, alertProps));
@@ -0,0 +1,40 @@
1
+ import { getLocalValues, getSubmittableData, getSubmittableDataSync, } from '../../utils/component-utils';
2
+ import { summariseFromChildren } from '../features/summary/summary-utils';
3
+ import { validateComponents } from '../features/validation/validation-functions';
4
+ export const createAllOfComponent = (allOfProps) => {
5
+ const { uid, schemaId, analyticsId, alert, components, control, description, help, hidden, media, title, tags, } = allOfProps;
6
+ return {
7
+ type: 'all-of',
8
+ kind: 'input',
9
+ uid,
10
+ schemaId,
11
+ analyticsId,
12
+ alert,
13
+ components,
14
+ control,
15
+ description,
16
+ help,
17
+ hidden,
18
+ media,
19
+ title,
20
+ tags,
21
+ getChildren() {
22
+ return this.components;
23
+ },
24
+ getSummary() {
25
+ return summariseFromChildren(this.getChildren());
26
+ },
27
+ async getSubmittableValue() {
28
+ return getSubmittableData(this.components);
29
+ },
30
+ getSubmittableValueSync() {
31
+ return getSubmittableDataSync(this.components);
32
+ },
33
+ getLocalValue() {
34
+ return getLocalValues(this.components);
35
+ },
36
+ validate() {
37
+ return hidden ? true : validateComponents(this.getChildren());
38
+ },
39
+ };
40
+ };
@@ -0,0 +1,50 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { getComponentValidationAsync } from '../features/validationAsync/getComponentValidationAsync';
13
+ import { getInputUpdateFunction } from './utils/component-utils';
14
+ export const createBooleanInputComponent = (booleanInputProps, onComponentUpdate) => {
15
+ const { uid, id, value, schemaOnChange, performValidationAsync, onValueChange, onPersistAsync, summariser } = booleanInputProps, rest = __rest(booleanInputProps, ["uid", "id", "value", "schemaOnChange", "performValidationAsync", "onValueChange", "onPersistAsync", "summariser"]);
16
+ const update = getInputUpdateFunction(onComponentUpdate);
17
+ const validateAsync = performValidationAsync
18
+ ? getComponentValidationAsync(update, performValidationAsync)
19
+ : undefined;
20
+ const booleanComponent = Object.assign({ type: 'boolean', kind: 'input', uid,
21
+ id, autoComplete: '', value,
22
+ _update(updateFn) {
23
+ update(this, updateFn);
24
+ },
25
+ onBlur() { }, // Noop
26
+ onFocus() { }, // Noop
27
+ onChange(updatedValue) {
28
+ this._update((draft) => {
29
+ draft.errors = [];
30
+ draft.value = updatedValue;
31
+ });
32
+ void (schemaOnChange === null || schemaOnChange === void 0 ? void 0 : schemaOnChange());
33
+ void (onPersistAsync === null || onPersistAsync === void 0 ? void 0 : onPersistAsync().catch(() => { }));
34
+ validateAsync === null || validateAsync === void 0 ? void 0 : validateAsync(this, this.getLocalValue()).catch(() => { }); // Noop
35
+ onValueChange();
36
+ },
37
+ async getSubmittableValue() {
38
+ return this.getSubmittableValueSync();
39
+ },
40
+ getSubmittableValueSync() {
41
+ return this.getLocalValue();
42
+ },
43
+ getSummary() {
44
+ return summariser(this.getLocalValue());
45
+ },
46
+ getLocalValue() {
47
+ return this.value;
48
+ }, validate: () => true }, rest);
49
+ return booleanComponent;
50
+ };
@@ -0,0 +1,3 @@
1
+ export const createBoxComponent = (boxProps) => (Object.assign(Object.assign({}, boxProps), { type: 'box', kind: 'layout', getChildren() {
2
+ return this.components;
3
+ } }));
@@ -0,0 +1 @@
1
+ export const createButtonComponent = (buttonProps) => (Object.assign({ type: 'button', kind: 'layout' }, buttonProps));
@@ -0,0 +1,3 @@
1
+ export const createColumnsComponent = (columnsProps) => (Object.assign(Object.assign({}, columnsProps), { type: 'columns', kind: 'layout', getChildren() {
2
+ return [...this.startComponents, ...this.endComponents];
3
+ } }));
@@ -0,0 +1,18 @@
1
+ export const createConstComponent = (hiddenProps) => {
2
+ const { uid, schemaId, analyticsId, value, summary, layout, hidden, tags } = hiddenProps;
3
+ return {
4
+ type: 'const',
5
+ kind: 'input',
6
+ uid,
7
+ schemaId,
8
+ analyticsId,
9
+ layout,
10
+ hidden,
11
+ tags,
12
+ getLocalValue: () => value,
13
+ getSubmittableValue: async () => value,
14
+ getSubmittableValueSync: () => value,
15
+ getSummary: () => summary,
16
+ validate: () => true,
17
+ };
18
+ };
@@ -0,0 +1,3 @@
1
+ export const createContainerComponent = (containerProps) => (Object.assign(Object.assign({}, containerProps), { type: 'container', kind: 'layout', getChildren() {
2
+ return this.components;
3
+ } }));
@@ -0,0 +1,75 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { isValidDate } from '../../utils/type-validators';
13
+ import { getLocalValueValidator } from '../features/validation/validation-functions';
14
+ import { getComponentValidationAsync } from '../features/validationAsync/getComponentValidationAsync';
15
+ import { getInputUpdateFunction } from './utils/component-utils';
16
+ import { isOrWasValid } from './utils/isOrWasValid';
17
+ export const createDateInputComponent = (textInputProps, onComponentUpdate) => {
18
+ const { uid, id, checks, schemaOnChange, performValidationAsync, onValueChange, onPersistAsync, summariser, value } = textInputProps, rest = __rest(textInputProps, ["uid", "id", "checks", "schemaOnChange", "performValidationAsync", "onValueChange", "onPersistAsync", "summariser", "value"]);
19
+ const update = getInputUpdateFunction(onComponentUpdate);
20
+ const getValidationErrors = getLocalValueValidator(checks);
21
+ const validateAsync = performValidationAsync
22
+ ? getComponentValidationAsync(update, performValidationAsync)
23
+ : undefined;
24
+ const dateInputComponent = Object.assign({ type: 'date', kind: 'input', uid,
25
+ id,
26
+ value,
27
+ _update(updateFn) {
28
+ update(this, updateFn);
29
+ },
30
+ onBlur() {
31
+ const isValid = this.validate();
32
+ if (isValid) {
33
+ validateAsync === null || validateAsync === void 0 ? void 0 : validateAsync(this, this.getLocalValue()).catch(() => { }); // Noop
34
+ }
35
+ },
36
+ onFocus() { }, // Noop
37
+ onChange(updatedValue) {
38
+ const prevValue = this.value;
39
+ this._update((draft) => {
40
+ draft.errors = [];
41
+ draft.validationAsyncState.messages = {};
42
+ draft.value = updatedValue;
43
+ });
44
+ if (isOrWasValid(getValidationErrors, prevValue, updatedValue)) {
45
+ void (schemaOnChange === null || schemaOnChange === void 0 ? void 0 : schemaOnChange());
46
+ }
47
+ onValueChange();
48
+ if (getValidationErrors(updatedValue).length === 0) {
49
+ void (onPersistAsync === null || onPersistAsync === void 0 ? void 0 : onPersistAsync().catch(() => { }));
50
+ }
51
+ },
52
+ async getSubmittableValue() {
53
+ return this.getSubmittableValueSync();
54
+ },
55
+ getSubmittableValueSync() {
56
+ if (isValidDate(this.getLocalValue())) {
57
+ return this.getLocalValue();
58
+ }
59
+ return null;
60
+ },
61
+ getSummary() {
62
+ return summariser(this.getLocalValue());
63
+ },
64
+ getLocalValue() {
65
+ return this.value;
66
+ },
67
+ validate() {
68
+ const errors = getValidationErrors(this.getLocalValue());
69
+ this._update((draft) => {
70
+ draft.errors = errors;
71
+ });
72
+ return errors.length === 0;
73
+ } }, rest);
74
+ return dateInputComponent;
75
+ };
@@ -0,0 +1 @@
1
+ export const createDecisionComponent = (decisionProps) => (Object.assign({ type: 'decision', kind: 'layout' }, decisionProps));
@@ -0,0 +1 @@
1
+ export const createDividerComponent = (props) => (Object.assign({ type: 'divider', kind: 'layout' }, props));
@@ -0,0 +1,3 @@
1
+ export const createFormComponent = (formProps) => (Object.assign(Object.assign({}, formProps), { type: 'form', kind: 'layout', getChildren() {
2
+ return [this.schemaComponent];
3
+ } }));
@@ -0,0 +1,44 @@
1
+ import { getInputUpdateFunction } from './utils/component-utils';
2
+ export const createFormattedValueComponent = (props, onComponentUpdate) => {
3
+ const { uid, schemaId, analyticsId, alert, control, description, errors, format, help, hidden, media, summariser, title, tags, value, schemaOnChange, } = props;
4
+ const update = getInputUpdateFunction(onComponentUpdate);
5
+ return {
6
+ type: 'formatted-value',
7
+ kind: 'input',
8
+ uid,
9
+ schemaId,
10
+ analyticsId,
11
+ alert,
12
+ control,
13
+ description,
14
+ errors,
15
+ format,
16
+ help,
17
+ hidden,
18
+ media,
19
+ title,
20
+ tags,
21
+ value,
22
+ async getSubmittableValue() {
23
+ return this.getSubmittableValueSync();
24
+ },
25
+ getSubmittableValueSync() {
26
+ return this.getLocalValue();
27
+ },
28
+ getSummary() {
29
+ return summariser(this.getLocalValue());
30
+ },
31
+ getLocalValue() {
32
+ return this.value;
33
+ },
34
+ validate() {
35
+ return true;
36
+ },
37
+ onChange(newValue) {
38
+ update(this, (draft) => {
39
+ draft.value = newValue;
40
+ });
41
+ void (schemaOnChange === null || schemaOnChange === void 0 ? void 0 : schemaOnChange());
42
+ },
43
+ };
44
+ };
@@ -0,0 +1 @@
1
+ export const createHeadingComponent = (headingProps) => (Object.assign({ type: 'heading', kind: 'layout' }, headingProps));
@@ -0,0 +1 @@
1
+ export const createImageComponent = (imageProps) => (Object.assign({ type: 'image', kind: 'layout' }, imageProps));
@@ -0,0 +1 @@
1
+ export const createInstructionsComponent = (instructionsProps) => (Object.assign({ type: 'instructions', kind: 'layout' }, instructionsProps));
@@ -0,0 +1,74 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { getDebouncedSchemaOnChange } from '../features/schema-on-change/getDebouncedSchemaOnChange';
13
+ import { getLocalValueValidator } from '../features/validation/validation-functions';
14
+ import { getDebouncedComponentValidationAsync } from '../features/validationAsync/getComponentValidationAsync';
15
+ import { getInputUpdateFunction } from './utils/component-utils';
16
+ export const createIntegerInputComponent = (integerInputProps, onComponentUpdate) => {
17
+ const { uid, id, checks, value, schemaOnChange, performValidationAsync, onValueChange, onPersistAsync, summariser } = integerInputProps, rest = __rest(integerInputProps, ["uid", "id", "checks", "value", "schemaOnChange", "performValidationAsync", "onValueChange", "onPersistAsync", "summariser"]);
18
+ const update = getInputUpdateFunction(onComponentUpdate);
19
+ const getValidationErrors = getLocalValueValidator(checks);
20
+ const performOnChange = getDebouncedSchemaOnChange(schemaOnChange, getValidationErrors);
21
+ const validateAsync = performValidationAsync
22
+ ? getDebouncedComponentValidationAsync(update, performValidationAsync)
23
+ : undefined;
24
+ const integerComponent = Object.assign({ type: 'integer', kind: 'input', uid,
25
+ id,
26
+ value,
27
+ _update(updateFn) {
28
+ update(this, updateFn);
29
+ },
30
+ onBlur() {
31
+ const isValid = this.validate();
32
+ performOnChange === null || performOnChange === void 0 ? void 0 : performOnChange.flush();
33
+ if (isValid) {
34
+ void (onPersistAsync === null || onPersistAsync === void 0 ? void 0 : onPersistAsync().catch(() => { }));
35
+ validateAsync === null || validateAsync === void 0 ? void 0 : validateAsync.flush();
36
+ }
37
+ },
38
+ onFocus() { }, // Noop
39
+ onChange(updatedValue) {
40
+ const prevValue = this.value;
41
+ this._update((draft) => {
42
+ draft.errors = [];
43
+ draft.validationAsyncState.messages = {};
44
+ draft.value = updatedValue;
45
+ });
46
+ performOnChange === null || performOnChange === void 0 ? void 0 : performOnChange(prevValue, updatedValue);
47
+ const isValid = getValidationErrors(updatedValue).length === 0;
48
+ if (isValid) {
49
+ validateAsync === null || validateAsync === void 0 ? void 0 : validateAsync(this, updatedValue);
50
+ }
51
+ onValueChange();
52
+ },
53
+ async getSubmittableValue() {
54
+ return this.getSubmittableValueSync();
55
+ },
56
+ getSubmittableValueSync() {
57
+ var _a;
58
+ return (_a = this.getLocalValue()) !== null && _a !== void 0 ? _a : null;
59
+ },
60
+ getSummary() {
61
+ return summariser(this.getLocalValue());
62
+ },
63
+ getLocalValue() {
64
+ return this.value;
65
+ },
66
+ validate() {
67
+ const errors = getValidationErrors(this.getLocalValue());
68
+ this._update((draft) => {
69
+ draft.errors = errors;
70
+ });
71
+ return errors.length === 0;
72
+ } }, rest);
73
+ return integerComponent;
74
+ };
@@ -0,0 +1 @@
1
+ export const createListComponent = (listProps) => (Object.assign({ type: 'list', kind: 'layout' }, listProps));
@@ -0,0 +1 @@
1
+ export const createLoadingIndicatorComponent = (loadingIndicatorProps) => (Object.assign({ type: 'loading-indicator', kind: 'layout' }, loadingIndicatorProps));
@@ -0,0 +1 @@
1
+ export const createMarkdownComponent = (markdownProps) => (Object.assign({ type: 'markdown', kind: 'layout' }, markdownProps));
@@ -0,0 +1 @@
1
+ export const createMediaComponent = (props) => (Object.assign({ type: 'media', kind: 'layout' }, props));
@@ -0,0 +1,16 @@
1
+ import { getInputUpdateFunction } from './utils/component-utils';
2
+ export const createModalContentComponent = (modalProps, onComponentUpdate) => {
3
+ const update = getInputUpdateFunction(onComponentUpdate);
4
+ const modalContentComponent = Object.assign(Object.assign({ type: 'modal', kind: 'layout', open: true }, modalProps), { _update(updateFn) {
5
+ update(this, updateFn);
6
+ },
7
+ getChildren() {
8
+ return this.components;
9
+ },
10
+ close() {
11
+ update(this, (draft) => {
12
+ draft.open = false;
13
+ });
14
+ } });
15
+ return modalContentComponent;
16
+ };
@@ -0,0 +1,3 @@
1
+ export const createModalComponent = (modalProps) => (Object.assign(Object.assign({ type: 'modal-layout', kind: 'layout' }, modalProps), { getChildren() {
2
+ return this.content.components;
3
+ } }));
@@ -0,0 +1,57 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { getLocalValueValidator } from '../features/validation/validation-functions';
13
+ import { getInputUpdateFunction } from './utils/component-utils';
14
+ export const createMoneyInputComponent = (moneyInputProps, onComponentUpdate) => {
15
+ const { id, uid, schemaId, analyticsId, amountKey, amountComponent, currencyKey, currencyComponent, control, description, help, hidden, media, summariser, title, tags, extraValues, checks } = moneyInputProps, rest = __rest(moneyInputProps, ["id", "uid", "schemaId", "analyticsId", "amountKey", "amountComponent", "currencyKey", "currencyComponent", "control", "description", "help", "hidden", "media", "summariser", "title", "tags", "extraValues", "checks"]);
16
+ const getValidationErrors = getLocalValueValidator(checks);
17
+ const update = getInputUpdateFunction(onComponentUpdate);
18
+ const moneyComponent = Object.assign({ type: 'money-input', kind: 'input', id,
19
+ uid,
20
+ schemaId,
21
+ analyticsId, autoComplete: 'off', control,
22
+ description,
23
+ help,
24
+ hidden,
25
+ media,
26
+ title,
27
+ tags, value: {
28
+ [amountKey]: amountComponent.getLocalValue(),
29
+ [currencyKey]: currencyComponent.getLocalValue(),
30
+ }, _update(updateFn) {
31
+ update(this, updateFn);
32
+ }, components: {
33
+ amount: amountComponent,
34
+ currency: currencyComponent,
35
+ }, async getSubmittableValue() {
36
+ return Object.assign({ [amountKey]: await amountComponent.getSubmittableValue(), [currencyKey]: await currencyComponent.getSubmittableValue() }, extraValues);
37
+ },
38
+ getSubmittableValueSync() {
39
+ return Object.assign({ [amountKey]: amountComponent.getSubmittableValueSync(), [currencyKey]: currencyComponent.getSubmittableValueSync() }, extraValues);
40
+ },
41
+ getLocalValue() {
42
+ return Object.assign({ [amountKey]: amountComponent.getLocalValue(), [currencyKey]: currencyComponent.getLocalValue() }, extraValues);
43
+ },
44
+ getSummary() {
45
+ return summariser(this.getLocalValue());
46
+ },
47
+ validate() {
48
+ const errors = getValidationErrors(amountComponent.getLocalValue());
49
+ this._update((draft) => {
50
+ draft.errors = errors;
51
+ });
52
+ return amountComponent.validate() && currencyComponent.validate() && errors.length === 0;
53
+ },
54
+ onBlur() { }, // noop
55
+ onFocus() { } }, rest);
56
+ return moneyComponent;
57
+ };