@connect-soft/form-generator 1.1.0-alpha7 → 1.1.0-alpha9
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/README.md +344 -1
- package/dist/index.js +478 -70
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +468 -72
- package/dist/index.mjs.map +1 -1
- package/dist/types/components/form/fields-context.d.ts +26 -0
- package/dist/types/components/form/fields-context.d.ts.map +1 -0
- package/dist/types/components/form/form-generator-typed.d.ts +49 -0
- package/dist/types/components/form/form-generator-typed.d.ts.map +1 -0
- package/dist/types/components/form/form-generator.d.ts +12 -20
- package/dist/types/components/form/form-generator.d.ts.map +1 -1
- package/dist/types/components/form/form-utils.d.ts +4 -2
- package/dist/types/components/form/form-utils.d.ts.map +1 -1
- package/dist/types/components/form/index.d.ts +1 -1
- package/dist/types/components/form/index.d.ts.map +1 -1
- package/dist/types/index.d.ts +6 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/field-registry.d.ts +10 -10
- package/dist/types/lib/field-registry.d.ts.map +1 -1
- package/dist/types/lib/field-types.d.ts +25 -0
- package/dist/types/lib/field-types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2795,6 +2795,49 @@ function t(r,e){try{var o=r();}catch(r){return e(r)}return o&&o.then?o.then(void
|
|
|
2795
2795
|
function isArrayField(field) {
|
|
2796
2796
|
return field.type === 'array' && 'fields' in field;
|
|
2797
2797
|
}
|
|
2798
|
+
function createField(field) {
|
|
2799
|
+
return field;
|
|
2800
|
+
}
|
|
2801
|
+
function createArrayField(field) {
|
|
2802
|
+
return {
|
|
2803
|
+
...field,
|
|
2804
|
+
type: 'array'
|
|
2805
|
+
};
|
|
2806
|
+
}
|
|
2807
|
+
function strictFields(fields) {
|
|
2808
|
+
return fields;
|
|
2809
|
+
}
|
|
2810
|
+
function validateFieldType(type, registeredTypes) {
|
|
2811
|
+
if (!registeredTypes.includes(type) && type !== 'array') {
|
|
2812
|
+
throw new Error(`Unregistered field type: "${type}". ` + `Registered types: ${registeredTypes.join(', ')}. ` + `Use registerField("${type}", YourComponent) to register it.`);
|
|
2813
|
+
}
|
|
2814
|
+
return type;
|
|
2815
|
+
}
|
|
2816
|
+
function validateFieldTypes(fields, registeredTypes, options = {}) {
|
|
2817
|
+
const {
|
|
2818
|
+
throwOnError = false,
|
|
2819
|
+
warn = true
|
|
2820
|
+
} = options;
|
|
2821
|
+
const invalidTypes = [];
|
|
2822
|
+
const checkField = field => {
|
|
2823
|
+
if (field.type === 'array' && 'fields' in field) {
|
|
2824
|
+
field.fields.forEach(checkField);
|
|
2825
|
+
} else if (!registeredTypes.includes(field.type) && field.type !== 'array') {
|
|
2826
|
+
invalidTypes.push(field.type);
|
|
2827
|
+
}
|
|
2828
|
+
};
|
|
2829
|
+
fields.forEach(checkField);
|
|
2830
|
+
if (invalidTypes.length > 0) {
|
|
2831
|
+
const uniqueInvalid = [...new Set(invalidTypes)];
|
|
2832
|
+
const message = `Unregistered field type(s): ${uniqueInvalid.map(t => `"${t}"`).join(', ')}. ` + `Registered types: ${registeredTypes.join(', ')}. ` + 'Register custom types with registerField() or use module augmentation for TypeScript support.';
|
|
2833
|
+
if (throwOnError) {
|
|
2834
|
+
throw new Error(message);
|
|
2835
|
+
} else if (warn && typeof console !== 'undefined') {
|
|
2836
|
+
console.warn(`[FormGenerator] ${message}`);
|
|
2837
|
+
}
|
|
2838
|
+
}
|
|
2839
|
+
return fields;
|
|
2840
|
+
}
|
|
2798
2841
|
|
|
2799
2842
|
const fieldRegistry = new Map();
|
|
2800
2843
|
const componentRegistry = {};
|
|
@@ -2957,27 +3000,15 @@ function createDefaultFieldComponent(type) {
|
|
|
2957
3000
|
};
|
|
2958
3001
|
return FallbackComponent;
|
|
2959
3002
|
}
|
|
2960
|
-
function registerField(type, component, options = {}
|
|
2961
|
-
const {
|
|
2962
|
-
override = true
|
|
2963
|
-
} = config;
|
|
2964
|
-
const exists = fieldRegistry.has(type);
|
|
2965
|
-
if (override === 'only' && !exists) return;
|
|
2966
|
-
if (override === false && exists) return;
|
|
3003
|
+
function registerField(type, component, options = {}) {
|
|
2967
3004
|
fieldRegistry.set(type, {
|
|
2968
3005
|
component,
|
|
2969
3006
|
options
|
|
2970
3007
|
});
|
|
2971
3008
|
}
|
|
2972
|
-
function registerFields(fields
|
|
2973
|
-
const {
|
|
2974
|
-
override = true
|
|
2975
|
-
} = config;
|
|
3009
|
+
function registerFields(fields) {
|
|
2976
3010
|
Object.entries(fields).forEach(([type, definition]) => {
|
|
2977
3011
|
var _a;
|
|
2978
|
-
const exists = fieldRegistry.has(type);
|
|
2979
|
-
if (override === 'only' && !exists) return;
|
|
2980
|
-
if (override === false && exists) return;
|
|
2981
3012
|
if (typeof definition === 'function') {
|
|
2982
3013
|
fieldRegistry.set(type, {
|
|
2983
3014
|
component: definition,
|
|
@@ -3012,24 +3043,12 @@ function unregisterField(type) {
|
|
|
3012
3043
|
function getRegisteredFieldTypes() {
|
|
3013
3044
|
return Array.from(fieldRegistry.keys());
|
|
3014
3045
|
}
|
|
3015
|
-
function registerFormComponents(components
|
|
3016
|
-
const {
|
|
3017
|
-
override = true
|
|
3018
|
-
} = config;
|
|
3046
|
+
function registerFormComponents(components) {
|
|
3019
3047
|
Object.keys(components).forEach(key => {
|
|
3020
|
-
const exists = key in componentRegistry;
|
|
3021
|
-
if (override === 'only' && !exists) return;
|
|
3022
|
-
if (override === false && exists) return;
|
|
3023
3048
|
componentRegistry[key] = components[key];
|
|
3024
3049
|
});
|
|
3025
3050
|
}
|
|
3026
|
-
function registerFormComponent(name, component
|
|
3027
|
-
const {
|
|
3028
|
-
override = true
|
|
3029
|
-
} = config;
|
|
3030
|
-
const exists = name in componentRegistry;
|
|
3031
|
-
if (override === 'only' && !exists) return;
|
|
3032
|
-
if (override === false && exists) return;
|
|
3051
|
+
function registerFormComponent(name, component) {
|
|
3033
3052
|
componentRegistry[name] = component;
|
|
3034
3053
|
}
|
|
3035
3054
|
function getFormComponent(name) {
|
|
@@ -3388,6 +3407,167 @@ function createTemplateFields(fieldEntries) {
|
|
|
3388
3407
|
return new Proxy({}, handler);
|
|
3389
3408
|
}
|
|
3390
3409
|
|
|
3410
|
+
const FieldsContext = /*#__PURE__*/React.createContext(null);
|
|
3411
|
+
function FieldsProvider(t0) {
|
|
3412
|
+
const $ = compilerRuntime.c(9);
|
|
3413
|
+
const {
|
|
3414
|
+
children,
|
|
3415
|
+
fields,
|
|
3416
|
+
namePrefix
|
|
3417
|
+
} = t0;
|
|
3418
|
+
let map;
|
|
3419
|
+
if ($[0] !== fields || $[1] !== namePrefix) {
|
|
3420
|
+
map = new Map();
|
|
3421
|
+
const addFields = (items, prefix) => {
|
|
3422
|
+
items.forEach(item => {
|
|
3423
|
+
if ("fields" in item && Array.isArray(item.fields)) {
|
|
3424
|
+
const arrayPrefix = prefix ? `${prefix}.${item.name}` : item.name;
|
|
3425
|
+
addFields(item.fields, arrayPrefix);
|
|
3426
|
+
} else {
|
|
3427
|
+
const fieldName = prefix ? `${prefix}.${item.name}` : item.name;
|
|
3428
|
+
map.set(fieldName, item);
|
|
3429
|
+
if (prefix) {
|
|
3430
|
+
map.set(item.name, item);
|
|
3431
|
+
}
|
|
3432
|
+
}
|
|
3433
|
+
});
|
|
3434
|
+
};
|
|
3435
|
+
addFields(fields, namePrefix);
|
|
3436
|
+
$[0] = fields;
|
|
3437
|
+
$[1] = namePrefix;
|
|
3438
|
+
$[2] = map;
|
|
3439
|
+
} else {
|
|
3440
|
+
map = $[2];
|
|
3441
|
+
}
|
|
3442
|
+
const fieldsMap = map;
|
|
3443
|
+
let t1;
|
|
3444
|
+
if ($[3] !== fieldsMap || $[4] !== namePrefix) {
|
|
3445
|
+
t1 = {
|
|
3446
|
+
fields: fieldsMap,
|
|
3447
|
+
namePrefix
|
|
3448
|
+
};
|
|
3449
|
+
$[3] = fieldsMap;
|
|
3450
|
+
$[4] = namePrefix;
|
|
3451
|
+
$[5] = t1;
|
|
3452
|
+
} else {
|
|
3453
|
+
t1 = $[5];
|
|
3454
|
+
}
|
|
3455
|
+
const value = t1;
|
|
3456
|
+
let t2;
|
|
3457
|
+
if ($[6] !== children || $[7] !== value) {
|
|
3458
|
+
t2 = jsxRuntime.jsx(FieldsContext.Provider, {
|
|
3459
|
+
value,
|
|
3460
|
+
children
|
|
3461
|
+
});
|
|
3462
|
+
$[6] = children;
|
|
3463
|
+
$[7] = value;
|
|
3464
|
+
$[8] = t2;
|
|
3465
|
+
} else {
|
|
3466
|
+
t2 = $[8];
|
|
3467
|
+
}
|
|
3468
|
+
return t2;
|
|
3469
|
+
}
|
|
3470
|
+
function useFieldProps(name) {
|
|
3471
|
+
const $ = compilerRuntime.c(23);
|
|
3472
|
+
const context = React.useContext(FieldsContext);
|
|
3473
|
+
const form = useFormContext();
|
|
3474
|
+
if (!context) {
|
|
3475
|
+
throw new Error("useFieldProps must be used within FormGenerator or FieldsProvider");
|
|
3476
|
+
}
|
|
3477
|
+
if (!form) {
|
|
3478
|
+
throw new Error("useFieldProps must be used within a FormProvider context");
|
|
3479
|
+
}
|
|
3480
|
+
const {
|
|
3481
|
+
fields,
|
|
3482
|
+
namePrefix
|
|
3483
|
+
} = context;
|
|
3484
|
+
const fullName = namePrefix ? `${namePrefix}.${name}` : name;
|
|
3485
|
+
let t0;
|
|
3486
|
+
if ($[0] !== fields || $[1] !== fullName || $[2] !== name) {
|
|
3487
|
+
t0 = fields.get(fullName) || fields.get(name);
|
|
3488
|
+
$[0] = fields;
|
|
3489
|
+
$[1] = fullName;
|
|
3490
|
+
$[2] = name;
|
|
3491
|
+
$[3] = t0;
|
|
3492
|
+
} else {
|
|
3493
|
+
t0 = $[3];
|
|
3494
|
+
}
|
|
3495
|
+
const field = t0;
|
|
3496
|
+
if (!field) {
|
|
3497
|
+
throw new Error(`Field "${name}" not found in form fields. ` + `Available fields: ${Array.from(fields.keys()).join(", ")}`);
|
|
3498
|
+
}
|
|
3499
|
+
let t1;
|
|
3500
|
+
if ($[4] !== form.control || $[5] !== fullName) {
|
|
3501
|
+
t1 = {
|
|
3502
|
+
control: form.control,
|
|
3503
|
+
name: fullName
|
|
3504
|
+
};
|
|
3505
|
+
$[4] = form.control;
|
|
3506
|
+
$[5] = fullName;
|
|
3507
|
+
$[6] = t1;
|
|
3508
|
+
} else {
|
|
3509
|
+
t1 = $[6];
|
|
3510
|
+
}
|
|
3511
|
+
const {
|
|
3512
|
+
field: controllerField,
|
|
3513
|
+
fieldState
|
|
3514
|
+
} = useController(t1);
|
|
3515
|
+
let t2;
|
|
3516
|
+
if ($[7] !== field || $[8] !== fullName) {
|
|
3517
|
+
t2 = {
|
|
3518
|
+
...field,
|
|
3519
|
+
name: fullName
|
|
3520
|
+
};
|
|
3521
|
+
$[7] = field;
|
|
3522
|
+
$[8] = fullName;
|
|
3523
|
+
$[9] = t2;
|
|
3524
|
+
} else {
|
|
3525
|
+
t2 = $[9];
|
|
3526
|
+
}
|
|
3527
|
+
let t3;
|
|
3528
|
+
if ($[10] !== fieldState.error || $[11] !== fieldState.invalid || $[12] !== fieldState.isDirty || $[13] !== fieldState.isTouched) {
|
|
3529
|
+
t3 = {
|
|
3530
|
+
invalid: fieldState.invalid,
|
|
3531
|
+
error: fieldState.error,
|
|
3532
|
+
isDirty: fieldState.isDirty,
|
|
3533
|
+
isTouched: fieldState.isTouched
|
|
3534
|
+
};
|
|
3535
|
+
$[10] = fieldState.error;
|
|
3536
|
+
$[11] = fieldState.invalid;
|
|
3537
|
+
$[12] = fieldState.isDirty;
|
|
3538
|
+
$[13] = fieldState.isTouched;
|
|
3539
|
+
$[14] = t3;
|
|
3540
|
+
} else {
|
|
3541
|
+
t3 = $[14];
|
|
3542
|
+
}
|
|
3543
|
+
let t4;
|
|
3544
|
+
if ($[15] !== controllerField.name || $[16] !== controllerField.onBlur || $[17] !== controllerField.onChange || $[18] !== controllerField.ref || $[19] !== controllerField.value || $[20] !== t2 || $[21] !== t3) {
|
|
3545
|
+
t4 = {
|
|
3546
|
+
name: controllerField.name,
|
|
3547
|
+
value: controllerField.value,
|
|
3548
|
+
onChange: controllerField.onChange,
|
|
3549
|
+
onBlur: controllerField.onBlur,
|
|
3550
|
+
ref: controllerField.ref,
|
|
3551
|
+
field: t2,
|
|
3552
|
+
fieldState: t3
|
|
3553
|
+
};
|
|
3554
|
+
$[15] = controllerField.name;
|
|
3555
|
+
$[16] = controllerField.onBlur;
|
|
3556
|
+
$[17] = controllerField.onChange;
|
|
3557
|
+
$[18] = controllerField.ref;
|
|
3558
|
+
$[19] = controllerField.value;
|
|
3559
|
+
$[20] = t2;
|
|
3560
|
+
$[21] = t3;
|
|
3561
|
+
$[22] = t4;
|
|
3562
|
+
} else {
|
|
3563
|
+
t4 = $[22];
|
|
3564
|
+
}
|
|
3565
|
+
return t4;
|
|
3566
|
+
}
|
|
3567
|
+
function useFieldsContext() {
|
|
3568
|
+
return React.useContext(FieldsContext);
|
|
3569
|
+
}
|
|
3570
|
+
|
|
3391
3571
|
function deepMerge(target, source) {
|
|
3392
3572
|
const result = {
|
|
3393
3573
|
...target
|
|
@@ -3498,10 +3678,7 @@ function buildDefaultValues(fields) {
|
|
|
3498
3678
|
return values;
|
|
3499
3679
|
}
|
|
3500
3680
|
|
|
3501
|
-
function
|
|
3502
|
-
return props.schema !== undefined;
|
|
3503
|
-
}
|
|
3504
|
-
function FormGeneratorImpl(props) {
|
|
3681
|
+
function FormGenerator(props) {
|
|
3505
3682
|
const {
|
|
3506
3683
|
fields,
|
|
3507
3684
|
defaultValues,
|
|
@@ -3514,17 +3691,22 @@ function FormGeneratorImpl(props) {
|
|
|
3514
3691
|
showReset = false,
|
|
3515
3692
|
resetText = 'Reset',
|
|
3516
3693
|
children,
|
|
3517
|
-
ref
|
|
3694
|
+
ref,
|
|
3695
|
+
validateTypes
|
|
3518
3696
|
} = props;
|
|
3519
|
-
const userSchema = hasSchema(props) ? props.schema : undefined;
|
|
3520
3697
|
const onSubmit = props.onSubmit;
|
|
3521
3698
|
const formRef = React.useRef(null);
|
|
3522
|
-
|
|
3523
|
-
if (
|
|
3524
|
-
|
|
3699
|
+
React.useMemo(() => {
|
|
3700
|
+
if (validateTypes) {
|
|
3701
|
+
const registeredTypes = getRegisteredFieldTypes();
|
|
3702
|
+
const options = typeof validateTypes === 'object' ? validateTypes : {
|
|
3703
|
+
throwOnError: false,
|
|
3704
|
+
warn: true
|
|
3705
|
+
};
|
|
3706
|
+
validateFieldTypes(fields, registeredTypes, options);
|
|
3525
3707
|
}
|
|
3526
|
-
|
|
3527
|
-
|
|
3708
|
+
}, [fields, validateTypes]);
|
|
3709
|
+
const schema = React.useMemo(() => buildSchema(fields), [fields]);
|
|
3528
3710
|
const mergedDefaultValues = React.useMemo(() => {
|
|
3529
3711
|
const builtDefaults = buildDefaultValues(fields);
|
|
3530
3712
|
return defaultValues ? deepMerge(builtDefaults, defaultValues) : builtDefaults;
|
|
@@ -3627,40 +3809,251 @@ function FormGeneratorImpl(props) {
|
|
|
3627
3809
|
}
|
|
3628
3810
|
return result;
|
|
3629
3811
|
}, [SubmitButton, disabled, form.formState.isSubmitting, submitText, showReset, resetText, handleReset]);
|
|
3630
|
-
const renderField = React.useCallback((field_1,
|
|
3812
|
+
const renderField = React.useCallback((field_1, options_0) => {
|
|
3631
3813
|
return jsxRuntime.jsx(FieldRenderer, {
|
|
3632
3814
|
field: field_1,
|
|
3633
|
-
namePrefix:
|
|
3815
|
+
namePrefix: options_0 === null || options_0 === void 0 ? void 0 : options_0.namePrefix
|
|
3634
3816
|
});
|
|
3635
3817
|
}, []);
|
|
3636
3818
|
if (!children) {
|
|
3637
3819
|
return jsxRuntime.jsx(FormProvider, {
|
|
3638
3820
|
...form,
|
|
3639
|
-
children: jsxRuntime.
|
|
3821
|
+
children: jsxRuntime.jsx(FieldsProvider, {
|
|
3822
|
+
fields: fields,
|
|
3823
|
+
children: jsxRuntime.jsxs("form", {
|
|
3824
|
+
ref: formRef,
|
|
3825
|
+
onSubmit: handleSubmit,
|
|
3826
|
+
className: className,
|
|
3827
|
+
children: [jsxRuntime.jsxs(FieldsWrapper, {
|
|
3828
|
+
children: [regularFields.map((field_2, index_0) => jsxRuntime.jsx(FieldWrapper, {
|
|
3829
|
+
name: field_2.name,
|
|
3830
|
+
type: field_2.type,
|
|
3831
|
+
className: field_2.className,
|
|
3832
|
+
children: jsxRuntime.jsx(FieldRenderer, {
|
|
3833
|
+
field: field_2
|
|
3834
|
+
})
|
|
3835
|
+
}, field_2.name || `field-${index_0}`)), arrayFields.map(arrayField => jsxRuntime.jsx(FieldWrapper, {
|
|
3836
|
+
name: arrayField.name,
|
|
3837
|
+
type: "array",
|
|
3838
|
+
className: arrayField.className,
|
|
3839
|
+
children: jsxRuntime.jsx(ArrayFieldRenderer, {
|
|
3840
|
+
field: arrayField
|
|
3841
|
+
})
|
|
3842
|
+
}, arrayField.name))]
|
|
3843
|
+
}), jsxRuntime.jsx(SubmitButton, {
|
|
3844
|
+
disabled: disabled || form.formState.isSubmitting,
|
|
3845
|
+
isSubmitting: form.formState.isSubmitting,
|
|
3846
|
+
children: submitText
|
|
3847
|
+
})]
|
|
3848
|
+
})
|
|
3849
|
+
})
|
|
3850
|
+
});
|
|
3851
|
+
}
|
|
3852
|
+
const renderProps = {
|
|
3853
|
+
fields: templateFields,
|
|
3854
|
+
arrays: Object.fromEntries(arrayFields.map(arrayField_0 => [arrayField_0.name, {
|
|
3855
|
+
field: arrayField_0
|
|
3856
|
+
}])),
|
|
3857
|
+
buttons,
|
|
3858
|
+
title,
|
|
3859
|
+
description,
|
|
3860
|
+
form: form,
|
|
3861
|
+
isSubmitting: form.formState.isSubmitting,
|
|
3862
|
+
isValid: form.formState.isValid,
|
|
3863
|
+
isDirty: form.formState.isDirty,
|
|
3864
|
+
renderField,
|
|
3865
|
+
FieldWrapper,
|
|
3866
|
+
FieldsWrapper
|
|
3867
|
+
};
|
|
3868
|
+
const renderFn = children;
|
|
3869
|
+
return jsxRuntime.jsx(FormProvider, {
|
|
3870
|
+
...form,
|
|
3871
|
+
children: jsxRuntime.jsx(FieldsProvider, {
|
|
3872
|
+
fields: fields,
|
|
3873
|
+
children: jsxRuntime.jsx("form", {
|
|
3640
3874
|
ref: formRef,
|
|
3641
3875
|
onSubmit: handleSubmit,
|
|
3642
3876
|
className: className,
|
|
3643
|
-
children:
|
|
3644
|
-
|
|
3645
|
-
|
|
3646
|
-
|
|
3647
|
-
|
|
3648
|
-
|
|
3649
|
-
|
|
3650
|
-
|
|
3651
|
-
|
|
3652
|
-
|
|
3653
|
-
|
|
3654
|
-
|
|
3655
|
-
|
|
3656
|
-
|
|
3657
|
-
|
|
3658
|
-
|
|
3659
|
-
|
|
3660
|
-
|
|
3661
|
-
|
|
3662
|
-
|
|
3663
|
-
|
|
3877
|
+
children: renderFn(renderProps)
|
|
3878
|
+
})
|
|
3879
|
+
})
|
|
3880
|
+
});
|
|
3881
|
+
}
|
|
3882
|
+
|
|
3883
|
+
function typedField() {
|
|
3884
|
+
return field => field;
|
|
3885
|
+
}
|
|
3886
|
+
function typedFields(fields) {
|
|
3887
|
+
return fields;
|
|
3888
|
+
}
|
|
3889
|
+
function StrictFormGenerator(props) {
|
|
3890
|
+
const {
|
|
3891
|
+
schema,
|
|
3892
|
+
fields,
|
|
3893
|
+
onSubmit,
|
|
3894
|
+
defaultValues,
|
|
3895
|
+
className,
|
|
3896
|
+
submitText = 'Submit',
|
|
3897
|
+
disabled,
|
|
3898
|
+
mode = 'onChange',
|
|
3899
|
+
title,
|
|
3900
|
+
description,
|
|
3901
|
+
showReset = false,
|
|
3902
|
+
resetText = 'Reset',
|
|
3903
|
+
children,
|
|
3904
|
+
ref,
|
|
3905
|
+
validateTypes
|
|
3906
|
+
} = props;
|
|
3907
|
+
const formRef = React.useRef(null);
|
|
3908
|
+
React.useMemo(() => {
|
|
3909
|
+
if (validateTypes) {
|
|
3910
|
+
const registeredTypes = getRegisteredFieldTypes();
|
|
3911
|
+
const options = typeof validateTypes === 'object' ? validateTypes : {
|
|
3912
|
+
throwOnError: false,
|
|
3913
|
+
warn: true
|
|
3914
|
+
};
|
|
3915
|
+
validateFieldTypes(fields, registeredTypes, options);
|
|
3916
|
+
}
|
|
3917
|
+
}, [fields, validateTypes]);
|
|
3918
|
+
const mergedDefaultValues = React.useMemo(() => {
|
|
3919
|
+
const builtDefaults = buildDefaultValues(fields);
|
|
3920
|
+
return defaultValues ? deepMerge(builtDefaults, defaultValues) : builtDefaults;
|
|
3921
|
+
}, [fields, defaultValues]);
|
|
3922
|
+
const form = useForm({
|
|
3923
|
+
resolver: a(schema),
|
|
3924
|
+
defaultValues: mergedDefaultValues,
|
|
3925
|
+
mode
|
|
3926
|
+
});
|
|
3927
|
+
const handleSubmit = form.handleSubmit(async data => {
|
|
3928
|
+
await onSubmit(data);
|
|
3929
|
+
});
|
|
3930
|
+
const handleReset = React.useCallback(() => {
|
|
3931
|
+
form.reset(mergedDefaultValues);
|
|
3932
|
+
}, [form, mergedDefaultValues]);
|
|
3933
|
+
React.useImperativeHandle(ref, () => ({
|
|
3934
|
+
setValues: values => {
|
|
3935
|
+
Object.entries(values).forEach(([key, value]) => {
|
|
3936
|
+
form.setValue(key, value, {
|
|
3937
|
+
shouldValidate: true,
|
|
3938
|
+
shouldDirty: true
|
|
3939
|
+
});
|
|
3940
|
+
});
|
|
3941
|
+
},
|
|
3942
|
+
getValues: () => form.getValues(),
|
|
3943
|
+
reset: values_0 => {
|
|
3944
|
+
if (values_0) {
|
|
3945
|
+
form.reset(deepMerge(mergedDefaultValues, values_0));
|
|
3946
|
+
} else {
|
|
3947
|
+
form.reset(mergedDefaultValues);
|
|
3948
|
+
}
|
|
3949
|
+
},
|
|
3950
|
+
submit: async () => {
|
|
3951
|
+
await handleSubmit();
|
|
3952
|
+
},
|
|
3953
|
+
clearErrors: () => form.clearErrors(),
|
|
3954
|
+
setError: (name, error) => form.setError(name, error),
|
|
3955
|
+
isValid: () => form.formState.isValid,
|
|
3956
|
+
isDirty: () => form.formState.isDirty,
|
|
3957
|
+
form: form
|
|
3958
|
+
}), [form, handleSubmit, mergedDefaultValues]);
|
|
3959
|
+
const SubmitButton = getFormComponent('SubmitButton');
|
|
3960
|
+
const FieldWrapper = getFormComponent('FieldWrapper');
|
|
3961
|
+
const FieldsWrapper = getFormComponent('FieldsWrapper');
|
|
3962
|
+
const {
|
|
3963
|
+
regularFields,
|
|
3964
|
+
arrayFields
|
|
3965
|
+
} = React.useMemo(() => {
|
|
3966
|
+
const regular = [];
|
|
3967
|
+
const arrays = [];
|
|
3968
|
+
fields.forEach(field => {
|
|
3969
|
+
if (isArrayField(field)) {
|
|
3970
|
+
arrays.push(field);
|
|
3971
|
+
} else {
|
|
3972
|
+
regular.push(field);
|
|
3973
|
+
}
|
|
3974
|
+
});
|
|
3975
|
+
return {
|
|
3976
|
+
regularFields: regular,
|
|
3977
|
+
arrayFields: arrays
|
|
3978
|
+
};
|
|
3979
|
+
}, [fields]);
|
|
3980
|
+
const fieldEntries = React.useMemo(() => {
|
|
3981
|
+
const entries = new Map();
|
|
3982
|
+
regularFields.forEach((field_0, index) => {
|
|
3983
|
+
if (!field_0.hidden) {
|
|
3984
|
+
const element = jsxRuntime.jsx(FieldWrapper, {
|
|
3985
|
+
name: field_0.name,
|
|
3986
|
+
type: field_0.type,
|
|
3987
|
+
className: field_0.className,
|
|
3988
|
+
children: jsxRuntime.jsx(FieldRenderer, {
|
|
3989
|
+
field: field_0
|
|
3990
|
+
})
|
|
3991
|
+
}, field_0.name || `field-${index}`);
|
|
3992
|
+
entries.set(field_0.name, {
|
|
3993
|
+
field: field_0,
|
|
3994
|
+
element,
|
|
3995
|
+
accessed: false
|
|
3996
|
+
});
|
|
3997
|
+
}
|
|
3998
|
+
});
|
|
3999
|
+
return entries;
|
|
4000
|
+
}, [regularFields, FieldWrapper]);
|
|
4001
|
+
const templateFields = React.useMemo(() => createTemplateFields(fieldEntries), [fieldEntries]);
|
|
4002
|
+
const buttons = React.useMemo(() => {
|
|
4003
|
+
const result = {
|
|
4004
|
+
submit: jsxRuntime.jsx(SubmitButton, {
|
|
4005
|
+
disabled: disabled || form.formState.isSubmitting,
|
|
4006
|
+
isSubmitting: form.formState.isSubmitting,
|
|
4007
|
+
children: submitText
|
|
4008
|
+
}, "submit")
|
|
4009
|
+
};
|
|
4010
|
+
if (showReset) {
|
|
4011
|
+
result.reset = jsxRuntime.jsx("button", {
|
|
4012
|
+
type: "button",
|
|
4013
|
+
onClick: handleReset,
|
|
4014
|
+
disabled: disabled,
|
|
4015
|
+
children: resetText
|
|
4016
|
+
}, "reset");
|
|
4017
|
+
}
|
|
4018
|
+
return result;
|
|
4019
|
+
}, [SubmitButton, disabled, form.formState.isSubmitting, submitText, showReset, resetText, handleReset]);
|
|
4020
|
+
const renderField = React.useCallback((field_1, options_0) => {
|
|
4021
|
+
return jsxRuntime.jsx(FieldRenderer, {
|
|
4022
|
+
field: field_1,
|
|
4023
|
+
namePrefix: options_0 === null || options_0 === void 0 ? void 0 : options_0.namePrefix
|
|
4024
|
+
});
|
|
4025
|
+
}, []);
|
|
4026
|
+
if (!children) {
|
|
4027
|
+
return jsxRuntime.jsx(FormProvider, {
|
|
4028
|
+
...form,
|
|
4029
|
+
children: jsxRuntime.jsx(FieldsProvider, {
|
|
4030
|
+
fields: fields,
|
|
4031
|
+
children: jsxRuntime.jsxs("form", {
|
|
4032
|
+
ref: formRef,
|
|
4033
|
+
onSubmit: handleSubmit,
|
|
4034
|
+
className: className,
|
|
4035
|
+
children: [jsxRuntime.jsxs(FieldsWrapper, {
|
|
4036
|
+
children: [regularFields.map((field_2, index_0) => jsxRuntime.jsx(FieldWrapper, {
|
|
4037
|
+
name: field_2.name,
|
|
4038
|
+
type: field_2.type,
|
|
4039
|
+
className: field_2.className,
|
|
4040
|
+
children: jsxRuntime.jsx(FieldRenderer, {
|
|
4041
|
+
field: field_2
|
|
4042
|
+
})
|
|
4043
|
+
}, field_2.name || `field-${index_0}`)), arrayFields.map(arrayField => jsxRuntime.jsx(FieldWrapper, {
|
|
4044
|
+
name: arrayField.name,
|
|
4045
|
+
type: "array",
|
|
4046
|
+
className: arrayField.className,
|
|
4047
|
+
children: jsxRuntime.jsx(ArrayFieldRenderer, {
|
|
4048
|
+
field: arrayField
|
|
4049
|
+
})
|
|
4050
|
+
}, arrayField.name))]
|
|
4051
|
+
}), jsxRuntime.jsx(SubmitButton, {
|
|
4052
|
+
disabled: disabled || form.formState.isSubmitting,
|
|
4053
|
+
isSubmitting: form.formState.isSubmitting,
|
|
4054
|
+
children: submitText
|
|
4055
|
+
})]
|
|
4056
|
+
})
|
|
3664
4057
|
})
|
|
3665
4058
|
});
|
|
3666
4059
|
}
|
|
@@ -3683,16 +4076,19 @@ function FormGeneratorImpl(props) {
|
|
|
3683
4076
|
const renderFn = children;
|
|
3684
4077
|
return jsxRuntime.jsx(FormProvider, {
|
|
3685
4078
|
...form,
|
|
3686
|
-
children: jsxRuntime.jsx(
|
|
3687
|
-
|
|
3688
|
-
|
|
3689
|
-
|
|
3690
|
-
|
|
4079
|
+
children: jsxRuntime.jsx(FieldsProvider, {
|
|
4080
|
+
fields: fields,
|
|
4081
|
+
children: jsxRuntime.jsx("form", {
|
|
4082
|
+
ref: formRef,
|
|
4083
|
+
onSubmit: handleSubmit,
|
|
4084
|
+
className: className,
|
|
4085
|
+
children: renderFn(renderProps)
|
|
4086
|
+
})
|
|
3691
4087
|
})
|
|
3692
4088
|
});
|
|
3693
4089
|
}
|
|
3694
|
-
function
|
|
3695
|
-
return
|
|
4090
|
+
function createFieldFactory(_schema) {
|
|
4091
|
+
return field => field;
|
|
3696
4092
|
}
|
|
3697
4093
|
|
|
3698
4094
|
Object.defineProperty(exports, "z", {
|
|
@@ -3702,11 +4098,16 @@ Object.defineProperty(exports, "z", {
|
|
|
3702
4098
|
exports.ArrayFieldRenderer = ArrayFieldRenderer;
|
|
3703
4099
|
exports.Controller = Controller;
|
|
3704
4100
|
exports.FieldRenderer = FieldRenderer;
|
|
4101
|
+
exports.FieldsProvider = FieldsProvider;
|
|
3705
4102
|
exports.FormGenerator = FormGenerator;
|
|
3706
4103
|
exports.FormProvider = FormProvider;
|
|
4104
|
+
exports.StrictFormGenerator = StrictFormGenerator;
|
|
3707
4105
|
exports.clearAllRegistries = clearAllRegistries;
|
|
3708
4106
|
exports.clearFieldRegistry = clearFieldRegistry;
|
|
3709
4107
|
exports.clearFormComponentRegistry = clearFormComponentRegistry;
|
|
4108
|
+
exports.createArrayField = createArrayField;
|
|
4109
|
+
exports.createField = createField;
|
|
4110
|
+
exports.createFieldFactory = createFieldFactory;
|
|
3710
4111
|
exports.getFieldComponent = getFieldComponent;
|
|
3711
4112
|
exports.getFormComponent = getFormComponent;
|
|
3712
4113
|
exports.getFormComponents = getFormComponents;
|
|
@@ -3719,10 +4120,17 @@ exports.registerFields = registerFields;
|
|
|
3719
4120
|
exports.registerFormComponent = registerFormComponent;
|
|
3720
4121
|
exports.registerFormComponents = registerFormComponents;
|
|
3721
4122
|
exports.resetFormComponentRegistry = resetFormComponentRegistry;
|
|
4123
|
+
exports.strictFields = strictFields;
|
|
4124
|
+
exports.typedField = typedField;
|
|
4125
|
+
exports.typedFields = typedFields;
|
|
3722
4126
|
exports.unregisterField = unregisterField;
|
|
3723
4127
|
exports.useArrayField = useArrayField;
|
|
3724
4128
|
exports.useFieldArray = useFieldArray;
|
|
4129
|
+
exports.useFieldProps = useFieldProps;
|
|
4130
|
+
exports.useFieldsContext = useFieldsContext;
|
|
3725
4131
|
exports.useForm = useForm;
|
|
3726
4132
|
exports.useFormContext = useFormContext;
|
|
3727
4133
|
exports.useWatch = useWatch;
|
|
4134
|
+
exports.validateFieldType = validateFieldType;
|
|
4135
|
+
exports.validateFieldTypes = validateFieldTypes;
|
|
3728
4136
|
//# sourceMappingURL=index.js.map
|