@wise/dynamic-flow-client 3.16.1 → 3.16.3-experimental-c0e84f1

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 (544) hide show
  1. package/build/common/cameraCapture/CameraCapture.js +161 -0
  2. package/build/common/cameraCapture/CameraCapture.messages.js +58 -0
  3. package/build/common/cameraCapture/CameraCapture.spec.js +460 -0
  4. package/build/common/cameraCapture/components/bottomBar/BottomBar.js +17 -0
  5. package/build/common/cameraCapture/components/index.js +3 -0
  6. package/build/common/cameraCapture/components/orientationLockOverlay/OrientationLockOverlay.js +8 -0
  7. package/build/common/cameraCapture/components/orientationLockOverlay/OrientationLockOverlay.messages.js +8 -0
  8. package/build/common/cameraCapture/hooks/useFullScreenOrientationLock.js +62 -0
  9. package/build/common/cameraCapture/hooks/useVideoConstraints.js +80 -0
  10. package/build/common/cameraCapture/index.js +1 -0
  11. package/build/common/cameraCapture/overlay/Overlay.js +78 -0
  12. package/build/common/cameraCapture/screens/cameraErrorScreen/CameraErrorScreen.js +7 -0
  13. package/build/common/cameraCapture/screens/index.js +1 -0
  14. package/build/common/cameraCapture/tracking/index.js +109 -0
  15. package/build/common/cameraCapture/types/index.js +7 -0
  16. package/build/common/cameraCapture/utils/index.js +107 -0
  17. package/build/common/cameraCapture/utils/mobile-utils.js +23 -0
  18. package/build/common/cameraCapture/utils/mobile-utils.spec.js +71 -0
  19. package/build/common/errorBoundary/ErrorBoundary.js +44 -0
  20. package/build/common/errorBoundary/ErrorBoundaryAlert.js +12 -0
  21. package/build/common/httpClientContext/HttpClientContext.js +24 -0
  22. package/build/common/httpClientContext/index.js +1 -0
  23. package/build/common/makeHttpClient/index.js +1 -0
  24. package/build/common/makeHttpClient/makeHttpClient.js +30 -0
  25. package/build/common/makeHttpClient/makeHttpClient.spec.js +140 -0
  26. package/build/common/messages/external-confirmation.messages.js +23 -0
  27. package/build/common/messages/generic-error.messages.js +18 -0
  28. package/build/common/messages/help.messages.js +8 -0
  29. package/build/common/messages/multi-file-upload.messages.js +18 -0
  30. package/build/common/messages/multi-select.messages.js +8 -0
  31. package/build/common/messages/paragraph.messages.js +13 -0
  32. package/build/common/messages/repeatable.messages.js +23 -0
  33. package/build/common/messages/validation.array.messages.js +13 -0
  34. package/build/common/messages/validation.messages.js +53 -0
  35. package/build/common/utils/api-utils.js +4 -0
  36. package/build/common/utils/debounce.js +44 -0
  37. package/build/common/utils/debounce.spec.js +72 -0
  38. package/build/i18n/index.js +36 -0
  39. package/build/index.js +13 -0
  40. package/build/legacy/common/constants/DateMode.js +4 -0
  41. package/build/legacy/common/constants/FeatureName.js +4 -0
  42. package/build/legacy/common/constants/FormControlType.js +21 -0
  43. package/build/legacy/common/constants/MonthFormat.js +4 -0
  44. package/build/legacy/common/constants/Size.js +7 -0
  45. package/build/legacy/common/constants/index.js +4 -0
  46. package/build/legacy/common/contexts/dynamicFlowContexts/DynamicFlowContexts.js +25 -0
  47. package/build/legacy/common/contexts/dynamicFlowContexts/usePendingPromiseCounter.js +15 -0
  48. package/build/legacy/common/contexts/dynamicFlowContexts/usePendingPromiseCounter.spec.js +113 -0
  49. package/build/legacy/common/contexts/eventsContext/EventsContext.js +38 -0
  50. package/build/legacy/common/contexts/eventsContext/EventsContext.spec.js +47 -0
  51. package/build/legacy/common/contexts/featureContext/FeatureContext.js +11 -0
  52. package/build/legacy/common/contexts/featureContext/FeatureContext.spec.js +30 -0
  53. package/build/legacy/common/contexts/index.js +3 -0
  54. package/build/legacy/common/contexts/logContext/LogContext.js +44 -0
  55. package/build/legacy/common/contexts/logContext/LogContext.spec.js +43 -0
  56. package/build/legacy/common/hooks/index.js +7 -0
  57. package/build/legacy/common/hooks/useDebouncedFunction/useDebouncedFunction.js +9 -0
  58. package/build/legacy/common/hooks/useDebouncedFunction/useDebouncedFunction.spec.js +59 -0
  59. package/build/legacy/common/hooks/useExternal/useExternal.js +15 -0
  60. package/build/legacy/common/hooks/useExternal/useExternal.spec.js +236 -0
  61. package/build/legacy/common/hooks/useExternalStepPolling/useExternalStepPolling.js +71 -0
  62. package/build/legacy/common/hooks/usePersistAsync/usePersistAsync.js +172 -0
  63. package/build/legacy/common/hooks/usePersistAsync/usePersistAsync.spec.js +221 -0
  64. package/build/legacy/common/hooks/usePolling/usePolling.js +53 -0
  65. package/build/legacy/common/hooks/usePolling/usePolling.spec.js +243 -0
  66. package/build/legacy/common/hooks/usePrevious/usePrevious.js +8 -0
  67. package/build/legacy/common/hooks/usePrevious/usePrevious.spec.js +66 -0
  68. package/build/legacy/common/hooks/useStepPolling/useStepPolling.js +45 -0
  69. package/build/legacy/common/hooks/useStepPolling/useStepPolling.spec.js +288 -0
  70. package/build/legacy/common/messages.js +8 -0
  71. package/build/legacy/common/utils/api-utils.js +6 -0
  72. package/build/legacy/common/utils/date-utils.js +22 -0
  73. package/build/legacy/common/utils/file-utils.js +45 -0
  74. package/build/legacy/common/utils/file-utils.spec.js +69 -0
  75. package/build/legacy/common/utils/id-utils.js +5 -0
  76. package/build/legacy/common/utils/id-utils.spec.js +12 -0
  77. package/build/legacy/common/utils/index.js +11 -0
  78. package/build/legacy/common/utils/is-equal.js +21 -0
  79. package/build/legacy/common/utils/is-equal.spec.js +88 -0
  80. package/build/legacy/common/utils/misc-utils.js +4 -0
  81. package/build/legacy/common/utils/model-utils.js +33 -0
  82. package/build/legacy/common/utils/schema-utils.js +113 -0
  83. package/build/legacy/common/utils/step-utils.js +32 -0
  84. package/build/legacy/common/validators/index.js +5 -0
  85. package/build/legacy/common/validators/models/model-utils.js +119 -0
  86. package/build/legacy/common/validators/models/model-utils.spec.js +45 -0
  87. package/build/legacy/common/validators/models/model-validators.js +62 -0
  88. package/build/legacy/common/validators/models/model-validators.spec.js +647 -0
  89. package/build/legacy/common/validators/schemas/schema-validators.js +101 -0
  90. package/build/legacy/common/validators/schemas/schema-validators.spec.js +157 -0
  91. package/build/legacy/common/validators/types/type-validators.js +14 -0
  92. package/build/legacy/common/validators/types/type-validators.spec.js +147 -0
  93. package/build/legacy/common/validators/validationFailures/validation-failures.js +139 -0
  94. package/build/legacy/common/validators/validationFailures/validation-failures.spec.js +198 -0
  95. package/build/legacy/common/validators/validationFailures/validation-failures.utils.js +40 -0
  96. package/build/legacy/common/validators/validationFailures/validation-failures.utils.spec.js +145 -0
  97. package/build/legacy/common/validators/values/value-validators.js +6 -0
  98. package/build/legacy/common/validators/values/value-validators.spec.js +22 -0
  99. package/build/legacy/dynamic-flow-types.js +1 -0
  100. package/build/legacy/dynamicFlow/BackButton.js +22 -0
  101. package/build/legacy/dynamicFlow/DynamicFlow.js +364 -0
  102. package/build/legacy/dynamicFlow/DynamicFlowStep.js +37 -0
  103. package/build/legacy/dynamicFlow/DynamicFlowTypes.js +1 -0
  104. package/build/legacy/dynamicFlow/index.js +1 -0
  105. package/build/legacy/dynamicFlow/stories/dev-tools/DynamicFlow.story.js +78 -0
  106. package/build/legacy/dynamicFlow/stories/dev-tools/ErrorResponses.story.js +124 -0
  107. package/build/legacy/dynamicFlow/stories/dev-tools/Examples.story.js +57 -0
  108. package/build/legacy/dynamicFlow/stories/dev-tools/Features.story.js +58 -0
  109. package/build/legacy/dynamicFlow/stories/dev-tools/JsonSchemaForm.story.js +31 -0
  110. package/build/legacy/dynamicFlow/stories/dev-tools/RefreshOnChange.story.js +194 -0
  111. package/build/legacy/dynamicFlow/stories/dev-tools/SearchFeature.story.js +263 -0
  112. package/build/legacy/dynamicFlow/stories/dev-tools/ServerTest.story.js +44 -0
  113. package/build/legacy/dynamicFlow/stories/dev-tools/Upload.story.js +212 -0
  114. package/build/legacy/dynamicFlow/stories/dev-tools/ValidationAsync.story.js +156 -0
  115. package/build/legacy/dynamicFlow/stories/examples/ObjectConst.story.js +150 -0
  116. package/build/legacy/dynamicFlow/stories/fixtureHttpClient.js +117 -0
  117. package/build/legacy/dynamicFlow/tests/Actions.spec.js +232 -0
  118. package/build/legacy/dynamicFlow/tests/AllOfSchema.spec.js +196 -0
  119. package/build/legacy/dynamicFlow/tests/AutocompleteHints.spec.js +59 -0
  120. package/build/legacy/dynamicFlow/tests/DynamicFlow.BackButton.spec.js +179 -0
  121. package/build/legacy/dynamicFlow/tests/DynamicFlow.InitialAction.spec.js +472 -0
  122. package/build/legacy/dynamicFlow/tests/DynamicFlow.InitialStep.spec.js +749 -0
  123. package/build/legacy/dynamicFlow/tests/DynamicFlow.LoaderConfig.spec.js +267 -0
  124. package/build/legacy/dynamicFlow/tests/DynamicFlow.legacy.spec.js +1202 -0
  125. package/build/legacy/dynamicFlow/tests/DynamicFlow.search.spec.js +475 -0
  126. package/build/legacy/dynamicFlow/tests/DynamicFlow.spec.js +559 -0
  127. package/build/legacy/dynamicFlow/tests/DynamicImage.spec.js +287 -0
  128. package/build/legacy/dynamicFlow/tests/DynamicInstructions.spec.js +49 -0
  129. package/build/legacy/dynamicFlow/tests/HiddenSchemas.spec.js +307 -0
  130. package/build/legacy/dynamicFlow/tests/ModalLayout.spec.js +252 -0
  131. package/build/legacy/dynamicFlow/tests/MultiSelect.spec.js +327 -0
  132. package/build/legacy/dynamicFlow/tests/MultipleFileUploadSchema.spec.js +401 -0
  133. package/build/legacy/dynamicFlow/tests/ObjectSchema.spec.js +295 -0
  134. package/build/legacy/dynamicFlow/tests/OneOfSchema.spec.js +773 -0
  135. package/build/legacy/dynamicFlow/tests/PersistAsync.blob-schema.spec.js +331 -0
  136. package/build/legacy/dynamicFlow/tests/PersistAsync.string-schema.spec.js +389 -0
  137. package/build/legacy/dynamicFlow/tests/RefreshStepOnChange.debouncing.spec.js +391 -0
  138. package/build/legacy/dynamicFlow/tests/RefreshStepOnChange.spec.js +588 -0
  139. package/build/legacy/dynamicFlow/tests/RepeatableSchema.spec.js +977 -0
  140. package/build/legacy/dynamicFlow/tests/StepModel.spec.js +119 -0
  141. package/build/legacy/dynamicFlow/tests/ValidationAsync.spec.js +484 -0
  142. package/build/legacy/dynamicFlow/tests/ssr.spec.js +47 -0
  143. package/build/legacy/dynamicFlow/utils/index.js +5 -0
  144. package/build/legacy/dynamicFlow/utils/responseParsers/response-parsers.js +185 -0
  145. package/build/legacy/dynamicFlow/utils/responseParsers/response-parsers.spec.js +463 -0
  146. package/build/legacy/dynamicFlow/utils/useDebouncedRefresh/useDebouncedRefresh.js +35 -0
  147. package/build/legacy/dynamicFlow/utils/useDynamicFlowState.js +137 -0
  148. package/build/legacy/dynamicFlow/utils/useErrorResponse.js +62 -0
  149. package/build/legacy/dynamicFlow/utils/useLoader.js +22 -0
  150. package/build/legacy/formControl/FormControl.js +270 -0
  151. package/build/legacy/formControl/FormControl.spec.js +445 -0
  152. package/build/legacy/formControl/Select.spec.js +105 -0
  153. package/build/legacy/formControl/index.js +1 -0
  154. package/build/legacy/formControl/utils/getAutocompleteString.js +80 -0
  155. package/build/legacy/formControl/utils/getAutocompleteString.spec.js +30 -0
  156. package/build/legacy/formControl/utils/index.js +2 -0
  157. package/build/legacy/formControl/utils/value-utils.js +108 -0
  158. package/build/legacy/formControl/utils/value-utils.spec.js +158 -0
  159. package/build/legacy/jsonSchemaForm/JsonSchemaForm.end-to-end.spec.js +534 -0
  160. package/build/legacy/jsonSchemaForm/JsonSchemaForm.js +24 -0
  161. package/build/legacy/jsonSchemaForm/JsonSchemaForm.spec.js +77 -0
  162. package/build/legacy/jsonSchemaForm/allOfSchema/AllOfSchema.js +50 -0
  163. package/build/legacy/jsonSchemaForm/allOfSchema/index.js +1 -0
  164. package/build/legacy/jsonSchemaForm/arrayTypeSchema/ArraySchema.js +25 -0
  165. package/build/legacy/jsonSchemaForm/arrayTypeSchema/ArrayTypeSchema.spec.js +50 -0
  166. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/ArrayListSchema.js +34 -0
  167. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/index.js +1 -0
  168. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multiSelectSchema/MultiSelectSchema.js +86 -0
  169. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/MultipleFileUploadSchema.js +141 -0
  170. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/index.js +1 -0
  171. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/utils/index.js +2 -0
  172. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/utils/upload-utils.js +79 -0
  173. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/utils/useFormattedDefaultErrorMessages.js +14 -0
  174. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/ItemSummary.js +7 -0
  175. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/RepeatableSchema.js +134 -0
  176. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/RepeatableSchemaStep.js +85 -0
  177. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/utils/summary-utils.js +135 -0
  178. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/utils/summary-utils.spec.js +909 -0
  179. package/build/legacy/jsonSchemaForm/arrayTypeSchema/index.js +1 -0
  180. package/build/legacy/jsonSchemaForm/basicTypeSchema/BasicTypeSchema.errors.spec.js +233 -0
  181. package/build/legacy/jsonSchemaForm/basicTypeSchema/BasicTypeSchema.js +101 -0
  182. package/build/legacy/jsonSchemaForm/basicTypeSchema/BasicTypeSchema.spec.js +291 -0
  183. package/build/legacy/jsonSchemaForm/basicTypeSchema/index.js +1 -0
  184. package/build/legacy/jsonSchemaForm/controlFeedback/ControlFeedback.js +89 -0
  185. package/build/legacy/jsonSchemaForm/controlFeedback/ControlFeedback.spec.js +182 -0
  186. package/build/legacy/jsonSchemaForm/controlFeedback/index.js +1 -0
  187. package/build/legacy/jsonSchemaForm/genericSchema/GenericSchema.js +85 -0
  188. package/build/legacy/jsonSchemaForm/genericSchema/GenericSchema.rtl.spec.js +55 -0
  189. package/build/legacy/jsonSchemaForm/genericSchema/GenericSchema.spec.js +334 -0
  190. package/build/legacy/jsonSchemaForm/genericSchema/index.js +1 -0
  191. package/build/legacy/jsonSchemaForm/help/Help.js +9 -0
  192. package/build/legacy/jsonSchemaForm/help/Help.spec.js +61 -0
  193. package/build/legacy/jsonSchemaForm/help/index.js +1 -0
  194. package/build/legacy/jsonSchemaForm/index.js +1 -0
  195. package/build/legacy/jsonSchemaForm/objectSchema/ObjectSchema.js +77 -0
  196. package/build/legacy/jsonSchemaForm/objectSchema/index.js +1 -0
  197. package/build/legacy/jsonSchemaForm/oneOfSchema/OneOfSchema.js +155 -0
  198. package/build/legacy/jsonSchemaForm/oneOfSchema/index.js +1 -0
  199. package/build/legacy/jsonSchemaForm/oneOfSchema/utils.js +68 -0
  200. package/build/legacy/jsonSchemaForm/persistAsyncSchema/PersistAsyncSchema.js +26 -0
  201. package/build/legacy/jsonSchemaForm/persistAsyncSchema/index.js +1 -0
  202. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBasicSchema/PersistAsyncBasicSchema.js +165 -0
  203. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBasicSchema/index.js +1 -0
  204. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/PersistAsyncBlobSchema.js +134 -0
  205. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/UploadInputAdapter.js +33 -0
  206. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/UploadInputAdapter.spec.js +243 -0
  207. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/index.js +1 -0
  208. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/PromotedOneOfSchema.js +72 -0
  209. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/PromotedOneOfSchema.spec.js +420 -0
  210. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/index.js +1 -0
  211. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promoted-one-of-utils.js +8 -0
  212. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfCheckboxControl.js +16 -0
  213. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfCheckboxControl.spec.js +125 -0
  214. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfControl.js +31 -0
  215. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfControl.spec.js +82 -0
  216. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfRadioControl.js +32 -0
  217. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfRadioControl.spec.js +130 -0
  218. package/build/legacy/jsonSchemaForm/readOnlySchema/ReadOnlySchema.js +54 -0
  219. package/build/legacy/jsonSchemaForm/readOnlySchema/ReadOnlySchema.messages.js +13 -0
  220. package/build/legacy/jsonSchemaForm/readOnlySchema/ReadOnlySchema.spec.js +117 -0
  221. package/build/legacy/jsonSchemaForm/readOnlySchema/index.js +1 -0
  222. package/build/legacy/jsonSchemaForm/schemaFormControl/SchemaFormControl.js +146 -0
  223. package/build/legacy/jsonSchemaForm/schemaFormControl/SchemaFormControl.spec.js +312 -0
  224. package/build/legacy/jsonSchemaForm/schemaFormControl/index.js +1 -0
  225. package/build/legacy/jsonSchemaForm/schemaFormControl/utils/index.js +1 -0
  226. package/build/legacy/jsonSchemaForm/schemaFormControl/utils/mapping-utils.js +107 -0
  227. package/build/legacy/jsonSchemaForm/schemaFormControl/utils/mapping-utils.spec.js +220 -0
  228. package/build/legacy/jsonSchemaForm/validationAsyncSchema/ValidationAsyncSchema.js +150 -0
  229. package/build/legacy/jsonSchemaForm/validationAsyncSchema/index.js +1 -0
  230. package/build/legacy/layout/DynamicLayout.end-to-end.spec.js +71 -0
  231. package/build/legacy/layout/DynamicLayout.js +68 -0
  232. package/build/legacy/layout/DynamicLayout.spec.js +243 -0
  233. package/build/legacy/layout/alert/DynamicAlert.js +49 -0
  234. package/build/legacy/layout/alert/DynamicAlert.spec.js +42 -0
  235. package/build/legacy/layout/box/DynamicBox.js +30 -0
  236. package/build/legacy/layout/box/DynamicBox.spec.js +56 -0
  237. package/build/legacy/layout/button/DynamicButton.js +16 -0
  238. package/build/legacy/layout/button/DynamicButton.spec.js +141 -0
  239. package/build/legacy/layout/button/utils.js +45 -0
  240. package/build/legacy/layout/button/utils.spec.js +50 -0
  241. package/build/legacy/layout/columns/DynamicColumns.js +27 -0
  242. package/build/legacy/layout/columns/DynamicColumns.spec.js +83 -0
  243. package/build/legacy/layout/decision/DynamicDecision.js +11 -0
  244. package/build/legacy/layout/decision/DynamicDecision.spec.js +146 -0
  245. package/build/legacy/layout/divider/DynamicDivider.js +9 -0
  246. package/build/legacy/layout/divider/DynamicDivider.spec.js +17 -0
  247. package/build/legacy/layout/external/DynamicExternal.js +32 -0
  248. package/build/legacy/layout/external/DynamicExternal.messages.js +8 -0
  249. package/build/legacy/layout/external/DynamicExternal.spec.js +264 -0
  250. package/build/legacy/layout/form/DynamicForm.js +22 -0
  251. package/build/legacy/layout/form/DynamicForm.spec.js +74 -0
  252. package/build/legacy/layout/heading/DynamicHeading.js +40 -0
  253. package/build/legacy/layout/heading/DynamicHeading.spec.js +14 -0
  254. package/build/legacy/layout/icon/DynamicIcon.js +17 -0
  255. package/build/legacy/layout/icon/DynamicIcon.spec.js +20 -0
  256. package/build/legacy/layout/icon/FlagIcon.js +11 -0
  257. package/build/legacy/layout/icon/NamedIcon.js +19 -0
  258. package/build/legacy/layout/image/DynamicImage.js +112 -0
  259. package/build/legacy/layout/index.js +20 -0
  260. package/build/legacy/layout/instructions/DynamicInstructions.js +19 -0
  261. package/build/legacy/layout/list/DynamicStatusList.js +37 -0
  262. package/build/legacy/layout/list/DynamicStatusList.spec.js +111 -0
  263. package/build/legacy/layout/loadingIndicator/DynamicLoadingIndicator.js +11 -0
  264. package/build/legacy/layout/loadingIndicator/DynamicLoadingIndicator.spec.js +25 -0
  265. package/build/legacy/layout/markdown/DynamicMarkdown.js +12 -0
  266. package/build/legacy/layout/markdown/DynamicMarkdown.spec.js +58 -0
  267. package/build/legacy/layout/modal/DynamicModal.js +26 -0
  268. package/build/legacy/layout/paragraph/DynamicParagraph.js +35 -0
  269. package/build/legacy/layout/paragraph/DynamicParagraph.spec.js +109 -0
  270. package/build/legacy/layout/paragraph/useSnackBarIfAvailable.js +9 -0
  271. package/build/legacy/layout/review/DynamicReview.js +59 -0
  272. package/build/legacy/layout/review/DynamicReview.spec.js +152 -0
  273. package/build/legacy/layout/search/DynamicSearch.js +83 -0
  274. package/build/legacy/layout/search/SearchInput.js +6 -0
  275. package/build/legacy/layout/search/SearchResults.js +20 -0
  276. package/build/legacy/layout/search/useSearch.js +150 -0
  277. package/build/legacy/layout/utils/getNavigationOptionMedia.js +17 -0
  278. package/build/legacy/layout/utils/index.js +32 -0
  279. package/build/legacy/step/cameraStep/CameraStep.js +124 -0
  280. package/build/legacy/step/cameraStep/index.js +1 -0
  281. package/build/legacy/step/externalConfirmationStep/ExternalConfirmationStep.js +64 -0
  282. package/build/legacy/step/externalConfirmationStep/index.js +1 -0
  283. package/build/legacy/step/index.js +3 -0
  284. package/build/legacy/step/layoutStep/LayoutStep.js +33 -0
  285. package/build/legacy/step/layoutStep/LayoutStep.spec.js +189 -0
  286. package/build/legacy/step/layoutStep/index.js +1 -0
  287. package/build/legacy/step/layoutStep/utils/index.js +2 -0
  288. package/build/legacy/step/layoutStep/utils/inline-reference-utils.js +105 -0
  289. package/build/legacy/step/layoutStep/utils/inline-reference-utils.spec.js +296 -0
  290. package/build/legacy/step/layoutStep/utils/layout-utils.js +212 -0
  291. package/build/legacy/step/layoutStep/utils/layout-utils.spec.js +558 -0
  292. package/build/legacy/test-utils/DynamicFlowProviders.js +8 -0
  293. package/build/legacy/test-utils/index.js +4 -0
  294. package/build/legacy/test-utils/legacy-utils.js +69 -0
  295. package/build/legacy/test-utils/log-utils.js +9 -0
  296. package/build/legacy/visual-tests/generated.story.js +240 -0
  297. package/build/legacy/visual-tests/layouts.story.js +132 -0
  298. package/build/legacy/visual-tests/schemas.story.js +108 -0
  299. package/build/legacy/visual-tests/step.story.js +54 -0
  300. package/build/main.js +306 -312
  301. package/build/main.min.js +1 -1
  302. package/build/main.mjs +306 -312
  303. package/build/revamp/DynamicFlowCore.js +26 -0
  304. package/build/revamp/DynamicFlowWise.js +32 -0
  305. package/build/revamp/DynamicFlowWise.spec.js +105 -0
  306. package/build/revamp/DynamicFragmentCore.js +88 -0
  307. package/build/revamp/DynamicFragmentWise.js +89 -0
  308. package/build/revamp/domain/components/AlertComponent.js +50 -0
  309. package/build/revamp/domain/components/AllOfComponent.js +72 -0
  310. package/build/revamp/domain/components/BooleanInputComponent.js +109 -0
  311. package/build/revamp/domain/components/BoxComponent.js +65 -0
  312. package/build/revamp/domain/components/ButtonComponent.js +50 -0
  313. package/build/revamp/domain/components/ColumnsComponent.js +74 -0
  314. package/build/revamp/domain/components/ConstComponent.js +50 -0
  315. package/build/revamp/domain/components/ContainerComponent.js +65 -0
  316. package/build/revamp/domain/components/DateInputComponent.js +128 -0
  317. package/build/revamp/domain/components/DecisionComponent.js +50 -0
  318. package/build/revamp/domain/components/DividerComponent.js +50 -0
  319. package/build/revamp/domain/components/FormComponent.js +65 -0
  320. package/build/revamp/domain/components/HeadingComponent.js +50 -0
  321. package/build/revamp/domain/components/ImageComponent.js +50 -0
  322. package/build/revamp/domain/components/InstructionsComponent.js +50 -0
  323. package/build/revamp/domain/components/IntegerInputComponent.js +129 -0
  324. package/build/revamp/domain/components/LoadingIndicatorComponent.js +50 -0
  325. package/build/revamp/domain/components/MarkdownComponent.js +50 -0
  326. package/build/revamp/domain/components/ModalComponent.js +65 -0
  327. package/build/revamp/domain/components/MultiSelectInputComponent.js +148 -0
  328. package/build/revamp/domain/components/MultiUploadInputComponent.js +192 -0
  329. package/build/revamp/domain/components/NumberInputComponent.js +129 -0
  330. package/build/revamp/domain/components/ObjectComponent.js +104 -0
  331. package/build/revamp/domain/components/ParagraphComponent.js +50 -0
  332. package/build/revamp/domain/components/ReviewComponent.js +50 -0
  333. package/build/revamp/domain/components/SelectInputComponent.js +140 -0
  334. package/build/revamp/domain/components/StatusListComponent.js +50 -0
  335. package/build/revamp/domain/components/StepDomainComponent.js +87 -0
  336. package/build/revamp/domain/components/TextInputComponent.js +129 -0
  337. package/build/revamp/domain/components/TupleComponent.js +73 -0
  338. package/build/revamp/domain/components/UploadInputComponent.js +154 -0
  339. package/build/revamp/domain/components/repeatableComponent/RepeatableComponent.js +150 -0
  340. package/build/revamp/domain/components/repeatableComponent/RepeatableComponent.spec.js +146 -0
  341. package/build/revamp/domain/components/searchComponent/SearchComponent.js +111 -0
  342. package/build/revamp/domain/components/searchComponent/SearchComponent.spec.js +327 -0
  343. package/build/revamp/domain/components/utils/component-utils.js +18 -0
  344. package/build/revamp/domain/components/utils/debounce.js +38 -0
  345. package/build/revamp/domain/components/utils/debounce.spec.js +72 -0
  346. package/build/revamp/domain/components/utils/file-utils.js +65 -0
  347. package/build/revamp/domain/components/utils/file-utils.spec.js +81 -0
  348. package/build/revamp/domain/components/utils/getComponentForLocalValueKey.js +31 -0
  349. package/build/revamp/domain/components/utils/isPartialLocalValueMatch.js +65 -0
  350. package/build/revamp/domain/components/utils/isPartialLocalValueMatch.spec.js +125 -0
  351. package/build/revamp/domain/components/utils/local-value.js +14 -0
  352. package/build/revamp/domain/features/events.js +1 -0
  353. package/build/revamp/domain/features/persistAsync/getComponentPersistAsync.js +134 -0
  354. package/build/revamp/domain/features/persistAsync/getComponentPersistAsync.spec.js +200 -0
  355. package/build/revamp/domain/features/persistAsync/getInitialPersistedState.js +6 -0
  356. package/build/revamp/domain/features/persistAsync/getPerformPersistAsync.js +103 -0
  357. package/build/revamp/domain/features/persistAsync/getPerformPersistAsync.spec.js +280 -0
  358. package/build/revamp/domain/features/polling/getStepPolling.js +82 -0
  359. package/build/revamp/domain/features/polling/getStepPolling.spec.js +170 -0
  360. package/build/revamp/domain/features/refresh/getPerformRefresh.js +16 -0
  361. package/build/revamp/domain/features/search/getPerformSearchFunction.js +102 -0
  362. package/build/revamp/domain/features/search/getPerformSearchFunction.spec.js +260 -0
  363. package/build/revamp/domain/features/summary/summary-utils.js +39 -0
  364. package/build/revamp/domain/features/summary/summary-utils.spec.js +110 -0
  365. package/build/revamp/domain/features/utils/http-utils.js +34 -0
  366. package/build/revamp/domain/features/utils/response-utils.js +9 -0
  367. package/build/revamp/domain/features/validation/spec-utils.js +16 -0
  368. package/build/revamp/domain/features/validation/validation-functions.js +12 -0
  369. package/build/revamp/domain/features/validation/validation-functions.spec.js +110 -0
  370. package/build/revamp/domain/features/validation/value-checks.js +111 -0
  371. package/build/revamp/domain/features/validation/value-checks.spec.js +204 -0
  372. package/build/revamp/domain/features/validationAsync/getComponentValidationAsync.js +95 -0
  373. package/build/revamp/domain/features/validationAsync/getComponentValidationAsync.spec.js +178 -0
  374. package/build/revamp/domain/features/validationAsync/getInitialValidationState.js +5 -0
  375. package/build/revamp/domain/features/validationAsync/getPerformValidationAsync.js +107 -0
  376. package/build/revamp/domain/features/validationAsync/getPerformValidationAsync.spec.js +266 -0
  377. package/build/revamp/domain/mappers/layout/alertLayoutToComponent.js +37 -0
  378. package/build/revamp/domain/mappers/layout/boxLayoutToComponents.js +15 -0
  379. package/build/revamp/domain/mappers/layout/buttonLayoutToComponent.js +45 -0
  380. package/build/revamp/domain/mappers/layout/columnsLayoutToComponent.js +18 -0
  381. package/build/revamp/domain/mappers/layout/decisionLayoutToComponent.js +41 -0
  382. package/build/revamp/domain/mappers/layout/dividerLayoutToComponent.js +5 -0
  383. package/build/revamp/domain/mappers/layout/formLayoutToComponent.js +27 -0
  384. package/build/revamp/domain/mappers/layout/headingLayoutToComponent.js +13 -0
  385. package/build/revamp/domain/mappers/layout/imageLayoutToComponent.js +12 -0
  386. package/build/revamp/domain/mappers/layout/infoLayoutToComponent.js +12 -0
  387. package/build/revamp/domain/mappers/layout/instructionsLayoutToComponent.js +18 -0
  388. package/build/revamp/domain/mappers/layout/listLayoutToComponent.js +30 -0
  389. package/build/revamp/domain/mappers/layout/loadingIndicatorLayoutToComponent.js +5 -0
  390. package/build/revamp/domain/mappers/layout/markdownLayoutToComponent.js +12 -0
  391. package/build/revamp/domain/mappers/layout/modalLayoutToComponent.js +17 -0
  392. package/build/revamp/domain/mappers/layout/paragraphLayoutToComponent.js +12 -0
  393. package/build/revamp/domain/mappers/layout/reviewLayoutToComponent.js +55 -0
  394. package/build/revamp/domain/mappers/layout/searchLayoutToComponent.js +14 -0
  395. package/build/revamp/domain/mappers/layout/statusListLayoutToComponent.js +11 -0
  396. package/build/revamp/domain/mappers/mapLayoutToComponent.js +63 -0
  397. package/build/revamp/domain/mappers/mapSchemaToComponent.js +84 -0
  398. package/build/revamp/domain/mappers/mapSchemaToComponent.spec.js +197 -0
  399. package/build/revamp/domain/mappers/mapStepToComponent.js +146 -0
  400. package/build/revamp/domain/mappers/mapStepToComponent.spec.js +162 -0
  401. package/build/revamp/domain/mappers/mapUnreferencedSchemas.js +44 -0
  402. package/build/revamp/domain/mappers/schema/allOfSchemaToComponent.js +29 -0
  403. package/build/revamp/domain/mappers/schema/arraySchemaToComponent/arraySchemaToComponent.js +43 -0
  404. package/build/revamp/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiSelectComponent.js +54 -0
  405. package/build/revamp/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiUploadComponent.js +64 -0
  406. package/build/revamp/domain/mappers/schema/arraySchemaToComponent/arraySchemaToRepeatableComponent.js +66 -0
  407. package/build/revamp/domain/mappers/schema/arraySchemaToComponent/arraySchemaToTupleComponent.js +31 -0
  408. package/build/revamp/domain/mappers/schema/blobSchemaToComponent.js +30 -0
  409. package/build/revamp/domain/mappers/schema/booleanSchemaToComponent.js +38 -0
  410. package/build/revamp/domain/mappers/schema/constSchemaToComponent.js +14 -0
  411. package/build/revamp/domain/mappers/schema/integerSchemaToComponent.js +36 -0
  412. package/build/revamp/domain/mappers/schema/numberSchemaToComponent.js +35 -0
  413. package/build/revamp/domain/mappers/schema/objectSchemaToComponent/objectSchemaToComponent.js +60 -0
  414. package/build/revamp/domain/mappers/schema/objectSchemaToComponent/objectSchemaToComponent.spec.js +165 -0
  415. package/build/revamp/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.js +67 -0
  416. package/build/revamp/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.spec.js +316 -0
  417. package/build/revamp/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.js +14 -0
  418. package/build/revamp/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.spec.js +220 -0
  419. package/build/revamp/domain/mappers/schema/stringSchemaToComponent/stringSchemaToDateInputComponent.js +37 -0
  420. package/build/revamp/domain/mappers/schema/stringSchemaToComponent/stringSchemaToTextInputComponent.js +45 -0
  421. package/build/revamp/domain/mappers/schema/stringSchemaToComponent/stringSchemaToUploadInputComponent.js +37 -0
  422. package/build/revamp/domain/mappers/schema/tests/test-utils.js +27 -0
  423. package/build/revamp/domain/mappers/schema/types.js +1 -0
  424. package/build/revamp/domain/mappers/schema/utils/getPersistAsyncInitialState.js +35 -0
  425. package/build/revamp/domain/mappers/schema/utils/getValidationAsyncInitialState.js +25 -0
  426. package/build/revamp/domain/mappers/schema/utils/mapCommonSchemaProps.js +28 -0
  427. package/build/revamp/domain/mappers/types.js +1 -0
  428. package/build/revamp/domain/mappers/utils/getAutocompleteString.js +76 -0
  429. package/build/revamp/domain/mappers/utils/getAutocompleteString.spec.js +21 -0
  430. package/build/revamp/domain/mappers/utils/getRandomId.js +2 -0
  431. package/build/revamp/domain/mappers/utils/inlineAction.js +23 -0
  432. package/build/revamp/domain/mappers/utils/legacy-utils.js +53 -0
  433. package/build/revamp/domain/types.js +1 -0
  434. package/build/revamp/flow/executeRefresh.js +97 -0
  435. package/build/revamp/flow/executeSubmission.js +160 -0
  436. package/build/revamp/flow/getResponseType.js +76 -0
  437. package/build/revamp/flow/response-utils.js +92 -0
  438. package/build/revamp/renderers/CoreContainerRenderer.js +8 -0
  439. package/build/revamp/renderers/getRenderFunction.js +55 -0
  440. package/build/revamp/renderers/getSchemaErrorMessageFunction.js +90 -0
  441. package/build/revamp/renderers/mappers/alertComponentToProps.js +11 -0
  442. package/build/revamp/renderers/mappers/allOfComponentToProps.js +11 -0
  443. package/build/revamp/renderers/mappers/booleanInputComponentToProps.js +16 -0
  444. package/build/revamp/renderers/mappers/boxComponentToProps.js +4 -0
  445. package/build/revamp/renderers/mappers/buttonComponentToProps.js +14 -0
  446. package/build/revamp/renderers/mappers/columnsComponentToProps.js +4 -0
  447. package/build/revamp/renderers/mappers/componentToRendererProps.js +111 -0
  448. package/build/revamp/renderers/mappers/containerComponentToProps.js +4 -0
  449. package/build/revamp/renderers/mappers/dateInputComponentToProps.js +13 -0
  450. package/build/revamp/renderers/mappers/decisionComponentToProps.js +4 -0
  451. package/build/revamp/renderers/mappers/dividerComponentToProps.js +4 -0
  452. package/build/revamp/renderers/mappers/formComponentToProps.js +4 -0
  453. package/build/revamp/renderers/mappers/headingComponentToProps.js +11 -0
  454. package/build/revamp/renderers/mappers/hiddenComponentToProps.js +3 -0
  455. package/build/revamp/renderers/mappers/imageComponentToProps.js +11 -0
  456. package/build/revamp/renderers/mappers/instructionsComponentToProps.js +10 -0
  457. package/build/revamp/renderers/mappers/integerInputComponentToProps.js +13 -0
  458. package/build/revamp/renderers/mappers/loadingIndicatorComponentToProps.js +9 -0
  459. package/build/revamp/renderers/mappers/markdownComponentToProps.js +10 -0
  460. package/build/revamp/renderers/mappers/modalComponentToProps.js +10 -0
  461. package/build/revamp/renderers/mappers/multiSelectComponentToProps.js +28 -0
  462. package/build/revamp/renderers/mappers/multiUploadInputComponentToProps.js +24 -0
  463. package/build/revamp/renderers/mappers/numberInputComponentToProps.js +13 -0
  464. package/build/revamp/renderers/mappers/objectComponentToProps.js +11 -0
  465. package/build/revamp/renderers/mappers/paragraphComponentToProps.js +10 -0
  466. package/build/revamp/renderers/mappers/repeatableComponentToProps.js +40 -0
  467. package/build/revamp/renderers/mappers/reviewComponentToProps.js +11 -0
  468. package/build/revamp/renderers/mappers/searchComponentToProps.js +53 -0
  469. package/build/revamp/renderers/mappers/selectInputComponentToProps.js +29 -0
  470. package/build/revamp/renderers/mappers/statusListComponentToProps.js +10 -0
  471. package/build/revamp/renderers/mappers/textInputComponentToProps.js +13 -0
  472. package/build/revamp/renderers/mappers/tupleComponentToProps.js +11 -0
  473. package/build/revamp/renderers/mappers/uploadInputComponentToProps.js +16 -0
  474. package/build/revamp/renderers/mappers/utils/inputComponentToProps.js +27 -0
  475. package/build/revamp/renderers/stepComponentToProps.js +16 -0
  476. package/build/revamp/stories/dev-tools/ActionResponse.story.js +101 -0
  477. package/build/revamp/stories/dev-tools/DynamicFlowRevamp.story.js +314 -0
  478. package/build/revamp/stories/dev-tools/EditableStep.story.js +71 -0
  479. package/build/revamp/stories/dev-tools/ErrorHandling.story.js +149 -0
  480. package/build/revamp/stories/dev-tools/External.story.js +83 -0
  481. package/build/revamp/stories/dev-tools/OneOf.Inititalisation.story.js +123 -0
  482. package/build/revamp/stories/dev-tools/PersistAsync.story.js +168 -0
  483. package/build/revamp/stories/dev-tools/Polling.story.js +79 -0
  484. package/build/revamp/stories/dev-tools/RefreshOnChange.story.js +309 -0
  485. package/build/revamp/stories/dev-tools/RefreshOnChange.with.PersistAsync.story.js +1004 -0
  486. package/build/revamp/stories/dev-tools/SearchFeature.story.js +263 -0
  487. package/build/revamp/stories/dev-tools/ServerTest.story.js +86 -0
  488. package/build/revamp/stories/dev-tools/Upload.story.js +221 -0
  489. package/build/revamp/stories/dev-tools/ValidationAsync.story.js +161 -0
  490. package/build/revamp/stories/examples/ObjectConst.story.js +153 -0
  491. package/build/revamp/stories/examples/OneOfInitialisation.story.js +102 -0
  492. package/build/revamp/stories/utils/fixtureHttpClient.js +130 -0
  493. package/build/revamp/stories/utils/mockSearchHandler.js +125 -0
  494. package/build/revamp/test-utils/component-utils.js +19 -0
  495. package/build/revamp/test-utils/step-utils.js +6 -0
  496. package/build/revamp/tests/ArrayTuple.spec.js +211 -0
  497. package/build/revamp/tests/ImageRenderer.spec.js +108 -0
  498. package/build/revamp/tests/InitialAction.spec.js +299 -0
  499. package/build/revamp/tests/InitialStep.spec.js +226 -0
  500. package/build/revamp/tests/Logging.spec.js +112 -0
  501. package/build/revamp/tests/OneOfInitialisation.spec.js +1096 -0
  502. package/build/revamp/tests/Polling.spec.js +611 -0
  503. package/build/revamp/tests/RefreshOnChange.ResponseHandling.spec.js +322 -0
  504. package/build/revamp/tests/RefreshOnChange.with.Segmented.spec.js +447 -0
  505. package/build/revamp/tests/RefreshOnChange.with.Tabs.spec.js +447 -0
  506. package/build/revamp/tests/RefreshOnChangePreserve.spec.js +341 -0
  507. package/build/revamp/tests/Rerendering.spec.js +156 -0
  508. package/build/revamp/tests/SegmentedControl.spec.js +48 -0
  509. package/build/revamp/tests/Submission.ResponseHandling.spec.js +697 -0
  510. package/build/revamp/tests/Submission.spec.js +590 -0
  511. package/build/revamp/tests/legacy/Actions.spec.js +242 -0
  512. package/build/revamp/tests/legacy/BackButton.spec.js +189 -0
  513. package/build/revamp/tests/legacy/HiddenSchemas.spec.js +380 -0
  514. package/build/revamp/tests/legacy/MultiSelect.spec.js +753 -0
  515. package/build/revamp/tests/legacy/MultipleFileUploadSchema.spec.js +447 -0
  516. package/build/revamp/tests/legacy/PersistAsync.blob-schema.spec.js +339 -0
  517. package/build/revamp/tests/legacy/PersistAsync.string-schema.spec.js +385 -0
  518. package/build/revamp/tests/legacy/RefreshStepOnChange.debouncing.spec.js +352 -0
  519. package/build/revamp/tests/legacy/RefreshStepOnChange.spec.js +638 -0
  520. package/build/revamp/tests/legacy/Search.spec.js +501 -0
  521. package/build/revamp/tests/legacy/ValidationAsync.spec.js +452 -0
  522. package/build/revamp/tests/legacy/useExternal.spec.js +235 -0
  523. package/build/revamp/types.js +1 -0
  524. package/build/revamp/useDynamicFlowCore.js +298 -0
  525. package/build/revamp/utils/component-utils.js +86 -0
  526. package/build/revamp/utils/component-utils.spec.js +385 -0
  527. package/build/revamp/utils/findComponent.js +29 -0
  528. package/build/revamp/utils/findComponent.spec.js +92 -0
  529. package/build/revamp/utils/type-utils.js +62 -0
  530. package/build/revamp/utils/type-validators.js +16 -0
  531. package/build/revamp/utils/type-validators.spec.js +163 -0
  532. package/build/revamp/utils/useStableCallback.js +21 -0
  533. package/build/revamp/visual-tests/generated.story.js +240 -0
  534. package/build/revamp/visual-tests/layouts.story.js +132 -0
  535. package/build/revamp/visual-tests/schemas.story.js +108 -0
  536. package/build/revamp/visual-tests/step.story.js +54 -0
  537. package/build/test-utils/NeptuneProviders.js +23 -0
  538. package/build/test-utils/fetch-utils.js +104 -0
  539. package/build/test-utils/index.js +2 -0
  540. package/build/test-utils/rtl-utils.js +20 -0
  541. package/build/types/legacy/jsonSchemaForm/schemaFormControl/SchemaFormControl.d.ts +1 -1
  542. package/build/types/revamp/DynamicFragmentCore.d.ts +4 -5
  543. package/build/types/revamp/DynamicFragmentWise.d.ts +4 -4
  544. package/package.json +3 -3
@@ -0,0 +1,1202 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import { jsx as _jsx } from "react/jsx-runtime";
49
+ import { waitFor } from '@testing-library/react';
50
+ import { Alert } from '@transferwise/components';
51
+ import { DynamicAlert } from '../../layout';
52
+ import { LayoutStep } from '../../step';
53
+ import { mount, wait } from '../../test-utils';
54
+ import DynamicFlow from '../DynamicFlow';
55
+ function mountAndWait() {
56
+ var args = [];
57
+ for (var _i = 0; _i < arguments.length; _i++) {
58
+ args[_i] = arguments[_i];
59
+ }
60
+ return __awaiter(this, void 0, void 0, function () {
61
+ var wrapper;
62
+ return __generator(this, function (_a) {
63
+ switch (_a.label) {
64
+ case 0:
65
+ wrapper = mount.apply(void 0, args);
66
+ return [4 /*yield*/, waitAndUpdate(wrapper)];
67
+ case 1:
68
+ _a.sent();
69
+ return [2 /*return*/, wrapper];
70
+ }
71
+ });
72
+ });
73
+ }
74
+ function waitAndUpdate(wrapper) {
75
+ return __awaiter(this, void 0, void 0, function () {
76
+ return __generator(this, function (_a) {
77
+ switch (_a.label) {
78
+ case 0: return [4 /*yield*/, wait(0)];
79
+ case 1:
80
+ _a.sent();
81
+ wrapper.update();
82
+ return [2 /*return*/];
83
+ }
84
+ });
85
+ });
86
+ }
87
+ describe('Given a component for rendering a dynamic flow', function () {
88
+ var mockHttpClient;
89
+ var onCompletion;
90
+ var onError;
91
+ var successAction = {
92
+ label: 'Submit',
93
+ method: 'POST',
94
+ url: '/success',
95
+ };
96
+ var failureAction = {
97
+ label: 'Submit',
98
+ method: 'POST',
99
+ url: '/failure',
100
+ };
101
+ var validationFailureAction = {
102
+ label: 'Submit',
103
+ method: 'POST',
104
+ url: '/validationFailure',
105
+ };
106
+ var navigateAction = {
107
+ label: 'Skip',
108
+ method: 'GET',
109
+ url: '/next',
110
+ };
111
+ var actions = [successAction, navigateAction, failureAction, validationFailureAction];
112
+ var numberSchema = { type: 'number' };
113
+ var stringSchema = { type: 'string' };
114
+ var numberSchemaWithRefresh = {
115
+ refreshStepOnChange: true,
116
+ oneOf: [{ const: 99 }, { const: 100 }, { const: 999 }],
117
+ };
118
+ var thingSchema = {
119
+ $id: '#thing',
120
+ type: 'object',
121
+ properties: {
122
+ a: numberSchema,
123
+ b: numberSchema,
124
+ },
125
+ required: ['a'],
126
+ displayOrder: ['a', 'b'],
127
+ };
128
+ var anotherThingSchema = {
129
+ $id: '#anotherThing',
130
+ type: 'object',
131
+ properties: {
132
+ c: numberSchema,
133
+ d: stringSchema,
134
+ },
135
+ required: [],
136
+ displayOrder: ['c', 'd'],
137
+ };
138
+ var newSchema = { $id: '#newSchema', type: 'object', properties: { newModel: numberSchema } };
139
+ var newLayout = [{ type: 'form', schema: newSchema }];
140
+ var newStep = { type: 'form', layout: newLayout, model: { newModel: 123 } };
141
+ var formStep = {
142
+ type: 'form',
143
+ id: 'create-thing', // For tracking
144
+ layout: [
145
+ {
146
+ type: 'form',
147
+ schema: thingSchema,
148
+ },
149
+ {
150
+ type: 'form',
151
+ schema: anotherThingSchema,
152
+ },
153
+ ],
154
+ actions: actions,
155
+ model: { a: 99 },
156
+ refreshUrl: '/refresh',
157
+ };
158
+ var formStepNoLayout = __assign({}, formStep);
159
+ delete formStepNoLayout.layout;
160
+ var formStepWithErrors = __assign(__assign({}, formStep), { errors: { validation: { a: 'Step validation error' }, error: 'Step global error' } });
161
+ formStepWithErrors.layout[0].schema.properties.a = __assign(__assign({}, formStepWithErrors.layout[0].schema.properties.a), { refreshStepOnChange: true, refreshUrl: '/formNoLayout', oneOf: [{ const: 1 }, { const: 99 }, { const: 100 }, { const: 999 }] });
162
+ var decisionStep = {
163
+ type: 'decision',
164
+ id: 'decide-thing-type',
165
+ title: 'Thing type',
166
+ description: 'Please choose between types of things',
167
+ options: [
168
+ {
169
+ title: 'Thing one',
170
+ description: 'The first type of thing',
171
+ url: 'https://...',
172
+ },
173
+ {
174
+ title: 'Thing two',
175
+ url: 'https://...',
176
+ enabled: false,
177
+ },
178
+ ],
179
+ };
180
+ var finalStep = {
181
+ type: 'final',
182
+ id: 'thing-final',
183
+ success: true,
184
+ details: {
185
+ image: '/images/1234.png',
186
+ title: 'We create the thing!',
187
+ description: 'You now do stuff with the thing',
188
+ actionTitle: 'Continue',
189
+ },
190
+ result: {
191
+ exitValue: 'value',
192
+ },
193
+ };
194
+ var formUrl = '/form';
195
+ var formWithErrorsUrl = '/formWithErrors';
196
+ var decisionUrl = '/decision';
197
+ var errorResponse = {
198
+ error: new Error(),
199
+ };
200
+ var validationErrorResponse = {
201
+ error: "That's not allowed",
202
+ validation: {
203
+ a: 'something wrong with this',
204
+ },
205
+ };
206
+ var exitResult = {
207
+ testKey: 'value',
208
+ anotherTestKey: 'anotherValue',
209
+ };
210
+ var generateETag = function (response) { return JSON.stringify(response).slice(0, 100); };
211
+ var resolve = function (response, init) {
212
+ if (init === void 0) { init = {}; }
213
+ return new Promise(function (promiseResolve) {
214
+ setTimeout(function () { return __awaiter(void 0, void 0, void 0, function () {
215
+ return __generator(this, function (_a) {
216
+ promiseResolve(new Response(JSON.stringify(response), __assign(__assign({}, init), { headers: __assign(__assign({}, init.headers), { etag: generateETag(response) }) })));
217
+ return [2 /*return*/];
218
+ });
219
+ }); }, 0);
220
+ });
221
+ };
222
+ var resolveWithExitHeader = function (response) {
223
+ return resolve(response, { headers: { 'X-DF-Exit': true } });
224
+ };
225
+ var mockRequest = function (url) {
226
+ switch (url) {
227
+ case '/form':
228
+ return resolve(formStep);
229
+ case '/formNoLayout':
230
+ return resolve(formStepNoLayout);
231
+ case '/formWithErrors':
232
+ return resolve(formStepWithErrors);
233
+ case '/decision':
234
+ return resolve(decisionStep);
235
+ case '/final':
236
+ return resolve(finalStep);
237
+ case '/exit':
238
+ return resolve({});
239
+ case '/exitWithResult':
240
+ return resolve(exitResult);
241
+ case '/exitWithHeader':
242
+ return resolveWithExitHeader(exitResult);
243
+ case '/navigate':
244
+ return resolve(newStep);
245
+ case '/success':
246
+ return resolve(newStep);
247
+ case '/refreshWithSameFormStep':
248
+ return resolve(null, { status: 304, etag: generateETag(formStep) });
249
+ case '/refresh':
250
+ case '/refreshFromTrigger':
251
+ return resolve(newStep);
252
+ case '/failure':
253
+ return resolve(errorResponse);
254
+ case '/failedStep':
255
+ return resolve({ arbitraryKey: 'Not Authorized' }, { status: 401 });
256
+ case '/failedStepNoJson':
257
+ return resolve('some error string', { status: 500 });
258
+ case '/validationFailure':
259
+ return resolve(validationErrorResponse, { status: 422 });
260
+ case '/submitWithRefreshUrl':
261
+ return resolve({ refreshUrl: '/refresh-form-url' }, { status: 422 });
262
+ case '/skip':
263
+ return resolve({ skip: true });
264
+ default:
265
+ return resolve(validationErrorResponse);
266
+ }
267
+ };
268
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
269
+ return __generator(this, function (_a) {
270
+ mockHttpClient = jest.fn().mockImplementation(mockRequest);
271
+ onCompletion = jest.fn();
272
+ onError = jest.fn();
273
+ return [2 /*return*/];
274
+ });
275
+ }); });
276
+ describe('when instantiated', function () {
277
+ beforeEach(function () {
278
+ mount(_jsx(DynamicFlow, { httpClient: mockHttpClient, initialAction: { url: decisionUrl }, onCompletion: onCompletion }));
279
+ });
280
+ it('should load the step specification using the supplied URL', function () {
281
+ expect(mockHttpClient).toHaveBeenCalledWith(decisionUrl, expect.objectContaining({ method: 'GET' }));
282
+ });
283
+ });
284
+ describe('when there is JS step', function () {
285
+ it.todo('should use the DynamicJS component');
286
+ });
287
+ describe('when there is an error fetching a step', function () {
288
+ describe('and the response is valid JSON', function () {
289
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
290
+ return __generator(this, function (_a) {
291
+ switch (_a.label) {
292
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: '/failedStep' }, httpClient: mockHttpClient, onError: onError }))];
293
+ case 1:
294
+ _a.sent();
295
+ return [2 /*return*/];
296
+ }
297
+ });
298
+ }); });
299
+ it('should trigger onError callback with the status code (because it is the initial request)', function () {
300
+ expect(onError).toHaveBeenCalledWith(expect.objectContaining({ arbitraryKey: 'Not Authorized' }), 401);
301
+ });
302
+ });
303
+ describe('but the response is not JSON', function () {
304
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
305
+ return __generator(this, function (_a) {
306
+ switch (_a.label) {
307
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: '/failedStepNoJson' }, httpClient: mockHttpClient, onError: onError }))];
308
+ case 1:
309
+ _a.sent();
310
+ return [2 /*return*/];
311
+ }
312
+ });
313
+ }); });
314
+ it('should still trigger onError callback with the status code (because it is the initial request)', function () {
315
+ expect(onError).toHaveBeenCalledWith(expect.anything(), 500);
316
+ });
317
+ });
318
+ });
319
+ describe('when there is a form step with errors', function () {
320
+ var component;
321
+ var getStep = function () { return component.find(LayoutStep); };
322
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
323
+ return __generator(this, function (_a) {
324
+ switch (_a.label) {
325
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formWithErrorsUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
326
+ case 1:
327
+ component = _a.sent();
328
+ return [2 /*return*/];
329
+ }
330
+ });
331
+ }); });
332
+ it('should pass the validation errors to the LayoutStep component', function () { return __awaiter(void 0, void 0, void 0, function () {
333
+ return __generator(this, function (_a) {
334
+ expect(getStep().props().formErrors).toMatchObject({
335
+ a: 'Step validation error',
336
+ });
337
+ return [2 /*return*/];
338
+ });
339
+ }); });
340
+ it('should pass the global errors to the LayoutStep component', function () { return __awaiter(void 0, void 0, void 0, function () {
341
+ return __generator(this, function (_a) {
342
+ expect(component.find(DynamicAlert).props().component.markdown).toBe('Step global error');
343
+ return [2 /*return*/];
344
+ });
345
+ }); });
346
+ it('should clear the validation errors when refreshing to a step without errors', function () { return __awaiter(void 0, void 0, void 0, function () {
347
+ return __generator(this, function (_a) {
348
+ switch (_a.label) {
349
+ case 0:
350
+ getStep().invoke('onModelChange')({
351
+ model: { a: 100 },
352
+ formSchema: formStepWithErrors.layout[0].schema,
353
+ triggerModel: 100,
354
+ triggerSchema: formStepWithErrors.layout[0].schema.properties.a,
355
+ lastTriggerModel: 99,
356
+ });
357
+ return [4 /*yield*/, waitAndUpdate(component)];
358
+ case 1:
359
+ _a.sent();
360
+ expect(getStep().props().formErrors).toBeNull();
361
+ return [2 /*return*/];
362
+ }
363
+ });
364
+ }); });
365
+ });
366
+ describe('when there is a step layout', function () {
367
+ describe('initialisation', function () {
368
+ var component;
369
+ var getStep = function () { return component.find(LayoutStep); };
370
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
371
+ return __generator(this, function (_a) {
372
+ switch (_a.label) {
373
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
374
+ case 1:
375
+ component = _a.sent();
376
+ return [2 /*return*/];
377
+ }
378
+ });
379
+ }); });
380
+ it('should use the LayoutStep to render it', function () {
381
+ expect(getStep()).toBeTruthy();
382
+ });
383
+ it('should inline the form schema(s) and pass as the specification as a layout', function () {
384
+ expect(getStep().prop('stepSpecification')).toStrictEqual(formStep);
385
+ });
386
+ it('should pass the layout the step model', function () {
387
+ expect(getStep().prop('model')).toStrictEqual(formStep.model);
388
+ });
389
+ });
390
+ describe('when a model update is triggered by multiple schemas', function () {
391
+ var newModel1 = { b: 'c' };
392
+ var newModel2 = { c: 2 };
393
+ var expectedModel = { b: 'c', c: 2 };
394
+ it('should pass the expected model to the layout', function () { return __awaiter(void 0, void 0, void 0, function () {
395
+ var component, getStep;
396
+ return __generator(this, function (_a) {
397
+ switch (_a.label) {
398
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
399
+ case 1:
400
+ component = _a.sent();
401
+ getStep = function () { return component.find(LayoutStep); };
402
+ getStep().invoke('onModelChange')({
403
+ model: newModel1,
404
+ formSchema: thingSchema,
405
+ triggerModel: newModel1.b,
406
+ triggerSchema: stringSchema,
407
+ });
408
+ getStep().invoke('onModelChange')({
409
+ model: newModel2,
410
+ formSchema: anotherThingSchema,
411
+ triggerModel: newModel2.c,
412
+ triggerSchema: numberSchema,
413
+ });
414
+ return [4 /*yield*/, waitAndUpdate(component)];
415
+ case 2:
416
+ _a.sent();
417
+ expect(getStep().prop('model')).toStrictEqual(expectedModel);
418
+ return [2 /*return*/];
419
+ }
420
+ });
421
+ }); });
422
+ });
423
+ describe('when a model update is triggered by a schema with refreshStepOnChange, it should only refresh if the changed model is valid or was valid before', function () {
424
+ var triggerSchema = {
425
+ type: 'number',
426
+ refreshStepOnChange: true,
427
+ oneOf: [{ const: 99 }, { const: 100 }, { const: 199 }],
428
+ };
429
+ var cases = [
430
+ {
431
+ title: 'should refresh when new value is valid and prev value was valid',
432
+ newValue: 100,
433
+ preValue: 99,
434
+ expected: 1,
435
+ },
436
+ {
437
+ title: 'should refresh when new value is NOT valid and prev value was valid',
438
+ newValue: 'invalid',
439
+ preValue: 99,
440
+ expected: 1,
441
+ },
442
+ {
443
+ title: 'should refresh when new value is valid and prev value was NOT valid',
444
+ newValue: 199,
445
+ preValue: 'invalid',
446
+ expected: 1,
447
+ },
448
+ {
449
+ title: 'should NOT refresh when new value is NOT valid and prev value was NOT valid',
450
+ newValue: 'more invalid',
451
+ preValue: 'invalid',
452
+ expected: 0,
453
+ },
454
+ ];
455
+ cases.forEach(function (_a) {
456
+ var title = _a.title, newValue = _a.newValue, preValue = _a.preValue, expected = _a.expected;
457
+ it("".concat(title), function () { return __awaiter(void 0, void 0, void 0, function () {
458
+ var component;
459
+ return __generator(this, function (_a) {
460
+ switch (_a.label) {
461
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
462
+ case 1:
463
+ component = _a.sent();
464
+ mockHttpClient.mockClear();
465
+ component.find(LayoutStep).invoke('onModelChange')({
466
+ model: { a: newValue },
467
+ formSchema: thingSchema,
468
+ triggerModel: newValue,
469
+ triggerSchema: triggerSchema,
470
+ lastTriggerModel: preValue,
471
+ });
472
+ return [4 /*yield*/, waitFor(function () {
473
+ expect(mockHttpClient).toHaveBeenCalledTimes(expected);
474
+ })];
475
+ case 2:
476
+ _a.sent();
477
+ return [2 /*return*/];
478
+ }
479
+ });
480
+ }); });
481
+ });
482
+ });
483
+ describe('when a model update is triggered by a schema with refreshStepOnChange', function () {
484
+ var newModel = { a: 1, b: 999 };
485
+ var component;
486
+ var getStep = function () { return component.find(LayoutStep); };
487
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
488
+ return __generator(this, function (_a) {
489
+ switch (_a.label) {
490
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
491
+ case 1:
492
+ component = _a.sent();
493
+ getStep().invoke('onModelChange')({
494
+ model: newModel,
495
+ formSchema: thingSchema,
496
+ triggerModel: newModel.b,
497
+ triggerSchema: numberSchemaWithRefresh,
498
+ });
499
+ return [4 /*yield*/, waitAndUpdate(component)];
500
+ case 2:
501
+ _a.sent();
502
+ return [2 /*return*/];
503
+ }
504
+ });
505
+ }); });
506
+ it('should use the model to request a new schema', function () {
507
+ expect(mockHttpClient).toHaveBeenCalledWith('/refresh', expect.objectContaining({
508
+ method: 'POST',
509
+ body: JSON.stringify(newModel),
510
+ }));
511
+ });
512
+ it('should pass the new schema to the layout', function () {
513
+ expect(getStep().prop('stepSpecification')).toStrictEqual(newStep);
514
+ });
515
+ it('should pass the new model (from the new step) to the layout', function () {
516
+ expect(getStep().prop('model')).toStrictEqual(newStep.model);
517
+ });
518
+ });
519
+ describe('when a model update is triggered by a schema with refreshStepOnChange and refreshUrl', function () {
520
+ var newModel = { a: 1, b: 999 };
521
+ var triggerSchema = __assign(__assign({}, numberSchemaWithRefresh), { refreshUrl: '/refreshFromTrigger' });
522
+ var component;
523
+ var getStep = function () { return component.find(LayoutStep); };
524
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
525
+ return __generator(this, function (_a) {
526
+ switch (_a.label) {
527
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
528
+ case 1:
529
+ component = _a.sent();
530
+ getStep().invoke('onModelChange')({
531
+ model: newModel,
532
+ formSchema: thingSchema,
533
+ triggerModel: newModel.b,
534
+ triggerSchema: triggerSchema,
535
+ });
536
+ return [4 /*yield*/, waitAndUpdate(component)];
537
+ case 2:
538
+ _a.sent();
539
+ return [2 /*return*/];
540
+ }
541
+ });
542
+ }); });
543
+ it('should use the model to request a new schema', function () {
544
+ expect(mockHttpClient).toHaveBeenCalledWith('/refreshFromTrigger', expect.objectContaining({
545
+ method: 'POST',
546
+ body: JSON.stringify(newModel),
547
+ }));
548
+ });
549
+ it('should pass the new schema to the layout', function () {
550
+ expect(getStep().prop('stepSpecification')).toStrictEqual(newStep);
551
+ });
552
+ it('should pass the new model (from the newStep) to the layout', function () {
553
+ expect(getStep().prop('model')).toStrictEqual(newStep.model);
554
+ });
555
+ });
556
+ describe('when a refresh requirements call fails', function () {
557
+ var component;
558
+ var getStep = function () { return component.find(LayoutStep); };
559
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
560
+ return __generator(this, function (_a) {
561
+ switch (_a.label) {
562
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
563
+ case 1:
564
+ component = _a.sent();
565
+ getStep().invoke('onModelChange')({
566
+ model: { a: 1, b: 'c' },
567
+ formSchema: thingSchema,
568
+ triggerModel: 'c',
569
+ triggerSchema: thingSchema,
570
+ });
571
+ return [2 /*return*/];
572
+ }
573
+ });
574
+ }); });
575
+ it('should continue to render the original step', function () { return __awaiter(void 0, void 0, void 0, function () {
576
+ return __generator(this, function (_a) {
577
+ expect(getStep().prop('stepSpecification')).toStrictEqual(formStep);
578
+ return [2 /*return*/];
579
+ });
580
+ }); });
581
+ });
582
+ describe('when the layout broadcasts an action without method and the model is valid', function () {
583
+ var component;
584
+ var getStep = function () { return component.find(LayoutStep); };
585
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
586
+ return __generator(this, function (_a) {
587
+ switch (_a.label) {
588
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
589
+ case 1:
590
+ component = _a.sent();
591
+ getStep().invoke('onModelChange')({
592
+ model: { a: 1 },
593
+ formSchema: thingSchema,
594
+ triggerModel: 1,
595
+ triggerSchema: numberSchema,
596
+ });
597
+ getStep().invoke('onAction')({
598
+ label: 'Submit',
599
+ url: '/success',
600
+ });
601
+ return [4 /*yield*/, waitAndUpdate(component)];
602
+ case 2:
603
+ _a.sent();
604
+ return [2 /*return*/];
605
+ }
606
+ });
607
+ }); });
608
+ it('should make the corresponding request using the POST method by default', function () {
609
+ expect(mockHttpClient).toHaveBeenLastCalledWith(successAction.url, expect.objectContaining({
610
+ method: 'POST',
611
+ body: JSON.stringify({ a: 1 }),
612
+ }));
613
+ });
614
+ });
615
+ describe('when the layout broadcasts a POST action and the model is valid', function () {
616
+ var component;
617
+ var getStep = function () { return component.find(LayoutStep); };
618
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
619
+ return __generator(this, function (_a) {
620
+ switch (_a.label) {
621
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
622
+ case 1:
623
+ component = _a.sent();
624
+ getStep().invoke('onModelChange')({
625
+ model: { a: 1 },
626
+ formSchema: thingSchema,
627
+ triggerModel: 1,
628
+ triggerSchema: numberSchema,
629
+ });
630
+ getStep().invoke('onAction')(successAction);
631
+ return [4 /*yield*/, waitAndUpdate(component)];
632
+ case 2:
633
+ _a.sent();
634
+ return [2 /*return*/];
635
+ }
636
+ });
637
+ }); });
638
+ it('should tell the layout the form is submitted then reset to false on step reload', function () {
639
+ expect(getStep().prop('submitted')).toBe(false);
640
+ });
641
+ it('should make the corresponding request', function () {
642
+ expect(mockHttpClient).toHaveBeenCalledWith(successAction.url, expect.objectContaining({
643
+ method: successAction.method,
644
+ body: JSON.stringify({ a: 1 }),
645
+ }));
646
+ });
647
+ });
648
+ describe('when the layout broadcasts a POST action and the model is invalid', function () {
649
+ var component;
650
+ var getStep = function () { return component.find(LayoutStep); };
651
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
652
+ return __generator(this, function (_a) {
653
+ switch (_a.label) {
654
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
655
+ case 1:
656
+ component = _a.sent();
657
+ mockHttpClient.mockClear();
658
+ getStep().invoke('onModelChange')({
659
+ model: {},
660
+ formSchema: thingSchema,
661
+ triggerModel: undefined,
662
+ triggerSchema: numberSchema,
663
+ });
664
+ getStep().invoke('onAction')(successAction);
665
+ return [2 /*return*/];
666
+ }
667
+ });
668
+ }); });
669
+ it('should tell the layout the form is submitted', function () {
670
+ expect(getStep().prop('submitted')).toBe(true);
671
+ });
672
+ it('should not make the corresponding request', function () {
673
+ expect(mockHttpClient).not.toHaveBeenCalled();
674
+ });
675
+ });
676
+ describe('when the layout broadcasts a POST action with skipValidation, and the model is invalid', function () {
677
+ var component;
678
+ var getStep = function () { return component.find(LayoutStep); };
679
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
680
+ return __generator(this, function (_a) {
681
+ switch (_a.label) {
682
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
683
+ case 1:
684
+ component = _a.sent();
685
+ mockHttpClient.mockClear();
686
+ getStep().invoke('onModelChange')({
687
+ model: {},
688
+ formSchema: thingSchema,
689
+ triggerModel: undefined,
690
+ triggerSchema: numberSchema,
691
+ });
692
+ getStep().invoke('onAction')(__assign(__assign({}, successAction), { skipValidation: true }));
693
+ return [2 /*return*/];
694
+ }
695
+ });
696
+ }); });
697
+ it('should NOT tell the layout the form is submitted', function () {
698
+ expect(getStep().prop('submitted')).toBe(false);
699
+ });
700
+ it('should STILL make the corresponding request', function () {
701
+ expect(mockHttpClient).toHaveBeenCalledWith('/success', expect.objectContaining({ body: '{}' }));
702
+ });
703
+ });
704
+ describe('when the layout broadcasts an exit action with POST method and URL but the model is invalid', function () {
705
+ var component;
706
+ var getStep = function () { return component.find(LayoutStep); };
707
+ var exitAction = {
708
+ method: 'POST',
709
+ url: '/exit',
710
+ exit: true,
711
+ };
712
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
713
+ return __generator(this, function (_a) {
714
+ switch (_a.label) {
715
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
716
+ case 1:
717
+ component = _a.sent();
718
+ mockHttpClient.mockClear();
719
+ getStep().invoke('onModelChange')({
720
+ model: {},
721
+ formSchema: thingSchema,
722
+ triggerModel: undefined,
723
+ triggerSchema: numberSchema,
724
+ });
725
+ getStep().invoke('onAction')(exitAction);
726
+ return [2 /*return*/];
727
+ }
728
+ });
729
+ }); });
730
+ it('should tell the layout the form is submitted', function () {
731
+ expect(getStep().prop('submitted')).toBe(true);
732
+ });
733
+ it('should not make the corresponding request', function () {
734
+ expect(mockHttpClient).not.toHaveBeenCalled();
735
+ });
736
+ });
737
+ describe('when the layout broadcasts a GET action and the model is invalid', function () {
738
+ var component;
739
+ var getStep = function () { return component.find(LayoutStep); };
740
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
741
+ return __generator(this, function (_a) {
742
+ switch (_a.label) {
743
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
744
+ case 1:
745
+ component = _a.sent();
746
+ getStep().invoke('onModelChange')({
747
+ model: {},
748
+ formSchema: thingSchema,
749
+ triggerModel: undefined,
750
+ triggerSchema: numberSchema,
751
+ });
752
+ getStep().invoke('onAction')(navigateAction);
753
+ return [2 /*return*/];
754
+ }
755
+ });
756
+ }); });
757
+ it('should ignore the invalid model and make the corresponding request', function () {
758
+ expect(mockHttpClient).toHaveBeenCalledWith(navigateAction.url, expect.objectContaining({ method: navigateAction.method }));
759
+ });
760
+ });
761
+ describe('when the layout broadcasts a GET action with exit=true', function () {
762
+ var component;
763
+ var getStep = function () { return component.find(LayoutStep); };
764
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
765
+ return __generator(this, function (_a) {
766
+ switch (_a.label) {
767
+ case 0:
768
+ onCompletion.mockClear();
769
+ return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
770
+ case 1:
771
+ component = _a.sent();
772
+ getStep().invoke('onModelChange')({
773
+ model: {},
774
+ formSchema: thingSchema,
775
+ triggerModel: undefined,
776
+ triggerSchema: numberSchema,
777
+ });
778
+ getStep().invoke('onAction')({
779
+ title: 'Skip',
780
+ method: 'GET',
781
+ url: '/skip',
782
+ exit: true,
783
+ });
784
+ return [2 /*return*/];
785
+ }
786
+ });
787
+ }); });
788
+ it('should ignore the invalid model, make the corresponding request and exit with the response body', function () { return __awaiter(void 0, void 0, void 0, function () {
789
+ return __generator(this, function (_a) {
790
+ switch (_a.label) {
791
+ case 0:
792
+ expect(mockHttpClient).toHaveBeenCalledWith('/skip', expect.objectContaining({ method: 'GET' }));
793
+ return [4 /*yield*/, waitFor(function () {
794
+ expect(onCompletion).toHaveBeenCalledWith({ skip: true });
795
+ })];
796
+ case 1:
797
+ _a.sent();
798
+ return [2 /*return*/];
799
+ }
800
+ });
801
+ }); });
802
+ });
803
+ describe('when we submit an action but we receive a server error', function () {
804
+ var component;
805
+ var getStep = function () { return component.find(LayoutStep); };
806
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
807
+ return __generator(this, function (_a) {
808
+ switch (_a.label) {
809
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
810
+ case 1:
811
+ component = _a.sent();
812
+ getStep().invoke('onModelChange')({
813
+ model: { a: 1 },
814
+ formSchema: thingSchema,
815
+ triggerModel: 1,
816
+ triggerSchema: numberSchema,
817
+ });
818
+ getStep().invoke('onAction')(validationFailureAction);
819
+ return [4 /*yield*/, waitAndUpdate(component)];
820
+ case 2:
821
+ _a.sent();
822
+ return [2 /*return*/];
823
+ }
824
+ });
825
+ }); });
826
+ it('should pass those errors to the layout', function () {
827
+ expect(getStep().prop('formErrors')).toMatchObject(validationErrorResponse.validation);
828
+ });
829
+ it('should render the globalError as an Alert', function () {
830
+ expect(getStep().prop('formErrors')).toMatchObject(validationErrorResponse.validation);
831
+ expect(component.find(Alert).prop('message')).toBe(validationErrorResponse.error);
832
+ });
833
+ it('should clear the global error when the model changes', function () { return __awaiter(void 0, void 0, void 0, function () {
834
+ return __generator(this, function (_a) {
835
+ switch (_a.label) {
836
+ case 0:
837
+ getStep().invoke('onModelChange')({
838
+ model: { a: 2 },
839
+ formSchema: thingSchema,
840
+ triggerModel: 1,
841
+ triggerSchema: numberSchema,
842
+ });
843
+ return [4 /*yield*/, waitAndUpdate(component)];
844
+ case 1:
845
+ _a.sent();
846
+ expect(component.find(Alert)).toHaveLength(0);
847
+ return [2 /*return*/];
848
+ }
849
+ });
850
+ }); });
851
+ });
852
+ describe('when we submit an action but we receive a refreshUrl', function () {
853
+ var component;
854
+ var getStep = function () { return component.find(LayoutStep); };
855
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
856
+ return __generator(this, function (_a) {
857
+ switch (_a.label) {
858
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
859
+ case 1:
860
+ component = _a.sent();
861
+ getStep().invoke('onModelChange')({
862
+ model: { a: 1 },
863
+ formSchema: thingSchema,
864
+ triggerModel: 1,
865
+ triggerSchema: numberSchema,
866
+ });
867
+ getStep().invoke('onAction')({ method: 'POST', url: '/submitWithRefreshUrl' });
868
+ return [4 /*yield*/, waitAndUpdate(component)];
869
+ case 2:
870
+ _a.sent();
871
+ return [2 /*return*/];
872
+ }
873
+ });
874
+ }); });
875
+ it('should refresh step using the provided URL, without debouncing', function () {
876
+ expect(mockHttpClient).toHaveBeenLastCalledWith('/refresh-form-url', expect.objectContaining({
877
+ body: '{"a":1}',
878
+ method: 'POST',
879
+ }));
880
+ });
881
+ });
882
+ describe('when we submit an action and we receive a new step', function () {
883
+ var component;
884
+ var onEvent;
885
+ var getStep = function () { return component.find(LayoutStep); };
886
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
887
+ return __generator(this, function (_a) {
888
+ switch (_a.label) {
889
+ case 0:
890
+ onEvent = jest.fn();
891
+ return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion, onEvent: onEvent }))];
892
+ case 1:
893
+ component = _a.sent();
894
+ getStep().invoke('onModelChange')({
895
+ model: { a: 1 },
896
+ formSchema: thingSchema,
897
+ triggerModel: 1,
898
+ triggerSchema: numberSchema,
899
+ });
900
+ getStep().invoke('onAction')(successAction);
901
+ return [4 /*yield*/, waitAndUpdate(component)];
902
+ case 2:
903
+ _a.sent();
904
+ return [2 /*return*/];
905
+ }
906
+ });
907
+ }); });
908
+ it('should update the flow to use that step', function () {
909
+ expect(getStep().prop('stepSpecification')).toStrictEqual(newStep);
910
+ });
911
+ it('should trigger the onEvent callback with the new step id', function () {
912
+ expect(onEvent).toHaveBeenCalledWith('Dynamic Flow - Step Started', expect.objectContaining({ stepId: newStep.id }));
913
+ });
914
+ });
915
+ describe('when we submit an action and do not receive an error or valid step', function () {
916
+ var exitAction = {
917
+ url: '/exit',
918
+ method: 'POST',
919
+ exit: true,
920
+ };
921
+ var component;
922
+ var getStep = function () { return component.find(LayoutStep); };
923
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
924
+ return __generator(this, function (_a) {
925
+ switch (_a.label) {
926
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
927
+ case 1:
928
+ component = _a.sent();
929
+ getStep().invoke('onModelChange')({
930
+ model: { a: 1 },
931
+ formSchema: thingSchema,
932
+ triggerModel: 1,
933
+ triggerSchema: numberSchema,
934
+ });
935
+ getStep().invoke('onAction')(exitAction);
936
+ return [4 /*yield*/, waitAndUpdate(component)];
937
+ case 2:
938
+ _a.sent();
939
+ return [2 /*return*/];
940
+ }
941
+ });
942
+ }); });
943
+ it('should exit the flow', function () {
944
+ expect(onCompletion).toHaveBeenCalledTimes(1);
945
+ });
946
+ });
947
+ describe('when we submit an action with additional data', function () {
948
+ var dataAction = __assign(__assign({}, successAction), { data: { a: 2, c: true } });
949
+ var component;
950
+ var getStep = function () { return component.find(LayoutStep); };
951
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
952
+ return __generator(this, function (_a) {
953
+ switch (_a.label) {
954
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
955
+ case 1:
956
+ component = _a.sent();
957
+ mockHttpClient.mockClear();
958
+ getStep().invoke('onModelChange')({
959
+ model: { a: 1 },
960
+ formSchema: thingSchema,
961
+ triggerModel: 1,
962
+ triggerSchema: numberSchema,
963
+ });
964
+ getStep().invoke('onAction')(dataAction);
965
+ return [2 /*return*/];
966
+ }
967
+ });
968
+ }); });
969
+ it('should submit the latest model combined with the action data', function () {
970
+ expect(mockHttpClient).toHaveBeenCalledWith(dataAction.url, expect.objectContaining({
971
+ method: dataAction.method,
972
+ body: JSON.stringify({ a: 2, c: true }),
973
+ }));
974
+ });
975
+ });
976
+ describe('when the layout triggers a client side exit action', function () {
977
+ var exitAction = {
978
+ title: 'Exit',
979
+ type: 'delete',
980
+ exit: true,
981
+ result: {
982
+ exitValue: 'value',
983
+ },
984
+ };
985
+ var component;
986
+ var getStep = function () { return component.find(LayoutStep); };
987
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
988
+ return __generator(this, function (_a) {
989
+ switch (_a.label) {
990
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
991
+ case 1:
992
+ component = _a.sent();
993
+ getStep().invoke('onAction')(exitAction);
994
+ return [2 /*return*/];
995
+ }
996
+ });
997
+ }); });
998
+ it('should trigger the onCompletion callback with exit data', function () {
999
+ expect(onCompletion).toHaveBeenCalledWith(exitAction.result);
1000
+ });
1001
+ });
1002
+ describe("when we submit an exit action which doesn't return a result", function () {
1003
+ var exitAction = {
1004
+ url: '/exit',
1005
+ method: 'POST',
1006
+ exit: true,
1007
+ result: {
1008
+ test: 123,
1009
+ },
1010
+ };
1011
+ var component;
1012
+ var getStep = function () { return component.find(LayoutStep); };
1013
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
1014
+ return __generator(this, function (_a) {
1015
+ switch (_a.label) {
1016
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
1017
+ case 1:
1018
+ component = _a.sent();
1019
+ getStep().invoke('onAction')(exitAction);
1020
+ return [4 /*yield*/, waitAndUpdate(component)];
1021
+ case 2:
1022
+ _a.sent();
1023
+ return [2 /*return*/];
1024
+ }
1025
+ });
1026
+ }); });
1027
+ it("should exit the flow with the action's result", function () {
1028
+ expect(onCompletion).toHaveBeenCalledWith(exitAction.result);
1029
+ });
1030
+ });
1031
+ describe('when we submit an exit action which does return a result', function () {
1032
+ var exitAction = {
1033
+ url: '/exitWithResult',
1034
+ method: 'POST',
1035
+ exit: true,
1036
+ result: {
1037
+ test: 123,
1038
+ testKey: 'overridenValue',
1039
+ },
1040
+ };
1041
+ var component;
1042
+ var getStep = function () { return component.find(LayoutStep); };
1043
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
1044
+ return __generator(this, function (_a) {
1045
+ switch (_a.label) {
1046
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
1047
+ case 1:
1048
+ component = _a.sent();
1049
+ getStep().invoke('onAction')(exitAction);
1050
+ return [4 /*yield*/, waitAndUpdate(component)];
1051
+ case 2:
1052
+ _a.sent();
1053
+ return [2 /*return*/];
1054
+ }
1055
+ });
1056
+ }); });
1057
+ it('should exit the flow with the merged result', function () {
1058
+ var mergedResult = __assign(__assign({}, exitResult), exitAction.result);
1059
+ expect(onCompletion).toHaveBeenCalledWith(mergedResult);
1060
+ });
1061
+ });
1062
+ describe('when we submit an action return with exit headers', function () {
1063
+ var exitAction = {
1064
+ url: '/exitWithHeader',
1065
+ method: 'POST',
1066
+ };
1067
+ var component;
1068
+ var getStep = function () { return component.find(LayoutStep); };
1069
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
1070
+ return __generator(this, function (_a) {
1071
+ switch (_a.label) {
1072
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
1073
+ case 1:
1074
+ component = _a.sent();
1075
+ getStep().invoke('onModelChange')({
1076
+ model: { a: 1 },
1077
+ formSchema: thingSchema,
1078
+ triggerModel: 1,
1079
+ triggerSchema: numberSchema,
1080
+ });
1081
+ getStep().invoke('onAction')(exitAction);
1082
+ return [4 /*yield*/, waitAndUpdate(component)];
1083
+ case 2:
1084
+ _a.sent();
1085
+ return [2 /*return*/];
1086
+ }
1087
+ });
1088
+ }); });
1089
+ it('should exit the flow', function () {
1090
+ expect(onCompletion).toHaveBeenCalledTimes(1);
1091
+ });
1092
+ it('should not clear step specifications', function () {
1093
+ expect(getStep().prop('stepSpecification')).toStrictEqual(formStep);
1094
+ });
1095
+ });
1096
+ describe('when we trigger onAction, but the action is disabled', function () {
1097
+ var disabledAction = {
1098
+ title: 'Submit',
1099
+ url: '/success',
1100
+ method: 'POST',
1101
+ disabled: true,
1102
+ };
1103
+ it('should NOT trigger the action', function () { return __awaiter(void 0, void 0, void 0, function () {
1104
+ var component;
1105
+ return __generator(this, function (_a) {
1106
+ switch (_a.label) {
1107
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
1108
+ case 1:
1109
+ component = _a.sent();
1110
+ mockHttpClient.mockClear();
1111
+ component.find(LayoutStep).invoke('onAction')(disabledAction);
1112
+ expect(mockHttpClient).not.toHaveBeenCalled();
1113
+ return [2 /*return*/];
1114
+ }
1115
+ });
1116
+ }); });
1117
+ });
1118
+ describe('ETags', function () {
1119
+ var newModel = { a: 1, b: 999 };
1120
+ var triggerSchema = __assign(__assign({}, numberSchemaWithRefresh), { refreshUrl: '/refreshWithSameFormStep' });
1121
+ var component;
1122
+ var getStep = function () { return component.find(LayoutStep); };
1123
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
1124
+ return __generator(this, function (_a) {
1125
+ switch (_a.label) {
1126
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: formUrl }, httpClient: mockHttpClient, onCompletion: onCompletion }))];
1127
+ case 1:
1128
+ component = _a.sent();
1129
+ mockHttpClient.mockClear();
1130
+ getStep().invoke('onModelChange')({
1131
+ model: newModel,
1132
+ formSchema: thingSchema,
1133
+ triggerModel: newModel.b,
1134
+ triggerSchema: triggerSchema,
1135
+ });
1136
+ return [4 /*yield*/, waitAndUpdate(component)];
1137
+ case 2:
1138
+ _a.sent();
1139
+ return [2 /*return*/];
1140
+ }
1141
+ });
1142
+ }); });
1143
+ describe('when requesting a refresh', function () {
1144
+ it('should pass the current ETag in the "If-None-Match" header', function () { return __awaiter(void 0, void 0, void 0, function () {
1145
+ return __generator(this, function (_a) {
1146
+ switch (_a.label) {
1147
+ case 0: return [4 /*yield*/, waitFor(function () {
1148
+ expect(mockHttpClient).toHaveBeenCalledWith('/refreshWithSameFormStep', expect.objectContaining({
1149
+ method: 'POST',
1150
+ body: JSON.stringify(newModel),
1151
+ headers: expect.objectContaining({ 'If-None-Match': expect.any(String) }),
1152
+ }));
1153
+ })];
1154
+ case 1:
1155
+ _a.sent();
1156
+ return [2 /*return*/];
1157
+ }
1158
+ });
1159
+ }); });
1160
+ });
1161
+ describe('when the refreshed step has empty body and status 304', function () {
1162
+ it('should request the refresh using the current ETag', function () {
1163
+ expect(mockHttpClient).toHaveBeenCalledWith('/refreshWithSameFormStep', expect.objectContaining({
1164
+ method: 'POST',
1165
+ body: JSON.stringify(newModel),
1166
+ headers: expect.objectContaining({ 'If-None-Match': expect.any(String) }),
1167
+ }));
1168
+ });
1169
+ it('should keep the current schema in the the layout', function () {
1170
+ expect(getStep().prop('stepSpecification')).toStrictEqual(formStep);
1171
+ });
1172
+ it('should pass the new model to the layout', function () {
1173
+ expect(getStep().prop('model')).toStrictEqual(newModel);
1174
+ });
1175
+ });
1176
+ });
1177
+ });
1178
+ describe('when there is a step with exceptions', function () {
1179
+ var component;
1180
+ var getStep = function () { return component.find(LayoutStep); };
1181
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
1182
+ return __generator(this, function (_a) {
1183
+ switch (_a.label) {
1184
+ case 0: return [4 /*yield*/, mountAndWait(_jsx(DynamicFlow, { initialAction: { url: decisionUrl }, httpClient: mockHttpClient, onCompletion: onCompletion, onError: onError }))];
1185
+ case 1:
1186
+ component = _a.sent();
1187
+ return [2 /*return*/];
1188
+ }
1189
+ });
1190
+ }); });
1191
+ describe('when a JS error is thrown', function () {
1192
+ var errors = new Error();
1193
+ beforeEach(function () {
1194
+ getStep().simulateError(errors);
1195
+ });
1196
+ it('should call onError with error', function () {
1197
+ expect(onCompletion).not.toHaveBeenCalled();
1198
+ expect(onError).toHaveBeenCalledWith(errors);
1199
+ });
1200
+ });
1201
+ });
1202
+ });