@wise/dynamic-flow-client 3.3.1 → 3.4.0-experimental-9862ccf
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.
- package/build/common/httpClientContext/HttpClientContext.js +35 -0
- package/build/common/httpClientContext/index.js +1 -0
- package/build/common/makeHttpClient/index.js +1 -0
- package/build/common/makeHttpClient/makeHttpClient.js +34 -0
- package/build/common/messages/generic-error.messages.js +18 -0
- package/build/common/messages/help.messages.js +8 -0
- package/build/common/messages/multi-file-upload.messages.js +18 -0
- package/build/common/messages/paragraph.messages.js +13 -0
- package/build/common/messages/repeatable.messages.js +23 -0
- package/build/common/messages/validation.array.messages.js +13 -0
- package/build/common/messages/validation.messages.js +53 -0
- package/build/common/utils/api-utils.js +4 -0
- package/build/legacy/common/constants/DateMode.js +4 -0
- package/build/legacy/common/constants/FeatureName.js +4 -0
- package/build/legacy/common/constants/FormControlType.js +21 -0
- package/build/legacy/common/constants/MonthFormat.js +4 -0
- package/build/legacy/common/constants/Size.js +7 -0
- package/build/legacy/common/constants/index.js +4 -0
- package/build/legacy/common/contexts/dynamicFlowContexts/DynamicFlowContexts.js +36 -0
- package/build/legacy/common/contexts/dynamicFlowContexts/usePendingPromiseCounter.js +13 -0
- package/build/legacy/common/contexts/eventsContext/EventsContext.js +38 -0
- package/build/legacy/common/contexts/featureContext/FeatureContext.js +22 -0
- package/build/legacy/common/contexts/index.js +3 -0
- package/build/legacy/common/contexts/logContext/LogContext.js +44 -0
- package/build/legacy/common/hooks/index.js +7 -0
- package/build/legacy/common/hooks/useDebouncedFunction/useDebouncedFunction.js +9 -0
- package/build/legacy/common/hooks/useExternal/useExternal.js +15 -0
- package/build/legacy/common/hooks/useExternalStepPolling/useExternalStepPolling.js +70 -0
- package/build/legacy/common/hooks/usePersistAsync/usePersistAsync.js +172 -0
- package/build/legacy/common/hooks/usePolling/usePolling.js +51 -0
- package/build/legacy/common/hooks/usePrevious/usePrevious.js +8 -0
- package/build/legacy/common/hooks/useStepPolling/useStepPolling.js +43 -0
- package/build/legacy/common/messages.js +8 -0
- package/build/legacy/common/utils/api-utils.js +6 -0
- package/build/legacy/common/utils/date-utils.js +22 -0
- package/build/legacy/common/utils/debounce.js +38 -0
- package/build/legacy/common/utils/file-utils.js +45 -0
- package/build/legacy/common/utils/id-utils.js +5 -0
- package/build/legacy/common/utils/index.js +11 -0
- package/build/legacy/common/utils/is-equal.js +21 -0
- package/build/legacy/common/utils/misc-utils.js +4 -0
- package/build/legacy/common/utils/mobile-utils.js +23 -0
- package/build/legacy/common/utils/model-utils.js +33 -0
- package/build/legacy/common/utils/schema-utils.js +97 -0
- package/build/legacy/common/utils/step-utils.js +32 -0
- package/build/legacy/common/validators/index.js +5 -0
- package/build/legacy/common/validators/models/model-utils.js +119 -0
- package/build/legacy/common/validators/models/model-validators.js +62 -0
- package/build/legacy/common/validators/schemas/schema-validators.js +101 -0
- package/build/legacy/common/validators/types/type-validators.js +14 -0
- package/build/legacy/common/validators/validationFailures/validation-failures.js +139 -0
- package/build/legacy/common/validators/validationFailures/validation-failures.utils.js +40 -0
- package/build/legacy/common/validators/values/value-validators.js +6 -0
- package/build/legacy/dynamic-flow-types.js +1 -0
- package/build/legacy/dynamicFlow/BackButton.js +22 -0
- package/build/legacy/dynamicFlow/DynamicFlowStep.js +37 -0
- package/build/legacy/formControl/FormControl.js +266 -0
- package/build/legacy/formControl/index.js +1 -0
- package/build/legacy/formControl/utils/getAutocompleteString.js +80 -0
- package/build/legacy/formControl/utils/index.js +2 -0
- package/build/legacy/formControl/utils/value-utils.js +108 -0
- package/build/legacy/jsonSchemaForm/allOfSchema/AllOfSchema.js +50 -0
- package/build/legacy/jsonSchemaForm/allOfSchema/index.js +1 -0
- package/build/legacy/jsonSchemaForm/arrayTypeSchema/ArraySchema.js +25 -0
- package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/ArrayListSchema.js +30 -0
- package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/MultipleFileUploadSchema.js +141 -0
- package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/index.js +1 -0
- package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/utils/index.js +2 -0
- package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/utils/upload-utils.js +79 -0
- package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/utils/useFormattedDefaultErrorMessages.js +14 -0
- package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/ItemSummary.js +7 -0
- package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/RepeatableSchema.js +134 -0
- package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/RepeatableSchemaStep.js +85 -0
- package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/utils/summary-utils.js +135 -0
- package/build/legacy/jsonSchemaForm/arrayTypeSchema/index.js +1 -0
- package/build/legacy/jsonSchemaForm/basicTypeSchema/BasicTypeSchema.js +111 -0
- package/build/legacy/jsonSchemaForm/basicTypeSchema/index.js +1 -0
- package/build/legacy/jsonSchemaForm/controlFeedback/ControlFeedback.js +86 -0
- package/build/legacy/jsonSchemaForm/controlFeedback/index.js +1 -0
- package/build/legacy/jsonSchemaForm/help/Help.js +20 -0
- package/build/legacy/jsonSchemaForm/help/index.js +1 -0
- package/build/legacy/jsonSchemaForm/objectSchema/ObjectSchema.js +77 -0
- package/build/legacy/jsonSchemaForm/objectSchema/index.js +1 -0
- package/build/legacy/jsonSchemaForm/oneOfSchema/OneOfSchema.js +155 -0
- package/build/legacy/jsonSchemaForm/oneOfSchema/index.js +1 -0
- package/build/legacy/jsonSchemaForm/oneOfSchema/utils.js +68 -0
- package/build/legacy/jsonSchemaForm/persistAsyncSchema/PersistAsyncSchema.js +26 -0
- package/build/legacy/jsonSchemaForm/persistAsyncSchema/index.js +1 -0
- package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBasicSchema/PersistAsyncBasicSchema.js +165 -0
- package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBasicSchema/index.js +1 -0
- package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/PersistAsyncBlobSchema.js +131 -0
- package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/UploadInputAdapter.js +31 -0
- package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/index.js +1 -0
- package/build/legacy/jsonSchemaForm/promotedOneOfSchema/PromotedOneOfSchema.js +72 -0
- package/build/legacy/jsonSchemaForm/promotedOneOfSchema/index.js +1 -0
- package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promoted-one-of-utils.js +8 -0
- package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfCheckboxControl.js +27 -0
- package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfControl.js +31 -0
- package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfRadioControl.js +32 -0
- package/build/legacy/jsonSchemaForm/readOnlySchema/ReadOnlySchema.js +54 -0
- package/build/legacy/jsonSchemaForm/readOnlySchema/ReadOnlySchema.messages.js +13 -0
- package/build/legacy/jsonSchemaForm/readOnlySchema/index.js +1 -0
- package/build/legacy/jsonSchemaForm/schemaFormControl/SchemaFormControl.js +133 -0
- package/build/legacy/jsonSchemaForm/schemaFormControl/index.js +1 -0
- package/build/legacy/jsonSchemaForm/schemaFormControl/utils/index.js +1 -0
- package/build/legacy/jsonSchemaForm/schemaFormControl/utils/mapping-utils.js +107 -0
- package/build/legacy/layout/DynamicLayout.js +68 -0
- package/build/legacy/layout/alert/DynamicAlert.js +29 -0
- package/build/legacy/layout/box/DynamicBox.js +41 -0
- package/build/legacy/layout/button/DynamicButton.js +27 -0
- package/build/legacy/layout/button/utils.js +45 -0
- package/build/legacy/layout/columns/DynamicColumns.js +38 -0
- package/build/legacy/layout/decision/DynamicDecision.js +21 -0
- package/build/legacy/layout/divider/DynamicDivider.js +9 -0
- package/build/legacy/layout/external/DynamicExternal.js +32 -0
- package/build/legacy/layout/external/DynamicExternal.messages.js +8 -0
- package/build/legacy/layout/form/DynamicForm.js +22 -0
- package/build/legacy/layout/heading/DynamicHeading.js +51 -0
- package/build/legacy/layout/icon/DynamicIcon.js +17 -0
- package/build/legacy/layout/icon/FlagIcon.js +198 -0
- package/build/legacy/layout/icon/NamedIcon.js +19 -0
- package/build/legacy/layout/image/DynamicImage.js +111 -0
- package/build/legacy/layout/index.js +20 -0
- package/build/legacy/layout/instructions/DynamicInstructions.js +30 -0
- package/build/legacy/layout/list/DynamicStatusList.js +37 -0
- package/build/legacy/layout/loadingIndicator/DynamicLoadingIndicator.js +11 -0
- package/build/legacy/layout/markdown/DynamicMarkdown.js +23 -0
- package/build/legacy/layout/modal/DynamicModal.js +26 -0
- package/build/legacy/layout/paragraph/DynamicParagraph.js +46 -0
- package/build/legacy/layout/paragraph/useSnackBarIfAvailable.js +9 -0
- package/build/legacy/layout/review/DynamicReview.js +58 -0
- package/build/legacy/layout/search/DynamicSearch.js +58 -0
- package/build/legacy/layout/search/SearchInput.js +17 -0
- package/build/legacy/layout/search/SearchResults.js +31 -0
- package/build/legacy/layout/search/useSearch.js +137 -0
- package/build/legacy/layout/utils/getNavigationOptionMedia.js +28 -0
- package/build/legacy/layout/utils/index.js +32 -0
- package/build/legacy/step/cameraStep/CameraStep.js +124 -0
- package/build/legacy/step/cameraStep/cameraCapture/CameraCapture.js +161 -0
- package/build/legacy/step/cameraStep/cameraCapture/CameraCapture.messages.js +58 -0
- package/build/legacy/step/cameraStep/cameraCapture/components/bottomBar/BottomBar.js +28 -0
- package/build/legacy/step/cameraStep/cameraCapture/components/index.js +3 -0
- package/build/legacy/step/cameraStep/cameraCapture/components/orientationLockOverlay/OrientationLockOverlay.js +19 -0
- package/build/legacy/step/cameraStep/cameraCapture/components/orientationLockOverlay/OrientationLockOverlay.messages.js +8 -0
- package/build/legacy/step/cameraStep/cameraCapture/hooks/useFullScreenOrientationLock.js +60 -0
- package/build/legacy/step/cameraStep/cameraCapture/hooks/useVideoConstraints.js +80 -0
- package/build/legacy/step/cameraStep/cameraCapture/index.js +1 -0
- package/build/legacy/step/cameraStep/cameraCapture/overlay/Overlay.js +77 -0
- package/build/legacy/step/cameraStep/cameraCapture/screens/cameraErrorScreen/CameraErrorScreen.js +18 -0
- package/build/legacy/step/cameraStep/cameraCapture/screens/index.js +1 -0
- package/build/legacy/step/cameraStep/cameraCapture/tracking/index.js +109 -0
- package/build/legacy/step/cameraStep/cameraCapture/types/index.js +7 -0
- package/build/legacy/step/cameraStep/cameraCapture/utils/index.js +107 -0
- package/build/legacy/step/cameraStep/index.js +1 -0
- package/build/legacy/step/externalConfirmationStep/ExternalConfirmationStep.js +64 -0
- package/build/legacy/step/externalConfirmationStep/ExternalConfirmationStep.messages.js +23 -0
- package/build/legacy/step/externalConfirmationStep/index.js +1 -0
- package/build/legacy/step/index.js +3 -0
- package/build/legacy/step/layoutStep/LayoutStep.js +33 -0
- package/build/legacy/step/layoutStep/index.js +1 -0
- package/build/legacy/step/layoutStep/utils/index.js +2 -0
- package/build/legacy/step/layoutStep/utils/inline-reference-utils.js +105 -0
- package/build/legacy/step/layoutStep/utils/layout-utils.js +212 -0
- package/build/main.js +14 -29
- package/build/main.min.js +1 -1
- package/build/main.mjs +14 -29
- package/build/types/revamp/domain/features/events.d.ts +1 -1
- package/package.json +2 -2
|
@@ -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;
|
package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/UploadInputAdapter.js
ADDED
|
@@ -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';
|
|
@@ -0,0 +1,72 @@
|
|
|
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, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
|
+
import { useState } from 'react';
|
|
23
|
+
import { DynamicAlert } from '../../layout';
|
|
24
|
+
import GenericSchema from '../genericSchema';
|
|
25
|
+
import ObjectSchema from '../objectSchema';
|
|
26
|
+
import { getSelectionFromModel } from './promoted-one-of-utils';
|
|
27
|
+
import PromotedOneOfControl from './promotedOneOfControl/PromotedOneOfControl';
|
|
28
|
+
var isPromoted = function (schema) { return schema.promoted === true; };
|
|
29
|
+
var PromotedOneOfSchema = function (props) {
|
|
30
|
+
var _a;
|
|
31
|
+
// TODO: LOW avoid type assertion -- actually non-null assertion operator: props.model!
|
|
32
|
+
var _b = useState(getSelectionFromModel(props.schema, props.model) ||
|
|
33
|
+
((_a = props.schema.promotion) === null || _a === void 0 ? void 0 : _a["default"]) ||
|
|
34
|
+
'promoted'), selection = _b[0], setSelection = _b[1];
|
|
35
|
+
var promotedAlert = props.schema.alert;
|
|
36
|
+
var promotedOneOf = props.schema.oneOf.find(isPromoted);
|
|
37
|
+
// TODO: LOW avoid type assertion -- actually non-null assertion operator
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
39
|
+
var promotedObjectSchema = getPromotedObjectSchema(promotedOneOf);
|
|
40
|
+
var otherOneOf = getOtherOneOf(props.schema);
|
|
41
|
+
return (_jsxs(_Fragment, { children: [promotedAlert && _jsx(DynamicAlert, { component: promotedAlert }), _jsx(PromotedOneOfControl, { id: props.schema.$id, title: props.schema.title,
|
|
42
|
+
// TODO: LOW avoid type assertion -- actually non-null assertion operator
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
44
|
+
promotedOneOf: promotedOneOf,
|
|
45
|
+
// TODO: LOW avoid type assertion -- actually non-null assertion operator
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
47
|
+
promotion: props.schema.promotion, selection: selection, setSelection: setSelection }), selection === 'promoted' && _jsx(ObjectSchema, __assign({}, props, { schema: promotedObjectSchema })), selection === 'other' && _jsx(GenericSchema, __assign({}, props, { schema: otherOneOf }))] }));
|
|
48
|
+
};
|
|
49
|
+
function getPromotedObjectSchema(promotedSchema) {
|
|
50
|
+
return __assign(__assign({}, promotedSchema), {
|
|
51
|
+
// We don't need to show these since they are already displayed in the radio option
|
|
52
|
+
title: undefined, description: undefined });
|
|
53
|
+
}
|
|
54
|
+
function getOtherOneOf(schema) {
|
|
55
|
+
var _a, _b, _c;
|
|
56
|
+
var other = ((_a = schema.promotion) === null || _a === void 0 ? void 0 : _a.displayTwice)
|
|
57
|
+
? __spreadArray([], schema.oneOf, true) : schema.oneOf.filter(function (one) { return !isPromoted(one); });
|
|
58
|
+
var title = (_c = (_b = schema.promotion) === null || _b === void 0 ? void 0 : _b.other.heading) === null || _c === void 0 ? void 0 : _c.text;
|
|
59
|
+
if (other.length === 1) {
|
|
60
|
+
return __assign(__assign({}, other[0]), { title: title });
|
|
61
|
+
}
|
|
62
|
+
if (other.length > 1) {
|
|
63
|
+
return {
|
|
64
|
+
title: title,
|
|
65
|
+
oneOf: other,
|
|
66
|
+
// TODO: LOW avoid type assertion -- the spec does not recognise a `control` property in ObjectSchema
|
|
67
|
+
control: schema.control
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
export default PromotedOneOfSchema;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './PromotedOneOfSchema';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { getBestMatchingSchemaIndexForValue } from '../oneOfSchema/utils';
|
|
2
|
+
export var getSelectionFromModel = function (schema, model) {
|
|
3
|
+
var index = getBestMatchingSchemaIndexForValue(schema, model);
|
|
4
|
+
if (index !== null) {
|
|
5
|
+
return schema.oneOf[index].promoted ? 'promoted' : 'other';
|
|
6
|
+
}
|
|
7
|
+
return null;
|
|
8
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
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 { Checkbox } from '@transferwise/components';
|
|
14
|
+
var PromotedOneOfCheckboxControl = function (props) {
|
|
15
|
+
var id = props.id, selection = props.selection, setSelection = props.setSelection;
|
|
16
|
+
var _a = props.promotion, promoted = _a.promoted, other = _a.other, checkedMeans = _a.checkedMeans;
|
|
17
|
+
var title = checkedMeans === 'other' ? other.title : (promoted === null || promoted === void 0 ? void 0 : promoted.title) || props.promotedOneOf.title;
|
|
18
|
+
var selectionWhenChecked = checkedMeans === 'other' ? 'other' : 'promoted';
|
|
19
|
+
var selectionWhenUnchecked = checkedMeans === 'other' ? 'promoted' : 'other';
|
|
20
|
+
var checked = selection === selectionWhenChecked;
|
|
21
|
+
var toggleSelection = function () {
|
|
22
|
+
setSelection(checked ? selectionWhenUnchecked : selectionWhenChecked);
|
|
23
|
+
};
|
|
24
|
+
return (_jsx("div", __assign({ className: "form-group" }, { children: _jsx(Checkbox, { id: id, label: title, checked: checked, onChange: toggleSelection }) })));
|
|
25
|
+
};
|
|
26
|
+
PromotedOneOfCheckboxControl.defaultProps = {};
|
|
27
|
+
export default PromotedOneOfCheckboxControl;
|
package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfControl.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
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 } from "react/jsx-runtime";
|
|
13
|
+
import { generateRandomId } from '../../../common/utils';
|
|
14
|
+
import PromotedOneOfCheckboxControl from './PromotedOneOfCheckboxControl';
|
|
15
|
+
import PromotedOneOfRadioControl from './PromotedOneOfRadioControl';
|
|
16
|
+
function PromotedOneOfControl(props) {
|
|
17
|
+
var controlType = props.promotion.control || 'radio';
|
|
18
|
+
switch (controlType) {
|
|
19
|
+
case 'radio':
|
|
20
|
+
return _jsx(PromotedOneOfRadioControl, __assign({}, props));
|
|
21
|
+
case 'checkbox':
|
|
22
|
+
return _jsx(PromotedOneOfCheckboxControl, __assign({}, props));
|
|
23
|
+
default:
|
|
24
|
+
return _jsx(_Fragment, {});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
PromotedOneOfControl.defaultProps = {
|
|
28
|
+
id: generateRandomId(),
|
|
29
|
+
title: undefined
|
|
30
|
+
};
|
|
31
|
+
export default PromotedOneOfControl;
|
|
@@ -0,0 +1,32 @@
|
|
|
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 { RadioGroup } from '@transferwise/components';
|
|
14
|
+
import { getAvatarPropertyForRadioOption } from '../../schemaFormControl/utils';
|
|
15
|
+
function PromotedOneOfRadioControl(props) {
|
|
16
|
+
var _a, _b;
|
|
17
|
+
var id = props.id, selection = props.selection, setSelection = props.setSelection, promotion = props.promotion, promotedOneOf = props.promotedOneOf, title = props.title;
|
|
18
|
+
var radios = [
|
|
19
|
+
__assign({ value: 'promoted',
|
|
20
|
+
// TODO: LOW avoid type assertion below: the expression may be nullish, but "label" cannot be
|
|
21
|
+
label: (((_a = promotion.promoted) === null || _a === void 0 ? void 0 : _a.title) || promotedOneOf.title), secondary: ((_b = promotion.promoted) === null || _b === void 0 ? void 0 : _b.description) || promotedOneOf.description }, getAvatarPropertyForRadioOption(promotedOneOf)),
|
|
22
|
+
__assign({ value: 'other', label: promotion.other.title, secondary: promotion.other.description }, getAvatarPropertyForRadioOption(promotion.other)),
|
|
23
|
+
];
|
|
24
|
+
return (_jsxs("div", __assign({ className: "form-group" }, { children: [title && (_jsx("label", __assign({ className: "control-label", htmlFor: id }, { children: title }))), _jsx(RadioGroup, { name: "promoted-selection", selectedValue: selection, radios: radios,
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
26
|
+
// @ts-expect-error -- TODO: avoid @ts-ignore -- apparently RadioGroup does not expect an id prop
|
|
27
|
+
id: id, onChange: setSelection })] })));
|
|
28
|
+
}
|
|
29
|
+
PromotedOneOfRadioControl.defaultProps = {
|
|
30
|
+
title: undefined
|
|
31
|
+
};
|
|
32
|
+
export default PromotedOneOfRadioControl;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { DefinitionList, Layout } from '@transferwise/components';
|
|
3
|
+
import { useIntl } from 'react-intl';
|
|
4
|
+
import { isBasicSchema, isOneOfSchema } from '../../common/utils';
|
|
5
|
+
import { isBoolean } from '../../common/validators';
|
|
6
|
+
import { getAvatarPropertyForRadioOption } from '../schemaFormControl/utils';
|
|
7
|
+
import messages from './ReadOnlySchema.messages';
|
|
8
|
+
function ReadOnlySchema(_a) {
|
|
9
|
+
var schema = _a.schema, model = _a.model;
|
|
10
|
+
var _b = schema.title, title = _b === void 0 ? '' : _b;
|
|
11
|
+
var formatMessage = useIntl().formatMessage;
|
|
12
|
+
var value = getValueForSchema({ schema: schema, model: model, formatMessage: formatMessage });
|
|
13
|
+
// FIXME: This is a workaround for the fact that the DefinitionList component value prop doesn't match Model
|
|
14
|
+
return (_jsx(DefinitionList, { layout: Layout.VERTICAL_ONE_COLUMN, definitions: [{ title: title, value: value, key: '' }] }));
|
|
15
|
+
}
|
|
16
|
+
export default ReadOnlySchema;
|
|
17
|
+
function getValueForSchema(_a) {
|
|
18
|
+
var schema = _a.schema, model = _a.model, formatMessage = _a.formatMessage;
|
|
19
|
+
if (isBasicSchema(schema)) {
|
|
20
|
+
if (isOneOfSchema(schema)) {
|
|
21
|
+
return getValueFromOneOfSchema(schema, model);
|
|
22
|
+
// eslint-disable-next-line no-else-return
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
// eslint-disable-next-line no-lonely-if
|
|
26
|
+
if (schema.type === 'boolean' && isBoolean(model)) {
|
|
27
|
+
return model ? formatMessage(messages.yes) : formatMessage(messages.no);
|
|
28
|
+
// eslint-disable-next-line no-else-return
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
32
|
+
return (model && model.toString()) || '';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return '';
|
|
37
|
+
}
|
|
38
|
+
function getValueFromOneOfSchema(schema, model) {
|
|
39
|
+
var option = getSelectedOneOf(schema, model);
|
|
40
|
+
// FIXME Remove type assertion
|
|
41
|
+
return option ? getValueFromOption(option) : model;
|
|
42
|
+
}
|
|
43
|
+
function getSelectedOneOf(schema, model) {
|
|
44
|
+
return schema.oneOf.find(function (childSchema) {
|
|
45
|
+
return 'const' in childSchema ? model === childSchema["const"] : false;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function getValueFromOption(option) {
|
|
49
|
+
var text = option.title && option.description
|
|
50
|
+
? "".concat(option.title, " - ").concat(option.description)
|
|
51
|
+
: option.title || '';
|
|
52
|
+
var icon = getAvatarPropertyForRadioOption({ icon: option.icon });
|
|
53
|
+
return (icon === null || icon === void 0 ? void 0 : icon.avatar) ? (_jsxs(_Fragment, { children: [icon.avatar, " ", text] })) : (text);
|
|
54
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { defineMessages } from 'react-intl';
|
|
2
|
+
export default defineMessages({
|
|
3
|
+
yes: {
|
|
4
|
+
id: 'dynamicFlows.ReadOnlySchema.yes',
|
|
5
|
+
defaultMessage: 'Yes',
|
|
6
|
+
description: 'Yes, used for boolean schemas with a value of true.'
|
|
7
|
+
},
|
|
8
|
+
no: {
|
|
9
|
+
id: 'dynamicFlows.ReadOnlySchema.no',
|
|
10
|
+
defaultMessage: 'No',
|
|
11
|
+
description: 'No: used for boolean schemas with a value of false.'
|
|
12
|
+
}
|
|
13
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './ReadOnlySchema';
|