@wise/dynamic-flow-client 3.4.0 → 3.5.0-experimental-6654c72

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 (275) hide show
  1. package/build/common/errorBoundary/ErrorBoundary.js +44 -0
  2. package/build/common/errorBoundary/ErrorBoundaryAlert.js +12 -0
  3. package/build/common/httpClientContext/HttpClientContext.js +35 -0
  4. package/build/common/httpClientContext/index.js +1 -0
  5. package/build/common/makeHttpClient/index.js +1 -0
  6. package/build/common/makeHttpClient/makeHttpClient.js +34 -0
  7. package/build/common/messages/external-confirmation.messages.js +23 -0
  8. package/build/common/messages/generic-error.messages.js +18 -0
  9. package/build/common/messages/help.messages.js +8 -0
  10. package/build/common/messages/multi-file-upload.messages.js +18 -0
  11. package/build/common/messages/multi-select.messages.js +8 -0
  12. package/build/common/messages/paragraph.messages.js +13 -0
  13. package/build/common/messages/repeatable.messages.js +23 -0
  14. package/build/common/messages/validation.array.messages.js +13 -0
  15. package/build/common/messages/validation.messages.js +53 -0
  16. package/build/common/utils/api-utils.js +4 -0
  17. package/build/i18n/de.json +2 -1
  18. package/build/i18n/es.json +1 -0
  19. package/build/i18n/fr.json +1 -0
  20. package/build/i18n/hu.json +1 -0
  21. package/build/i18n/id.json +1 -0
  22. package/build/i18n/index.js +36 -0
  23. package/build/i18n/it.json +1 -0
  24. package/build/i18n/ja.json +1 -0
  25. package/build/i18n/pl.json +1 -0
  26. package/build/i18n/pt.json +1 -0
  27. package/build/i18n/ro.json +1 -0
  28. package/build/i18n/ru.json +1 -0
  29. package/build/i18n/th.json +1 -0
  30. package/build/i18n/tr.json +1 -0
  31. package/build/i18n/zh_CN.json +1 -0
  32. package/build/i18n/zh_HK.json +1 -0
  33. package/build/legacy/common/constants/DateMode.js +4 -0
  34. package/build/legacy/common/constants/FeatureName.js +4 -0
  35. package/build/legacy/common/constants/FormControlType.js +21 -0
  36. package/build/legacy/common/constants/MonthFormat.js +4 -0
  37. package/build/legacy/common/constants/Size.js +7 -0
  38. package/build/legacy/common/constants/index.js +4 -0
  39. package/build/legacy/common/contexts/dynamicFlowContexts/DynamicFlowContexts.js +36 -0
  40. package/build/legacy/common/contexts/dynamicFlowContexts/usePendingPromiseCounter.js +13 -0
  41. package/build/legacy/common/contexts/eventsContext/EventsContext.js +38 -0
  42. package/build/legacy/common/contexts/featureContext/FeatureContext.js +22 -0
  43. package/build/legacy/common/contexts/index.js +3 -0
  44. package/build/legacy/common/contexts/logContext/LogContext.js +44 -0
  45. package/build/legacy/common/hooks/index.js +7 -0
  46. package/build/legacy/common/hooks/useDebouncedFunction/useDebouncedFunction.js +9 -0
  47. package/build/legacy/common/hooks/useExternal/useExternal.js +15 -0
  48. package/build/legacy/common/hooks/useExternalStepPolling/useExternalStepPolling.js +70 -0
  49. package/build/legacy/common/hooks/usePersistAsync/usePersistAsync.js +172 -0
  50. package/build/legacy/common/hooks/usePolling/usePolling.js +51 -0
  51. package/build/legacy/common/hooks/usePrevious/usePrevious.js +8 -0
  52. package/build/legacy/common/hooks/useStepPolling/useStepPolling.js +43 -0
  53. package/build/legacy/common/messages.js +8 -0
  54. package/build/legacy/common/utils/api-utils.js +6 -0
  55. package/build/legacy/common/utils/date-utils.js +22 -0
  56. package/build/legacy/common/utils/debounce.js +38 -0
  57. package/build/legacy/common/utils/file-utils.js +45 -0
  58. package/build/legacy/common/utils/id-utils.js +5 -0
  59. package/build/legacy/common/utils/index.js +11 -0
  60. package/build/legacy/common/utils/is-equal.js +21 -0
  61. package/build/legacy/common/utils/misc-utils.js +4 -0
  62. package/build/legacy/common/utils/mobile-utils.js +23 -0
  63. package/build/legacy/common/utils/model-utils.js +33 -0
  64. package/build/legacy/common/utils/schema-utils.js +113 -0
  65. package/build/legacy/common/utils/step-utils.js +32 -0
  66. package/build/legacy/common/validators/index.js +5 -0
  67. package/build/legacy/common/validators/models/model-utils.js +119 -0
  68. package/build/legacy/common/validators/models/model-validators.js +62 -0
  69. package/build/legacy/common/validators/schemas/schema-validators.js +101 -0
  70. package/build/legacy/common/validators/types/type-validators.js +14 -0
  71. package/build/legacy/common/validators/validationFailures/validation-failures.js +139 -0
  72. package/build/legacy/common/validators/validationFailures/validation-failures.utils.js +40 -0
  73. package/build/legacy/common/validators/values/value-validators.js +6 -0
  74. package/build/legacy/dynamic-flow-types.js +1 -0
  75. package/build/legacy/dynamicFlow/BackButton.js +22 -0
  76. package/build/legacy/dynamicFlow/DynamicFlow.js +346 -0
  77. package/build/legacy/dynamicFlow/DynamicFlowStep.js +37 -0
  78. package/build/legacy/dynamicFlow/DynamicFlowTypes.js +1 -0
  79. package/build/legacy/dynamicFlow/index.js +1 -0
  80. package/build/legacy/dynamicFlow/utils/index.js +5 -0
  81. package/build/legacy/dynamicFlow/utils/responseParsers/response-parsers.js +185 -0
  82. package/build/legacy/dynamicFlow/utils/useDebouncedRefresh/useDebouncedRefresh.js +26 -0
  83. package/build/legacy/dynamicFlow/utils/useDynamicFlowState.js +137 -0
  84. package/build/legacy/dynamicFlow/utils/useLoader.js +22 -0
  85. package/build/legacy/formControl/FormControl.js +266 -0
  86. package/build/legacy/formControl/index.js +1 -0
  87. package/build/legacy/formControl/utils/getAutocompleteString.js +80 -0
  88. package/build/legacy/formControl/utils/index.js +2 -0
  89. package/build/legacy/formControl/utils/value-utils.js +108 -0
  90. package/build/legacy/jsonSchemaForm/JsonSchemaForm.js +24 -0
  91. package/build/legacy/jsonSchemaForm/allOfSchema/AllOfSchema.js +50 -0
  92. package/build/legacy/jsonSchemaForm/allOfSchema/index.js +1 -0
  93. package/build/legacy/jsonSchemaForm/arrayTypeSchema/ArraySchema.js +25 -0
  94. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/ArrayListSchema.js +34 -0
  95. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multiSelectSchema/MultiSelectSchema.js +84 -0
  96. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/MultipleFileUploadSchema.js +141 -0
  97. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/index.js +1 -0
  98. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/utils/index.js +2 -0
  99. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/utils/upload-utils.js +79 -0
  100. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/utils/useFormattedDefaultErrorMessages.js +14 -0
  101. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/ItemSummary.js +7 -0
  102. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/RepeatableSchema.js +134 -0
  103. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/RepeatableSchemaStep.js +85 -0
  104. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/utils/summary-utils.js +135 -0
  105. package/build/legacy/jsonSchemaForm/arrayTypeSchema/index.js +1 -0
  106. package/build/legacy/jsonSchemaForm/basicTypeSchema/BasicTypeSchema.js +111 -0
  107. package/build/legacy/jsonSchemaForm/basicTypeSchema/index.js +1 -0
  108. package/build/legacy/jsonSchemaForm/controlFeedback/ControlFeedback.js +86 -0
  109. package/build/legacy/jsonSchemaForm/controlFeedback/index.js +1 -0
  110. package/build/legacy/jsonSchemaForm/genericSchema/GenericSchema.js +85 -0
  111. package/build/legacy/jsonSchemaForm/genericSchema/index.js +1 -0
  112. package/build/legacy/jsonSchemaForm/help/Help.js +20 -0
  113. package/build/legacy/jsonSchemaForm/help/index.js +1 -0
  114. package/build/legacy/jsonSchemaForm/index.js +1 -0
  115. package/build/legacy/jsonSchemaForm/objectSchema/ObjectSchema.js +77 -0
  116. package/build/legacy/jsonSchemaForm/objectSchema/index.js +1 -0
  117. package/build/legacy/jsonSchemaForm/oneOfSchema/OneOfSchema.js +155 -0
  118. package/build/legacy/jsonSchemaForm/oneOfSchema/index.js +1 -0
  119. package/build/legacy/jsonSchemaForm/oneOfSchema/utils.js +68 -0
  120. package/build/legacy/jsonSchemaForm/persistAsyncSchema/PersistAsyncSchema.js +26 -0
  121. package/build/legacy/jsonSchemaForm/persistAsyncSchema/index.js +1 -0
  122. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBasicSchema/PersistAsyncBasicSchema.js +165 -0
  123. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBasicSchema/index.js +1 -0
  124. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/PersistAsyncBlobSchema.js +131 -0
  125. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/UploadInputAdapter.js +31 -0
  126. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/index.js +1 -0
  127. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/PromotedOneOfSchema.js +72 -0
  128. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/index.js +1 -0
  129. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promoted-one-of-utils.js +8 -0
  130. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfCheckboxControl.js +27 -0
  131. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfControl.js +31 -0
  132. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfRadioControl.js +32 -0
  133. package/build/legacy/jsonSchemaForm/readOnlySchema/ReadOnlySchema.js +54 -0
  134. package/build/legacy/jsonSchemaForm/readOnlySchema/ReadOnlySchema.messages.js +13 -0
  135. package/build/legacy/jsonSchemaForm/readOnlySchema/index.js +1 -0
  136. package/build/legacy/jsonSchemaForm/schemaFormControl/SchemaFormControl.js +133 -0
  137. package/build/legacy/jsonSchemaForm/schemaFormControl/index.js +1 -0
  138. package/build/legacy/jsonSchemaForm/schemaFormControl/utils/index.js +1 -0
  139. package/build/legacy/jsonSchemaForm/schemaFormControl/utils/mapping-utils.js +107 -0
  140. package/build/legacy/jsonSchemaForm/validationAsyncSchema/ValidationAsyncSchema.js +150 -0
  141. package/build/legacy/jsonSchemaForm/validationAsyncSchema/index.js +1 -0
  142. package/build/legacy/layout/DynamicLayout.js +68 -0
  143. package/build/legacy/layout/alert/DynamicAlert.js +29 -0
  144. package/build/legacy/layout/box/DynamicBox.js +41 -0
  145. package/build/legacy/layout/button/DynamicButton.js +27 -0
  146. package/build/legacy/layout/button/utils.js +45 -0
  147. package/build/legacy/layout/columns/DynamicColumns.js +38 -0
  148. package/build/legacy/layout/decision/DynamicDecision.js +21 -0
  149. package/build/legacy/layout/divider/DynamicDivider.js +9 -0
  150. package/build/legacy/layout/external/DynamicExternal.js +32 -0
  151. package/build/legacy/layout/external/DynamicExternal.messages.js +8 -0
  152. package/build/legacy/layout/form/DynamicForm.js +22 -0
  153. package/build/legacy/layout/heading/DynamicHeading.js +51 -0
  154. package/build/legacy/layout/icon/DynamicIcon.js +17 -0
  155. package/build/legacy/layout/icon/FlagIcon.js +198 -0
  156. package/build/legacy/layout/icon/NamedIcon.js +19 -0
  157. package/build/legacy/layout/image/DynamicImage.js +111 -0
  158. package/build/legacy/layout/index.js +20 -0
  159. package/build/legacy/layout/instructions/DynamicInstructions.js +30 -0
  160. package/build/legacy/layout/list/DynamicStatusList.js +37 -0
  161. package/build/legacy/layout/loadingIndicator/DynamicLoadingIndicator.js +11 -0
  162. package/build/legacy/layout/markdown/DynamicMarkdown.js +23 -0
  163. package/build/legacy/layout/modal/DynamicModal.js +26 -0
  164. package/build/legacy/layout/paragraph/DynamicParagraph.js +46 -0
  165. package/build/legacy/layout/paragraph/useSnackBarIfAvailable.js +9 -0
  166. package/build/legacy/layout/review/DynamicReview.js +58 -0
  167. package/build/legacy/layout/search/DynamicSearch.js +58 -0
  168. package/build/legacy/layout/search/SearchInput.js +17 -0
  169. package/build/legacy/layout/search/SearchResults.js +31 -0
  170. package/build/legacy/layout/search/useSearch.js +137 -0
  171. package/build/legacy/layout/utils/getNavigationOptionMedia.js +28 -0
  172. package/build/legacy/layout/utils/index.js +32 -0
  173. package/build/legacy/step/cameraStep/CameraStep.js +124 -0
  174. package/build/legacy/step/cameraStep/cameraCapture/CameraCapture.js +161 -0
  175. package/build/legacy/step/cameraStep/cameraCapture/CameraCapture.messages.js +58 -0
  176. package/build/legacy/step/cameraStep/cameraCapture/components/bottomBar/BottomBar.js +28 -0
  177. package/build/legacy/step/cameraStep/cameraCapture/components/index.js +3 -0
  178. package/build/legacy/step/cameraStep/cameraCapture/components/orientationLockOverlay/OrientationLockOverlay.js +19 -0
  179. package/build/legacy/step/cameraStep/cameraCapture/components/orientationLockOverlay/OrientationLockOverlay.messages.js +8 -0
  180. package/build/legacy/step/cameraStep/cameraCapture/hooks/useFullScreenOrientationLock.js +60 -0
  181. package/build/legacy/step/cameraStep/cameraCapture/hooks/useVideoConstraints.js +80 -0
  182. package/build/legacy/step/cameraStep/cameraCapture/index.js +1 -0
  183. package/build/legacy/step/cameraStep/cameraCapture/overlay/Overlay.js +77 -0
  184. package/build/legacy/step/cameraStep/cameraCapture/screens/cameraErrorScreen/CameraErrorScreen.js +18 -0
  185. package/build/legacy/step/cameraStep/cameraCapture/screens/index.js +1 -0
  186. package/build/legacy/step/cameraStep/cameraCapture/tracking/index.js +109 -0
  187. package/build/legacy/step/cameraStep/cameraCapture/types/index.js +7 -0
  188. package/build/legacy/step/cameraStep/cameraCapture/utils/index.js +107 -0
  189. package/build/legacy/step/cameraStep/index.js +1 -0
  190. package/build/legacy/step/externalConfirmationStep/ExternalConfirmationStep.js +64 -0
  191. package/build/legacy/step/externalConfirmationStep/index.js +1 -0
  192. package/build/legacy/step/index.js +3 -0
  193. package/build/legacy/step/layoutStep/LayoutStep.js +33 -0
  194. package/build/legacy/step/layoutStep/index.js +1 -0
  195. package/build/legacy/step/layoutStep/utils/index.js +2 -0
  196. package/build/legacy/step/layoutStep/utils/inline-reference-utils.js +105 -0
  197. package/build/legacy/step/layoutStep/utils/layout-utils.js +212 -0
  198. package/build/main.js +4791 -226
  199. package/build/main.min.js +1 -1
  200. package/build/main.mjs +4792 -227
  201. package/build/revamp/domain/components/AlertComponent.js +50 -0
  202. package/build/revamp/domain/components/AllOfComponent.js +72 -0
  203. package/build/revamp/domain/components/BooleanInputComponent.js +108 -0
  204. package/build/revamp/domain/components/BoxComponent.js +65 -0
  205. package/build/revamp/domain/components/ButtonComponent.js +50 -0
  206. package/build/revamp/domain/components/ColumnsComponent.js +74 -0
  207. package/build/revamp/domain/components/ConstComponent.js +50 -0
  208. package/build/revamp/domain/components/ContainerComponent.js +65 -0
  209. package/build/revamp/domain/components/DateInputComponent.js +127 -0
  210. package/build/revamp/domain/components/DecisionComponent.js +50 -0
  211. package/build/revamp/domain/components/DividerComponent.js +50 -0
  212. package/build/revamp/domain/components/FormComponent.js +65 -0
  213. package/build/revamp/domain/components/HeadingComponent.js +50 -0
  214. package/build/revamp/domain/components/ImageComponent.js +50 -0
  215. package/build/revamp/domain/components/InstructionsComponent.js +50 -0
  216. package/build/revamp/domain/components/IntegerInputComponent.js +125 -0
  217. package/build/revamp/domain/components/LoadingIndicatorComponent.js +50 -0
  218. package/build/revamp/domain/components/MarkdownComponent.js +50 -0
  219. package/build/revamp/domain/components/ModalComponent.js +65 -0
  220. package/build/revamp/domain/components/MultiUploadInputComponent.js +190 -0
  221. package/build/revamp/domain/components/NumberInputComponent.js +125 -0
  222. package/build/revamp/domain/components/ObjectComponent.js +104 -0
  223. package/build/revamp/domain/components/ParagraphComponent.js +50 -0
  224. package/build/revamp/domain/components/ReviewComponent.js +50 -0
  225. package/build/revamp/domain/components/SelectInputComponent.js +138 -0
  226. package/build/revamp/domain/components/StatusListComponent.js +50 -0
  227. package/build/revamp/domain/components/StepDomainComponent.js +93 -0
  228. package/build/revamp/domain/components/TextInputComponent.js +125 -0
  229. package/build/revamp/domain/components/UploadInputComponent.js +151 -0
  230. package/build/revamp/domain/components/repeatableComponent/RepeatableComponent.js +148 -0
  231. package/build/revamp/domain/components/searchComponent/SearchComponent.js +108 -0
  232. package/build/revamp/domain/components/utils/component-utils.js +18 -0
  233. package/build/revamp/domain/components/utils/debounce.js +38 -0
  234. package/build/revamp/domain/components/utils/file-utils.js +46 -0
  235. package/build/revamp/domain/components/utils/getComponentForLocalValueKey.js +31 -0
  236. package/build/revamp/domain/components/utils/isPartialLocalValueMatch.js +40 -0
  237. package/build/revamp/domain/features/events.js +1 -0
  238. package/build/revamp/domain/features/persistAsync/getComponentPersistAsync.js +133 -0
  239. package/build/revamp/domain/features/persistAsync/getPerformPersistAsync.js +103 -0
  240. package/build/revamp/domain/features/refresh/getPerformRefresh.js +53 -0
  241. package/build/revamp/domain/features/summary/summary-utils.js +39 -0
  242. package/build/revamp/domain/features/utils/http-utils.js +34 -0
  243. package/build/revamp/domain/features/utils/response-utils.js +9 -0
  244. package/build/revamp/domain/features/validation/validation-functions.js +12 -0
  245. package/build/revamp/domain/features/validation/value-checks.js +111 -0
  246. package/build/revamp/domain/features/validationAsync/getComponentValidationAsync.js +94 -0
  247. package/build/revamp/domain/features/validationAsync/getPerformValidationAsync.js +107 -0
  248. package/build/revamp/domain/mappers/types.js +1 -0
  249. package/build/revamp/domain/types.js +1 -0
  250. package/build/revamp/flow/response-utils.js +88 -0
  251. package/build/revamp/renderers/CoreContainerRenderer.js +8 -0
  252. package/build/revamp/renderers/LoadingContext.js +7 -0
  253. package/build/revamp/renderers/types.js +1 -0
  254. package/build/revamp/types.js +1 -0
  255. package/build/revamp/utils/component-utils.js +86 -0
  256. package/build/revamp/utils/type-utils.js +56 -0
  257. package/build/revamp/utils/type-validators.js +16 -0
  258. package/build/revamp/wise/renderers/AlertRenderer.js +11 -0
  259. package/build/revamp/wise/renderers/BooleanInputRenderer.js +34 -0
  260. package/build/revamp/wise/renderers/BoxRenderer.js +30 -0
  261. package/build/revamp/wise/renderers/ButtonRenderer.js +64 -0
  262. package/build/revamp/wise/renderers/ColumnsRenderer.js +25 -0
  263. package/build/revamp/wise/renderers/components/FieldInput.js +20 -0
  264. package/build/revamp/wise/renderers/components/Help.js +21 -0
  265. package/build/revamp/wise/renderers/components/LabelContentWithHelp.js +6 -0
  266. package/build/revamp/wise/renderers/utils/layout-utils.js +31 -0
  267. package/build/types/legacy/step/externalConfirmationStep/ExternalConfirmationStep.d.ts +1 -1
  268. package/build/types/revamp/domain/components/StepDomainComponent.d.ts +4 -2
  269. package/build/types/revamp/renderers/step/ExternalConfirmationDialog.d.ts +6 -0
  270. package/build/types/revamp/renderers/{StepRenderer.d.ts → step/StepRenderer.d.ts} +1 -1
  271. package/build/types/revamp/renderers/step/useExternal.d.ts +4 -0
  272. package/build/types/revamp/renderers/stepComponentToProps.d.ts +1 -1
  273. package/build/types/revamp/renderers/types.d.ts +3 -0
  274. package/package.json +13 -13
  275. /package/build/types/{legacy/step/externalConfirmationStep/ExternalConfirmationStep.messages.d.ts → common/messages/external-confirmation.messages.d.ts} +0 -0
@@ -0,0 +1,155 @@
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 __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
13
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
14
+ if (ar || !(i in from)) {
15
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
16
+ ar[i] = from[i];
17
+ }
18
+ }
19
+ return to.concat(ar || Array.prototype.slice.call(from));
20
+ };
21
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
22
+ import { Header } from '@transferwise/components';
23
+ import classNames from 'classnames';
24
+ import { useEffect, useMemo, useState } from 'react';
25
+ import { useEventDispatcher } from '../../common/contexts';
26
+ import { useDebouncedFunction } from '../../common/hooks';
27
+ import { generateRandomId, isConstSchema, isNoNConstSchema } from '../../common/utils';
28
+ import { getValidModelParts, getValidationFailures, isArray, isEmpty, } from '../../common/validators';
29
+ import { DynamicAlert } from '../../layout';
30
+ import ControlFeedback from '../controlFeedback';
31
+ import GenericSchema from '../genericSchema';
32
+ import Help from '../help';
33
+ import SchemaFormControl from '../schemaFormControl';
34
+ import { getActiveSchemaIndex, getValidIndexFromValue } from './utils';
35
+ function OneOfSchema(props) {
36
+ var onEvent = useEventDispatcher();
37
+ var _a = useState(false), changed = _a[0], setChanged = _a[1];
38
+ var _b = useState(false), focused = _b[0], setFocused = _b[1];
39
+ var _c = useState(false), blurred = _c[0], setBlurred = _c[1];
40
+ var id = useMemo(function () { return props.schema.$id || generateRandomId(); }, [props.schema.$id]);
41
+ var _d = useState(getActiveSchemaIndex(props.schema, props.model)), schemaIndex = _d[0], setSchemaIndex = _d[1];
42
+ var _e = useState(getModelPartsForSchemas(props.model, props.schema.oneOf)), models = _e[0], setModels = _e[1];
43
+ var debouncedTrackEvent = useDebouncedFunction(onEvent, 200);
44
+ var onSearchChange = function (searchValue) {
45
+ debouncedTrackEvent('Dynamic Flow - OneOf Searched', {
46
+ oneOfId: props.schema.analyticsId,
47
+ searchValueLength: searchValue.length
48
+ });
49
+ };
50
+ // When the schema we receive from parent changes
51
+ useEffect(function () {
52
+ var modelIndex = getValidIndexFromValue(props.schema, props.model);
53
+ var defaultIndex = getValidIndexFromValue(props.schema, props.schema["default"]);
54
+ if (modelIndex === -1 && defaultIndex >= 0) {
55
+ onChooseNewSchema(defaultIndex, 'init');
56
+ }
57
+ }, [props.schema]);
58
+ if (!isArray(props.schema.oneOf)) {
59
+ // eslint-disable-next-line no-console
60
+ console.error('Incorrect format', props.schema);
61
+ return null;
62
+ }
63
+ var onChildModelChange = function (index, onChangeParameters) {
64
+ setModels(__spreadArray(__spreadArray(__spreadArray([], models.slice(0, index), true), [onChangeParameters.model], false), models.slice(index + 1), true));
65
+ setChanged(true);
66
+ props.onChange(onChangeParameters);
67
+ };
68
+ var onFocus = function () {
69
+ setFocused(true);
70
+ };
71
+ var onBlur = function () {
72
+ setFocused(false);
73
+ setBlurred(true);
74
+ };
75
+ // TODO: LOW avoid type assertion
76
+ var onChooseNewSchema = function (index, type, metadata) {
77
+ setSchemaIndex(index);
78
+ var newSchema = props.schema.oneOf[index];
79
+ if (isConstSchema(newSchema)) {
80
+ // If new schema is a const we want to share the parent schema, not the const
81
+ var model = newSchema["const"];
82
+ props.onChange({
83
+ model: model,
84
+ triggerSchema: props.schema,
85
+ triggerModel: model,
86
+ type: type,
87
+ metadata: metadata
88
+ });
89
+ }
90
+ else {
91
+ props.onChange({
92
+ model: models[index],
93
+ triggerSchema: newSchema,
94
+ triggerModel: models[index],
95
+ type: type,
96
+ metadata: metadata
97
+ });
98
+ }
99
+ if (type !== 'init' && props.schema.analyticsId) {
100
+ onEvent('Dynamic Flow - OneOf Selected', {
101
+ oneOfId: props.schema.analyticsId,
102
+ schemaId: newSchema === null || newSchema === void 0 ? void 0 : newSchema.analyticsId
103
+ });
104
+ }
105
+ };
106
+ var schemaForSelect = mapSchemasForSelect(props.schema);
107
+ var validations = getValidations(props, schemaIndex);
108
+ var formGroupClasses = {
109
+ 'form-group': true,
110
+ 'has-error': (!changed && props.errors && !isEmpty(props.errors)) ||
111
+ ((props.submitted || (changed && blurred)) && validations.length)
112
+ };
113
+ var feedbackId = "".concat(id, "-feedback");
114
+ return (_jsxs(_Fragment, { children: [(props.schema.oneOf.length > 1 || isConstSchema(props.schema.oneOf[0])) && (_jsxs(_Fragment, { children: [props.schema.alert && _jsx(DynamicAlert, { component: props.schema.alert }), _jsxs("div", __assign({ className: classNames(formGroupClasses) }, { children: [getTitleAndHelp(props.schema, id), _jsx(SchemaFormControl, { id: id, schema: schemaForSelect, value: schemaIndex, disabled: props.disabled, describedBy: feedbackId, onChange: onChooseNewSchema, onFocus: onFocus, onBlur: onBlur, onSearchChange: onSearchChange }), _jsx(ControlFeedback, { id: feedbackId, changed: changed, focused: focused, blurred: blurred, submitted: props.submitted, errors: errorsToString(props.errors), schema: props.schema, validations: validations, infoMessage: null })] }))] })), isNoNConstSchema(props.schema.oneOf[schemaIndex]) && (_jsx(GenericSchema, { schema: props.schema.oneOf[schemaIndex], model: models[schemaIndex], errors: props.errors, submitted: props.submitted, hideTitle: true, disabled: props.disabled, onChange: function (parameters) { return onChildModelChange(schemaIndex, parameters); }, onPersistAsync: props.onPersistAsync }))] }));
115
+ }
116
+ function getTitleAndHelp(schema, forId) {
117
+ var _a;
118
+ var helpElement = schema.help ? _jsx(Help, { help: schema.help }) : null;
119
+ var titleElement = isConstSchema(schema.oneOf[0]) ? (_jsx("div", __assign({ className: "m-b-1" }, { children: _jsxs("label", __assign({ className: "control-label d-inline", htmlFor: forId }, { children: [schema.title, " ", helpElement] })) }))) : (_jsx(_Fragment, { children: helpElement ? (_jsxs("h4", __assign({ className: "m-b-2" }, { children: [schema.title, " ", helpElement] }))) : (_jsx(Header, { title: (_a = schema.title) !== null && _a !== void 0 ? _a : '' })) }));
120
+ return schema.title ? titleElement : helpElement;
121
+ }
122
+ function getValidations(props, schemaIndex) {
123
+ var selectedSchema = props.schema.oneOf[schemaIndex !== null && schemaIndex !== void 0 ? schemaIndex : -1];
124
+ if (isConstSchema(selectedSchema)) {
125
+ return getValidationFailures(selectedSchema["const"], props.schema, Boolean(props.required));
126
+ }
127
+ if (schemaIndex === null || schemaIndex < 0) {
128
+ return getValidationFailures(null, props.schema, Boolean(props.required));
129
+ }
130
+ return [];
131
+ }
132
+ function errorsToString(errors) {
133
+ // When oneOf represents a select, errors should be of type string
134
+ if (typeof errors === 'string') {
135
+ return errors;
136
+ }
137
+ return null;
138
+ }
139
+ function getModelPartsForSchemas(model, schemas) {
140
+ return schemas.map(function (schema) { return getValidModelParts(model, schema); });
141
+ }
142
+ // We want our model to be the index, so alter the oneOf schemas to be a const
143
+ function mapSchemasForSelect(schema) {
144
+ return __assign(__assign({}, schema), { oneOf: schema.oneOf.map(mapOneOfToConst) });
145
+ }
146
+ function mapOneOfToConst(schema, index) {
147
+ var title = schema.title, description = schema.description, _a = schema.disabled, disabled = _a === void 0 ? false : _a, icon = schema.icon, image = schema.image, keywords = schema.keywords;
148
+ // TODO LOW avoid type assertion below -- consider adding { type: 'integer' }
149
+ return { title: title, description: description, disabled: disabled, icon: icon, image: image, "const": index, keywords: keywords };
150
+ }
151
+ OneOfSchema.defaultProps = {
152
+ required: false,
153
+ disabled: false
154
+ };
155
+ export default OneOfSchema;
@@ -0,0 +1 @@
1
+ export { default } from './OneOfSchema';
@@ -0,0 +1,68 @@
1
+ import { isObjectModel, isOneOfObjectSchema, isConstSchema, isNoNConstSchema, } from '../../common/utils';
2
+ import { isValidSchema, isUndefined } from '../../common/validators';
3
+ export var getActiveSchemaIndex = function (schema, model) {
4
+ var indexFromModel = getValidIndexFromValue(schema, model);
5
+ // If our model satisfies one of the schemas, use that schema.
6
+ if (indexFromModel >= 0) {
7
+ return indexFromModel;
8
+ }
9
+ // If we have a non-const oneOf and there's only one, active index must be the first one
10
+ if (schema.oneOf.length === 1 && isNoNConstSchema(schema.oneOf[0])) {
11
+ return 0;
12
+ }
13
+ if (isConstSchema(schema.oneOf[0])) {
14
+ var indexFromDefault = getValidIndexFromValue(schema, schema["default"]);
15
+ // If the default value satisfies one of the schemas, use that schema.
16
+ if (indexFromDefault >= 0) {
17
+ return indexFromDefault;
18
+ }
19
+ }
20
+ if (isOneOfObjectSchema(schema) && isObjectModel(model) && Object.keys(model).length >= 1) {
21
+ // Even if the model does not satisfy any of the schemas, it may be closer to one of them.
22
+ return getBestMatchingSchemaIndexForValue(schema, model);
23
+ }
24
+ if (isOneOfObjectSchema(schema) &&
25
+ !isUndefined(schema["default"]) &&
26
+ isObjectModel(schema["default"]) &&
27
+ Object.keys(schema["default"]).length >= 1) {
28
+ // Even if the default value does not satisfy any of the schemas, it may be closer to one of them.
29
+ return getBestMatchingSchemaIndexForValue(schema, schema["default"]);
30
+ }
31
+ // Otherwise do not default
32
+ return null;
33
+ };
34
+ export var getValidIndexFromValue = function (schema, value) {
35
+ var predicate = function (childSchema) {
36
+ return !isUndefined(value) && isValidSchema(value, childSchema);
37
+ };
38
+ if (schema.oneOf.filter(predicate).length === 1) {
39
+ return schema.oneOf.findIndex(predicate);
40
+ }
41
+ return -1;
42
+ };
43
+ export function getBestMatchingSchemaIndexForValue(schema, value) {
44
+ if (value === null || value === undefined) {
45
+ return null;
46
+ }
47
+ var schemaPoints = schema.oneOf.map(function (childSchema) {
48
+ return getSchemaProperties(childSchema).reduce(function (total, _a) {
49
+ var key = _a[0], propertySchema = _a[1];
50
+ if (isConstSchema(propertySchema) && propertySchema["const"] === value[key]) {
51
+ return total + 2;
52
+ }
53
+ if (isNoNConstSchema(propertySchema) && typeof value[key] !== 'undefined') {
54
+ return total + 1;
55
+ }
56
+ return total;
57
+ }, 0);
58
+ });
59
+ if (schemaPoints.every(function (p) { return p === schemaPoints[0]; })) {
60
+ return null;
61
+ }
62
+ return schemaPoints.indexOf(Math.max.apply(Math, schemaPoints));
63
+ }
64
+ function getSchemaProperties(childSchema) {
65
+ return childSchema.properties !== null && typeof childSchema.properties === 'object'
66
+ ? Object.entries(childSchema.properties)
67
+ : [];
68
+ }
@@ -0,0 +1,26 @@
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
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import PersistAsyncBasicSchema from './persistAsyncBasicSchema';
14
+ import PersistAsyncBlobSchema from './persistAsyncBlobSchema';
15
+ function PersistAsyncSchema(props) {
16
+ var schema = props.schema;
17
+ var persistAsyncSchemaType = schema.persistAsync.schema.type;
18
+ if (persistAsyncSchemaType === 'blob') {
19
+ return (_jsx(PersistAsyncBlobSchema, __assign({}, props)));
20
+ }
21
+ return _jsx(PersistAsyncBasicSchema, __assign({}, props));
22
+ }
23
+ PersistAsyncSchema.defaultProps = {
24
+ required: false
25
+ };
26
+ export default PersistAsyncSchema;
@@ -0,0 +1 @@
1
+ export { default } from './PersistAsyncSchema';
@@ -0,0 +1,165 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ 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;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { jsx as _jsx } from "react/jsx-runtime";
38
+ import { useEffect, useState } from 'react';
39
+ import { useIntl } from 'react-intl';
40
+ import { FormControlType } from '../../../common/constants';
41
+ import { useEventDispatcher } from '../../../common/contexts';
42
+ import { usePrevious } from '../../../common/hooks';
43
+ import { isEqual, isStatus2xx, isStatus422 } from '../../../common/utils';
44
+ import { isValidSchema, isNull, isObject } from '../../../common/validators';
45
+ import BasicTypeSchema from '../../basicTypeSchema';
46
+ import { getControlType } from '../../schemaFormControl/SchemaFormControl';
47
+ import messages from '../../../../common/messages/generic-error.messages';
48
+ import { useHttpClient } from '../../../../common/httpClientContext';
49
+ // TODO: LOW avoid type assertion below -- consider throwing if return value is not the expected type
50
+ export var getIdFromResponse = function (idProperty, response) {
51
+ return response[idProperty];
52
+ };
53
+ export var getErrorFromResponse = function (errorProperty, response) { var _a; return (_a = response.validation) === null || _a === void 0 ? void 0 : _a[errorProperty]; };
54
+ var controlTypesWithPersistOnChange = new Set([
55
+ FormControlType.RADIO,
56
+ FormControlType.SELECT,
57
+ FormControlType.DATELOOKUP,
58
+ FormControlType.FILE,
59
+ FormControlType.UPLOAD,
60
+ ]);
61
+ function PersistAsyncBasicSchema(props) {
62
+ var _this = this;
63
+ var schema = props.schema, required = props.required, submitted = props.submitted, errors = props.errors, onChange = props.onChange, onPersistAsync = props.onPersistAsync;
64
+ var intl = useIntl();
65
+ var httpClient = useHttpClient();
66
+ var onEvent = useEventDispatcher();
67
+ var _a = useState(null), persistAsyncModel = _a[0], setPersistAsyncModel = _a[1];
68
+ // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
69
+ var previousPersistAsyncModel = usePrevious(persistAsyncModel);
70
+ var _b = useState(null), persistAsyncError = _b[0], setPersistAsyncError = _b[1];
71
+ var _c = useState(false), fieldSubmitted = _c[0], setFieldSubmitted = _c[1];
72
+ var _d = useState(null), abortController = _d[0], setAbortController = _d[1];
73
+ useEffect(function () {
74
+ if (controlTypesWithPersistOnChange.has(
75
+ // TODO: LOW avoid type assertion below -- control type may be nullish. consider ?? ''
76
+ getControlType(schema.persistAsync.schema))) {
77
+ persistAsyncIfValid();
78
+ }
79
+ }, [persistAsyncModel]);
80
+ var setGenericPersistAsyncError = function () {
81
+ return setPersistAsyncError(intl.formatMessage(messages.genericErrorRetryHint));
82
+ };
83
+ var getPersistAsyncResponse = function (currentPersistAsyncModel, persistAsyncSpec) { return __awaiter(_this, void 0, void 0, function () {
84
+ var signal, requestBody, persistAsyncFetch, response, responseBody, _a, idProperty, param, id, validation, error, _b;
85
+ var _c;
86
+ return __generator(this, function (_d) {
87
+ switch (_d.label) {
88
+ case 0:
89
+ signal = abortCurrentRequestAndGetNewAbortSignal();
90
+ requestBody = (_c = {}, _c[persistAsyncSpec.param] = currentPersistAsyncModel, _c);
91
+ setFieldSubmitted(true); // persist async initiated implied the field has been submitted
92
+ _d.label = 1;
93
+ case 1:
94
+ _d.trys.push([1, 4, , 5]);
95
+ onEvent('Dynamic Flow - PersistAsync', { status: 'pending', schemaId: schema.$id });
96
+ persistAsyncFetch = httpClient(persistAsyncSpec.url, {
97
+ method: persistAsyncSpec.method,
98
+ headers: { 'Content-Type': 'application/json' },
99
+ body: JSON.stringify(requestBody),
100
+ signal: signal
101
+ });
102
+ onPersistAsync(persistAsyncFetch);
103
+ return [4 /*yield*/, persistAsyncFetch];
104
+ case 2:
105
+ response = _d.sent();
106
+ return [4 /*yield*/, response.json()];
107
+ case 3:
108
+ responseBody = _d.sent();
109
+ if (!isObject(responseBody)) {
110
+ throw new Error('Response is not an object');
111
+ }
112
+ _a = schema.persistAsync, idProperty = _a.idProperty, param = _a.param;
113
+ if (isStatus2xx(response.status)) {
114
+ id = getIdFromResponse(idProperty, responseBody);
115
+ onChange({ model: id, triggerSchema: schema, triggerModel: id });
116
+ }
117
+ else if (isStatus422(response.status)) {
118
+ validation = responseBody.validation;
119
+ error = (isObject(validation) && (validation === null || validation === void 0 ? void 0 : validation[param])) || null;
120
+ setPersistAsyncError(error);
121
+ onChange({ model: null, triggerSchema: schema, triggerModel: null });
122
+ }
123
+ else {
124
+ setGenericPersistAsyncError();
125
+ }
126
+ onEvent('Dynamic Flow - PersistAsync', { status: 'success', schemaId: schema.$id });
127
+ return [3 /*break*/, 5];
128
+ case 4:
129
+ _b = _d.sent();
130
+ onEvent('Dynamic Flow - PersistAsync', { status: 'failure', schemaId: schema.$id });
131
+ setGenericPersistAsyncError();
132
+ return [3 /*break*/, 5];
133
+ case 5: return [2 /*return*/];
134
+ }
135
+ });
136
+ }); };
137
+ var abortCurrentRequestAndGetNewAbortSignal = function () {
138
+ if (abortController) {
139
+ abortController.abort();
140
+ }
141
+ var newAbortController = new AbortController();
142
+ setAbortController(newAbortController);
143
+ return newAbortController.signal;
144
+ };
145
+ var persistAsyncIfValid = function () {
146
+ if (!isNull(persistAsyncModel) && !isEqual(persistAsyncModel, previousPersistAsyncModel)) {
147
+ void getPersistAsyncResponse(persistAsyncModel, schema.persistAsync);
148
+ }
149
+ };
150
+ var onBlur = function () {
151
+ persistAsyncIfValid();
152
+ };
153
+ var persistAsyncOnChange = function (_a) {
154
+ var newPersistAsyncModel = _a.model;
155
+ setPersistAsyncError(null);
156
+ if (isValidSchema(newPersistAsyncModel, schema.persistAsync.schema)) {
157
+ setPersistAsyncModel(newPersistAsyncModel);
158
+ }
159
+ };
160
+ return (_jsx(BasicTypeSchema, { required: required, submitted: submitted || fieldSubmitted, schema: schema.persistAsync.schema, errors: persistAsyncError || errors, model: null, infoMessage: null, onChange: persistAsyncOnChange, onBlur: onBlur }));
161
+ }
162
+ PersistAsyncBasicSchema.defaultProps = {
163
+ required: false
164
+ };
165
+ export default PersistAsyncBasicSchema;
@@ -0,0 +1 @@
1
+ export { default } from './PersistAsyncBasicSchema';
@@ -0,0 +1,131 @@
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, jsxs as _jsxs } from "react/jsx-runtime";
49
+ import classNames from 'classnames';
50
+ import { useEffect, useState } from 'react';
51
+ import { useEventDispatcher } from '../../../common/contexts';
52
+ import { isStatus422 } from '../../../common/utils';
53
+ import { getValidationFailures } from '../../../common/validators';
54
+ import ControlFeedback from '../../controlFeedback';
55
+ import { mapSchemaToUploadOptions } from '../../schemaFormControl/utils';
56
+ import { getIdFromResponse } from '../persistAsyncBasicSchema/PersistAsyncBasicSchema';
57
+ import { UploadInputAdapter } from './UploadInputAdapter';
58
+ import { useHttpClient } from '../../../../common/httpClientContext';
59
+ function PersistAsyncBlobSchema(props) {
60
+ var _this = this;
61
+ var model = props.model, schema = props.schema, submitted = props.submitted, required = props.required, errors = props.errors, onChange = props.onChange;
62
+ var _a = useState({}), persistAsyncValidationMessages = _a[0], setPersistAsyncValidationMessages = _a[1];
63
+ var _b = useState(null), persistAsyncValidations = _b[0], setPersistAsyncValidations = _b[1];
64
+ var _c = useState([]), validations = _c[0], setValidations = _c[1];
65
+ var _d = useState(false), changed = _d[0], setChanged = _d[1];
66
+ var httpClient = useHttpClient();
67
+ var onEvent = useEventDispatcher();
68
+ useEffect(function () {
69
+ if (submitted) {
70
+ setValidations(getValidationFailures(model, schema, Boolean(required)));
71
+ }
72
+ else {
73
+ setValidations([]);
74
+ }
75
+ }, [model, schema, submitted, required]);
76
+ var onSuccess = function (httpResponse, _fileName) { return __awaiter(_this, void 0, void 0, function () {
77
+ var jsonResponse, id;
78
+ return __generator(this, function (_a) {
79
+ switch (_a.label) {
80
+ case 0: return [4 /*yield*/, httpResponse.json()];
81
+ case 1:
82
+ jsonResponse = (_a.sent());
83
+ id = getIdFromResponse(schema.persistAsync.idProperty, jsonResponse);
84
+ onChange({ model: id, triggerSchema: schema, triggerModel: id });
85
+ setChanged(true);
86
+ onEvent('Dynamic Flow - PersistAsync', { status: 'success', schemaId: schema.$id });
87
+ return [2 /*return*/];
88
+ }
89
+ });
90
+ }); };
91
+ var onFailure = function (errorResponse) { return __awaiter(_this, void 0, void 0, function () {
92
+ var jsonResponse;
93
+ return __generator(this, function (_a) {
94
+ switch (_a.label) {
95
+ case 0:
96
+ if (!(errorResponse.response && isStatus422(errorResponse.response.status))) return [3 /*break*/, 2];
97
+ return [4 /*yield*/, errorResponse.response.json()];
98
+ case 1:
99
+ jsonResponse = (_a.sent());
100
+ setPersistAsyncValidationMessages(jsonResponse.validation || {});
101
+ setPersistAsyncValidations([schema.persistAsync.param]);
102
+ _a.label = 2;
103
+ case 2:
104
+ onChange({ model: null, triggerSchema: schema, triggerModel: null });
105
+ setChanged(true);
106
+ onEvent('Dynamic Flow - PersistAsync', { status: 'failure', schemaId: schema.$id });
107
+ return [2 /*return*/];
108
+ }
109
+ });
110
+ }); };
111
+ var onCancel = function () {
112
+ setPersistAsyncValidations(null);
113
+ onChange({ model: null, triggerSchema: schema, triggerModel: null });
114
+ setChanged(true);
115
+ };
116
+ var _e = schema.persistAsync, url = _e.url, method = _e.method;
117
+ var combinedValidations = persistAsyncValidations || validations;
118
+ var formGroupClasses = {
119
+ 'form-group': true,
120
+ 'has-error': (submitted || changed) && Boolean(combinedValidations.length)
121
+ };
122
+ var id = schema.$id || schema.persistAsync.schema.$id || schema.persistAsync.idProperty;
123
+ var feedbackId = "".concat(id, "-feedback");
124
+ return (_jsxs("div", __assign({ className: classNames(formGroupClasses) }, { children: [_jsx("div", __assign({ "aria-describedby": feedbackId }, { children: _jsx(UploadInputAdapter, __assign({ id: id,
125
+ // TODO: LOW avoid type assertion -- model can be null, but fileId must be number | string -- or maybe make fileId: string| number | undefined
126
+ fileId: model, idProperty: schema.persistAsync.idProperty, animationDelay: 0, maxSize: schema.persistAsync.schema.maxSize, usLabel: schema.title || schema.persistAsync.schema.title, usPlaceholder: schema.description || schema.persistAsync.schema.description, httpOptions: { url: url, method: method, fileInputName: schema.persistAsync.param }, httpClient: httpClient, onSuccess: onSuccess, onFailure: onFailure, onCancel: onCancel }, mapSchemaToUploadOptions(schema.persistAsync.schema))) })), _jsx(ControlFeedback, { id: feedbackId, blurred: true, focused: false, changed: changed, submitted: submitted, errors: errors, schema: schema, validations: combinedValidations, validationMessages: __assign({ required: 'Value is required...' }, persistAsyncValidationMessages), infoMessage: null })] })));
127
+ }
128
+ PersistAsyncBlobSchema.defaultProps = {
129
+ required: false
130
+ };
131
+ export default PersistAsyncBlobSchema;
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Status, UploadInput } from '@transferwise/components';
3
+ import { useMemo } from 'react';
4
+ import { useEventDispatcher } from '../../../common/contexts';
5
+ import { toKilobytes } from '../../../common/utils';
6
+ export function UploadInputAdapter(props) {
7
+ var id = props.id, _a = props.httpClient, httpClient = _a === void 0 ? fetch : _a, httpOptions = props.httpOptions, fileId = props.fileId, idProperty = props.idProperty, usAccept = props.usAccept, maxSize = props.maxSize, usPlaceholder = props.usPlaceholder, onSuccess = props.onSuccess, onFailure = props.onFailure, onCancel = props.onCancel;
8
+ var onEvent = useEventDispatcher();
9
+ var files = useMemo(function () { return (fileId ? [{ id: fileId, status: Status.SUCCEEDED }] : []); }, [fileId]);
10
+ var uploadFile = function (formData) {
11
+ onEvent('Dynamic Flow - PersistAsync', { status: 'pending', schemaId: id });
12
+ return httpClient(String(httpOptions.url), {
13
+ method: httpOptions.method || 'POST',
14
+ body: formData
15
+ }).then(function (response) {
16
+ if (response.ok) {
17
+ onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(response.clone());
18
+ return response.json().then(function (responseBody) { return ({
19
+ id: responseBody[idProperty]
20
+ }); });
21
+ }
22
+ onFailure === null || onFailure === void 0 ? void 0 : onFailure({ response: response });
23
+ // eslint-disable-next-line prefer-promise-reject-errors
24
+ return Promise.reject();
25
+ });
26
+ };
27
+ return (_jsx(UploadInput, { id: id, fileInputName: httpOptions.fileInputName, files: files, uploadButtonTitle: props.usLabel, sizeLimit: maxSize ? toKilobytes(maxSize) : undefined, fileTypes: usAccept, description: usPlaceholder, onUploadFile: uploadFile, onDeleteFile: function (_id) {
28
+ onCancel === null || onCancel === void 0 ? void 0 : onCancel();
29
+ return Promise.resolve();
30
+ } }));
31
+ }
@@ -0,0 +1 @@
1
+ export { default } from './PersistAsyncBlobSchema';