@wise/dynamic-flow-client 3.4.1 → 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 (260) 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/index.js +36 -0
  18. package/build/legacy/common/constants/DateMode.js +4 -0
  19. package/build/legacy/common/constants/FeatureName.js +4 -0
  20. package/build/legacy/common/constants/FormControlType.js +21 -0
  21. package/build/legacy/common/constants/MonthFormat.js +4 -0
  22. package/build/legacy/common/constants/Size.js +7 -0
  23. package/build/legacy/common/constants/index.js +4 -0
  24. package/build/legacy/common/contexts/dynamicFlowContexts/DynamicFlowContexts.js +36 -0
  25. package/build/legacy/common/contexts/dynamicFlowContexts/usePendingPromiseCounter.js +13 -0
  26. package/build/legacy/common/contexts/eventsContext/EventsContext.js +38 -0
  27. package/build/legacy/common/contexts/featureContext/FeatureContext.js +22 -0
  28. package/build/legacy/common/contexts/index.js +3 -0
  29. package/build/legacy/common/contexts/logContext/LogContext.js +44 -0
  30. package/build/legacy/common/hooks/index.js +7 -0
  31. package/build/legacy/common/hooks/useDebouncedFunction/useDebouncedFunction.js +9 -0
  32. package/build/legacy/common/hooks/useExternal/useExternal.js +15 -0
  33. package/build/legacy/common/hooks/useExternalStepPolling/useExternalStepPolling.js +70 -0
  34. package/build/legacy/common/hooks/usePersistAsync/usePersistAsync.js +172 -0
  35. package/build/legacy/common/hooks/usePolling/usePolling.js +51 -0
  36. package/build/legacy/common/hooks/usePrevious/usePrevious.js +8 -0
  37. package/build/legacy/common/hooks/useStepPolling/useStepPolling.js +43 -0
  38. package/build/legacy/common/messages.js +8 -0
  39. package/build/legacy/common/utils/api-utils.js +6 -0
  40. package/build/legacy/common/utils/date-utils.js +22 -0
  41. package/build/legacy/common/utils/debounce.js +38 -0
  42. package/build/legacy/common/utils/file-utils.js +45 -0
  43. package/build/legacy/common/utils/id-utils.js +5 -0
  44. package/build/legacy/common/utils/index.js +11 -0
  45. package/build/legacy/common/utils/is-equal.js +21 -0
  46. package/build/legacy/common/utils/misc-utils.js +4 -0
  47. package/build/legacy/common/utils/mobile-utils.js +23 -0
  48. package/build/legacy/common/utils/model-utils.js +33 -0
  49. package/build/legacy/common/utils/schema-utils.js +113 -0
  50. package/build/legacy/common/utils/step-utils.js +32 -0
  51. package/build/legacy/common/validators/index.js +5 -0
  52. package/build/legacy/common/validators/models/model-utils.js +119 -0
  53. package/build/legacy/common/validators/models/model-validators.js +62 -0
  54. package/build/legacy/common/validators/schemas/schema-validators.js +101 -0
  55. package/build/legacy/common/validators/types/type-validators.js +14 -0
  56. package/build/legacy/common/validators/validationFailures/validation-failures.js +139 -0
  57. package/build/legacy/common/validators/validationFailures/validation-failures.utils.js +40 -0
  58. package/build/legacy/common/validators/values/value-validators.js +6 -0
  59. package/build/legacy/dynamic-flow-types.js +1 -0
  60. package/build/legacy/dynamicFlow/BackButton.js +22 -0
  61. package/build/legacy/dynamicFlow/DynamicFlow.js +346 -0
  62. package/build/legacy/dynamicFlow/DynamicFlowStep.js +37 -0
  63. package/build/legacy/dynamicFlow/DynamicFlowTypes.js +1 -0
  64. package/build/legacy/dynamicFlow/index.js +1 -0
  65. package/build/legacy/dynamicFlow/utils/index.js +5 -0
  66. package/build/legacy/dynamicFlow/utils/responseParsers/response-parsers.js +185 -0
  67. package/build/legacy/dynamicFlow/utils/useDebouncedRefresh/useDebouncedRefresh.js +26 -0
  68. package/build/legacy/dynamicFlow/utils/useDynamicFlowState.js +137 -0
  69. package/build/legacy/dynamicFlow/utils/useLoader.js +22 -0
  70. package/build/legacy/formControl/FormControl.js +266 -0
  71. package/build/legacy/formControl/index.js +1 -0
  72. package/build/legacy/formControl/utils/getAutocompleteString.js +80 -0
  73. package/build/legacy/formControl/utils/index.js +2 -0
  74. package/build/legacy/formControl/utils/value-utils.js +108 -0
  75. package/build/legacy/jsonSchemaForm/JsonSchemaForm.js +24 -0
  76. package/build/legacy/jsonSchemaForm/allOfSchema/AllOfSchema.js +50 -0
  77. package/build/legacy/jsonSchemaForm/allOfSchema/index.js +1 -0
  78. package/build/legacy/jsonSchemaForm/arrayTypeSchema/ArraySchema.js +25 -0
  79. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/ArrayListSchema.js +34 -0
  80. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multiSelectSchema/MultiSelectSchema.js +84 -0
  81. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/MultipleFileUploadSchema.js +141 -0
  82. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/index.js +1 -0
  83. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/utils/index.js +2 -0
  84. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/utils/upload-utils.js +79 -0
  85. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/utils/useFormattedDefaultErrorMessages.js +14 -0
  86. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/ItemSummary.js +7 -0
  87. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/RepeatableSchema.js +134 -0
  88. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/RepeatableSchemaStep.js +85 -0
  89. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/utils/summary-utils.js +135 -0
  90. package/build/legacy/jsonSchemaForm/arrayTypeSchema/index.js +1 -0
  91. package/build/legacy/jsonSchemaForm/basicTypeSchema/BasicTypeSchema.js +111 -0
  92. package/build/legacy/jsonSchemaForm/basicTypeSchema/index.js +1 -0
  93. package/build/legacy/jsonSchemaForm/controlFeedback/ControlFeedback.js +86 -0
  94. package/build/legacy/jsonSchemaForm/controlFeedback/index.js +1 -0
  95. package/build/legacy/jsonSchemaForm/genericSchema/GenericSchema.js +85 -0
  96. package/build/legacy/jsonSchemaForm/genericSchema/index.js +1 -0
  97. package/build/legacy/jsonSchemaForm/help/Help.js +20 -0
  98. package/build/legacy/jsonSchemaForm/help/index.js +1 -0
  99. package/build/legacy/jsonSchemaForm/index.js +1 -0
  100. package/build/legacy/jsonSchemaForm/objectSchema/ObjectSchema.js +77 -0
  101. package/build/legacy/jsonSchemaForm/objectSchema/index.js +1 -0
  102. package/build/legacy/jsonSchemaForm/oneOfSchema/OneOfSchema.js +155 -0
  103. package/build/legacy/jsonSchemaForm/oneOfSchema/index.js +1 -0
  104. package/build/legacy/jsonSchemaForm/oneOfSchema/utils.js +68 -0
  105. package/build/legacy/jsonSchemaForm/persistAsyncSchema/PersistAsyncSchema.js +26 -0
  106. package/build/legacy/jsonSchemaForm/persistAsyncSchema/index.js +1 -0
  107. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBasicSchema/PersistAsyncBasicSchema.js +165 -0
  108. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBasicSchema/index.js +1 -0
  109. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/PersistAsyncBlobSchema.js +131 -0
  110. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/UploadInputAdapter.js +31 -0
  111. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/index.js +1 -0
  112. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/PromotedOneOfSchema.js +72 -0
  113. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/index.js +1 -0
  114. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promoted-one-of-utils.js +8 -0
  115. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfCheckboxControl.js +27 -0
  116. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfControl.js +31 -0
  117. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfRadioControl.js +32 -0
  118. package/build/legacy/jsonSchemaForm/readOnlySchema/ReadOnlySchema.js +54 -0
  119. package/build/legacy/jsonSchemaForm/readOnlySchema/ReadOnlySchema.messages.js +13 -0
  120. package/build/legacy/jsonSchemaForm/readOnlySchema/index.js +1 -0
  121. package/build/legacy/jsonSchemaForm/schemaFormControl/SchemaFormControl.js +133 -0
  122. package/build/legacy/jsonSchemaForm/schemaFormControl/index.js +1 -0
  123. package/build/legacy/jsonSchemaForm/schemaFormControl/utils/index.js +1 -0
  124. package/build/legacy/jsonSchemaForm/schemaFormControl/utils/mapping-utils.js +107 -0
  125. package/build/legacy/jsonSchemaForm/validationAsyncSchema/ValidationAsyncSchema.js +150 -0
  126. package/build/legacy/jsonSchemaForm/validationAsyncSchema/index.js +1 -0
  127. package/build/legacy/layout/DynamicLayout.js +68 -0
  128. package/build/legacy/layout/alert/DynamicAlert.js +29 -0
  129. package/build/legacy/layout/box/DynamicBox.js +41 -0
  130. package/build/legacy/layout/button/DynamicButton.js +27 -0
  131. package/build/legacy/layout/button/utils.js +45 -0
  132. package/build/legacy/layout/columns/DynamicColumns.js +38 -0
  133. package/build/legacy/layout/decision/DynamicDecision.js +21 -0
  134. package/build/legacy/layout/divider/DynamicDivider.js +9 -0
  135. package/build/legacy/layout/external/DynamicExternal.js +32 -0
  136. package/build/legacy/layout/external/DynamicExternal.messages.js +8 -0
  137. package/build/legacy/layout/form/DynamicForm.js +22 -0
  138. package/build/legacy/layout/heading/DynamicHeading.js +51 -0
  139. package/build/legacy/layout/icon/DynamicIcon.js +17 -0
  140. package/build/legacy/layout/icon/FlagIcon.js +198 -0
  141. package/build/legacy/layout/icon/NamedIcon.js +19 -0
  142. package/build/legacy/layout/image/DynamicImage.js +111 -0
  143. package/build/legacy/layout/index.js +20 -0
  144. package/build/legacy/layout/instructions/DynamicInstructions.js +30 -0
  145. package/build/legacy/layout/list/DynamicStatusList.js +37 -0
  146. package/build/legacy/layout/loadingIndicator/DynamicLoadingIndicator.js +11 -0
  147. package/build/legacy/layout/markdown/DynamicMarkdown.js +23 -0
  148. package/build/legacy/layout/modal/DynamicModal.js +26 -0
  149. package/build/legacy/layout/paragraph/DynamicParagraph.js +46 -0
  150. package/build/legacy/layout/paragraph/useSnackBarIfAvailable.js +9 -0
  151. package/build/legacy/layout/review/DynamicReview.js +58 -0
  152. package/build/legacy/layout/search/DynamicSearch.js +58 -0
  153. package/build/legacy/layout/search/SearchInput.js +17 -0
  154. package/build/legacy/layout/search/SearchResults.js +31 -0
  155. package/build/legacy/layout/search/useSearch.js +137 -0
  156. package/build/legacy/layout/utils/getNavigationOptionMedia.js +28 -0
  157. package/build/legacy/layout/utils/index.js +32 -0
  158. package/build/legacy/step/cameraStep/CameraStep.js +124 -0
  159. package/build/legacy/step/cameraStep/cameraCapture/CameraCapture.js +161 -0
  160. package/build/legacy/step/cameraStep/cameraCapture/CameraCapture.messages.js +58 -0
  161. package/build/legacy/step/cameraStep/cameraCapture/components/bottomBar/BottomBar.js +28 -0
  162. package/build/legacy/step/cameraStep/cameraCapture/components/index.js +3 -0
  163. package/build/legacy/step/cameraStep/cameraCapture/components/orientationLockOverlay/OrientationLockOverlay.js +19 -0
  164. package/build/legacy/step/cameraStep/cameraCapture/components/orientationLockOverlay/OrientationLockOverlay.messages.js +8 -0
  165. package/build/legacy/step/cameraStep/cameraCapture/hooks/useFullScreenOrientationLock.js +60 -0
  166. package/build/legacy/step/cameraStep/cameraCapture/hooks/useVideoConstraints.js +80 -0
  167. package/build/legacy/step/cameraStep/cameraCapture/index.js +1 -0
  168. package/build/legacy/step/cameraStep/cameraCapture/overlay/Overlay.js +77 -0
  169. package/build/legacy/step/cameraStep/cameraCapture/screens/cameraErrorScreen/CameraErrorScreen.js +18 -0
  170. package/build/legacy/step/cameraStep/cameraCapture/screens/index.js +1 -0
  171. package/build/legacy/step/cameraStep/cameraCapture/tracking/index.js +109 -0
  172. package/build/legacy/step/cameraStep/cameraCapture/types/index.js +7 -0
  173. package/build/legacy/step/cameraStep/cameraCapture/utils/index.js +107 -0
  174. package/build/legacy/step/cameraStep/index.js +1 -0
  175. package/build/legacy/step/externalConfirmationStep/ExternalConfirmationStep.js +64 -0
  176. package/build/legacy/step/externalConfirmationStep/index.js +1 -0
  177. package/build/legacy/step/index.js +3 -0
  178. package/build/legacy/step/layoutStep/LayoutStep.js +33 -0
  179. package/build/legacy/step/layoutStep/index.js +1 -0
  180. package/build/legacy/step/layoutStep/utils/index.js +2 -0
  181. package/build/legacy/step/layoutStep/utils/inline-reference-utils.js +105 -0
  182. package/build/legacy/step/layoutStep/utils/layout-utils.js +212 -0
  183. package/build/main.js +4775 -225
  184. package/build/main.min.js +1 -1
  185. package/build/main.mjs +4776 -226
  186. package/build/revamp/domain/components/AlertComponent.js +50 -0
  187. package/build/revamp/domain/components/AllOfComponent.js +72 -0
  188. package/build/revamp/domain/components/BooleanInputComponent.js +108 -0
  189. package/build/revamp/domain/components/BoxComponent.js +65 -0
  190. package/build/revamp/domain/components/ButtonComponent.js +50 -0
  191. package/build/revamp/domain/components/ColumnsComponent.js +74 -0
  192. package/build/revamp/domain/components/ConstComponent.js +50 -0
  193. package/build/revamp/domain/components/ContainerComponent.js +65 -0
  194. package/build/revamp/domain/components/DateInputComponent.js +127 -0
  195. package/build/revamp/domain/components/DecisionComponent.js +50 -0
  196. package/build/revamp/domain/components/DividerComponent.js +50 -0
  197. package/build/revamp/domain/components/FormComponent.js +65 -0
  198. package/build/revamp/domain/components/HeadingComponent.js +50 -0
  199. package/build/revamp/domain/components/ImageComponent.js +50 -0
  200. package/build/revamp/domain/components/InstructionsComponent.js +50 -0
  201. package/build/revamp/domain/components/IntegerInputComponent.js +125 -0
  202. package/build/revamp/domain/components/LoadingIndicatorComponent.js +50 -0
  203. package/build/revamp/domain/components/MarkdownComponent.js +50 -0
  204. package/build/revamp/domain/components/ModalComponent.js +65 -0
  205. package/build/revamp/domain/components/MultiUploadInputComponent.js +190 -0
  206. package/build/revamp/domain/components/NumberInputComponent.js +125 -0
  207. package/build/revamp/domain/components/ObjectComponent.js +104 -0
  208. package/build/revamp/domain/components/ParagraphComponent.js +50 -0
  209. package/build/revamp/domain/components/ReviewComponent.js +50 -0
  210. package/build/revamp/domain/components/SelectInputComponent.js +138 -0
  211. package/build/revamp/domain/components/StatusListComponent.js +50 -0
  212. package/build/revamp/domain/components/StepDomainComponent.js +93 -0
  213. package/build/revamp/domain/components/TextInputComponent.js +125 -0
  214. package/build/revamp/domain/components/UploadInputComponent.js +151 -0
  215. package/build/revamp/domain/components/repeatableComponent/RepeatableComponent.js +148 -0
  216. package/build/revamp/domain/components/searchComponent/SearchComponent.js +108 -0
  217. package/build/revamp/domain/components/utils/component-utils.js +18 -0
  218. package/build/revamp/domain/components/utils/debounce.js +38 -0
  219. package/build/revamp/domain/components/utils/file-utils.js +46 -0
  220. package/build/revamp/domain/components/utils/getComponentForLocalValueKey.js +31 -0
  221. package/build/revamp/domain/components/utils/isPartialLocalValueMatch.js +40 -0
  222. package/build/revamp/domain/features/events.js +1 -0
  223. package/build/revamp/domain/features/persistAsync/getComponentPersistAsync.js +133 -0
  224. package/build/revamp/domain/features/persistAsync/getPerformPersistAsync.js +103 -0
  225. package/build/revamp/domain/features/refresh/getPerformRefresh.js +53 -0
  226. package/build/revamp/domain/features/summary/summary-utils.js +39 -0
  227. package/build/revamp/domain/features/utils/http-utils.js +34 -0
  228. package/build/revamp/domain/features/utils/response-utils.js +9 -0
  229. package/build/revamp/domain/features/validation/validation-functions.js +12 -0
  230. package/build/revamp/domain/features/validation/value-checks.js +111 -0
  231. package/build/revamp/domain/features/validationAsync/getComponentValidationAsync.js +94 -0
  232. package/build/revamp/domain/features/validationAsync/getPerformValidationAsync.js +107 -0
  233. package/build/revamp/domain/mappers/types.js +1 -0
  234. package/build/revamp/domain/types.js +1 -0
  235. package/build/revamp/flow/response-utils.js +88 -0
  236. package/build/revamp/renderers/CoreContainerRenderer.js +8 -0
  237. package/build/revamp/renderers/LoadingContext.js +7 -0
  238. package/build/revamp/renderers/types.js +1 -0
  239. package/build/revamp/types.js +1 -0
  240. package/build/revamp/utils/component-utils.js +86 -0
  241. package/build/revamp/utils/type-utils.js +56 -0
  242. package/build/revamp/utils/type-validators.js +16 -0
  243. package/build/revamp/wise/renderers/AlertRenderer.js +11 -0
  244. package/build/revamp/wise/renderers/BooleanInputRenderer.js +34 -0
  245. package/build/revamp/wise/renderers/BoxRenderer.js +30 -0
  246. package/build/revamp/wise/renderers/ButtonRenderer.js +64 -0
  247. package/build/revamp/wise/renderers/ColumnsRenderer.js +25 -0
  248. package/build/revamp/wise/renderers/components/FieldInput.js +20 -0
  249. package/build/revamp/wise/renderers/components/Help.js +21 -0
  250. package/build/revamp/wise/renderers/components/LabelContentWithHelp.js +6 -0
  251. package/build/revamp/wise/renderers/utils/layout-utils.js +31 -0
  252. package/build/types/legacy/step/externalConfirmationStep/ExternalConfirmationStep.d.ts +1 -1
  253. package/build/types/revamp/domain/components/StepDomainComponent.d.ts +4 -2
  254. package/build/types/revamp/renderers/step/ExternalConfirmationDialog.d.ts +6 -0
  255. package/build/types/revamp/renderers/{StepRenderer.d.ts → step/StepRenderer.d.ts} +1 -1
  256. package/build/types/revamp/renderers/step/useExternal.d.ts +4 -0
  257. package/build/types/revamp/renderers/stepComponentToProps.d.ts +1 -1
  258. package/build/types/revamp/renderers/types.d.ts +3 -0
  259. package/package.json +13 -13
  260. /package/build/types/{legacy/step/externalConfirmationStep/ExternalConfirmationStep.messages.d.ts → common/messages/external-confirmation.messages.d.ts} +0 -0
@@ -0,0 +1,50 @@
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, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import { Header } from '@transferwise/components';
14
+ import classNames from 'classnames';
15
+ import { useState } from 'react';
16
+ import { getValidObjectModelParts } from '../../common/validators';
17
+ import GenericSchema from '../genericSchema';
18
+ // If wew receive a model, break it down to parts valid for each schema
19
+ var splitModel = function (model, schemas) {
20
+ return schemas.map(function (schema) { return getValidObjectModelParts(model, schema) || {}; });
21
+ };
22
+ var combineModels = function (models) {
23
+ return models.reduce(function (current, combined) { return (__assign(__assign({}, combined), current)); }, {});
24
+ };
25
+ var getSchemaColumnClasses = function (width) { return ({
26
+ 'col-xs-12': true,
27
+ 'col-sm-6': width === 'md',
28
+ 'col-sm-4': width === 'sm'
29
+ }); };
30
+ function AllOfSchema(props) {
31
+ var onChangeModelIndex = function (index, onChangeProps) {
32
+ var modelSchema = props.schema.allOf[index];
33
+ // FIXME we should not mutate models here
34
+ models[index] = getValidObjectModelParts(onChangeProps.model, modelSchema) || {};
35
+ setModels(models);
36
+ props.onChange(__assign(__assign({}, onChangeProps), { model: combineModels(models) }));
37
+ };
38
+ var _a = useState(splitModel(props.model, props.schema.allOf)), models = _a[0], setModels = _a[1];
39
+ return (_jsxs(_Fragment, { children: [props.schema.title && _jsx(Header, { title: props.schema.title }), props.schema.description && _jsx("p", { children: props.schema.description }), _jsx("div", __assign({ className: "row" }, { children: props.schema.allOf.map(function (schema, index) { return (
40
+ // eslint-disable-next-line react/no-array-index-key
41
+ _jsx("div", __assign({ className: classNames(getSchemaColumnClasses(schema.width)) }, { children: _jsx(GenericSchema, { schema: schema, model: models[index], errors: props.errors, submitted: props.submitted, disabled: props.disabled, onChange: function (onChangeProps) {
42
+ return onChangeModelIndex(index, __assign(__assign({}, onChangeProps), {
43
+ // We can safely assume that the model here is going to be of the same type as the model prop
44
+ model: onChangeProps.model }));
45
+ }, onPersistAsync: props.onPersistAsync }) }), index)); }) }))] }));
46
+ }
47
+ AllOfSchema.defaultProps = {
48
+ disabled: false
49
+ };
50
+ export default AllOfSchema;
@@ -0,0 +1 @@
1
+ export { default } from './AllOfSchema';
@@ -0,0 +1,25 @@
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 { isListArraySchema } from '../../common/utils';
14
+ import ArrayListSchema from './arrayListSchema/ArrayListSchema';
15
+ var ArraySchema = function (props) {
16
+ var schema = props.schema;
17
+ if (isListArraySchema(schema)) {
18
+ return _jsx(ArrayListSchema, __assign({}, props));
19
+ }
20
+ throw new Error('Not implemented'); // Tuple not implemented
21
+ };
22
+ ArraySchema.defaultProps = {
23
+ required: false
24
+ };
25
+ export default ArraySchema;
@@ -0,0 +1,34 @@
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 { isListArraySchema, isMultipleFileUploadSchema, isMultiSelectConstSchema, } from '../../../common/utils';
14
+ import MultipleFileUploadSchema from './multipleFileUploadSchema';
15
+ import { MultiSelectSchema } from './multiSelectSchema/MultiSelectSchema';
16
+ import RepeatableSchema from './repeatableSchema/RepeatableSchema';
17
+ function ArrayListSchema(props) {
18
+ var schema = props.schema;
19
+ if (isMultipleFileUploadSchema(schema)) {
20
+ return _jsx(MultipleFileUploadSchema, __assign({}, props, { schema: schema }));
21
+ }
22
+ if (isMultiSelectConstSchema(schema)) {
23
+ return _jsx(MultiSelectSchema, __assign({}, props, { schema: schema }));
24
+ }
25
+ if (isListArraySchema(schema)) {
26
+ return _jsx(RepeatableSchema, __assign({}, props, { schema: schema }));
27
+ }
28
+ throw new Error('Invalid array list schema');
29
+ }
30
+ ArrayListSchema.defaultProps = {
31
+ errors: null,
32
+ required: false
33
+ };
34
+ export default ArrayListSchema;
@@ -0,0 +1,84 @@
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, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import { SelectInput, SelectInputOptionContent } from '@transferwise/components';
14
+ import classNames from 'classnames';
15
+ import { useEffect, useMemo, useState } from 'react';
16
+ import { useIntl } from 'react-intl';
17
+ import { generateRandomId } from '../../../../common/utils';
18
+ import { getValidationFailures } from '../../../../common/validators';
19
+ import ControlFeedback from '../../../controlFeedback';
20
+ import { mapConstSchemaToOption } from '../../../schemaFormControl/utils';
21
+ import messages from '../../../../../common/messages/multi-select.messages';
22
+ export function MultiSelectSchema(_a) {
23
+ var schema = _a.schema, model = _a.model, submitted = _a.submitted, _b = _a.required, required = _b === void 0 ? false : _b, errors = _a.errors, onChange = _a.onChange;
24
+ var _c = useIntl(), formatMessage = _c.formatMessage, locale = _c.locale;
25
+ var disabled = schema.disabled, items = schema.items, validationMessages = schema.validationMessages, placeholder = schema.placeholder;
26
+ var options = items.oneOf.map(function (item) { return mapConstSchemaToOption(item, 'select'); });
27
+ var id = useMemo(function () { return schema.$id || generateRandomId(); }, [schema.$id]);
28
+ var _d = useState(false), changed = _d[0], setChanged = _d[1];
29
+ var _e = useState(getInitialModelIndices(model, options)), selected = _e[0], setSelected = _e[1];
30
+ // we need to make sure we only select valid models, so the model is updated
31
+ // on first render with the selected schema values
32
+ useEffect(function () {
33
+ if (selected) {
34
+ broadcastModelChange(selected);
35
+ }
36
+ },
37
+ // eslint-disable-next-line react-hooks/exhaustive-deps
38
+ []);
39
+ var broadcastModelChange = function (selected) {
40
+ setSelected(selected);
41
+ var updatedModel = selected.map(function (i) { return options[i].value; });
42
+ setChanged(true);
43
+ onChange({
44
+ model: !required && updatedModel.length === 0 ? null : updatedModel,
45
+ triggerSchema: schema.items,
46
+ triggerModel: updatedModel
47
+ });
48
+ };
49
+ var getFormattedMessage = function () {
50
+ if (selected && selected.length > 0) {
51
+ if (selected.length > 1) {
52
+ return formatMessage(messages.summary, {
53
+ first: options[selected[0]].label,
54
+ count: selected.length - 1
55
+ });
56
+ }
57
+ return options[selected[0]].label;
58
+ }
59
+ return placeholder;
60
+ };
61
+ var validations = getValidationFailures(model, schema, required);
62
+ var shouldShowInitialError = Boolean(errors) && !changed;
63
+ var shouldShowValidationError = Boolean(validations.length) && submitted;
64
+ var formGroupClasses = {
65
+ 'has-error': shouldShowInitialError || shouldShowValidationError
66
+ };
67
+ return (_jsxs("div", __assign({ className: classNames('d-flex flex-column', formGroupClasses) }, { children: [schema.title ? _jsx("label", __assign({ htmlFor: id }, { children: schema.title })) : undefined, _jsx(SelectInput, { id: id, multiple: true, disabled: disabled, placeholder: placeholder ? String(placeholder) : undefined, items: options.map(function (value, index) { return ({
68
+ type: 'option',
69
+ value: index,
70
+ disabled: value.disabled
71
+ }); }), value: selected !== null && selected !== void 0 ? selected : [], renderValue: function (index, withinTrigger) {
72
+ var _a = options[index], icon = _a.icon, label = _a.label, note = _a.note, secondary = _a.secondary;
73
+ if (withinTrigger) {
74
+ return selected && index === selected[0] ? getFormattedMessage() : undefined;
75
+ }
76
+ return _jsx(SelectInputOptionContent, { title: label, note: note !== null && note !== void 0 ? note : secondary, icon: icon });
77
+ }, onChange: broadcastModelChange }), _jsx(ControlFeedback, { id: "".concat(id, "-feedback"), changed: changed, focused: !submitted, blurred: !submitted, errors: typeof errors === 'string' ? errors : undefined, submitted: submitted, schema: schema, validations: submitted ? validations : undefined, validationMessages: validationMessages, infoMessage: null })] })));
78
+ }
79
+ var getInitialModelIndices = function (model, options) {
80
+ if (model == null) {
81
+ return null;
82
+ }
83
+ return model.map(function (m) { return options.findIndex(function (o) { return o.value === m; }); }).filter(function (n) { return n >= 0; });
84
+ };
@@ -0,0 +1,141 @@
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 { Status, UploadInput, } from '@transferwise/components';
50
+ import classNames from 'classnames';
51
+ import { useMemo, useState } from 'react';
52
+ import { useEventDispatcher } from '../../../../common/contexts';
53
+ import { usePersistAsync } from '../../../../common/hooks';
54
+ import { areFilesSame, toKilobytes, generateRandomId, isBlobSchema, } from '../../../../common/utils';
55
+ import { isNumber, isString, getArrayValidationFailures } from '../../../../common/validators';
56
+ import ControlFeedback from '../../../controlFeedback';
57
+ import { constructUploadResponse, constructUploadError, createPayload } from './utils';
58
+ import { useFormattedDefaultErrorMessages } from './utils/useFormattedDefaultErrorMessages';
59
+ function MultipleFileUploadSchema(props) {
60
+ var _this = this;
61
+ var _a, _b;
62
+ var onChange = props.onChange, schema = props.schema;
63
+ var onEvent = useEventDispatcher();
64
+ var defaultErrorMessages = useFormattedDefaultErrorMessages(schema);
65
+ var uid = useMemo(function () { return schema.$id || generateRandomId(); }, [schema.$id]);
66
+ var _c = useState(false), inputChanged = _c[0], setInputChanged = _c[1];
67
+ var _d = useState(function () { return convertFileIdsToComponentFileObjects(props.model || []); }), files = _d[0], setFiles = _d[1];
68
+ var performPersistAsync = usePersistAsync(schema.items.persistAsync);
69
+ var fileSchemaDescriptor = schema.items.persistAsync.schema;
70
+ var isBlob = isBlobSchema(fileSchemaDescriptor);
71
+ var uploadFile = function (userUploadedFile) { return __awaiter(_this, void 0, void 0, function () {
72
+ var payload, response, error_1;
73
+ return __generator(this, function (_a) {
74
+ switch (_a.label) {
75
+ case 0:
76
+ setInputChanged(true);
77
+ _a.label = 1;
78
+ case 1:
79
+ _a.trys.push([1, 4, , 5]);
80
+ return [4 /*yield*/, createPayload(userUploadedFile, isBlob)];
81
+ case 2:
82
+ payload = _a.sent();
83
+ onEvent('Dynamic Flow - PersistAsync', { status: 'pending', schemaId: schema.$id });
84
+ return [4 /*yield*/, performPersistAsync(payload)];
85
+ case 3:
86
+ response = _a.sent();
87
+ onEvent('Dynamic Flow - PersistAsync', { status: 'success', schemaId: schema.$id });
88
+ return [2 /*return*/, constructUploadResponse(response)];
89
+ case 4:
90
+ error_1 = _a.sent();
91
+ onEvent('Dynamic Flow - PersistAsync', { status: 'failure', schemaId: schema.$id });
92
+ return [2 /*return*/, Promise.reject(constructUploadError(error_1))];
93
+ case 5: return [2 /*return*/];
94
+ }
95
+ });
96
+ }); };
97
+ function onFilesChange(newFiles) {
98
+ if (areFilesSame(newFiles, files)) {
99
+ return;
100
+ }
101
+ setFiles(newFiles);
102
+ var validFiles = getSuccessfullyProcessedFiles(newFiles);
103
+ var data = validFiles.map(function (file) { return file.id; });
104
+ onChange({
105
+ model: data,
106
+ triggerSchema: schema,
107
+ triggerModel: data
108
+ });
109
+ }
110
+ var validFiles = getSuccessfullyProcessedFiles(files);
111
+ var fileIds = validFiles.map(function (file) { return file.id; });
112
+ var fileListValidationFailures = getArrayValidationFailures(fileIds, schema, props.required);
113
+ var showError = Boolean(props.errors) ||
114
+ ((inputChanged || props.submitted) && Boolean(fileListValidationFailures.length));
115
+ var accepts = 'accepts' in fileSchemaDescriptor && fileSchemaDescriptor.accepts;
116
+ var maxSize = 'maxSize' in fileSchemaDescriptor && fileSchemaDescriptor.maxSize;
117
+ var uploadInputProps = __assign(__assign(__assign({ multiple: true, className: 'form-control', files: files, fileInputName: uid, id: uid }, (accepts ? { fileTypes: accepts } : undefined)), (maxSize ? { sizeLimit: toKilobytes(maxSize) } : undefined)), { sizeLimitErrorMessage: ((_a = fileSchemaDescriptor.validationMessages) === null || _a === void 0 ? void 0 : _a.maxSize) ||
118
+ defaultErrorMessages.maxFileSizeErrorMessage, maxFiles: props.schema.maxItems, maxFilesErrorMessage: ((_b = props.schema.validationMessages) === null || _b === void 0 ? void 0 : _b.maxItems) || defaultErrorMessages.maxItemsErrorMessage, uploadButtonTitle: fileSchemaDescriptor.title, description: fileSchemaDescriptor.description, disabled: props.disabled, onUploadFile: function (formData) { return uploadFile(formData.get(uid)); }, onFilesChange: onFilesChange, onDeleteFile: function () { return Promise.resolve(); } });
119
+ var feedbackId = "".concat(uid, "-feedback");
120
+ return (_jsxs("div", __assign({ className: classNames('form-group', { 'has-error': showError }) }, { children: [_jsx("label", __assign({ className: "d-block control-label", htmlFor: uid }, { children: props.schema.title })), _jsx("div", __assign({ "aria-describedby": feedbackId }, { children: _jsx(UploadInput, __assign({}, uploadInputProps)) })), _jsx(ControlFeedback, { id: feedbackId, changed: inputChanged, submitted: props.submitted, errors: props.errors, schema: props.schema, validations: fileListValidationFailures, validationMessages: getValidationMessages(schema, Boolean(props.required), defaultErrorMessages), infoMessage: null, focused: false, blurred: true })] })));
121
+ }
122
+ MultipleFileUploadSchema.defaultProps = {
123
+ errors: null,
124
+ required: false
125
+ };
126
+ export default MultipleFileUploadSchema;
127
+ function getSuccessfullyProcessedFiles(allFiles) {
128
+ return allFiles.filter(function (file) { return !file.error && file.status === 'succeeded'; });
129
+ }
130
+ function convertFileIdsToComponentFileObjects(fileIds) {
131
+ return fileIds
132
+ .map(function (id) { return (isValidId(id) ? { id: id, status: Status.SUCCEEDED } : null); })
133
+ .filter(function (item) { return item !== null; });
134
+ }
135
+ function isValidId(id) {
136
+ return isNumber(id) || isString(id);
137
+ }
138
+ function getValidationMessages(schema, required, defaultErrorMessages) {
139
+ var minItems = schema.minItems, maxItems = schema.maxItems;
140
+ return __assign(__assign(__assign({}, (required && { required: defaultErrorMessages.requiredMessage })), (minItems && { minItems: defaultErrorMessages.minItemsErrorMessage })), (maxItems && { maxItems: defaultErrorMessages.maxItemsErrorMessage }));
141
+ }
@@ -0,0 +1 @@
1
+ export { default } from './MultipleFileUploadSchema';
@@ -0,0 +1,2 @@
1
+ export * from './upload-utils';
2
+ export * from './useFormattedDefaultErrorMessages';
@@ -0,0 +1,79 @@
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 { toBase64, generateRandomId } from '../../../../../common/utils';
49
+ import { isObject, isString } from '../../../../../common/validators';
50
+ export function createPayload(userUploadedFile, isBlobSchema) {
51
+ return __awaiter(this, void 0, void 0, function () {
52
+ return __generator(this, function (_a) {
53
+ if (isBlobSchema) {
54
+ return [2 /*return*/, userUploadedFile];
55
+ }
56
+ if (userUploadedFile instanceof Blob) {
57
+ return [2 /*return*/, toBase64(userUploadedFile)];
58
+ }
59
+ throw new Error('Error creating payload for MultipleFileUploadSchema. Uploaded file is not an instance of Blob.');
60
+ });
61
+ });
62
+ }
63
+ export function constructUploadResponse(response) {
64
+ var id = response.data;
65
+ return __assign({ id: id }, response);
66
+ }
67
+ export function constructUploadError(response) {
68
+ var isError = response instanceof Error;
69
+ var hasValidData = isObject(response) && 'data' in response;
70
+ var isInvalidResponseData = !hasValidData && !isError;
71
+ if (isInvalidResponseData) {
72
+ return isString(response) ? response : undefined;
73
+ }
74
+ if (isError) {
75
+ var error = response;
76
+ return { id: generateRandomId(), message: error.message };
77
+ }
78
+ return __assign({ message: isString(response.message) ? response.message : '' }, response);
79
+ }
@@ -0,0 +1,14 @@
1
+ import { useIntl } from 'react-intl';
2
+ import CommonMessages from '../../../../../common/messages';
3
+ import MultiFileUploadMessages from '../../../../../../common/messages/multi-file-upload.messages';
4
+ export function useFormattedDefaultErrorMessages(_a) {
5
+ var maxItems = _a.maxItems, minItems = _a.minItems;
6
+ var formatMessage = useIntl().formatMessage;
7
+ var maxFileSizeError = MultiFileUploadMessages.maxFileSizeError, maxItemsError = MultiFileUploadMessages.maxItemsError, minItemsError = MultiFileUploadMessages.minItemsError;
8
+ return {
9
+ maxFileSizeErrorMessage: formatMessage(maxFileSizeError),
10
+ maxItemsErrorMessage: formatMessage(maxItemsError, { maxItems: maxItems }),
11
+ minItemsErrorMessage: formatMessage(minItemsError, { minItems: minItems }),
12
+ requiredMessage: formatMessage(CommonMessages.required)
13
+ };
14
+ }
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { NavigationOption } from '@transferwise/components';
3
+ import { getNavigationOptionMedia } from '../../../../layout/utils';
4
+ export function ItemSummaryOption(_a) {
5
+ var item = _a.item, onClick = _a.onClick;
6
+ return (_jsx(NavigationOption, { media: getNavigationOptionMedia(item), title: item.title, content: item.description, showMediaAtAllSizes: true, onClick: onClick }));
7
+ }
@@ -0,0 +1,134 @@
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 } from "react/jsx-runtime";
22
+ import { Header, Modal, NavigationOption } from '@transferwise/components';
23
+ import { Plus } from '@transferwise/icons';
24
+ import { useMemo, useState } from 'react';
25
+ import { useIntl } from 'react-intl';
26
+ import { getValidationFailures, isArray, isEmpty, isObject, isValidSchema, } from '../../../../common/validators';
27
+ import { ItemSummaryOption } from './ItemSummary';
28
+ import messages from '../../../../../common/messages/repeatable.messages';
29
+ import RepeatableSchemaStep from './RepeatableSchemaStep';
30
+ import { getItemSummaryFromSchema } from './utils/summary-utils';
31
+ import classNames from 'classnames';
32
+ import ControlFeedback from '../../../controlFeedback';
33
+ import { generateRandomId } from '../../../../common/utils';
34
+ import { useFormattedDefaultErrorMessages } from '../multipleFileUploadSchema/utils';
35
+ function RepeatableSchema(_a) {
36
+ var _b;
37
+ var schema = _a.schema, model = _a.model, errors = _a.errors, submitted = _a.submitted, _c = _a.required, required = _c === void 0 ? false : _c, onChange = _a.onChange;
38
+ var _d = useState(null), openModalType = _d[0], setOpenModalType = _d[1];
39
+ var _e = useState(false), changed = _e[0], setChanged = _e[1];
40
+ var _f = useState(function () {
41
+ if (isObject(model) && !isArray(model)) {
42
+ throw new Error('RepeatableSchema does not support object models. Ensure your array schema is wrapped inside an object schema.');
43
+ }
44
+ return model
45
+ ? model.map(function (item) { return getItemSummaryFromSchema(schema.items, item, schema === null || schema === void 0 ? void 0 : schema.summary); })
46
+ : null;
47
+ }), itemSummaries = _f[0], setItemSummaries = _f[1];
48
+ var _g = useState({ item: null, model: null }), editableItem = _g[0], setEditableItem = _g[1];
49
+ var id = useMemo(function () { return schema.$id || generateRandomId(); }, [schema.$id]);
50
+ var broadcastModelChange = function (updatedItems) {
51
+ var updatedModel = updatedItems
52
+ ? updatedItems.map(function (_a) {
53
+ var value = _a.value;
54
+ return value;
55
+ })
56
+ : null;
57
+ onChange({
58
+ model: updatedModel,
59
+ triggerSchema: schema.items,
60
+ triggerModel: updatedModel
61
+ });
62
+ };
63
+ var onAddItem = function () {
64
+ setOpenModalType('add');
65
+ };
66
+ var onEditItem = function (item) {
67
+ setEditableItem({ item: item, model: item.value });
68
+ setOpenModalType('edit');
69
+ };
70
+ var onSaveItem = function (action, summaryTextOverride) {
71
+ var _a;
72
+ setChanged(true);
73
+ var updatedItem = action === 'remove'
74
+ ? null
75
+ : getItemSummaryFromSchema(schema.items, editableItem.model, schema.summary, summaryTextOverride);
76
+ if (action !== 'remove' && !isValidSchema((_a = updatedItem === null || updatedItem === void 0 ? void 0 : updatedItem.value) !== null && _a !== void 0 ? _a : null, schema.items)) {
77
+ return;
78
+ }
79
+ var updatedItemSummaries = getUpdatedItemSummaries(action, {
80
+ originalItem: editableItem.item,
81
+ updatedItem: updatedItem,
82
+ itemSummaries: itemSummaries
83
+ });
84
+ setItemSummaries(updatedItemSummaries);
85
+ broadcastModelChange(updatedItemSummaries);
86
+ setEditableItem({ item: null, model: null });
87
+ setOpenModalType(null);
88
+ };
89
+ var onCancelEdit = function () {
90
+ setEditableItem({ item: null, model: null });
91
+ setOpenModalType(null);
92
+ };
93
+ var formatMessage = useIntl().formatMessage;
94
+ var validations = getValidationFailures(model, schema, required);
95
+ var base64ValidationMessages = useFormattedDefaultErrorMessages({
96
+ minItems: schema.minItems,
97
+ maxItems: schema.maxItems
98
+ });
99
+ var validationMessages = schema.items.type === 'string' && schema.items.format === 'base64url'
100
+ ? {
101
+ minItems: base64ValidationMessages.minItemsErrorMessage,
102
+ maxItems: base64ValidationMessages.maxItemsErrorMessage,
103
+ required: base64ValidationMessages.requiredMessage
104
+ }
105
+ : undefined;
106
+ var formGroupClasses = {
107
+ 'has-error': (_b = (errors && !isEmpty(errors))) !== null && _b !== void 0 ? _b : (submitted && validations.length)
108
+ };
109
+ return (_jsxs("div", __assign({ id: id, className: classNames(formGroupClasses) }, { children: [schema.title && _jsx(Header, { title: schema.title }), itemSummaries === null || itemSummaries === void 0 ? void 0 : itemSummaries.map(function (itemSummary) { return (_jsx(ItemSummaryOption, { item: itemSummary, onClick: function () { return onEditItem(itemSummary); } }, JSON.stringify(itemSummary))); }), _jsx(NavigationOption, { media: _jsx(Plus, {}), title: schema.addItemTitle || formatMessage(messages.addItemTitle), showMediaAtAllSizes: true, onClick: onAddItem }), _jsx(Modal, { open: openModalType !== null, title: (openModalType === 'add' ? schema.addItemTitle : schema.editItemTitle) ||
110
+ formatMessage(messages.addItemTitle), body: _jsx(RepeatableSchemaStep, { type: openModalType !== null && openModalType !== void 0 ? openModalType : 'add', schema: schema, model: editableItem.model, errors: errors, submitted: submitted, onAction: onSaveItem, onModelChange: function (_a) {
111
+ var model = _a.model;
112
+ return setEditableItem(__assign(__assign({}, editableItem), { model: model }));
113
+ } }), onClose: onCancelEdit }), _jsx(ControlFeedback, { id: "".concat(id, "-feedback"), changed: changed, focused: false, blurred: false, errors: typeof errors === 'string' ? errors : undefined, submitted: submitted, schema: schema, validations: validations, validationMessages: validationMessages, infoMessage: null })] })));
114
+ }
115
+ var getUpdatedItemSummaries = function (action, _a) {
116
+ var originalItem = _a.originalItem, updatedItem = _a.updatedItem, itemSummaries = _a.itemSummaries;
117
+ if (action === 'remove') {
118
+ return (itemSummaries || []).filter(function (itemSummary) { return itemSummary !== originalItem; });
119
+ }
120
+ if (!updatedItem) {
121
+ return itemSummaries;
122
+ }
123
+ switch (action) {
124
+ case 'add':
125
+ return __spreadArray(__spreadArray([], (itemSummaries || []), true), [updatedItem], false);
126
+ case 'edit':
127
+ return (itemSummaries || []).map(function (itemSummary) {
128
+ return itemSummary === originalItem ? updatedItem : itemSummary;
129
+ });
130
+ default:
131
+ return null;
132
+ }
133
+ };
134
+ export default RepeatableSchema;