@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.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
|
|
2
|
-
import React, { createElement, Fragment, memo, useCallback, useRef, useMemo, useImperativeHandle } from 'react';
|
|
2
|
+
import React, { createElement, Fragment, memo, useCallback, useContext, createContext, useRef, useMemo, useImperativeHandle } from 'react';
|
|
3
3
|
import * as n$1 from 'zod/v4/core';
|
|
4
4
|
import { c } from 'react/compiler-runtime';
|
|
5
5
|
import { z } from 'zod';
|
|
@@ -2775,6 +2775,49 @@ function t(r,e){try{var o=r();}catch(r){return e(r)}return o&&o.then?o.then(void
|
|
|
2775
2775
|
function isArrayField(field) {
|
|
2776
2776
|
return field.type === 'array' && 'fields' in field;
|
|
2777
2777
|
}
|
|
2778
|
+
function createField(field) {
|
|
2779
|
+
return field;
|
|
2780
|
+
}
|
|
2781
|
+
function createArrayField(field) {
|
|
2782
|
+
return {
|
|
2783
|
+
...field,
|
|
2784
|
+
type: 'array'
|
|
2785
|
+
};
|
|
2786
|
+
}
|
|
2787
|
+
function strictFields(fields) {
|
|
2788
|
+
return fields;
|
|
2789
|
+
}
|
|
2790
|
+
function validateFieldType(type, registeredTypes) {
|
|
2791
|
+
if (!registeredTypes.includes(type) && type !== 'array') {
|
|
2792
|
+
throw new Error(`Unregistered field type: "${type}". ` + `Registered types: ${registeredTypes.join(', ')}. ` + `Use registerField("${type}", YourComponent) to register it.`);
|
|
2793
|
+
}
|
|
2794
|
+
return type;
|
|
2795
|
+
}
|
|
2796
|
+
function validateFieldTypes(fields, registeredTypes, options = {}) {
|
|
2797
|
+
const {
|
|
2798
|
+
throwOnError = false,
|
|
2799
|
+
warn = true
|
|
2800
|
+
} = options;
|
|
2801
|
+
const invalidTypes = [];
|
|
2802
|
+
const checkField = field => {
|
|
2803
|
+
if (field.type === 'array' && 'fields' in field) {
|
|
2804
|
+
field.fields.forEach(checkField);
|
|
2805
|
+
} else if (!registeredTypes.includes(field.type) && field.type !== 'array') {
|
|
2806
|
+
invalidTypes.push(field.type);
|
|
2807
|
+
}
|
|
2808
|
+
};
|
|
2809
|
+
fields.forEach(checkField);
|
|
2810
|
+
if (invalidTypes.length > 0) {
|
|
2811
|
+
const uniqueInvalid = [...new Set(invalidTypes)];
|
|
2812
|
+
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.';
|
|
2813
|
+
if (throwOnError) {
|
|
2814
|
+
throw new Error(message);
|
|
2815
|
+
} else if (warn && typeof console !== 'undefined') {
|
|
2816
|
+
console.warn(`[FormGenerator] ${message}`);
|
|
2817
|
+
}
|
|
2818
|
+
}
|
|
2819
|
+
return fields;
|
|
2820
|
+
}
|
|
2778
2821
|
|
|
2779
2822
|
const fieldRegistry = new Map();
|
|
2780
2823
|
const componentRegistry = {};
|
|
@@ -2937,27 +2980,15 @@ function createDefaultFieldComponent(type) {
|
|
|
2937
2980
|
};
|
|
2938
2981
|
return FallbackComponent;
|
|
2939
2982
|
}
|
|
2940
|
-
function registerField(type, component, options = {}
|
|
2941
|
-
const {
|
|
2942
|
-
override = true
|
|
2943
|
-
} = config;
|
|
2944
|
-
const exists = fieldRegistry.has(type);
|
|
2945
|
-
if (override === 'only' && !exists) return;
|
|
2946
|
-
if (override === false && exists) return;
|
|
2983
|
+
function registerField(type, component, options = {}) {
|
|
2947
2984
|
fieldRegistry.set(type, {
|
|
2948
2985
|
component,
|
|
2949
2986
|
options
|
|
2950
2987
|
});
|
|
2951
2988
|
}
|
|
2952
|
-
function registerFields(fields
|
|
2953
|
-
const {
|
|
2954
|
-
override = true
|
|
2955
|
-
} = config;
|
|
2989
|
+
function registerFields(fields) {
|
|
2956
2990
|
Object.entries(fields).forEach(([type, definition]) => {
|
|
2957
2991
|
var _a;
|
|
2958
|
-
const exists = fieldRegistry.has(type);
|
|
2959
|
-
if (override === 'only' && !exists) return;
|
|
2960
|
-
if (override === false && exists) return;
|
|
2961
2992
|
if (typeof definition === 'function') {
|
|
2962
2993
|
fieldRegistry.set(type, {
|
|
2963
2994
|
component: definition,
|
|
@@ -2992,24 +3023,12 @@ function unregisterField(type) {
|
|
|
2992
3023
|
function getRegisteredFieldTypes() {
|
|
2993
3024
|
return Array.from(fieldRegistry.keys());
|
|
2994
3025
|
}
|
|
2995
|
-
function registerFormComponents(components
|
|
2996
|
-
const {
|
|
2997
|
-
override = true
|
|
2998
|
-
} = config;
|
|
3026
|
+
function registerFormComponents(components) {
|
|
2999
3027
|
Object.keys(components).forEach(key => {
|
|
3000
|
-
const exists = key in componentRegistry;
|
|
3001
|
-
if (override === 'only' && !exists) return;
|
|
3002
|
-
if (override === false && exists) return;
|
|
3003
3028
|
componentRegistry[key] = components[key];
|
|
3004
3029
|
});
|
|
3005
3030
|
}
|
|
3006
|
-
function registerFormComponent(name, component
|
|
3007
|
-
const {
|
|
3008
|
-
override = true
|
|
3009
|
-
} = config;
|
|
3010
|
-
const exists = name in componentRegistry;
|
|
3011
|
-
if (override === 'only' && !exists) return;
|
|
3012
|
-
if (override === false && exists) return;
|
|
3031
|
+
function registerFormComponent(name, component) {
|
|
3013
3032
|
componentRegistry[name] = component;
|
|
3014
3033
|
}
|
|
3015
3034
|
function getFormComponent(name) {
|
|
@@ -3368,6 +3387,167 @@ function createTemplateFields(fieldEntries) {
|
|
|
3368
3387
|
return new Proxy({}, handler);
|
|
3369
3388
|
}
|
|
3370
3389
|
|
|
3390
|
+
const FieldsContext = /*#__PURE__*/createContext(null);
|
|
3391
|
+
function FieldsProvider(t0) {
|
|
3392
|
+
const $ = c(9);
|
|
3393
|
+
const {
|
|
3394
|
+
children,
|
|
3395
|
+
fields,
|
|
3396
|
+
namePrefix
|
|
3397
|
+
} = t0;
|
|
3398
|
+
let map;
|
|
3399
|
+
if ($[0] !== fields || $[1] !== namePrefix) {
|
|
3400
|
+
map = new Map();
|
|
3401
|
+
const addFields = (items, prefix) => {
|
|
3402
|
+
items.forEach(item => {
|
|
3403
|
+
if ("fields" in item && Array.isArray(item.fields)) {
|
|
3404
|
+
const arrayPrefix = prefix ? `${prefix}.${item.name}` : item.name;
|
|
3405
|
+
addFields(item.fields, arrayPrefix);
|
|
3406
|
+
} else {
|
|
3407
|
+
const fieldName = prefix ? `${prefix}.${item.name}` : item.name;
|
|
3408
|
+
map.set(fieldName, item);
|
|
3409
|
+
if (prefix) {
|
|
3410
|
+
map.set(item.name, item);
|
|
3411
|
+
}
|
|
3412
|
+
}
|
|
3413
|
+
});
|
|
3414
|
+
};
|
|
3415
|
+
addFields(fields, namePrefix);
|
|
3416
|
+
$[0] = fields;
|
|
3417
|
+
$[1] = namePrefix;
|
|
3418
|
+
$[2] = map;
|
|
3419
|
+
} else {
|
|
3420
|
+
map = $[2];
|
|
3421
|
+
}
|
|
3422
|
+
const fieldsMap = map;
|
|
3423
|
+
let t1;
|
|
3424
|
+
if ($[3] !== fieldsMap || $[4] !== namePrefix) {
|
|
3425
|
+
t1 = {
|
|
3426
|
+
fields: fieldsMap,
|
|
3427
|
+
namePrefix
|
|
3428
|
+
};
|
|
3429
|
+
$[3] = fieldsMap;
|
|
3430
|
+
$[4] = namePrefix;
|
|
3431
|
+
$[5] = t1;
|
|
3432
|
+
} else {
|
|
3433
|
+
t1 = $[5];
|
|
3434
|
+
}
|
|
3435
|
+
const value = t1;
|
|
3436
|
+
let t2;
|
|
3437
|
+
if ($[6] !== children || $[7] !== value) {
|
|
3438
|
+
t2 = jsx(FieldsContext.Provider, {
|
|
3439
|
+
value,
|
|
3440
|
+
children
|
|
3441
|
+
});
|
|
3442
|
+
$[6] = children;
|
|
3443
|
+
$[7] = value;
|
|
3444
|
+
$[8] = t2;
|
|
3445
|
+
} else {
|
|
3446
|
+
t2 = $[8];
|
|
3447
|
+
}
|
|
3448
|
+
return t2;
|
|
3449
|
+
}
|
|
3450
|
+
function useFieldProps(name) {
|
|
3451
|
+
const $ = c(23);
|
|
3452
|
+
const context = useContext(FieldsContext);
|
|
3453
|
+
const form = useFormContext();
|
|
3454
|
+
if (!context) {
|
|
3455
|
+
throw new Error("useFieldProps must be used within FormGenerator or FieldsProvider");
|
|
3456
|
+
}
|
|
3457
|
+
if (!form) {
|
|
3458
|
+
throw new Error("useFieldProps must be used within a FormProvider context");
|
|
3459
|
+
}
|
|
3460
|
+
const {
|
|
3461
|
+
fields,
|
|
3462
|
+
namePrefix
|
|
3463
|
+
} = context;
|
|
3464
|
+
const fullName = namePrefix ? `${namePrefix}.${name}` : name;
|
|
3465
|
+
let t0;
|
|
3466
|
+
if ($[0] !== fields || $[1] !== fullName || $[2] !== name) {
|
|
3467
|
+
t0 = fields.get(fullName) || fields.get(name);
|
|
3468
|
+
$[0] = fields;
|
|
3469
|
+
$[1] = fullName;
|
|
3470
|
+
$[2] = name;
|
|
3471
|
+
$[3] = t0;
|
|
3472
|
+
} else {
|
|
3473
|
+
t0 = $[3];
|
|
3474
|
+
}
|
|
3475
|
+
const field = t0;
|
|
3476
|
+
if (!field) {
|
|
3477
|
+
throw new Error(`Field "${name}" not found in form fields. ` + `Available fields: ${Array.from(fields.keys()).join(", ")}`);
|
|
3478
|
+
}
|
|
3479
|
+
let t1;
|
|
3480
|
+
if ($[4] !== form.control || $[5] !== fullName) {
|
|
3481
|
+
t1 = {
|
|
3482
|
+
control: form.control,
|
|
3483
|
+
name: fullName
|
|
3484
|
+
};
|
|
3485
|
+
$[4] = form.control;
|
|
3486
|
+
$[5] = fullName;
|
|
3487
|
+
$[6] = t1;
|
|
3488
|
+
} else {
|
|
3489
|
+
t1 = $[6];
|
|
3490
|
+
}
|
|
3491
|
+
const {
|
|
3492
|
+
field: controllerField,
|
|
3493
|
+
fieldState
|
|
3494
|
+
} = useController(t1);
|
|
3495
|
+
let t2;
|
|
3496
|
+
if ($[7] !== field || $[8] !== fullName) {
|
|
3497
|
+
t2 = {
|
|
3498
|
+
...field,
|
|
3499
|
+
name: fullName
|
|
3500
|
+
};
|
|
3501
|
+
$[7] = field;
|
|
3502
|
+
$[8] = fullName;
|
|
3503
|
+
$[9] = t2;
|
|
3504
|
+
} else {
|
|
3505
|
+
t2 = $[9];
|
|
3506
|
+
}
|
|
3507
|
+
let t3;
|
|
3508
|
+
if ($[10] !== fieldState.error || $[11] !== fieldState.invalid || $[12] !== fieldState.isDirty || $[13] !== fieldState.isTouched) {
|
|
3509
|
+
t3 = {
|
|
3510
|
+
invalid: fieldState.invalid,
|
|
3511
|
+
error: fieldState.error,
|
|
3512
|
+
isDirty: fieldState.isDirty,
|
|
3513
|
+
isTouched: fieldState.isTouched
|
|
3514
|
+
};
|
|
3515
|
+
$[10] = fieldState.error;
|
|
3516
|
+
$[11] = fieldState.invalid;
|
|
3517
|
+
$[12] = fieldState.isDirty;
|
|
3518
|
+
$[13] = fieldState.isTouched;
|
|
3519
|
+
$[14] = t3;
|
|
3520
|
+
} else {
|
|
3521
|
+
t3 = $[14];
|
|
3522
|
+
}
|
|
3523
|
+
let t4;
|
|
3524
|
+
if ($[15] !== controllerField.name || $[16] !== controllerField.onBlur || $[17] !== controllerField.onChange || $[18] !== controllerField.ref || $[19] !== controllerField.value || $[20] !== t2 || $[21] !== t3) {
|
|
3525
|
+
t4 = {
|
|
3526
|
+
name: controllerField.name,
|
|
3527
|
+
value: controllerField.value,
|
|
3528
|
+
onChange: controllerField.onChange,
|
|
3529
|
+
onBlur: controllerField.onBlur,
|
|
3530
|
+
ref: controllerField.ref,
|
|
3531
|
+
field: t2,
|
|
3532
|
+
fieldState: t3
|
|
3533
|
+
};
|
|
3534
|
+
$[15] = controllerField.name;
|
|
3535
|
+
$[16] = controllerField.onBlur;
|
|
3536
|
+
$[17] = controllerField.onChange;
|
|
3537
|
+
$[18] = controllerField.ref;
|
|
3538
|
+
$[19] = controllerField.value;
|
|
3539
|
+
$[20] = t2;
|
|
3540
|
+
$[21] = t3;
|
|
3541
|
+
$[22] = t4;
|
|
3542
|
+
} else {
|
|
3543
|
+
t4 = $[22];
|
|
3544
|
+
}
|
|
3545
|
+
return t4;
|
|
3546
|
+
}
|
|
3547
|
+
function useFieldsContext() {
|
|
3548
|
+
return useContext(FieldsContext);
|
|
3549
|
+
}
|
|
3550
|
+
|
|
3371
3551
|
function deepMerge(target, source) {
|
|
3372
3552
|
const result = {
|
|
3373
3553
|
...target
|
|
@@ -3478,10 +3658,7 @@ function buildDefaultValues(fields) {
|
|
|
3478
3658
|
return values;
|
|
3479
3659
|
}
|
|
3480
3660
|
|
|
3481
|
-
function
|
|
3482
|
-
return props.schema !== undefined;
|
|
3483
|
-
}
|
|
3484
|
-
function FormGeneratorImpl(props) {
|
|
3661
|
+
function FormGenerator(props) {
|
|
3485
3662
|
const {
|
|
3486
3663
|
fields,
|
|
3487
3664
|
defaultValues,
|
|
@@ -3494,17 +3671,22 @@ function FormGeneratorImpl(props) {
|
|
|
3494
3671
|
showReset = false,
|
|
3495
3672
|
resetText = 'Reset',
|
|
3496
3673
|
children,
|
|
3497
|
-
ref
|
|
3674
|
+
ref,
|
|
3675
|
+
validateTypes
|
|
3498
3676
|
} = props;
|
|
3499
|
-
const userSchema = hasSchema(props) ? props.schema : undefined;
|
|
3500
3677
|
const onSubmit = props.onSubmit;
|
|
3501
3678
|
const formRef = useRef(null);
|
|
3502
|
-
|
|
3503
|
-
if (
|
|
3504
|
-
|
|
3679
|
+
useMemo(() => {
|
|
3680
|
+
if (validateTypes) {
|
|
3681
|
+
const registeredTypes = getRegisteredFieldTypes();
|
|
3682
|
+
const options = typeof validateTypes === 'object' ? validateTypes : {
|
|
3683
|
+
throwOnError: false,
|
|
3684
|
+
warn: true
|
|
3685
|
+
};
|
|
3686
|
+
validateFieldTypes(fields, registeredTypes, options);
|
|
3505
3687
|
}
|
|
3506
|
-
|
|
3507
|
-
|
|
3688
|
+
}, [fields, validateTypes]);
|
|
3689
|
+
const schema = useMemo(() => buildSchema(fields), [fields]);
|
|
3508
3690
|
const mergedDefaultValues = useMemo(() => {
|
|
3509
3691
|
const builtDefaults = buildDefaultValues(fields);
|
|
3510
3692
|
return defaultValues ? deepMerge(builtDefaults, defaultValues) : builtDefaults;
|
|
@@ -3607,40 +3789,251 @@ function FormGeneratorImpl(props) {
|
|
|
3607
3789
|
}
|
|
3608
3790
|
return result;
|
|
3609
3791
|
}, [SubmitButton, disabled, form.formState.isSubmitting, submitText, showReset, resetText, handleReset]);
|
|
3610
|
-
const renderField = useCallback((field_1,
|
|
3792
|
+
const renderField = useCallback((field_1, options_0) => {
|
|
3611
3793
|
return jsx(FieldRenderer, {
|
|
3612
3794
|
field: field_1,
|
|
3613
|
-
namePrefix:
|
|
3795
|
+
namePrefix: options_0 === null || options_0 === void 0 ? void 0 : options_0.namePrefix
|
|
3614
3796
|
});
|
|
3615
3797
|
}, []);
|
|
3616
3798
|
if (!children) {
|
|
3617
3799
|
return jsx(FormProvider, {
|
|
3618
3800
|
...form,
|
|
3619
|
-
children:
|
|
3801
|
+
children: jsx(FieldsProvider, {
|
|
3802
|
+
fields: fields,
|
|
3803
|
+
children: jsxs("form", {
|
|
3804
|
+
ref: formRef,
|
|
3805
|
+
onSubmit: handleSubmit,
|
|
3806
|
+
className: className,
|
|
3807
|
+
children: [jsxs(FieldsWrapper, {
|
|
3808
|
+
children: [regularFields.map((field_2, index_0) => jsx(FieldWrapper, {
|
|
3809
|
+
name: field_2.name,
|
|
3810
|
+
type: field_2.type,
|
|
3811
|
+
className: field_2.className,
|
|
3812
|
+
children: jsx(FieldRenderer, {
|
|
3813
|
+
field: field_2
|
|
3814
|
+
})
|
|
3815
|
+
}, field_2.name || `field-${index_0}`)), arrayFields.map(arrayField => jsx(FieldWrapper, {
|
|
3816
|
+
name: arrayField.name,
|
|
3817
|
+
type: "array",
|
|
3818
|
+
className: arrayField.className,
|
|
3819
|
+
children: jsx(ArrayFieldRenderer, {
|
|
3820
|
+
field: arrayField
|
|
3821
|
+
})
|
|
3822
|
+
}, arrayField.name))]
|
|
3823
|
+
}), jsx(SubmitButton, {
|
|
3824
|
+
disabled: disabled || form.formState.isSubmitting,
|
|
3825
|
+
isSubmitting: form.formState.isSubmitting,
|
|
3826
|
+
children: submitText
|
|
3827
|
+
})]
|
|
3828
|
+
})
|
|
3829
|
+
})
|
|
3830
|
+
});
|
|
3831
|
+
}
|
|
3832
|
+
const renderProps = {
|
|
3833
|
+
fields: templateFields,
|
|
3834
|
+
arrays: Object.fromEntries(arrayFields.map(arrayField_0 => [arrayField_0.name, {
|
|
3835
|
+
field: arrayField_0
|
|
3836
|
+
}])),
|
|
3837
|
+
buttons,
|
|
3838
|
+
title,
|
|
3839
|
+
description,
|
|
3840
|
+
form: form,
|
|
3841
|
+
isSubmitting: form.formState.isSubmitting,
|
|
3842
|
+
isValid: form.formState.isValid,
|
|
3843
|
+
isDirty: form.formState.isDirty,
|
|
3844
|
+
renderField,
|
|
3845
|
+
FieldWrapper,
|
|
3846
|
+
FieldsWrapper
|
|
3847
|
+
};
|
|
3848
|
+
const renderFn = children;
|
|
3849
|
+
return jsx(FormProvider, {
|
|
3850
|
+
...form,
|
|
3851
|
+
children: jsx(FieldsProvider, {
|
|
3852
|
+
fields: fields,
|
|
3853
|
+
children: jsx("form", {
|
|
3620
3854
|
ref: formRef,
|
|
3621
3855
|
onSubmit: handleSubmit,
|
|
3622
3856
|
className: className,
|
|
3623
|
-
children:
|
|
3624
|
-
|
|
3625
|
-
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
|
|
3629
|
-
|
|
3630
|
-
|
|
3631
|
-
|
|
3632
|
-
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
|
|
3641
|
-
|
|
3642
|
-
|
|
3643
|
-
|
|
3857
|
+
children: renderFn(renderProps)
|
|
3858
|
+
})
|
|
3859
|
+
})
|
|
3860
|
+
});
|
|
3861
|
+
}
|
|
3862
|
+
|
|
3863
|
+
function typedField() {
|
|
3864
|
+
return field => field;
|
|
3865
|
+
}
|
|
3866
|
+
function typedFields(fields) {
|
|
3867
|
+
return fields;
|
|
3868
|
+
}
|
|
3869
|
+
function StrictFormGenerator(props) {
|
|
3870
|
+
const {
|
|
3871
|
+
schema,
|
|
3872
|
+
fields,
|
|
3873
|
+
onSubmit,
|
|
3874
|
+
defaultValues,
|
|
3875
|
+
className,
|
|
3876
|
+
submitText = 'Submit',
|
|
3877
|
+
disabled,
|
|
3878
|
+
mode = 'onChange',
|
|
3879
|
+
title,
|
|
3880
|
+
description,
|
|
3881
|
+
showReset = false,
|
|
3882
|
+
resetText = 'Reset',
|
|
3883
|
+
children,
|
|
3884
|
+
ref,
|
|
3885
|
+
validateTypes
|
|
3886
|
+
} = props;
|
|
3887
|
+
const formRef = useRef(null);
|
|
3888
|
+
useMemo(() => {
|
|
3889
|
+
if (validateTypes) {
|
|
3890
|
+
const registeredTypes = getRegisteredFieldTypes();
|
|
3891
|
+
const options = typeof validateTypes === 'object' ? validateTypes : {
|
|
3892
|
+
throwOnError: false,
|
|
3893
|
+
warn: true
|
|
3894
|
+
};
|
|
3895
|
+
validateFieldTypes(fields, registeredTypes, options);
|
|
3896
|
+
}
|
|
3897
|
+
}, [fields, validateTypes]);
|
|
3898
|
+
const mergedDefaultValues = useMemo(() => {
|
|
3899
|
+
const builtDefaults = buildDefaultValues(fields);
|
|
3900
|
+
return defaultValues ? deepMerge(builtDefaults, defaultValues) : builtDefaults;
|
|
3901
|
+
}, [fields, defaultValues]);
|
|
3902
|
+
const form = useForm({
|
|
3903
|
+
resolver: a(schema),
|
|
3904
|
+
defaultValues: mergedDefaultValues,
|
|
3905
|
+
mode
|
|
3906
|
+
});
|
|
3907
|
+
const handleSubmit = form.handleSubmit(async data => {
|
|
3908
|
+
await onSubmit(data);
|
|
3909
|
+
});
|
|
3910
|
+
const handleReset = useCallback(() => {
|
|
3911
|
+
form.reset(mergedDefaultValues);
|
|
3912
|
+
}, [form, mergedDefaultValues]);
|
|
3913
|
+
useImperativeHandle(ref, () => ({
|
|
3914
|
+
setValues: values => {
|
|
3915
|
+
Object.entries(values).forEach(([key, value]) => {
|
|
3916
|
+
form.setValue(key, value, {
|
|
3917
|
+
shouldValidate: true,
|
|
3918
|
+
shouldDirty: true
|
|
3919
|
+
});
|
|
3920
|
+
});
|
|
3921
|
+
},
|
|
3922
|
+
getValues: () => form.getValues(),
|
|
3923
|
+
reset: values_0 => {
|
|
3924
|
+
if (values_0) {
|
|
3925
|
+
form.reset(deepMerge(mergedDefaultValues, values_0));
|
|
3926
|
+
} else {
|
|
3927
|
+
form.reset(mergedDefaultValues);
|
|
3928
|
+
}
|
|
3929
|
+
},
|
|
3930
|
+
submit: async () => {
|
|
3931
|
+
await handleSubmit();
|
|
3932
|
+
},
|
|
3933
|
+
clearErrors: () => form.clearErrors(),
|
|
3934
|
+
setError: (name, error) => form.setError(name, error),
|
|
3935
|
+
isValid: () => form.formState.isValid,
|
|
3936
|
+
isDirty: () => form.formState.isDirty,
|
|
3937
|
+
form: form
|
|
3938
|
+
}), [form, handleSubmit, mergedDefaultValues]);
|
|
3939
|
+
const SubmitButton = getFormComponent('SubmitButton');
|
|
3940
|
+
const FieldWrapper = getFormComponent('FieldWrapper');
|
|
3941
|
+
const FieldsWrapper = getFormComponent('FieldsWrapper');
|
|
3942
|
+
const {
|
|
3943
|
+
regularFields,
|
|
3944
|
+
arrayFields
|
|
3945
|
+
} = useMemo(() => {
|
|
3946
|
+
const regular = [];
|
|
3947
|
+
const arrays = [];
|
|
3948
|
+
fields.forEach(field => {
|
|
3949
|
+
if (isArrayField(field)) {
|
|
3950
|
+
arrays.push(field);
|
|
3951
|
+
} else {
|
|
3952
|
+
regular.push(field);
|
|
3953
|
+
}
|
|
3954
|
+
});
|
|
3955
|
+
return {
|
|
3956
|
+
regularFields: regular,
|
|
3957
|
+
arrayFields: arrays
|
|
3958
|
+
};
|
|
3959
|
+
}, [fields]);
|
|
3960
|
+
const fieldEntries = useMemo(() => {
|
|
3961
|
+
const entries = new Map();
|
|
3962
|
+
regularFields.forEach((field_0, index) => {
|
|
3963
|
+
if (!field_0.hidden) {
|
|
3964
|
+
const element = jsx(FieldWrapper, {
|
|
3965
|
+
name: field_0.name,
|
|
3966
|
+
type: field_0.type,
|
|
3967
|
+
className: field_0.className,
|
|
3968
|
+
children: jsx(FieldRenderer, {
|
|
3969
|
+
field: field_0
|
|
3970
|
+
})
|
|
3971
|
+
}, field_0.name || `field-${index}`);
|
|
3972
|
+
entries.set(field_0.name, {
|
|
3973
|
+
field: field_0,
|
|
3974
|
+
element,
|
|
3975
|
+
accessed: false
|
|
3976
|
+
});
|
|
3977
|
+
}
|
|
3978
|
+
});
|
|
3979
|
+
return entries;
|
|
3980
|
+
}, [regularFields, FieldWrapper]);
|
|
3981
|
+
const templateFields = useMemo(() => createTemplateFields(fieldEntries), [fieldEntries]);
|
|
3982
|
+
const buttons = useMemo(() => {
|
|
3983
|
+
const result = {
|
|
3984
|
+
submit: jsx(SubmitButton, {
|
|
3985
|
+
disabled: disabled || form.formState.isSubmitting,
|
|
3986
|
+
isSubmitting: form.formState.isSubmitting,
|
|
3987
|
+
children: submitText
|
|
3988
|
+
}, "submit")
|
|
3989
|
+
};
|
|
3990
|
+
if (showReset) {
|
|
3991
|
+
result.reset = jsx("button", {
|
|
3992
|
+
type: "button",
|
|
3993
|
+
onClick: handleReset,
|
|
3994
|
+
disabled: disabled,
|
|
3995
|
+
children: resetText
|
|
3996
|
+
}, "reset");
|
|
3997
|
+
}
|
|
3998
|
+
return result;
|
|
3999
|
+
}, [SubmitButton, disabled, form.formState.isSubmitting, submitText, showReset, resetText, handleReset]);
|
|
4000
|
+
const renderField = useCallback((field_1, options_0) => {
|
|
4001
|
+
return jsx(FieldRenderer, {
|
|
4002
|
+
field: field_1,
|
|
4003
|
+
namePrefix: options_0 === null || options_0 === void 0 ? void 0 : options_0.namePrefix
|
|
4004
|
+
});
|
|
4005
|
+
}, []);
|
|
4006
|
+
if (!children) {
|
|
4007
|
+
return jsx(FormProvider, {
|
|
4008
|
+
...form,
|
|
4009
|
+
children: jsx(FieldsProvider, {
|
|
4010
|
+
fields: fields,
|
|
4011
|
+
children: jsxs("form", {
|
|
4012
|
+
ref: formRef,
|
|
4013
|
+
onSubmit: handleSubmit,
|
|
4014
|
+
className: className,
|
|
4015
|
+
children: [jsxs(FieldsWrapper, {
|
|
4016
|
+
children: [regularFields.map((field_2, index_0) => jsx(FieldWrapper, {
|
|
4017
|
+
name: field_2.name,
|
|
4018
|
+
type: field_2.type,
|
|
4019
|
+
className: field_2.className,
|
|
4020
|
+
children: jsx(FieldRenderer, {
|
|
4021
|
+
field: field_2
|
|
4022
|
+
})
|
|
4023
|
+
}, field_2.name || `field-${index_0}`)), arrayFields.map(arrayField => jsx(FieldWrapper, {
|
|
4024
|
+
name: arrayField.name,
|
|
4025
|
+
type: "array",
|
|
4026
|
+
className: arrayField.className,
|
|
4027
|
+
children: jsx(ArrayFieldRenderer, {
|
|
4028
|
+
field: arrayField
|
|
4029
|
+
})
|
|
4030
|
+
}, arrayField.name))]
|
|
4031
|
+
}), jsx(SubmitButton, {
|
|
4032
|
+
disabled: disabled || form.formState.isSubmitting,
|
|
4033
|
+
isSubmitting: form.formState.isSubmitting,
|
|
4034
|
+
children: submitText
|
|
4035
|
+
})]
|
|
4036
|
+
})
|
|
3644
4037
|
})
|
|
3645
4038
|
});
|
|
3646
4039
|
}
|
|
@@ -3663,17 +4056,20 @@ function FormGeneratorImpl(props) {
|
|
|
3663
4056
|
const renderFn = children;
|
|
3664
4057
|
return jsx(FormProvider, {
|
|
3665
4058
|
...form,
|
|
3666
|
-
children: jsx(
|
|
3667
|
-
|
|
3668
|
-
|
|
3669
|
-
|
|
3670
|
-
|
|
4059
|
+
children: jsx(FieldsProvider, {
|
|
4060
|
+
fields: fields,
|
|
4061
|
+
children: jsx("form", {
|
|
4062
|
+
ref: formRef,
|
|
4063
|
+
onSubmit: handleSubmit,
|
|
4064
|
+
className: className,
|
|
4065
|
+
children: renderFn(renderProps)
|
|
4066
|
+
})
|
|
3671
4067
|
})
|
|
3672
4068
|
});
|
|
3673
4069
|
}
|
|
3674
|
-
function
|
|
3675
|
-
return
|
|
4070
|
+
function createFieldFactory(_schema) {
|
|
4071
|
+
return field => field;
|
|
3676
4072
|
}
|
|
3677
4073
|
|
|
3678
|
-
export { ArrayFieldRenderer, Controller, FieldRenderer, FormGenerator, FormProvider, clearAllRegistries, clearFieldRegistry, clearFormComponentRegistry, getFieldComponent, getFormComponent, getFormComponents, getRegisteredFieldTypes, hasFieldType, hasFormComponent, isArrayField, registerField, registerFields, registerFormComponent, registerFormComponents, resetFormComponentRegistry, unregisterField, useArrayField, useFieldArray, useForm, useFormContext, useWatch };
|
|
4074
|
+
export { ArrayFieldRenderer, Controller, FieldRenderer, FieldsProvider, FormGenerator, FormProvider, StrictFormGenerator, clearAllRegistries, clearFieldRegistry, clearFormComponentRegistry, createArrayField, createField, createFieldFactory, getFieldComponent, getFormComponent, getFormComponents, getRegisteredFieldTypes, hasFieldType, hasFormComponent, isArrayField, registerField, registerFields, registerFormComponent, registerFormComponents, resetFormComponentRegistry, strictFields, typedField, typedFields, unregisterField, useArrayField, useFieldArray, useFieldProps, useFieldsContext, useForm, useFormContext, useWatch, validateFieldType, validateFieldTypes };
|
|
3679
4075
|
//# sourceMappingURL=index.mjs.map
|