@rjsf/utils 6.0.0-beta.9 → 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{index.js → index.cjs} +563 -200
- package/dist/index.cjs.map +7 -0
- package/dist/utils.esm.js +562 -199
- package/dist/utils.esm.js.map +4 -4
- package/dist/utils.umd.js +533 -193
- package/lib/ErrorSchemaBuilder.d.ts +2 -2
- package/lib/constants.d.ts +3 -0
- package/lib/constants.js +3 -0
- package/lib/constants.js.map +1 -1
- package/lib/createSchemaUtils.js +25 -18
- package/lib/createSchemaUtils.js.map +1 -1
- package/lib/enums.d.ts +13 -3
- package/lib/enums.js +13 -3
- package/lib/enums.js.map +1 -1
- package/lib/findSchemaDefinition.d.ts +6 -0
- package/lib/findSchemaDefinition.js +44 -3
- package/lib/findSchemaDefinition.js.map +1 -1
- package/lib/getDateElementProps.d.ts +1 -2
- package/lib/getTestIds.js +2 -2
- package/lib/getTestIds.js.map +1 -1
- package/lib/getUiOptions.js +4 -0
- package/lib/getUiOptions.js.map +1 -1
- package/lib/getWidget.js +3 -3
- package/lib/getWidget.js.map +1 -1
- package/lib/guessType.d.ts +1 -1
- package/lib/idGenerators.d.ts +22 -15
- package/lib/idGenerators.js +17 -8
- package/lib/idGenerators.js.map +1 -1
- package/lib/index.d.ts +16 -6
- package/lib/index.js +13 -4
- package/lib/index.js.map +1 -1
- package/lib/isFormDataAvailable.d.ts +7 -0
- package/lib/isFormDataAvailable.js +13 -0
- package/lib/isFormDataAvailable.js.map +1 -0
- package/lib/isRootSchema.d.ts +13 -0
- package/lib/isRootSchema.js +25 -0
- package/lib/isRootSchema.js.map +1 -0
- package/lib/mergeDefaultsWithFormData.js +14 -2
- package/lib/mergeDefaultsWithFormData.js.map +1 -1
- package/lib/nameGenerators.d.ts +13 -0
- package/lib/nameGenerators.js +30 -0
- package/lib/nameGenerators.js.map +1 -0
- package/lib/schema/getDefaultFormState.d.ts +17 -3
- package/lib/schema/getDefaultFormState.js +66 -26
- package/lib/schema/getDefaultFormState.js.map +1 -1
- package/lib/schema/getDisplayLabel.js +2 -2
- package/lib/schema/getDisplayLabel.js.map +1 -1
- package/lib/schema/index.d.ts +1 -2
- package/lib/schema/index.js +1 -2
- package/lib/schema/index.js.map +1 -1
- package/lib/schema/retrieveSchema.d.ts +10 -5
- package/lib/schema/retrieveSchema.js +40 -17
- package/lib/schema/retrieveSchema.js.map +1 -1
- package/lib/shallowEquals.d.ts +8 -0
- package/lib/shallowEquals.js +36 -0
- package/lib/shallowEquals.js.map +1 -0
- package/lib/shouldRender.d.ts +8 -2
- package/lib/shouldRender.js +17 -2
- package/lib/shouldRender.js.map +1 -1
- package/lib/shouldRenderOptionalField.d.ts +18 -0
- package/lib/shouldRenderOptionalField.js +47 -0
- package/lib/shouldRenderOptionalField.js.map +1 -0
- package/lib/toFieldPathId.d.ts +14 -0
- package/lib/toFieldPathId.js +26 -0
- package/lib/toFieldPathId.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types.d.ts +196 -105
- package/lib/useAltDateWidgetProps.d.ts +39 -0
- package/lib/useAltDateWidgetProps.js +71 -0
- package/lib/useAltDateWidgetProps.js.map +1 -0
- package/lib/useDeepCompareMemo.d.ts +8 -0
- package/lib/useDeepCompareMemo.js +17 -0
- package/lib/useDeepCompareMemo.js.map +1 -0
- package/lib/useFileWidgetProps.d.ts +29 -0
- package/lib/useFileWidgetProps.js +119 -0
- package/lib/useFileWidgetProps.js.map +1 -0
- package/lib/validationDataMerge.d.ts +2 -1
- package/lib/validationDataMerge.js +3 -2
- package/lib/validationDataMerge.js.map +1 -1
- package/package.json +13 -14
- package/src/ErrorSchemaBuilder.ts +2 -2
- package/src/constants.ts +3 -0
- package/src/createSchemaUtils.ts +25 -26
- package/src/enums.ts +13 -3
- package/src/findSchemaDefinition.ts +51 -3
- package/src/getDateElementProps.ts +1 -1
- package/src/getTestIds.ts +2 -2
- package/src/getUiOptions.ts +4 -0
- package/src/getWidget.tsx +3 -3
- package/src/idGenerators.ts +35 -25
- package/src/index.ts +36 -5
- package/src/isFormDataAvailable.ts +13 -0
- package/src/isRootSchema.ts +30 -0
- package/src/mergeDefaultsWithFormData.ts +16 -2
- package/src/nameGenerators.ts +43 -0
- package/src/schema/getDefaultFormState.ts +87 -31
- package/src/schema/getDisplayLabel.ts +2 -2
- package/src/schema/index.ts +0 -2
- package/src/schema/retrieveSchema.ts +43 -7
- package/src/shallowEquals.ts +41 -0
- package/src/shouldRender.ts +27 -2
- package/src/shouldRenderOptionalField.ts +56 -0
- package/src/toFieldPathId.ts +34 -0
- package/src/types.ts +229 -113
- package/src/useAltDateWidgetProps.tsx +163 -0
- package/src/useDeepCompareMemo.ts +17 -0
- package/src/useFileWidgetProps.ts +155 -0
- package/src/validationDataMerge.ts +7 -1
- package/dist/index.js.map +0 -7
- package/lib/schema/toIdSchema.d.ts +0 -14
- package/lib/schema/toIdSchema.js +0 -62
- package/lib/schema/toIdSchema.js.map +0 -1
- package/src/schema/toIdSchema.ts +0 -131
package/dist/utils.esm.js
CHANGED
|
@@ -66,6 +66,8 @@ var REQUIRED_KEY = "required";
|
|
|
66
66
|
var SUBMIT_BTN_OPTIONS_KEY = "submitButtonOptions";
|
|
67
67
|
var REF_KEY = "$ref";
|
|
68
68
|
var SCHEMA_KEY = "$schema";
|
|
69
|
+
var DEFAULT_ID_PREFIX = "root";
|
|
70
|
+
var DEFAULT_ID_SEPARATOR = "_";
|
|
69
71
|
var DISCRIMINATOR_PATH = ["discriminator", "propertyName"];
|
|
70
72
|
var FORM_CONTEXT_NAME = "formContext";
|
|
71
73
|
var LOOKUP_MAP_NAME = "layoutGridLookupMap";
|
|
@@ -75,10 +77,14 @@ var UI_FIELD_KEY = "ui:field";
|
|
|
75
77
|
var UI_WIDGET_KEY = "ui:widget";
|
|
76
78
|
var UI_OPTIONS_KEY = "ui:options";
|
|
77
79
|
var UI_GLOBAL_OPTIONS_KEY = "ui:globalOptions";
|
|
80
|
+
var JSON_SCHEMA_DRAFT_2019_09 = "https://json-schema.org/draft/2019-09/schema";
|
|
78
81
|
var JSON_SCHEMA_DRAFT_2020_12 = "https://json-schema.org/draft/2020-12/schema";
|
|
79
82
|
|
|
80
83
|
// src/getUiOptions.ts
|
|
81
84
|
function getUiOptions(uiSchema = {}, globalOptions = {}) {
|
|
85
|
+
if (!uiSchema) {
|
|
86
|
+
return { ...globalOptions };
|
|
87
|
+
}
|
|
82
88
|
return Object.keys(uiSchema).filter((key) => key.indexOf("ui:") === 0).reduce(
|
|
83
89
|
(options, key) => {
|
|
84
90
|
const value = uiSchema[key];
|
|
@@ -177,7 +183,16 @@ function findEmbeddedSchemaRecursive(schema, ref) {
|
|
|
177
183
|
return schema;
|
|
178
184
|
}
|
|
179
185
|
for (const subSchema of Object.values(schema)) {
|
|
180
|
-
if (
|
|
186
|
+
if (Array.isArray(subSchema)) {
|
|
187
|
+
for (const item of subSchema) {
|
|
188
|
+
if (isObject2(item)) {
|
|
189
|
+
const result = findEmbeddedSchemaRecursive(item, ref);
|
|
190
|
+
if (result !== void 0) {
|
|
191
|
+
return result;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
} else if (isObject2(subSchema)) {
|
|
181
196
|
const result = findEmbeddedSchemaRecursive(subSchema, ref);
|
|
182
197
|
if (result !== void 0) {
|
|
183
198
|
return result;
|
|
@@ -186,6 +201,23 @@ function findEmbeddedSchemaRecursive(schema, ref) {
|
|
|
186
201
|
}
|
|
187
202
|
return void 0;
|
|
188
203
|
}
|
|
204
|
+
function makeAllReferencesAbsolute(schema, baseURI) {
|
|
205
|
+
const currentURI = get(schema, ID_KEY, baseURI);
|
|
206
|
+
if (REF_KEY in schema) {
|
|
207
|
+
schema = { ...schema, [REF_KEY]: UriResolver.resolve(currentURI, schema[REF_KEY]) };
|
|
208
|
+
}
|
|
209
|
+
for (const [key, subSchema] of Object.entries(schema)) {
|
|
210
|
+
if (Array.isArray(subSchema)) {
|
|
211
|
+
schema = {
|
|
212
|
+
...schema,
|
|
213
|
+
[key]: subSchema.map((item) => isObject2(item) ? makeAllReferencesAbsolute(item, currentURI) : item)
|
|
214
|
+
};
|
|
215
|
+
} else if (isObject2(subSchema)) {
|
|
216
|
+
schema = { ...schema, [key]: makeAllReferencesAbsolute(subSchema, currentURI) };
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return schema;
|
|
220
|
+
}
|
|
189
221
|
function splitKeyElementFromObject(key, object) {
|
|
190
222
|
const value = object[key];
|
|
191
223
|
const remaining = omit(object, [key]);
|
|
@@ -231,7 +263,11 @@ function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [],
|
|
|
231
263
|
const [remaining, theRef] = splitKeyElementFromObject(REF_KEY, current);
|
|
232
264
|
const subSchema = findSchemaDefinitionRecursive(theRef, rootSchema, [...recurseList, ref], baseURI);
|
|
233
265
|
if (Object.keys(remaining).length > 0) {
|
|
234
|
-
|
|
266
|
+
if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2019_09 || rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
|
|
267
|
+
return { [ALL_OF_KEY]: [remaining, subSchema] };
|
|
268
|
+
} else {
|
|
269
|
+
return { ...remaining, ...subSchema };
|
|
270
|
+
}
|
|
235
271
|
}
|
|
236
272
|
return subSchema;
|
|
237
273
|
}
|
|
@@ -399,7 +435,7 @@ function getFirstMatchingOption(validator, formData, options, rootSchema, discri
|
|
|
399
435
|
|
|
400
436
|
// src/schema/retrieveSchema.ts
|
|
401
437
|
import isEmpty2 from "lodash/isEmpty";
|
|
402
|
-
function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experimental_customMergeAllOf) {
|
|
438
|
+
function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs = false) {
|
|
403
439
|
return retrieveSchemaInternal(
|
|
404
440
|
validator,
|
|
405
441
|
schema,
|
|
@@ -407,7 +443,8 @@ function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experim
|
|
|
407
443
|
rawFormData,
|
|
408
444
|
void 0,
|
|
409
445
|
void 0,
|
|
410
|
-
experimental_customMergeAllOf
|
|
446
|
+
experimental_customMergeAllOf,
|
|
447
|
+
resolveAnyOfOrOneOfRefs
|
|
411
448
|
)[0];
|
|
412
449
|
}
|
|
413
450
|
function resolveCondition(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
@@ -496,14 +533,16 @@ function getMatchingPatternProperties(schema, key) {
|
|
|
496
533
|
{}
|
|
497
534
|
);
|
|
498
535
|
}
|
|
499
|
-
function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
536
|
+
function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs) {
|
|
500
537
|
const updatedSchemas = resolveReference(
|
|
501
538
|
validator,
|
|
502
539
|
schema,
|
|
503
540
|
rootSchema,
|
|
504
541
|
expandAllBranches,
|
|
505
542
|
recurseList,
|
|
506
|
-
formData
|
|
543
|
+
formData,
|
|
544
|
+
experimental_customMergeAllOf,
|
|
545
|
+
resolveAnyOfOrOneOfRefs
|
|
507
546
|
);
|
|
508
547
|
if (updatedSchemas.length > 1 || updatedSchemas[0] !== schema) {
|
|
509
548
|
return updatedSchemas;
|
|
@@ -515,7 +554,8 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
|
|
|
515
554
|
rootSchema,
|
|
516
555
|
expandAllBranches,
|
|
517
556
|
recurseList,
|
|
518
|
-
formData
|
|
557
|
+
formData,
|
|
558
|
+
experimental_customMergeAllOf
|
|
519
559
|
);
|
|
520
560
|
return resolvedSchemas.flatMap((s) => {
|
|
521
561
|
return retrieveSchemaInternal(
|
|
@@ -529,7 +569,7 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
|
|
|
529
569
|
);
|
|
530
570
|
});
|
|
531
571
|
}
|
|
532
|
-
if (ALL_OF_KEY in schema && Array.isArray(schema
|
|
572
|
+
if (ALL_OF_KEY in schema && Array.isArray(schema[ALL_OF_KEY])) {
|
|
533
573
|
const allOfSchemaElements = schema.allOf.map(
|
|
534
574
|
(allOfSubschema) => retrieveSchemaInternal(
|
|
535
575
|
validator,
|
|
@@ -549,8 +589,8 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
|
|
|
549
589
|
}
|
|
550
590
|
return [schema];
|
|
551
591
|
}
|
|
552
|
-
function resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
553
|
-
const updatedSchema = resolveAllReferences(schema, rootSchema, recurseList);
|
|
592
|
+
function resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs) {
|
|
593
|
+
const updatedSchema = resolveAllReferences(schema, rootSchema, recurseList, void 0, resolveAnyOfOrOneOfRefs);
|
|
554
594
|
if (updatedSchema !== schema) {
|
|
555
595
|
return retrieveSchemaInternal(
|
|
556
596
|
validator,
|
|
@@ -559,12 +599,13 @@ function resolveReference(validator, schema, rootSchema, expandAllBranches, recu
|
|
|
559
599
|
formData,
|
|
560
600
|
expandAllBranches,
|
|
561
601
|
recurseList,
|
|
562
|
-
experimental_customMergeAllOf
|
|
602
|
+
experimental_customMergeAllOf,
|
|
603
|
+
resolveAnyOfOrOneOfRefs
|
|
563
604
|
);
|
|
564
605
|
}
|
|
565
606
|
return [schema];
|
|
566
607
|
}
|
|
567
|
-
function resolveAllReferences(schema, rootSchema, recurseList, baseURI) {
|
|
608
|
+
function resolveAllReferences(schema, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs) {
|
|
568
609
|
if (!isObject(schema)) {
|
|
569
610
|
return schema;
|
|
570
611
|
}
|
|
@@ -587,7 +628,7 @@ function resolveAllReferences(schema, rootSchema, recurseList, baseURI) {
|
|
|
587
628
|
resolvedSchema[PROPERTIES_KEY],
|
|
588
629
|
(result, value, key) => {
|
|
589
630
|
const childList = [...recurseList];
|
|
590
|
-
result[key] = resolveAllReferences(value, rootSchema, childList, baseURI);
|
|
631
|
+
result[key] = resolveAllReferences(value, rootSchema, childList, baseURI, resolveAnyOfOrOneOfRefs);
|
|
591
632
|
childrenLists.push(childList);
|
|
592
633
|
},
|
|
593
634
|
{}
|
|
@@ -598,9 +639,28 @@ function resolveAllReferences(schema, rootSchema, recurseList, baseURI) {
|
|
|
598
639
|
if (ITEMS_KEY in resolvedSchema && !Array.isArray(resolvedSchema.items) && typeof resolvedSchema.items !== "boolean") {
|
|
599
640
|
resolvedSchema = {
|
|
600
641
|
...resolvedSchema,
|
|
601
|
-
items: resolveAllReferences(resolvedSchema.items, rootSchema, recurseList, baseURI)
|
|
642
|
+
items: resolveAllReferences(resolvedSchema.items, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs)
|
|
602
643
|
};
|
|
603
644
|
}
|
|
645
|
+
if (resolveAnyOfOrOneOfRefs) {
|
|
646
|
+
let key;
|
|
647
|
+
let schemas;
|
|
648
|
+
if (ANY_OF_KEY in schema && Array.isArray(schema[ANY_OF_KEY])) {
|
|
649
|
+
key = ANY_OF_KEY;
|
|
650
|
+
schemas = resolvedSchema[ANY_OF_KEY];
|
|
651
|
+
} else if (ONE_OF_KEY in schema && Array.isArray(schema[ONE_OF_KEY])) {
|
|
652
|
+
key = ONE_OF_KEY;
|
|
653
|
+
schemas = resolvedSchema[ONE_OF_KEY];
|
|
654
|
+
}
|
|
655
|
+
if (key && schemas) {
|
|
656
|
+
resolvedSchema = {
|
|
657
|
+
...resolvedSchema,
|
|
658
|
+
[key]: schemas.map(
|
|
659
|
+
(s) => resolveAllReferences(s, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs)
|
|
660
|
+
)
|
|
661
|
+
};
|
|
662
|
+
}
|
|
663
|
+
}
|
|
604
664
|
return deepEquals(schema, resolvedSchema) ? schema : resolvedSchema;
|
|
605
665
|
}
|
|
606
666
|
function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFormData, experimental_customMergeAllOf) {
|
|
@@ -618,7 +678,7 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
|
|
|
618
678
|
if (!isEmpty2(matchingProperties)) {
|
|
619
679
|
schema.properties[key] = retrieveSchema(
|
|
620
680
|
validator,
|
|
621
|
-
{
|
|
681
|
+
{ [ALL_OF_KEY]: Object.values(matchingProperties) },
|
|
622
682
|
rootSchema,
|
|
623
683
|
get5(formData, [key]),
|
|
624
684
|
experimental_customMergeAllOf
|
|
@@ -628,12 +688,12 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
|
|
|
628
688
|
}
|
|
629
689
|
}
|
|
630
690
|
if (ADDITIONAL_PROPERTIES_KEY in schema && schema.additionalProperties !== false) {
|
|
631
|
-
let additionalProperties
|
|
691
|
+
let additionalProperties;
|
|
632
692
|
if (typeof schema.additionalProperties !== "boolean") {
|
|
633
693
|
if (REF_KEY in schema.additionalProperties) {
|
|
634
694
|
additionalProperties = retrieveSchema(
|
|
635
695
|
validator,
|
|
636
|
-
{
|
|
696
|
+
{ [REF_KEY]: get5(schema.additionalProperties, [REF_KEY]) },
|
|
637
697
|
rootSchema,
|
|
638
698
|
formData,
|
|
639
699
|
experimental_customMergeAllOf
|
|
@@ -660,7 +720,7 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
|
|
|
660
720
|
});
|
|
661
721
|
return schema;
|
|
662
722
|
}
|
|
663
|
-
function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = [], experimental_customMergeAllOf) {
|
|
723
|
+
function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = [], experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs) {
|
|
664
724
|
if (!isObject(schema)) {
|
|
665
725
|
return [{}];
|
|
666
726
|
}
|
|
@@ -671,7 +731,8 @@ function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expa
|
|
|
671
731
|
expandAllBranches,
|
|
672
732
|
recurseList,
|
|
673
733
|
rawFormData,
|
|
674
|
-
experimental_customMergeAllOf
|
|
734
|
+
experimental_customMergeAllOf,
|
|
735
|
+
resolveAnyOfOrOneOfRefs
|
|
675
736
|
);
|
|
676
737
|
return resolvedSchemas.flatMap((s) => {
|
|
677
738
|
let resolvedSchema = s;
|
|
@@ -1228,8 +1289,19 @@ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults =
|
|
|
1228
1289
|
const keyValue = get10(formData, key);
|
|
1229
1290
|
const keyExistsInDefaults = isObject(defaults) && key in defaults;
|
|
1230
1291
|
const keyExistsInFormData = key in formData;
|
|
1292
|
+
const keyDefault = get10(defaults, key) ?? {};
|
|
1293
|
+
const defaultValueIsNestedObject = keyExistsInDefaults && Object.entries(keyDefault).some(([, v]) => isObject(v));
|
|
1294
|
+
const keyDefaultIsObject = keyExistsInDefaults && isObject(get10(defaults, key));
|
|
1295
|
+
const keyHasFormDataObject = keyExistsInFormData && isObject(keyValue);
|
|
1296
|
+
if (keyDefaultIsObject && keyHasFormDataObject && !defaultValueIsNestedObject) {
|
|
1297
|
+
acc2[key] = {
|
|
1298
|
+
...get10(defaults, key),
|
|
1299
|
+
...keyValue
|
|
1300
|
+
};
|
|
1301
|
+
return acc2;
|
|
1302
|
+
}
|
|
1231
1303
|
acc2[key] = mergeDefaultsWithFormData(
|
|
1232
|
-
|
|
1304
|
+
get10(defaults, key),
|
|
1233
1305
|
keyValue,
|
|
1234
1306
|
mergeExtraArrayDefaults,
|
|
1235
1307
|
defaultSupercedesUndefined,
|
|
@@ -1240,7 +1312,7 @@ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults =
|
|
|
1240
1312
|
return acc2;
|
|
1241
1313
|
}, acc);
|
|
1242
1314
|
}
|
|
1243
|
-
if (defaultSupercedesUndefined && (!
|
|
1315
|
+
if (defaultSupercedesUndefined && (!(defaults === void 0) && isNil(formData) || typeof formData === "number" && isNaN(formData)) || overrideFormDataWithDefaults && !isNil(formData)) {
|
|
1244
1316
|
return defaults;
|
|
1245
1317
|
}
|
|
1246
1318
|
return formData;
|
|
@@ -1387,10 +1459,19 @@ function getInnerSchemaForArrayItem(schema, additionalItems = 0 /* Ignore */, id
|
|
|
1387
1459
|
}
|
|
1388
1460
|
return {};
|
|
1389
1461
|
}
|
|
1462
|
+
function computeDefaultBasedOnSchemaTypeAndDefaults(schema, computedDefault) {
|
|
1463
|
+
const { default: schemaDefault, type } = schema;
|
|
1464
|
+
const shouldReturnNullAsDefault = Array.isArray(type) && type.includes("null") && isEmpty4(computedDefault) && schemaDefault === null;
|
|
1465
|
+
return shouldReturnNullAsDefault ? null : computedDefault;
|
|
1466
|
+
}
|
|
1390
1467
|
function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false) {
|
|
1391
1468
|
const { emptyObjectFields = "populateAllDefaults" } = experimental_defaultFormStateBehavior;
|
|
1392
|
-
if (includeUndefinedValues || isConst) {
|
|
1469
|
+
if (includeUndefinedValues === true || isConst) {
|
|
1393
1470
|
obj[key] = computedDefault;
|
|
1471
|
+
} else if (includeUndefinedValues === "excludeObjectChildren") {
|
|
1472
|
+
if (!isObject(computedDefault) || !isEmpty4(computedDefault)) {
|
|
1473
|
+
obj[key] = computedDefault;
|
|
1474
|
+
}
|
|
1394
1475
|
} else if (emptyObjectFields !== "skipDefaults") {
|
|
1395
1476
|
const isSelfOrParentRequired = isParentRequired === void 0 ? requiredFields.includes(key) : isParentRequired;
|
|
1396
1477
|
if (isObject(computedDefault)) {
|
|
@@ -1422,7 +1503,8 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1422
1503
|
experimental_defaultFormStateBehavior = void 0,
|
|
1423
1504
|
experimental_customMergeAllOf = void 0,
|
|
1424
1505
|
required,
|
|
1425
|
-
shouldMergeDefaultsIntoFormData = false
|
|
1506
|
+
shouldMergeDefaultsIntoFormData = false,
|
|
1507
|
+
initialDefaultsGenerated
|
|
1426
1508
|
} = computeDefaultsProps;
|
|
1427
1509
|
let formData = isObject(rawFormData) ? rawFormData : {};
|
|
1428
1510
|
const schema = isObject(rawSchema) ? rawSchema : {};
|
|
@@ -1430,7 +1512,7 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1430
1512
|
let schemaToCompute = null;
|
|
1431
1513
|
let experimental_dfsb_to_compute = experimental_defaultFormStateBehavior;
|
|
1432
1514
|
let updatedRecurseList = _recurseList;
|
|
1433
|
-
if (schema[CONST_KEY] && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(schema)) {
|
|
1515
|
+
if (schema[CONST_KEY] !== void 0 && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(schema)) {
|
|
1434
1516
|
defaults = schema[CONST_KEY];
|
|
1435
1517
|
} else if (isObject(defaults) && isObject(schema.default)) {
|
|
1436
1518
|
defaults = mergeObjects(defaults, schema.default);
|
|
@@ -1525,9 +1607,10 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1525
1607
|
experimental_defaultFormStateBehavior: experimental_dfsb_to_compute,
|
|
1526
1608
|
experimental_customMergeAllOf,
|
|
1527
1609
|
parentDefaults: defaults,
|
|
1528
|
-
rawFormData: formData,
|
|
1610
|
+
rawFormData: rawFormData ?? formData,
|
|
1529
1611
|
required,
|
|
1530
|
-
shouldMergeDefaultsIntoFormData
|
|
1612
|
+
shouldMergeDefaultsIntoFormData,
|
|
1613
|
+
initialDefaultsGenerated
|
|
1531
1614
|
});
|
|
1532
1615
|
}
|
|
1533
1616
|
if (defaults === void 0) {
|
|
@@ -1579,7 +1662,8 @@ function getObjectDefaults(validator, rawSchema, {
|
|
|
1579
1662
|
experimental_defaultFormStateBehavior = void 0,
|
|
1580
1663
|
experimental_customMergeAllOf = void 0,
|
|
1581
1664
|
required,
|
|
1582
|
-
shouldMergeDefaultsIntoFormData
|
|
1665
|
+
shouldMergeDefaultsIntoFormData,
|
|
1666
|
+
initialDefaultsGenerated
|
|
1583
1667
|
} = {}, defaults) {
|
|
1584
1668
|
{
|
|
1585
1669
|
const formData = isObject(rawFormData) ? rawFormData : {};
|
|
@@ -1600,7 +1684,8 @@ function getObjectDefaults(validator, rawSchema, {
|
|
|
1600
1684
|
parentDefaults: get12(defaults, [key]),
|
|
1601
1685
|
rawFormData: get12(formData, [key]),
|
|
1602
1686
|
required: retrievedSchema.required?.includes(key),
|
|
1603
|
-
shouldMergeDefaultsIntoFormData
|
|
1687
|
+
shouldMergeDefaultsIntoFormData,
|
|
1688
|
+
initialDefaultsGenerated
|
|
1604
1689
|
});
|
|
1605
1690
|
maybeAddDefaultToObject(
|
|
1606
1691
|
acc,
|
|
@@ -1616,7 +1701,7 @@ function getObjectDefaults(validator, rawSchema, {
|
|
|
1616
1701
|
},
|
|
1617
1702
|
{}
|
|
1618
1703
|
);
|
|
1619
|
-
if (retrievedSchema.additionalProperties) {
|
|
1704
|
+
if (retrievedSchema.additionalProperties && !initialDefaultsGenerated) {
|
|
1620
1705
|
const additionalPropertiesSchema = isObject(retrievedSchema.additionalProperties) ? retrievedSchema.additionalProperties : {};
|
|
1621
1706
|
const keys2 = /* @__PURE__ */ new Set();
|
|
1622
1707
|
if (isObject(defaults)) {
|
|
@@ -1637,7 +1722,8 @@ function getObjectDefaults(validator, rawSchema, {
|
|
|
1637
1722
|
parentDefaults: get12(defaults, [key]),
|
|
1638
1723
|
rawFormData: get12(formData, [key]),
|
|
1639
1724
|
required: retrievedSchema.required?.includes(key),
|
|
1640
|
-
shouldMergeDefaultsIntoFormData
|
|
1725
|
+
shouldMergeDefaultsIntoFormData,
|
|
1726
|
+
initialDefaultsGenerated
|
|
1641
1727
|
});
|
|
1642
1728
|
maybeAddDefaultToObject(
|
|
1643
1729
|
objectDefaults,
|
|
@@ -1649,7 +1735,7 @@ function getObjectDefaults(validator, rawSchema, {
|
|
|
1649
1735
|
);
|
|
1650
1736
|
});
|
|
1651
1737
|
}
|
|
1652
|
-
return objectDefaults;
|
|
1738
|
+
return computeDefaultBasedOnSchemaTypeAndDefaults(rawSchema, objectDefaults);
|
|
1653
1739
|
}
|
|
1654
1740
|
}
|
|
1655
1741
|
function getArrayDefaults(validator, rawSchema, {
|
|
@@ -1659,7 +1745,9 @@ function getArrayDefaults(validator, rawSchema, {
|
|
|
1659
1745
|
experimental_defaultFormStateBehavior = void 0,
|
|
1660
1746
|
experimental_customMergeAllOf = void 0,
|
|
1661
1747
|
required,
|
|
1662
|
-
|
|
1748
|
+
requiredAsRoot = false,
|
|
1749
|
+
shouldMergeDefaultsIntoFormData,
|
|
1750
|
+
initialDefaultsGenerated
|
|
1663
1751
|
} = {}, defaults) {
|
|
1664
1752
|
const schema = rawSchema;
|
|
1665
1753
|
const arrayMinItemsStateBehavior = experimental_defaultFormStateBehavior?.arrayMinItems ?? {};
|
|
@@ -1680,7 +1768,8 @@ function getArrayDefaults(validator, rawSchema, {
|
|
|
1680
1768
|
experimental_customMergeAllOf,
|
|
1681
1769
|
parentDefaults: item,
|
|
1682
1770
|
required,
|
|
1683
|
-
shouldMergeDefaultsIntoFormData
|
|
1771
|
+
shouldMergeDefaultsIntoFormData,
|
|
1772
|
+
initialDefaultsGenerated
|
|
1684
1773
|
});
|
|
1685
1774
|
});
|
|
1686
1775
|
}
|
|
@@ -1698,7 +1787,8 @@ function getArrayDefaults(validator, rawSchema, {
|
|
|
1698
1787
|
rawFormData: item,
|
|
1699
1788
|
parentDefaults: get12(defaults, [idx]),
|
|
1700
1789
|
required,
|
|
1701
|
-
shouldMergeDefaultsIntoFormData
|
|
1790
|
+
shouldMergeDefaultsIntoFormData,
|
|
1791
|
+
initialDefaultsGenerated
|
|
1702
1792
|
});
|
|
1703
1793
|
});
|
|
1704
1794
|
const mergeExtraDefaults = (ignoreMinItemsFlagSet && required || isPopulateAll) && arrayMergeExtraDefaults;
|
|
@@ -1714,25 +1804,29 @@ function getArrayDefaults(validator, rawSchema, {
|
|
|
1714
1804
|
return defaults ? defaults : void 0;
|
|
1715
1805
|
}
|
|
1716
1806
|
}
|
|
1807
|
+
let arrayDefault;
|
|
1717
1808
|
const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
|
|
1718
1809
|
if (!schema.minItems || isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) || computeSkipPopulate(validator, schema, rootSchema) || schema.minItems <= defaultsLength) {
|
|
1719
|
-
|
|
1720
|
-
}
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1810
|
+
arrayDefault = defaults || !required && !requiredAsRoot ? defaults : emptyDefault;
|
|
1811
|
+
} else {
|
|
1812
|
+
const defaultEntries = defaults || [];
|
|
1813
|
+
const fillerSchema = getInnerSchemaForArrayItem(schema, 1 /* Invert */);
|
|
1814
|
+
const fillerDefault = fillerSchema.default;
|
|
1815
|
+
const fillerEntries = Array.from(
|
|
1816
|
+
{ length: schema.minItems - defaultsLength },
|
|
1817
|
+
() => computeDefaults(validator, fillerSchema, {
|
|
1818
|
+
parentDefaults: fillerDefault,
|
|
1819
|
+
rootSchema,
|
|
1820
|
+
_recurseList,
|
|
1821
|
+
experimental_defaultFormStateBehavior,
|
|
1822
|
+
experimental_customMergeAllOf,
|
|
1823
|
+
required,
|
|
1824
|
+
shouldMergeDefaultsIntoFormData
|
|
1825
|
+
})
|
|
1826
|
+
);
|
|
1827
|
+
arrayDefault = defaultEntries.concat(fillerEntries);
|
|
1828
|
+
}
|
|
1829
|
+
return computeDefaultBasedOnSchemaTypeAndDefaults(rawSchema, arrayDefault);
|
|
1736
1830
|
}
|
|
1737
1831
|
function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps = {}, defaults) {
|
|
1738
1832
|
switch (getSchemaType(rawSchema)) {
|
|
@@ -1745,7 +1839,7 @@ function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps
|
|
|
1745
1839
|
}
|
|
1746
1840
|
}
|
|
1747
1841
|
}
|
|
1748
|
-
function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
|
|
1842
|
+
function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior, experimental_customMergeAllOf, initialDefaultsGenerated) {
|
|
1749
1843
|
if (!isObject(theSchema)) {
|
|
1750
1844
|
throw new Error("Invalid schema: " + theSchema);
|
|
1751
1845
|
}
|
|
@@ -1756,8 +1850,16 @@ function getDefaultFormState(validator, theSchema, formData, rootSchema, include
|
|
|
1756
1850
|
experimental_defaultFormStateBehavior,
|
|
1757
1851
|
experimental_customMergeAllOf,
|
|
1758
1852
|
rawFormData: formData,
|
|
1759
|
-
shouldMergeDefaultsIntoFormData: true
|
|
1853
|
+
shouldMergeDefaultsIntoFormData: true,
|
|
1854
|
+
initialDefaultsGenerated,
|
|
1855
|
+
requiredAsRoot: true
|
|
1760
1856
|
});
|
|
1857
|
+
if (schema.type !== "object" && isObject(schema.default)) {
|
|
1858
|
+
return {
|
|
1859
|
+
...defaults,
|
|
1860
|
+
...formData
|
|
1861
|
+
};
|
|
1862
|
+
}
|
|
1761
1863
|
if (isObject(formData) || Array.isArray(formData)) {
|
|
1762
1864
|
const { mergeDefaultsIntoFormData } = experimental_defaultFormStateBehavior || {};
|
|
1763
1865
|
const defaultSupercedesUndefined = mergeDefaultsIntoFormData === "useDefaultIfFormDataUndefined";
|
|
@@ -1814,10 +1916,10 @@ function getDisplayLabel(validator, schema, uiSchema = {}, rootSchema, globalOpt
|
|
|
1814
1916
|
if (schemaType === "object") {
|
|
1815
1917
|
displayLabel = false;
|
|
1816
1918
|
}
|
|
1817
|
-
if (schemaType === "boolean" && !uiSchema[UI_WIDGET_KEY]) {
|
|
1919
|
+
if (schemaType === "boolean" && uiSchema && !uiSchema[UI_WIDGET_KEY]) {
|
|
1818
1920
|
displayLabel = false;
|
|
1819
1921
|
}
|
|
1820
|
-
if (uiSchema[UI_FIELD_KEY]) {
|
|
1922
|
+
if (uiSchema && uiSchema[UI_FIELD_KEY]) {
|
|
1821
1923
|
displayLabel = false;
|
|
1822
1924
|
}
|
|
1823
1925
|
return displayLabel;
|
|
@@ -1956,80 +2058,8 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
|
|
|
1956
2058
|
return newFormData;
|
|
1957
2059
|
}
|
|
1958
2060
|
|
|
1959
|
-
// src/schema/toIdSchema.ts
|
|
1960
|
-
import get14 from "lodash/get";
|
|
1961
|
-
function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
|
|
1962
|
-
const $id = id || idPrefix;
|
|
1963
|
-
const idSchema = { $id };
|
|
1964
|
-
if (typeof schema === "object") {
|
|
1965
|
-
if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema) {
|
|
1966
|
-
const _schema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);
|
|
1967
|
-
const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals(item, _schema));
|
|
1968
|
-
if (sameSchemaIndex === -1) {
|
|
1969
|
-
return toIdSchemaInternal(
|
|
1970
|
-
validator,
|
|
1971
|
-
_schema,
|
|
1972
|
-
idPrefix,
|
|
1973
|
-
idSeparator,
|
|
1974
|
-
id,
|
|
1975
|
-
rootSchema,
|
|
1976
|
-
formData,
|
|
1977
|
-
_recurseList.concat(_schema),
|
|
1978
|
-
experimental_customMergeAllOf
|
|
1979
|
-
);
|
|
1980
|
-
}
|
|
1981
|
-
}
|
|
1982
|
-
if (ITEMS_KEY in schema && !get14(schema, [ITEMS_KEY, REF_KEY])) {
|
|
1983
|
-
return toIdSchemaInternal(
|
|
1984
|
-
validator,
|
|
1985
|
-
get14(schema, ITEMS_KEY),
|
|
1986
|
-
idPrefix,
|
|
1987
|
-
idSeparator,
|
|
1988
|
-
id,
|
|
1989
|
-
rootSchema,
|
|
1990
|
-
formData,
|
|
1991
|
-
_recurseList,
|
|
1992
|
-
experimental_customMergeAllOf
|
|
1993
|
-
);
|
|
1994
|
-
}
|
|
1995
|
-
if (getSchemaType(schema) === "object" && PROPERTIES_KEY in schema) {
|
|
1996
|
-
for (const name in schema.properties) {
|
|
1997
|
-
const field = schema[PROPERTIES_KEY][name];
|
|
1998
|
-
const fieldId = idSchema[ID_KEY] + idSeparator + name;
|
|
1999
|
-
idSchema[name] = toIdSchemaInternal(
|
|
2000
|
-
validator,
|
|
2001
|
-
field,
|
|
2002
|
-
idPrefix,
|
|
2003
|
-
idSeparator,
|
|
2004
|
-
fieldId,
|
|
2005
|
-
rootSchema,
|
|
2006
|
-
// It's possible that formData is not an object -- this can happen if an
|
|
2007
|
-
// array item has just been added, but not populated with data yet
|
|
2008
|
-
get14(formData, [name]),
|
|
2009
|
-
_recurseList,
|
|
2010
|
-
experimental_customMergeAllOf
|
|
2011
|
-
);
|
|
2012
|
-
}
|
|
2013
|
-
}
|
|
2014
|
-
}
|
|
2015
|
-
return idSchema;
|
|
2016
|
-
}
|
|
2017
|
-
function toIdSchema(validator, schema, id, rootSchema, formData, idPrefix = "root", idSeparator = "_", experimental_customMergeAllOf) {
|
|
2018
|
-
return toIdSchemaInternal(
|
|
2019
|
-
validator,
|
|
2020
|
-
schema,
|
|
2021
|
-
idPrefix,
|
|
2022
|
-
idSeparator,
|
|
2023
|
-
id,
|
|
2024
|
-
rootSchema,
|
|
2025
|
-
formData,
|
|
2026
|
-
void 0,
|
|
2027
|
-
experimental_customMergeAllOf
|
|
2028
|
-
);
|
|
2029
|
-
}
|
|
2030
|
-
|
|
2031
2061
|
// src/schema/toPathSchema.ts
|
|
2032
|
-
import
|
|
2062
|
+
import get14 from "lodash/get";
|
|
2033
2063
|
import set2 from "lodash/set";
|
|
2034
2064
|
function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
|
|
2035
2065
|
if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema) {
|
|
@@ -2122,7 +2152,7 @@ function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _re
|
|
|
2122
2152
|
}
|
|
2123
2153
|
} else if (PROPERTIES_KEY in schema) {
|
|
2124
2154
|
for (const property in schema.properties) {
|
|
2125
|
-
const field =
|
|
2155
|
+
const field = get14(schema, [PROPERTIES_KEY, property], {});
|
|
2126
2156
|
pathSchema[property] = toPathSchemaInternal(
|
|
2127
2157
|
validator,
|
|
2128
2158
|
field,
|
|
@@ -2130,7 +2160,7 @@ function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _re
|
|
|
2130
2160
|
rootSchema,
|
|
2131
2161
|
// It's possible that formData is not an object -- this can happen if an
|
|
2132
2162
|
// array item has just been added, but not populated with data yet
|
|
2133
|
-
|
|
2163
|
+
get14(formData, [property]),
|
|
2134
2164
|
_recurseList,
|
|
2135
2165
|
experimental_customMergeAllOf
|
|
2136
2166
|
);
|
|
@@ -2143,6 +2173,7 @@ function toPathSchema(validator, schema, name = "", rootSchema, formData, experi
|
|
|
2143
2173
|
}
|
|
2144
2174
|
|
|
2145
2175
|
// src/createSchemaUtils.ts
|
|
2176
|
+
import get15 from "lodash/get";
|
|
2146
2177
|
var SchemaUtils = class {
|
|
2147
2178
|
/** Constructs the `SchemaUtils` instance with the given `validator` and `rootSchema` stored as instance variables
|
|
2148
2179
|
*
|
|
@@ -2152,11 +2183,22 @@ var SchemaUtils = class {
|
|
|
2152
2183
|
* @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas
|
|
2153
2184
|
*/
|
|
2154
2185
|
constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
|
|
2155
|
-
|
|
2186
|
+
if (rootSchema && rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
|
|
2187
|
+
this.rootSchema = makeAllReferencesAbsolute(rootSchema, get15(rootSchema, ID_KEY, "#"));
|
|
2188
|
+
} else {
|
|
2189
|
+
this.rootSchema = rootSchema;
|
|
2190
|
+
}
|
|
2156
2191
|
this.validator = validator;
|
|
2157
2192
|
this.experimental_defaultFormStateBehavior = experimental_defaultFormStateBehavior;
|
|
2158
2193
|
this.experimental_customMergeAllOf = experimental_customMergeAllOf;
|
|
2159
2194
|
}
|
|
2195
|
+
/** Returns the `rootSchema` in the `SchemaUtilsType`
|
|
2196
|
+
*
|
|
2197
|
+
* @returns - The `rootSchema`
|
|
2198
|
+
*/
|
|
2199
|
+
getRootSchema() {
|
|
2200
|
+
return this.rootSchema;
|
|
2201
|
+
}
|
|
2160
2202
|
/** Returns the `ValidatorType` in the `SchemaUtilsType`
|
|
2161
2203
|
*
|
|
2162
2204
|
* @returns - The `ValidatorType`
|
|
@@ -2229,9 +2271,10 @@ var SchemaUtils = class {
|
|
|
2229
2271
|
* @param [includeUndefinedValues=false] - Optional flag, if true, cause undefined values to be added as defaults.
|
|
2230
2272
|
* If "excludeObjectChildren", pass `includeUndefinedValues` as false when computing defaults for any nested
|
|
2231
2273
|
* object properties.
|
|
2274
|
+
* @param initialDefaultsGenerated - Indicates whether or not initial defaults have been generated
|
|
2232
2275
|
* @returns - The resulting `formData` with all the defaults provided
|
|
2233
2276
|
*/
|
|
2234
|
-
getDefaultFormState(schema, formData, includeUndefinedValues = false) {
|
|
2277
|
+
getDefaultFormState(schema, formData, includeUndefinedValues = false, initialDefaultsGenerated) {
|
|
2235
2278
|
return getDefaultFormState(
|
|
2236
2279
|
this.validator,
|
|
2237
2280
|
schema,
|
|
@@ -2239,7 +2282,8 @@ var SchemaUtils = class {
|
|
|
2239
2282
|
this.rootSchema,
|
|
2240
2283
|
includeUndefinedValues,
|
|
2241
2284
|
this.experimental_defaultFormStateBehavior,
|
|
2242
|
-
this.experimental_customMergeAllOf
|
|
2285
|
+
this.experimental_customMergeAllOf,
|
|
2286
|
+
initialDefaultsGenerated
|
|
2243
2287
|
);
|
|
2244
2288
|
}
|
|
2245
2289
|
/** Determines whether the combination of `schema` and `uiSchema` properties indicates that the label for the `schema`
|
|
@@ -2338,15 +2382,17 @@ var SchemaUtils = class {
|
|
|
2338
2382
|
*
|
|
2339
2383
|
* @param schema - The schema for which retrieving a schema is desired
|
|
2340
2384
|
* @param [rawFormData] - The current formData, if any, to assist retrieving a schema
|
|
2385
|
+
* @param [resolveAnyOfOrOneOfRefs] - Optional flag indicating whether to resolved refs in anyOf/oneOf lists
|
|
2341
2386
|
* @returns - The schema having its conditions, additional properties, references and dependencies resolved
|
|
2342
2387
|
*/
|
|
2343
|
-
retrieveSchema(schema, rawFormData) {
|
|
2388
|
+
retrieveSchema(schema, rawFormData, resolveAnyOfOrOneOfRefs) {
|
|
2344
2389
|
return retrieveSchema(
|
|
2345
2390
|
this.validator,
|
|
2346
2391
|
schema,
|
|
2347
2392
|
this.rootSchema,
|
|
2348
2393
|
rawFormData,
|
|
2349
|
-
this.experimental_customMergeAllOf
|
|
2394
|
+
this.experimental_customMergeAllOf,
|
|
2395
|
+
resolveAnyOfOrOneOfRefs
|
|
2350
2396
|
);
|
|
2351
2397
|
}
|
|
2352
2398
|
/** Sanitize the `data` associated with the `oldSchema` so it is considered appropriate for the `newSchema`. If the
|
|
@@ -2370,27 +2416,6 @@ var SchemaUtils = class {
|
|
|
2370
2416
|
this.experimental_customMergeAllOf
|
|
2371
2417
|
);
|
|
2372
2418
|
}
|
|
2373
|
-
/** Generates an `IdSchema` object for the `schema`, recursively
|
|
2374
|
-
*
|
|
2375
|
-
* @param schema - The schema for which the display label flag is desired
|
|
2376
|
-
* @param [id] - The base id for the schema
|
|
2377
|
-
* @param [formData] - The current formData, if any, onto which to provide any missing defaults
|
|
2378
|
-
* @param [idPrefix='root'] - The prefix to use for the id
|
|
2379
|
-
* @param [idSeparator='_'] - The separator to use for the path segments in the id
|
|
2380
|
-
* @returns - The `IdSchema` object for the `schema`
|
|
2381
|
-
*/
|
|
2382
|
-
toIdSchema(schema, id, formData, idPrefix = "root", idSeparator = "_") {
|
|
2383
|
-
return toIdSchema(
|
|
2384
|
-
this.validator,
|
|
2385
|
-
schema,
|
|
2386
|
-
id,
|
|
2387
|
-
this.rootSchema,
|
|
2388
|
-
formData,
|
|
2389
|
-
idPrefix,
|
|
2390
|
-
idSeparator,
|
|
2391
|
-
this.experimental_customMergeAllOf
|
|
2392
|
-
);
|
|
2393
|
-
}
|
|
2394
2419
|
/** Generates an `PathSchema` object for the `schema`, recursively
|
|
2395
2420
|
*
|
|
2396
2421
|
* @param schema - The schema for which the display label flag is desired
|
|
@@ -2476,6 +2501,31 @@ function dateRangeOptions(start, stop) {
|
|
|
2476
2501
|
return options;
|
|
2477
2502
|
}
|
|
2478
2503
|
|
|
2504
|
+
// src/shallowEquals.ts
|
|
2505
|
+
function shallowEquals(a, b) {
|
|
2506
|
+
if (Object.is(a, b)) {
|
|
2507
|
+
return true;
|
|
2508
|
+
}
|
|
2509
|
+
if (a == null || b == null) {
|
|
2510
|
+
return false;
|
|
2511
|
+
}
|
|
2512
|
+
if (typeof a !== "object" || typeof b !== "object") {
|
|
2513
|
+
return false;
|
|
2514
|
+
}
|
|
2515
|
+
const keysA = Object.keys(a);
|
|
2516
|
+
const keysB = Object.keys(b);
|
|
2517
|
+
if (keysA.length !== keysB.length) {
|
|
2518
|
+
return false;
|
|
2519
|
+
}
|
|
2520
|
+
for (let i = 0; i < keysA.length; i++) {
|
|
2521
|
+
const key = keysA[i];
|
|
2522
|
+
if (!Object.prototype.hasOwnProperty.call(b, key) || !Object.is(a[key], b[key])) {
|
|
2523
|
+
return false;
|
|
2524
|
+
}
|
|
2525
|
+
}
|
|
2526
|
+
return true;
|
|
2527
|
+
}
|
|
2528
|
+
|
|
2479
2529
|
// src/replaceStringParameters.ts
|
|
2480
2530
|
function replaceStringParameters(inputString, params) {
|
|
2481
2531
|
let output = inputString;
|
|
@@ -2643,6 +2693,29 @@ var ErrorSchemaBuilder = class {
|
|
|
2643
2693
|
}
|
|
2644
2694
|
};
|
|
2645
2695
|
|
|
2696
|
+
// src/getChangedFields.ts
|
|
2697
|
+
import keys from "lodash/keys";
|
|
2698
|
+
import pickBy from "lodash/pickBy";
|
|
2699
|
+
import isPlainObject2 from "lodash/isPlainObject";
|
|
2700
|
+
import get17 from "lodash/get";
|
|
2701
|
+
import difference from "lodash/difference";
|
|
2702
|
+
function getChangedFields(a, b) {
|
|
2703
|
+
const aIsPlainObject = isPlainObject2(a);
|
|
2704
|
+
const bIsPlainObject = isPlainObject2(b);
|
|
2705
|
+
if (a === b || !aIsPlainObject && !bIsPlainObject) {
|
|
2706
|
+
return [];
|
|
2707
|
+
}
|
|
2708
|
+
if (aIsPlainObject && !bIsPlainObject) {
|
|
2709
|
+
return keys(a);
|
|
2710
|
+
} else if (!aIsPlainObject && bIsPlainObject) {
|
|
2711
|
+
return keys(b);
|
|
2712
|
+
} else {
|
|
2713
|
+
const unequalFields = keys(pickBy(a, (value, key) => !deepEquals(value, get17(b, key))));
|
|
2714
|
+
const diffFields = difference(keys(b), keys(a));
|
|
2715
|
+
return [...unequalFields, ...diffFields];
|
|
2716
|
+
}
|
|
2717
|
+
}
|
|
2718
|
+
|
|
2646
2719
|
// src/getDateElementProps.ts
|
|
2647
2720
|
function getDateElementProps(date, time, yearRange = [1900, (/* @__PURE__ */ new Date()).getFullYear() + 2], format = "YMD") {
|
|
2648
2721
|
const { day, month, year, hour, minute, second } = date;
|
|
@@ -2751,10 +2824,10 @@ function getTemplate(name, registry, uiOptions = {}) {
|
|
|
2751
2824
|
}
|
|
2752
2825
|
|
|
2753
2826
|
// src/getTestIds.ts
|
|
2754
|
-
import
|
|
2755
|
-
import
|
|
2827
|
+
import get18 from "lodash/get";
|
|
2828
|
+
import uniqueId from "lodash/uniqueId";
|
|
2756
2829
|
function getTestIds() {
|
|
2757
|
-
if (typeof process === "undefined" ||
|
|
2830
|
+
if (typeof process === "undefined" || get18(process, "env.NODE_ENV") !== "test") {
|
|
2758
2831
|
return {};
|
|
2759
2832
|
}
|
|
2760
2833
|
const ids = /* @__PURE__ */ new Map();
|
|
@@ -2763,7 +2836,7 @@ function getTestIds() {
|
|
|
2763
2836
|
{
|
|
2764
2837
|
get(_obj, prop) {
|
|
2765
2838
|
if (!ids.has(prop)) {
|
|
2766
|
-
ids.set(prop,
|
|
2839
|
+
ids.set(prop, uniqueId("test-id-"));
|
|
2767
2840
|
}
|
|
2768
2841
|
return ids.get(prop);
|
|
2769
2842
|
}
|
|
@@ -2774,7 +2847,7 @@ function getTestIds() {
|
|
|
2774
2847
|
// src/getWidget.tsx
|
|
2775
2848
|
import { createElement } from "react";
|
|
2776
2849
|
import ReactIs from "react-is";
|
|
2777
|
-
import
|
|
2850
|
+
import get19 from "lodash/get";
|
|
2778
2851
|
import set4 from "lodash/set";
|
|
2779
2852
|
import { jsx } from "react/jsx-runtime";
|
|
2780
2853
|
var widgetMap = {
|
|
@@ -2830,7 +2903,7 @@ var widgetMap = {
|
|
|
2830
2903
|
}
|
|
2831
2904
|
};
|
|
2832
2905
|
function mergeWidgetOptions(AWidget) {
|
|
2833
|
-
let MergedWidget =
|
|
2906
|
+
let MergedWidget = get19(AWidget, "MergedWidget");
|
|
2834
2907
|
if (!MergedWidget) {
|
|
2835
2908
|
const defaultOptions = AWidget.defaultProps && AWidget.defaultProps.options || {};
|
|
2836
2909
|
MergedWidget = ({ options, ...props }) => {
|
|
@@ -2846,7 +2919,7 @@ function getWidget(schema, widget, registeredWidgets = {}) {
|
|
|
2846
2919
|
return mergeWidgetOptions(widget);
|
|
2847
2920
|
}
|
|
2848
2921
|
if (typeof widget !== "string") {
|
|
2849
|
-
throw new Error(`Unsupported widget definition: ${typeof widget}`);
|
|
2922
|
+
throw new Error(`Unsupported widget definition: ${typeof widget} in schema: ${JSON.stringify(schema)}`);
|
|
2850
2923
|
}
|
|
2851
2924
|
if (widget in registeredWidgets) {
|
|
2852
2925
|
const registeredWidget = registeredWidgets[widget];
|
|
@@ -2854,14 +2927,14 @@ function getWidget(schema, widget, registeredWidgets = {}) {
|
|
|
2854
2927
|
}
|
|
2855
2928
|
if (typeof type === "string") {
|
|
2856
2929
|
if (!(type in widgetMap)) {
|
|
2857
|
-
throw new Error(`No widget for type '${type}'`);
|
|
2930
|
+
throw new Error(`No widget for type '${type}' in schema: ${JSON.stringify(schema)}`);
|
|
2858
2931
|
}
|
|
2859
2932
|
if (widget in widgetMap[type]) {
|
|
2860
2933
|
const registeredWidget = registeredWidgets[widgetMap[type][widget]];
|
|
2861
2934
|
return getWidget(schema, registeredWidget, registeredWidgets);
|
|
2862
2935
|
}
|
|
2863
2936
|
}
|
|
2864
|
-
throw new Error(`No widget '${widget}' for type '${type}'`);
|
|
2937
|
+
throw new Error(`No widget '${widget}' for type '${type}' in schema: ${JSON.stringify(schema)}`);
|
|
2865
2938
|
}
|
|
2866
2939
|
|
|
2867
2940
|
// src/hashForSchema.ts
|
|
@@ -2931,6 +3004,31 @@ function optionId(id, optionIndex) {
|
|
|
2931
3004
|
function buttonId(id, btn) {
|
|
2932
3005
|
return idGenerator(id, btn);
|
|
2933
3006
|
}
|
|
3007
|
+
function optionalControlsId(id, element) {
|
|
3008
|
+
return idGenerator(id, `optional${element}`);
|
|
3009
|
+
}
|
|
3010
|
+
|
|
3011
|
+
// src/isFormDataAvailable.ts
|
|
3012
|
+
import isNil3 from "lodash/isNil";
|
|
3013
|
+
import isEmpty5 from "lodash/isEmpty";
|
|
3014
|
+
import isObject4 from "lodash/isObject";
|
|
3015
|
+
function isFormDataAvailable(formData) {
|
|
3016
|
+
return !isNil3(formData) && (!isObject4(formData) || Array.isArray(formData) || !isEmpty5(formData));
|
|
3017
|
+
}
|
|
3018
|
+
|
|
3019
|
+
// src/isRootSchema.ts
|
|
3020
|
+
import isEqual2 from "lodash/isEqual";
|
|
3021
|
+
function isRootSchema(registry, schemaToCompare) {
|
|
3022
|
+
const { rootSchema, schemaUtils } = registry;
|
|
3023
|
+
if (isEqual2(schemaToCompare, rootSchema)) {
|
|
3024
|
+
return true;
|
|
3025
|
+
}
|
|
3026
|
+
if (REF_KEY in rootSchema) {
|
|
3027
|
+
const resolvedSchema = schemaUtils.retrieveSchema(rootSchema);
|
|
3028
|
+
return isEqual2(schemaToCompare, resolvedSchema);
|
|
3029
|
+
}
|
|
3030
|
+
return false;
|
|
3031
|
+
}
|
|
2934
3032
|
|
|
2935
3033
|
// src/labelValue.ts
|
|
2936
3034
|
function labelValue(label, hideLabel, fallback) {
|
|
@@ -2943,14 +3041,14 @@ function localToUTC(dateString) {
|
|
|
2943
3041
|
}
|
|
2944
3042
|
|
|
2945
3043
|
// src/lookupFromFormContext.ts
|
|
2946
|
-
import
|
|
3044
|
+
import get20 from "lodash/get";
|
|
2947
3045
|
import has6 from "lodash/has";
|
|
2948
3046
|
function lookupFromFormContext(regOrFc, toLookup, fallback) {
|
|
2949
3047
|
const lookupPath = [LOOKUP_MAP_NAME];
|
|
2950
3048
|
if (has6(regOrFc, FORM_CONTEXT_NAME)) {
|
|
2951
3049
|
lookupPath.unshift(FORM_CONTEXT_NAME);
|
|
2952
3050
|
}
|
|
2953
|
-
return
|
|
3051
|
+
return get20(regOrFc, [...lookupPath, toLookup], fallback);
|
|
2954
3052
|
}
|
|
2955
3053
|
|
|
2956
3054
|
// src/orderProperties.ts
|
|
@@ -3031,11 +3129,40 @@ function schemaRequiresTrueValue(schema) {
|
|
|
3031
3129
|
}
|
|
3032
3130
|
|
|
3033
3131
|
// src/shouldRender.ts
|
|
3034
|
-
function shouldRender(component, nextProps, nextState) {
|
|
3132
|
+
function shouldRender(component, nextProps, nextState, updateStrategy = "customDeep") {
|
|
3133
|
+
if (updateStrategy === "always") {
|
|
3134
|
+
return true;
|
|
3135
|
+
}
|
|
3136
|
+
if (updateStrategy === "shallow") {
|
|
3137
|
+
const { props: props2, state: state2 } = component;
|
|
3138
|
+
return !shallowEquals(props2, nextProps) || !shallowEquals(state2, nextState);
|
|
3139
|
+
}
|
|
3035
3140
|
const { props, state } = component;
|
|
3036
3141
|
return !deepEquals(props, nextProps) || !deepEquals(state, nextState);
|
|
3037
3142
|
}
|
|
3038
3143
|
|
|
3144
|
+
// src/shouldRenderOptionalField.ts
|
|
3145
|
+
import isObject5 from "lodash/isObject";
|
|
3146
|
+
import uniq2 from "lodash/uniq";
|
|
3147
|
+
function getSchemaTypesForXxxOf(schemas) {
|
|
3148
|
+
const allTypes = uniq2(
|
|
3149
|
+
schemas.map((s) => isObject5(s) ? getSchemaType(s) : void 0).flat().filter((t) => t !== void 0)
|
|
3150
|
+
);
|
|
3151
|
+
return allTypes.length === 1 ? allTypes[0] : allTypes;
|
|
3152
|
+
}
|
|
3153
|
+
function shouldRenderOptionalField(registry, schema, required, uiSchema) {
|
|
3154
|
+
const { enableOptionalDataFieldForType = [] } = getUiOptions(uiSchema, registry.globalUiOptions);
|
|
3155
|
+
let schemaType;
|
|
3156
|
+
if (ANY_OF_KEY in schema && Array.isArray(schema[ANY_OF_KEY])) {
|
|
3157
|
+
schemaType = getSchemaTypesForXxxOf(schema[ANY_OF_KEY]);
|
|
3158
|
+
} else if (ONE_OF_KEY in schema && Array.isArray(schema[ONE_OF_KEY])) {
|
|
3159
|
+
schemaType = getSchemaTypesForXxxOf(schema[ONE_OF_KEY]);
|
|
3160
|
+
} else {
|
|
3161
|
+
schemaType = getSchemaType(schema);
|
|
3162
|
+
}
|
|
3163
|
+
return !isRootSchema(registry, schema) && !required && !!schemaType && !Array.isArray(schemaType) && !!enableOptionalDataFieldForType.find((val) => val === schemaType);
|
|
3164
|
+
}
|
|
3165
|
+
|
|
3039
3166
|
// src/toDateString.ts
|
|
3040
3167
|
function toDateString(dateObject, time = true) {
|
|
3041
3168
|
const { year, month, day, hour = 0, minute = 0, second = 0 } = dateObject;
|
|
@@ -3045,7 +3172,7 @@ function toDateString(dateObject, time = true) {
|
|
|
3045
3172
|
}
|
|
3046
3173
|
|
|
3047
3174
|
// src/toErrorList.ts
|
|
3048
|
-
import
|
|
3175
|
+
import isPlainObject3 from "lodash/isPlainObject";
|
|
3049
3176
|
function toErrorList(errorSchema, fieldPath = []) {
|
|
3050
3177
|
if (!errorSchema) {
|
|
3051
3178
|
return [];
|
|
@@ -3066,7 +3193,7 @@ function toErrorList(errorSchema, fieldPath = []) {
|
|
|
3066
3193
|
return Object.keys(errorSchema).reduce((acc, key) => {
|
|
3067
3194
|
if (key !== ERRORS_KEY) {
|
|
3068
3195
|
const childSchema = errorSchema[key];
|
|
3069
|
-
if (
|
|
3196
|
+
if (isPlainObject3(childSchema)) {
|
|
3070
3197
|
acc = acc.concat(toErrorList(childSchema, [...fieldPath, key]));
|
|
3071
3198
|
}
|
|
3072
3199
|
}
|
|
@@ -3093,15 +3220,28 @@ function toErrorSchema(errors) {
|
|
|
3093
3220
|
return builder.ErrorSchema;
|
|
3094
3221
|
}
|
|
3095
3222
|
|
|
3223
|
+
// src/toFieldPathId.ts
|
|
3224
|
+
function toFieldPathId(fieldPath, globalFormOptions, parentPath, isMultiValue) {
|
|
3225
|
+
const basePath = Array.isArray(parentPath) ? parentPath : parentPath?.path;
|
|
3226
|
+
const childPath = fieldPath === "" ? [] : [fieldPath];
|
|
3227
|
+
const path = basePath ? basePath.concat(...childPath) : childPath;
|
|
3228
|
+
const id = [globalFormOptions.idPrefix, ...path].join(globalFormOptions.idSeparator);
|
|
3229
|
+
let name;
|
|
3230
|
+
if (globalFormOptions.nameGenerator && path.length > 0) {
|
|
3231
|
+
name = globalFormOptions.nameGenerator(path, globalFormOptions.idPrefix, isMultiValue);
|
|
3232
|
+
}
|
|
3233
|
+
return { path, [ID_KEY]: id, ...name !== void 0 && { name } };
|
|
3234
|
+
}
|
|
3235
|
+
|
|
3096
3236
|
// src/unwrapErrorHandler.ts
|
|
3097
|
-
import
|
|
3237
|
+
import isPlainObject4 from "lodash/isPlainObject";
|
|
3098
3238
|
function unwrapErrorHandler(errorHandler) {
|
|
3099
3239
|
return Object.keys(errorHandler).reduce((acc, key) => {
|
|
3100
3240
|
if (key === "addError") {
|
|
3101
3241
|
return acc;
|
|
3102
3242
|
} else {
|
|
3103
3243
|
const childSchema = errorHandler[key];
|
|
3104
|
-
if (
|
|
3244
|
+
if (isPlainObject4(childSchema)) {
|
|
3105
3245
|
return {
|
|
3106
3246
|
...acc,
|
|
3107
3247
|
[key]: unwrapErrorHandler(childSchema)
|
|
@@ -3112,6 +3252,209 @@ function unwrapErrorHandler(errorHandler) {
|
|
|
3112
3252
|
}, {});
|
|
3113
3253
|
}
|
|
3114
3254
|
|
|
3255
|
+
// src/useAltDateWidgetProps.tsx
|
|
3256
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
3257
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
3258
|
+
function readyForChange(state) {
|
|
3259
|
+
return Object.values(state).every((value) => value !== -1);
|
|
3260
|
+
}
|
|
3261
|
+
function DateElement(props) {
|
|
3262
|
+
const {
|
|
3263
|
+
className = "form-control",
|
|
3264
|
+
type,
|
|
3265
|
+
range,
|
|
3266
|
+
value,
|
|
3267
|
+
select,
|
|
3268
|
+
rootId,
|
|
3269
|
+
name,
|
|
3270
|
+
disabled,
|
|
3271
|
+
readonly,
|
|
3272
|
+
autofocus,
|
|
3273
|
+
registry,
|
|
3274
|
+
onBlur,
|
|
3275
|
+
onFocus
|
|
3276
|
+
} = props;
|
|
3277
|
+
const id = `${rootId}_${type}`;
|
|
3278
|
+
const { SelectWidget } = registry.widgets;
|
|
3279
|
+
const onChange = useCallback((value2) => select(type, value2), [select, type]);
|
|
3280
|
+
return /* @__PURE__ */ jsx2(
|
|
3281
|
+
SelectWidget,
|
|
3282
|
+
{
|
|
3283
|
+
schema: { type: "integer" },
|
|
3284
|
+
id,
|
|
3285
|
+
name,
|
|
3286
|
+
className,
|
|
3287
|
+
options: { enumOptions: dateRangeOptions(range[0], range[1]) },
|
|
3288
|
+
placeholder: type,
|
|
3289
|
+
value,
|
|
3290
|
+
disabled,
|
|
3291
|
+
readonly,
|
|
3292
|
+
autofocus,
|
|
3293
|
+
onChange,
|
|
3294
|
+
onBlur,
|
|
3295
|
+
onFocus,
|
|
3296
|
+
registry,
|
|
3297
|
+
label: "",
|
|
3298
|
+
"aria-describedby": ariaDescribedByIds(rootId)
|
|
3299
|
+
}
|
|
3300
|
+
);
|
|
3301
|
+
}
|
|
3302
|
+
function useAltDateWidgetProps(props) {
|
|
3303
|
+
const { time = false, disabled = false, readonly = false, options, onChange, value } = props;
|
|
3304
|
+
const [state, setState] = useState(parseDateString(value, time));
|
|
3305
|
+
useEffect(() => {
|
|
3306
|
+
setState(parseDateString(value, time));
|
|
3307
|
+
}, [time, value]);
|
|
3308
|
+
const handleChange = useCallback(
|
|
3309
|
+
(property, value2) => {
|
|
3310
|
+
const nextState = {
|
|
3311
|
+
...state,
|
|
3312
|
+
[property]: typeof value2 === "undefined" ? -1 : value2
|
|
3313
|
+
};
|
|
3314
|
+
if (readyForChange(nextState)) {
|
|
3315
|
+
onChange(toDateString(nextState, time));
|
|
3316
|
+
} else {
|
|
3317
|
+
setState(nextState);
|
|
3318
|
+
}
|
|
3319
|
+
},
|
|
3320
|
+
[state, onChange, time]
|
|
3321
|
+
);
|
|
3322
|
+
const handleClear = useCallback(
|
|
3323
|
+
(event) => {
|
|
3324
|
+
event.preventDefault();
|
|
3325
|
+
if (disabled || readonly) {
|
|
3326
|
+
return;
|
|
3327
|
+
}
|
|
3328
|
+
onChange(void 0);
|
|
3329
|
+
},
|
|
3330
|
+
[disabled, readonly, onChange]
|
|
3331
|
+
);
|
|
3332
|
+
const handleSetNow = useCallback(
|
|
3333
|
+
(event) => {
|
|
3334
|
+
event.preventDefault();
|
|
3335
|
+
if (disabled || readonly) {
|
|
3336
|
+
return;
|
|
3337
|
+
}
|
|
3338
|
+
const nextState = parseDateString((/* @__PURE__ */ new Date()).toJSON(), time);
|
|
3339
|
+
onChange(toDateString(nextState, time));
|
|
3340
|
+
},
|
|
3341
|
+
[disabled, readonly, time, onChange]
|
|
3342
|
+
);
|
|
3343
|
+
const elements = useMemo(
|
|
3344
|
+
() => getDateElementProps(
|
|
3345
|
+
state,
|
|
3346
|
+
time,
|
|
3347
|
+
options.yearsRange,
|
|
3348
|
+
options.format
|
|
3349
|
+
),
|
|
3350
|
+
[state, time, options.yearsRange, options.format]
|
|
3351
|
+
);
|
|
3352
|
+
return { elements, handleChange, handleClear, handleSetNow };
|
|
3353
|
+
}
|
|
3354
|
+
|
|
3355
|
+
// src/useDeepCompareMemo.ts
|
|
3356
|
+
import { useRef } from "react";
|
|
3357
|
+
import isEqual3 from "lodash/isEqual";
|
|
3358
|
+
function useDeepCompareMemo(newValue) {
|
|
3359
|
+
const valueRef = useRef(newValue);
|
|
3360
|
+
if (!isEqual3(newValue, valueRef.current)) {
|
|
3361
|
+
valueRef.current = newValue;
|
|
3362
|
+
}
|
|
3363
|
+
return valueRef.current;
|
|
3364
|
+
}
|
|
3365
|
+
|
|
3366
|
+
// src/useFileWidgetProps.ts
|
|
3367
|
+
import { useCallback as useCallback2, useMemo as useMemo2 } from "react";
|
|
3368
|
+
function addNameToDataURL(dataURL, name) {
|
|
3369
|
+
return dataURL.replace(";base64", `;name=${encodeURIComponent(name)};base64`);
|
|
3370
|
+
}
|
|
3371
|
+
function processFile(file) {
|
|
3372
|
+
const { name, size, type } = file;
|
|
3373
|
+
return new Promise((resolve, reject) => {
|
|
3374
|
+
const reader = new window.FileReader();
|
|
3375
|
+
reader.onerror = reject;
|
|
3376
|
+
reader.onload = (event) => {
|
|
3377
|
+
if (typeof event.target?.result === "string") {
|
|
3378
|
+
resolve({
|
|
3379
|
+
dataURL: addNameToDataURL(event.target.result, name),
|
|
3380
|
+
name,
|
|
3381
|
+
size,
|
|
3382
|
+
type
|
|
3383
|
+
});
|
|
3384
|
+
} else {
|
|
3385
|
+
resolve({
|
|
3386
|
+
dataURL: null,
|
|
3387
|
+
name,
|
|
3388
|
+
size,
|
|
3389
|
+
type
|
|
3390
|
+
});
|
|
3391
|
+
}
|
|
3392
|
+
};
|
|
3393
|
+
reader.readAsDataURL(file);
|
|
3394
|
+
});
|
|
3395
|
+
}
|
|
3396
|
+
function processFiles(files) {
|
|
3397
|
+
return Promise.all(Array.from(files).map(processFile));
|
|
3398
|
+
}
|
|
3399
|
+
function extractFileInfo(dataURLs) {
|
|
3400
|
+
return dataURLs.reduce((acc, dataURL) => {
|
|
3401
|
+
if (!dataURL) {
|
|
3402
|
+
return acc;
|
|
3403
|
+
}
|
|
3404
|
+
try {
|
|
3405
|
+
const { blob, name } = dataURItoBlob(dataURL);
|
|
3406
|
+
return [
|
|
3407
|
+
...acc,
|
|
3408
|
+
{
|
|
3409
|
+
dataURL,
|
|
3410
|
+
name,
|
|
3411
|
+
size: blob.size,
|
|
3412
|
+
type: blob.type
|
|
3413
|
+
}
|
|
3414
|
+
];
|
|
3415
|
+
} catch {
|
|
3416
|
+
return acc;
|
|
3417
|
+
}
|
|
3418
|
+
}, []);
|
|
3419
|
+
}
|
|
3420
|
+
function useFileWidgetProps(value, onChange, multiple = false) {
|
|
3421
|
+
const values = useMemo2(() => {
|
|
3422
|
+
if (multiple && value) {
|
|
3423
|
+
return Array.isArray(value) ? value : [value];
|
|
3424
|
+
}
|
|
3425
|
+
return [];
|
|
3426
|
+
}, [value, multiple]);
|
|
3427
|
+
const filesInfo = useMemo2(
|
|
3428
|
+
() => Array.isArray(value) ? extractFileInfo(value) : extractFileInfo([value || ""]),
|
|
3429
|
+
[value]
|
|
3430
|
+
);
|
|
3431
|
+
const handleChange = useCallback2(
|
|
3432
|
+
(files) => {
|
|
3433
|
+
processFiles(files).then((filesInfoEvent) => {
|
|
3434
|
+
const newValue = filesInfoEvent.map((fileInfo) => fileInfo.dataURL || null);
|
|
3435
|
+
if (multiple) {
|
|
3436
|
+
onChange(values.concat(...newValue));
|
|
3437
|
+
} else {
|
|
3438
|
+
onChange(newValue[0]);
|
|
3439
|
+
}
|
|
3440
|
+
});
|
|
3441
|
+
},
|
|
3442
|
+
[values, multiple, onChange]
|
|
3443
|
+
);
|
|
3444
|
+
const handleRemove = useCallback2(
|
|
3445
|
+
(index) => {
|
|
3446
|
+
if (multiple) {
|
|
3447
|
+
const newValue = values.filter((_, i) => i !== index);
|
|
3448
|
+
onChange(newValue);
|
|
3449
|
+
} else {
|
|
3450
|
+
onChange(void 0);
|
|
3451
|
+
}
|
|
3452
|
+
},
|
|
3453
|
+
[values, multiple, onChange]
|
|
3454
|
+
);
|
|
3455
|
+
return { filesInfo, handleChange, handleRemove };
|
|
3456
|
+
}
|
|
3457
|
+
|
|
3115
3458
|
// src/utcToLocal.ts
|
|
3116
3459
|
function utcToLocal(jsonDate) {
|
|
3117
3460
|
if (!jsonDate) {
|
|
@@ -3129,23 +3472,27 @@ function utcToLocal(jsonDate) {
|
|
|
3129
3472
|
}
|
|
3130
3473
|
|
|
3131
3474
|
// src/validationDataMerge.ts
|
|
3132
|
-
import
|
|
3133
|
-
function validationDataMerge(validationData, additionalErrorSchema) {
|
|
3475
|
+
import isEmpty6 from "lodash/isEmpty";
|
|
3476
|
+
function validationDataMerge(validationData, additionalErrorSchema, preventDuplicates = false) {
|
|
3134
3477
|
if (!additionalErrorSchema) {
|
|
3135
3478
|
return validationData;
|
|
3136
3479
|
}
|
|
3137
3480
|
const { errors: oldErrors, errorSchema: oldErrorSchema } = validationData;
|
|
3138
3481
|
let errors = toErrorList(additionalErrorSchema);
|
|
3139
3482
|
let errorSchema = additionalErrorSchema;
|
|
3140
|
-
if (!
|
|
3141
|
-
errorSchema = mergeObjects(
|
|
3483
|
+
if (!isEmpty6(oldErrorSchema)) {
|
|
3484
|
+
errorSchema = mergeObjects(
|
|
3485
|
+
oldErrorSchema,
|
|
3486
|
+
additionalErrorSchema,
|
|
3487
|
+
preventDuplicates ? "preventDuplicates" : true
|
|
3488
|
+
);
|
|
3142
3489
|
errors = [...oldErrors].concat(errors);
|
|
3143
3490
|
}
|
|
3144
3491
|
return { errorSchema, errors };
|
|
3145
3492
|
}
|
|
3146
3493
|
|
|
3147
3494
|
// src/withIdRefPrefix.ts
|
|
3148
|
-
import
|
|
3495
|
+
import isObject6 from "lodash/isObject";
|
|
3149
3496
|
function withIdRefPrefixObject(node) {
|
|
3150
3497
|
for (const key in node) {
|
|
3151
3498
|
const realObj = node;
|
|
@@ -3168,34 +3515,31 @@ function withIdRefPrefix(schemaNode) {
|
|
|
3168
3515
|
if (Array.isArray(schemaNode)) {
|
|
3169
3516
|
return withIdRefPrefixArray([...schemaNode]);
|
|
3170
3517
|
}
|
|
3171
|
-
if (
|
|
3518
|
+
if (isObject6(schemaNode)) {
|
|
3172
3519
|
return withIdRefPrefixObject({ ...schemaNode });
|
|
3173
3520
|
}
|
|
3174
3521
|
return schemaNode;
|
|
3175
3522
|
}
|
|
3176
3523
|
|
|
3177
|
-
// src/
|
|
3178
|
-
|
|
3179
|
-
|
|
3180
|
-
|
|
3181
|
-
import get20 from "lodash/get";
|
|
3182
|
-
import difference from "lodash/difference";
|
|
3183
|
-
function getChangedFields(a, b) {
|
|
3184
|
-
const aIsPlainObject = isPlainObject4(a);
|
|
3185
|
-
const bIsPlainObject = isPlainObject4(b);
|
|
3186
|
-
if (a === b || !aIsPlainObject && !bIsPlainObject) {
|
|
3187
|
-
return [];
|
|
3524
|
+
// src/nameGenerators.ts
|
|
3525
|
+
var bracketNameGenerator = (path, idPrefix, isMultiValue) => {
|
|
3526
|
+
if (!path || path.length === 0) {
|
|
3527
|
+
return idPrefix;
|
|
3188
3528
|
}
|
|
3189
|
-
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
|
|
3196
|
-
|
|
3529
|
+
const baseName = path.reduce((acc, pathUnit, index) => {
|
|
3530
|
+
if (index === 0) {
|
|
3531
|
+
return `${idPrefix}[${String(pathUnit)}]`;
|
|
3532
|
+
}
|
|
3533
|
+
return `${acc}[${String(pathUnit)}]`;
|
|
3534
|
+
}, "");
|
|
3535
|
+
return isMultiValue ? `${baseName}[]` : baseName;
|
|
3536
|
+
};
|
|
3537
|
+
var dotNotationNameGenerator = (path, idPrefix, _isMultiValue) => {
|
|
3538
|
+
if (!path || path.length === 0) {
|
|
3539
|
+
return idPrefix;
|
|
3197
3540
|
}
|
|
3198
|
-
}
|
|
3541
|
+
return `${idPrefix}.${path.map(String).join(".")}`;
|
|
3542
|
+
};
|
|
3199
3543
|
|
|
3200
3544
|
// src/enums.ts
|
|
3201
3545
|
var TranslatableString = /* @__PURE__ */ ((TranslatableString2) => {
|
|
@@ -3219,6 +3563,11 @@ var TranslatableString = /* @__PURE__ */ ((TranslatableString2) => {
|
|
|
3219
3563
|
TranslatableString2["PreviewLabel"] = "Preview";
|
|
3220
3564
|
TranslatableString2["DecrementAriaLabel"] = "Decrease value by 1";
|
|
3221
3565
|
TranslatableString2["IncrementAriaLabel"] = "Increase value by 1";
|
|
3566
|
+
TranslatableString2["OptionalObjectAdd"] = "Add data for optional field";
|
|
3567
|
+
TranslatableString2["OptionalObjectRemove"] = "Remove data for optional field";
|
|
3568
|
+
TranslatableString2["OptionalObjectEmptyMsg"] = "No data for optional field";
|
|
3569
|
+
TranslatableString2["Type"] = "Type";
|
|
3570
|
+
TranslatableString2["Value"] = "Value";
|
|
3222
3571
|
TranslatableString2["UnknownFieldType"] = "Unknown field type %1";
|
|
3223
3572
|
TranslatableString2["OptionPrefix"] = "Option %1";
|
|
3224
3573
|
TranslatableString2["TitleOptionPrefix"] = "%1 option %2";
|
|
@@ -3358,10 +3707,13 @@ export {
|
|
|
3358
3707
|
ALL_OF_KEY,
|
|
3359
3708
|
ANY_OF_KEY,
|
|
3360
3709
|
CONST_KEY,
|
|
3710
|
+
DEFAULT_ID_PREFIX,
|
|
3711
|
+
DEFAULT_ID_SEPARATOR,
|
|
3361
3712
|
DEFAULT_KEY,
|
|
3362
3713
|
DEFINITIONS_KEY,
|
|
3363
3714
|
DEPENDENCIES_KEY,
|
|
3364
3715
|
DISCRIMINATOR_PATH,
|
|
3716
|
+
DateElement,
|
|
3365
3717
|
ENUM_KEY,
|
|
3366
3718
|
ERRORS_KEY,
|
|
3367
3719
|
ErrorSchemaBuilder,
|
|
@@ -3369,6 +3721,7 @@ export {
|
|
|
3369
3721
|
ID_KEY,
|
|
3370
3722
|
IF_KEY,
|
|
3371
3723
|
ITEMS_KEY,
|
|
3724
|
+
JSON_SCHEMA_DRAFT_2019_09,
|
|
3372
3725
|
JSON_SCHEMA_DRAFT_2020_12,
|
|
3373
3726
|
JUNK_OPTION_ID,
|
|
3374
3727
|
LOOKUP_MAP_NAME,
|
|
@@ -3391,6 +3744,7 @@ export {
|
|
|
3391
3744
|
allowAdditionalItems,
|
|
3392
3745
|
ariaDescribedByIds,
|
|
3393
3746
|
asNumber,
|
|
3747
|
+
bracketNameGenerator,
|
|
3394
3748
|
buttonId,
|
|
3395
3749
|
canExpand,
|
|
3396
3750
|
createErrorHandler,
|
|
@@ -3399,6 +3753,7 @@ export {
|
|
|
3399
3753
|
dateRangeOptions,
|
|
3400
3754
|
deepEquals,
|
|
3401
3755
|
descriptionId,
|
|
3756
|
+
dotNotationNameGenerator,
|
|
3402
3757
|
englishStringTranslator,
|
|
3403
3758
|
enumOptionsDeselectValue,
|
|
3404
3759
|
enumOptionsIndexForValue,
|
|
@@ -3436,8 +3791,10 @@ export {
|
|
|
3436
3791
|
isCustomWidget,
|
|
3437
3792
|
isFilesArray,
|
|
3438
3793
|
isFixedItems,
|
|
3794
|
+
isFormDataAvailable,
|
|
3439
3795
|
isMultiSelect,
|
|
3440
3796
|
isObject,
|
|
3797
|
+
isRootSchema,
|
|
3441
3798
|
isSelect,
|
|
3442
3799
|
labelValue,
|
|
3443
3800
|
localToUTC,
|
|
@@ -3446,6 +3803,7 @@ export {
|
|
|
3446
3803
|
mergeObjects,
|
|
3447
3804
|
mergeSchemas,
|
|
3448
3805
|
optionId,
|
|
3806
|
+
optionalControlsId,
|
|
3449
3807
|
optionsList,
|
|
3450
3808
|
orderProperties,
|
|
3451
3809
|
pad,
|
|
@@ -3456,16 +3814,21 @@ export {
|
|
|
3456
3814
|
sanitizeDataForNewSchema,
|
|
3457
3815
|
schemaParser,
|
|
3458
3816
|
schemaRequiresTrueValue,
|
|
3817
|
+
shallowEquals,
|
|
3459
3818
|
shouldRender,
|
|
3819
|
+
shouldRenderOptionalField,
|
|
3460
3820
|
sortedJSONStringify,
|
|
3461
3821
|
titleId,
|
|
3462
3822
|
toConstant,
|
|
3463
3823
|
toDateString,
|
|
3464
3824
|
toErrorList,
|
|
3465
3825
|
toErrorSchema,
|
|
3466
|
-
|
|
3826
|
+
toFieldPathId,
|
|
3467
3827
|
toPathSchema,
|
|
3468
3828
|
unwrapErrorHandler,
|
|
3829
|
+
useAltDateWidgetProps,
|
|
3830
|
+
useDeepCompareMemo,
|
|
3831
|
+
useFileWidgetProps,
|
|
3469
3832
|
utcToLocal,
|
|
3470
3833
|
validationDataMerge,
|
|
3471
3834
|
withIdRefPrefix
|