@saas-ui/forms 2.0.0-next.9 → 2.0.0-rc.23
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +139 -0
- package/dist/ajv/index.d.ts +15 -350
- package/dist/ajv/index.js.map +1 -1
- package/dist/ajv/index.mjs.map +1 -1
- package/dist/index.d.ts +182 -144
- package/dist/index.js +202 -147
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +202 -148
- package/dist/index.mjs.map +1 -1
- package/dist/yup/index.d.ts +218 -274
- package/dist/yup/index.js +22 -6
- package/dist/yup/index.js.map +1 -1
- package/dist/yup/index.mjs +20 -5
- package/dist/yup/index.mjs.map +1 -1
- package/dist/zod/index.d.ts +246 -303
- package/dist/zod/index.js +16 -1
- package/dist/zod/index.js.map +1 -1
- package/dist/zod/index.mjs +17 -3
- package/dist/zod/index.mjs.map +1 -1
- package/package.json +20 -6
- package/src/array-field.tsx +6 -3
- package/src/create-form.tsx +33 -19
- package/src/create-step-form.tsx +100 -0
- package/src/form-context.tsx +1 -1
- package/src/form.tsx +12 -10
- package/src/index.ts +20 -6
- package/src/object-field.tsx +22 -5
- package/src/select/select.tsx +2 -2
- package/src/step-form.tsx +52 -70
- package/src/types.ts +8 -3
- package/src/use-step-form.tsx +54 -9
package/dist/index.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
'use strict';
|
2
2
|
|
3
|
-
var
|
3
|
+
var React12 = require('react');
|
4
4
|
var reactHookForm = require('react-hook-form');
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
6
6
|
var react = require('@chakra-ui/react');
|
@@ -27,12 +27,12 @@ function _interopNamespace(e) {
|
|
27
27
|
return Object.freeze(n);
|
28
28
|
}
|
29
29
|
|
30
|
-
var
|
30
|
+
var React12__namespace = /*#__PURE__*/_interopNamespace(React12);
|
31
31
|
|
32
32
|
// src/form-context.tsx
|
33
|
-
var FormContext =
|
33
|
+
var FormContext = React12__namespace.createContext(null);
|
34
34
|
var useFormContext = () => {
|
35
|
-
const context =
|
35
|
+
const context = React12__namespace.useContext(FormContext);
|
36
36
|
const hookContext = reactHookForm.useFormContext();
|
37
37
|
if (!context) {
|
38
38
|
throw new Error("FormProvider must be used within a Form component");
|
@@ -46,7 +46,7 @@ var useFieldProps = (name) => {
|
|
46
46
|
var _a;
|
47
47
|
const parsedName = name == null ? void 0 : name.replace(/\.[0-9]/g, ".$");
|
48
48
|
const context = useFormContext();
|
49
|
-
return (_a = context == null ? void 0 : context.fields) == null ? void 0 : _a[parsedName];
|
49
|
+
return ((_a = context == null ? void 0 : context.fields) == null ? void 0 : _a[parsedName]) || {};
|
50
50
|
};
|
51
51
|
var FormProvider = (props) => {
|
52
52
|
const { children, fieldResolver, schema, fields, ...rest } = props;
|
@@ -108,7 +108,7 @@ var PasswordInput = react.forwardRef(
|
|
108
108
|
leftAddon,
|
109
109
|
...inputProps
|
110
110
|
} = props;
|
111
|
-
const [show, setShow] =
|
111
|
+
const [show, setShow] = React12.useState(false);
|
112
112
|
const handleClick = () => setShow(!show);
|
113
113
|
const label = show ? "Hide password" : "Show password";
|
114
114
|
let icon;
|
@@ -147,15 +147,15 @@ var PasswordInput = react.forwardRef(
|
|
147
147
|
);
|
148
148
|
PasswordInput.displayName = "PasswordInput";
|
149
149
|
var mapNestedFields = (name, children) => {
|
150
|
-
return
|
151
|
-
if (
|
150
|
+
return React12__namespace.Children.map(children, (child) => {
|
151
|
+
if (React12__namespace.isValidElement(child) && child.props.name) {
|
152
152
|
let childName = child.props.name;
|
153
153
|
if (childName.includes(".")) {
|
154
154
|
childName = childName.replace(/^.*\.(.*)/, "$1");
|
155
155
|
} else if (childName.includes(".$")) {
|
156
156
|
childName = childName.replace(/^.*\.\$(.*)/, "$1");
|
157
157
|
}
|
158
|
-
return
|
158
|
+
return React12__namespace.cloneElement(child, {
|
159
159
|
...child.props,
|
160
160
|
name: `${name}.${childName}`
|
161
161
|
});
|
@@ -215,14 +215,14 @@ var useSelect = (props) => {
|
|
215
215
|
onChange
|
216
216
|
});
|
217
217
|
const controlProps = react.useFormControl({ name });
|
218
|
-
const options =
|
218
|
+
const options = React12__namespace.default.useMemo(
|
219
219
|
() => optionsProp && mapOptions(optionsProp),
|
220
220
|
[optionsProp]
|
221
221
|
);
|
222
222
|
const handleChange = (value2) => {
|
223
223
|
setCurrentValue(value2);
|
224
224
|
};
|
225
|
-
const getDisplayValue =
|
225
|
+
const getDisplayValue = React12__namespace.default.useCallback(
|
226
226
|
(value2) => {
|
227
227
|
if (!options) {
|
228
228
|
return value2;
|
@@ -236,7 +236,7 @@ var useSelect = (props) => {
|
|
236
236
|
},
|
237
237
|
[options]
|
238
238
|
);
|
239
|
-
const displayValue =
|
239
|
+
const displayValue = React12__namespace.default.useMemo(
|
240
240
|
() => currentValue ? (Array.isArray(currentValue) ? currentValue : [currentValue]).map(
|
241
241
|
getDisplayValue
|
242
242
|
) : [],
|
@@ -300,7 +300,8 @@ var SelectButton = react.forwardRef(
|
|
300
300
|
react.MenuButton,
|
301
301
|
{
|
302
302
|
as: react.Button,
|
303
|
-
id: id ||
|
303
|
+
id: id || React12__namespace.useId(),
|
304
|
+
...buttonStyles,
|
304
305
|
...rest,
|
305
306
|
onFocus,
|
306
307
|
onBlur,
|
@@ -311,7 +312,6 @@ var SelectButton = react.forwardRef(
|
|
311
312
|
"data-required": utils.dataAttr(isRequired),
|
312
313
|
rightIcon,
|
313
314
|
ref,
|
314
|
-
sx: buttonStyles,
|
315
315
|
children: renderValue(displayValue) || placeholder
|
316
316
|
}
|
317
317
|
);
|
@@ -573,7 +573,7 @@ var defaultFieldTypes = {
|
|
573
573
|
pin: PinField,
|
574
574
|
"native-select": NativeSelectField
|
575
575
|
};
|
576
|
-
var FieldsContext =
|
576
|
+
var FieldsContext = React12__namespace.default.createContext(
|
577
577
|
null
|
578
578
|
);
|
579
579
|
var FieldsProvider = (props) => {
|
@@ -581,11 +581,11 @@ var FieldsProvider = (props) => {
|
|
581
581
|
return /* @__PURE__ */ jsxRuntime.jsx(FieldsContext.Provider, { value: fields, children: props.children });
|
582
582
|
};
|
583
583
|
var useField = (type) => {
|
584
|
-
const context =
|
584
|
+
const context = React12__namespace.default.useContext(FieldsContext);
|
585
585
|
return (context == null ? void 0 : context[type]) || InputField;
|
586
586
|
};
|
587
587
|
var defaultInputType = "text";
|
588
|
-
var Field =
|
588
|
+
var Field = React12__namespace.forwardRef(
|
589
589
|
(props, ref) => {
|
590
590
|
const { type = defaultInputType, name } = props;
|
591
591
|
const overrides = useFieldProps(name);
|
@@ -612,8 +612,8 @@ var FormLayout = ({ children, ...props }) => {
|
|
612
612
|
{
|
613
613
|
...gridProps,
|
614
614
|
className: utils.cx("sui-form__layout", props.className),
|
615
|
-
children:
|
616
|
-
if (
|
615
|
+
children: React12__namespace.Children.map(children, (child) => {
|
616
|
+
if (React12__namespace.isValidElement(child)) {
|
617
617
|
return /* @__PURE__ */ jsxRuntime.jsx(FormLayoutItem, { children: child });
|
618
618
|
}
|
619
619
|
return child;
|
@@ -652,7 +652,7 @@ var useArrayField = ({
|
|
652
652
|
var useArrayFieldRow = ({ index }) => {
|
653
653
|
const { clearErrors } = useFormContext();
|
654
654
|
const { name, remove, fields } = useArrayFieldContext();
|
655
|
-
|
655
|
+
React12__namespace.useEffect(() => {
|
656
656
|
clearErrors(name);
|
657
657
|
}, []);
|
658
658
|
return {
|
@@ -660,7 +660,7 @@ var useArrayFieldRow = ({ index }) => {
|
|
660
660
|
isFirst: index === 0,
|
661
661
|
isLast: index === fields.length - 1,
|
662
662
|
name: `${name}.${index}`,
|
663
|
-
remove:
|
663
|
+
remove: React12__namespace.useCallback(() => {
|
664
664
|
clearErrors(name);
|
665
665
|
remove(index);
|
666
666
|
}, [index])
|
@@ -755,7 +755,7 @@ var ArrayFieldRows = ({
|
|
755
755
|
return children(fields);
|
756
756
|
};
|
757
757
|
ArrayFieldRows.displayName = "ArrayFieldRows";
|
758
|
-
var ArrayFieldContainer =
|
758
|
+
var ArrayFieldContainer = React12__namespace.forwardRef(
|
759
759
|
({
|
760
760
|
name,
|
761
761
|
defaultValue,
|
@@ -765,15 +765,16 @@ var ArrayFieldContainer = React13__namespace.forwardRef(
|
|
765
765
|
children,
|
766
766
|
...fieldProps
|
767
767
|
}, ref) => {
|
768
|
+
const overrides = useFieldProps(name);
|
768
769
|
const context = useArrayField({
|
769
770
|
name,
|
770
771
|
defaultValue,
|
771
772
|
keyName,
|
772
|
-
min,
|
773
|
-
max
|
773
|
+
min: min || (overrides == null ? void 0 : overrides.min),
|
774
|
+
max: max || (overrides == null ? void 0 : overrides.max)
|
774
775
|
});
|
775
|
-
|
776
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ArrayFieldProvider, { value: context, children: /* @__PURE__ */ jsxRuntime.jsx(BaseField, { name, ...fieldProps, children }) });
|
776
|
+
React12__namespace.useImperativeHandle(ref, () => context, [ref, context]);
|
777
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ArrayFieldProvider, { value: context, children: /* @__PURE__ */ jsxRuntime.jsx(BaseField, { name, ...fieldProps, ...overrides, children }) });
|
777
778
|
}
|
778
779
|
);
|
779
780
|
ArrayFieldContainer.displayName = "ArrayFieldContainer";
|
@@ -782,10 +783,28 @@ var FormLegend = (props) => {
|
|
782
783
|
return /* @__PURE__ */ jsxRuntime.jsx(react.FormLabel, { as: "legend", sx: styles, ...props });
|
783
784
|
};
|
784
785
|
var ObjectField = (props) => {
|
785
|
-
const {
|
786
|
-
|
787
|
-
|
788
|
-
|
786
|
+
const {
|
787
|
+
name,
|
788
|
+
label,
|
789
|
+
hideLabel: hideLabelProp,
|
790
|
+
children,
|
791
|
+
columns: columnsProp,
|
792
|
+
spacing: spacingProp,
|
793
|
+
...fieldProps
|
794
|
+
} = props;
|
795
|
+
const { hideLabel, columns, spacing, ...overrides } = useFieldProps(
|
796
|
+
name
|
797
|
+
);
|
798
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(react.FormControl, { name, as: "fieldset", ...fieldProps, ...overrides, children: [
|
799
|
+
/* @__PURE__ */ jsxRuntime.jsx(FormLegend, { display: hideLabelProp || hideLabel ? "none" : "block", children: label }),
|
800
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
801
|
+
FormLayout,
|
802
|
+
{
|
803
|
+
columns: columnsProp || columns,
|
804
|
+
gridGap: spacingProp || spacing,
|
805
|
+
children: mapNestedFields(name, children)
|
806
|
+
}
|
807
|
+
)
|
789
808
|
] });
|
790
809
|
};
|
791
810
|
ObjectField.displayName = "ObjectField";
|
@@ -812,10 +831,10 @@ var AutoFields = ({
|
|
812
831
|
const context = useFormContext();
|
813
832
|
const schema = schemaProp || context.schema;
|
814
833
|
const fieldResolver = fieldResolverProp || context.fieldResolver;
|
815
|
-
const resolver =
|
816
|
-
const fields =
|
834
|
+
const resolver = React12__namespace.useMemo(() => fieldResolver, [schema, fieldResolver]);
|
835
|
+
const fields = React12__namespace.useMemo(() => resolver == null ? void 0 : resolver.getFields(), [resolver]);
|
817
836
|
const form = useFormContext();
|
818
|
-
|
837
|
+
React12__namespace.useEffect(() => {
|
819
838
|
var _a;
|
820
839
|
if (focusFirstField && ((_a = fields == null ? void 0 : fields[0]) == null ? void 0 : _a.name)) {
|
821
840
|
form.setFocus(fields[0].name);
|
@@ -890,100 +909,17 @@ var DisplayIf = ({
|
|
890
909
|
return condition(value, context) ? children : null;
|
891
910
|
};
|
892
911
|
DisplayIf.displayName = "DisplayIf";
|
893
|
-
var Form = react.forwardRef(
|
894
|
-
(props, ref) => {
|
895
|
-
const {
|
896
|
-
mode = "all",
|
897
|
-
resolver,
|
898
|
-
fieldResolver,
|
899
|
-
fields,
|
900
|
-
reValidateMode,
|
901
|
-
shouldFocusError,
|
902
|
-
shouldUnregister,
|
903
|
-
shouldUseNativeValidation,
|
904
|
-
criteriaMode,
|
905
|
-
delayError,
|
906
|
-
schema,
|
907
|
-
defaultValues,
|
908
|
-
values,
|
909
|
-
context,
|
910
|
-
resetOptions,
|
911
|
-
onChange,
|
912
|
-
onSubmit,
|
913
|
-
onError,
|
914
|
-
formRef,
|
915
|
-
children,
|
916
|
-
...rest
|
917
|
-
} = props;
|
918
|
-
const form = {
|
919
|
-
mode,
|
920
|
-
resolver,
|
921
|
-
defaultValues,
|
922
|
-
values,
|
923
|
-
reValidateMode,
|
924
|
-
shouldFocusError,
|
925
|
-
shouldUnregister,
|
926
|
-
shouldUseNativeValidation,
|
927
|
-
criteriaMode,
|
928
|
-
delayError,
|
929
|
-
context,
|
930
|
-
resetOptions
|
931
|
-
};
|
932
|
-
const methods = reactHookForm.useForm(form);
|
933
|
-
const { handleSubmit } = methods;
|
934
|
-
React13__namespace.useImperativeHandle(formRef, () => methods, [formRef, methods]);
|
935
|
-
React13__namespace.useEffect(() => {
|
936
|
-
let subscription;
|
937
|
-
if (onChange) {
|
938
|
-
subscription = methods.watch(onChange);
|
939
|
-
}
|
940
|
-
return () => subscription == null ? void 0 : subscription.unsubscribe();
|
941
|
-
}, [methods, onChange]);
|
942
|
-
let _children = children;
|
943
|
-
if (!_children && fieldResolver) {
|
944
|
-
_children = /* @__PURE__ */ jsxRuntime.jsxs(FormLayout, { children: [
|
945
|
-
/* @__PURE__ */ jsxRuntime.jsx(AutoFields, {}),
|
946
|
-
/* @__PURE__ */ jsxRuntime.jsx(SubmitButton, { ...fields == null ? void 0 : fields.submit })
|
947
|
-
] });
|
948
|
-
}
|
949
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
950
|
-
FormProvider,
|
951
|
-
{
|
952
|
-
...methods,
|
953
|
-
schema,
|
954
|
-
fieldResolver,
|
955
|
-
fields,
|
956
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
957
|
-
react.chakra.form,
|
958
|
-
{
|
959
|
-
ref,
|
960
|
-
onSubmit: handleSubmit(onSubmit, onError),
|
961
|
-
...rest,
|
962
|
-
className: utils.cx("sui-form", props.className),
|
963
|
-
children: utils.runIfFn(_children, {
|
964
|
-
Field,
|
965
|
-
DisplayIf,
|
966
|
-
ArrayField,
|
967
|
-
ObjectField,
|
968
|
-
...methods
|
969
|
-
})
|
970
|
-
}
|
971
|
-
)
|
972
|
-
}
|
973
|
-
);
|
974
|
-
}
|
975
|
-
);
|
976
|
-
Form.displayName = "Form";
|
977
912
|
var [StepFormProvider, useStepFormContext] = reactUtils.createContext({
|
978
913
|
name: "StepFormContext",
|
979
914
|
errorMessage: "useStepFormContext: `context` is undefined. Seems you forgot to wrap step form components in `<StepForm />`"
|
980
915
|
});
|
981
916
|
function useStepForm(props) {
|
982
|
-
const { onChange, ...rest } = props;
|
917
|
+
const { onChange, steps: stepsOptions, resolver, ...rest } = props;
|
983
918
|
const stepper = core.useStepper(rest);
|
919
|
+
const [options, setOptions] = React12__namespace.useState(stepsOptions);
|
984
920
|
const { activeStep, isLastStep, nextStep } = stepper;
|
985
|
-
const [steps, updateSteps] =
|
986
|
-
const onSubmitStep =
|
921
|
+
const [steps, updateSteps] = React12__namespace.useState({});
|
922
|
+
const onSubmitStep = React12__namespace.useCallback(
|
987
923
|
async (data) => {
|
988
924
|
var _a, _b;
|
989
925
|
try {
|
@@ -1004,24 +940,31 @@ function useStepForm(props) {
|
|
1004
940
|
},
|
1005
941
|
[steps, activeStep, isLastStep]
|
1006
942
|
);
|
1007
|
-
const getFormProps =
|
943
|
+
const getFormProps = React12__namespace.useCallback(() => {
|
1008
944
|
const step = steps[activeStep];
|
1009
945
|
return {
|
1010
946
|
onSubmit: onSubmitStep,
|
1011
947
|
schema: step == null ? void 0 : step.schema,
|
1012
|
-
resolver: step == null ? void 0 : step.
|
948
|
+
resolver: (step == null ? void 0 : step.schema) ? (
|
949
|
+
/* @todo fix resolver type */
|
950
|
+
resolver == null ? void 0 : resolver(step.schema)
|
951
|
+
) : void 0
|
1013
952
|
};
|
1014
953
|
}, [steps, onSubmitStep, activeStep]);
|
1015
|
-
const updateStep =
|
954
|
+
const updateStep = React12__namespace.useCallback(
|
1016
955
|
(step) => {
|
956
|
+
const stepOptions = options == null ? void 0 : options.find((s) => s.name === step.name);
|
1017
957
|
updateSteps((steps2) => {
|
1018
958
|
return {
|
1019
959
|
...steps2,
|
1020
|
-
[step.name]:
|
960
|
+
[step.name]: {
|
961
|
+
...step,
|
962
|
+
schema: stepOptions == null ? void 0 : stepOptions.schema
|
963
|
+
}
|
1021
964
|
};
|
1022
965
|
});
|
1023
966
|
},
|
1024
|
-
[steps]
|
967
|
+
[steps, options]
|
1025
968
|
);
|
1026
969
|
return {
|
1027
970
|
getFormProps,
|
@@ -1034,7 +977,7 @@ function useFormStep(props) {
|
|
1034
977
|
const { name, schema, resolver, onSubmit } = props;
|
1035
978
|
const step = core.useStep({ name });
|
1036
979
|
const { steps, updateStep } = useStepFormContext();
|
1037
|
-
|
980
|
+
React12__namespace.useEffect(() => {
|
1038
981
|
updateStep({ name, schema, resolver, onSubmit });
|
1039
982
|
}, [name, schema]);
|
1040
983
|
return {
|
@@ -1042,24 +985,25 @@ function useFormStep(props) {
|
|
1042
985
|
...steps[name] || { name, schema }
|
1043
986
|
};
|
1044
987
|
}
|
1045
|
-
var StepForm = React13__namespace.forwardRef(
|
1046
|
-
(props, ref) => {
|
1047
|
-
const { children, ...rest } = props;
|
1048
|
-
const stepper = useStepForm(props);
|
1049
|
-
const { getFormProps, ...ctx } = stepper;
|
1050
|
-
const context = React13__namespace.useMemo(() => ctx, [ctx]);
|
1051
|
-
return /* @__PURE__ */ jsxRuntime.jsx(core.StepperProvider, { value: context, children: /* @__PURE__ */ jsxRuntime.jsx(StepFormProvider, { value: context, children: /* @__PURE__ */ jsxRuntime.jsx(Form, { ref, ...rest, ...getFormProps(), children: utils.runIfFn(children, stepper) }) }) });
|
1052
|
-
}
|
1053
|
-
);
|
1054
988
|
var FormStepper = (props) => {
|
1055
989
|
const { activeIndex, setIndex } = core.useStepperContext();
|
1056
|
-
const {
|
1057
|
-
|
1058
|
-
|
990
|
+
const {
|
991
|
+
children,
|
992
|
+
orientation,
|
993
|
+
variant,
|
994
|
+
colorScheme,
|
995
|
+
size,
|
996
|
+
onChange: onChangeProp,
|
997
|
+
render,
|
998
|
+
...rest
|
999
|
+
} = props;
|
1000
|
+
const elements = React12__namespace.Children.map(children, (child) => {
|
1001
|
+
if (React12__namespace.isValidElement(child) && (child == null ? void 0 : child.type) === FormStep) {
|
1059
1002
|
const { isCompleted } = useFormStep(child.props);
|
1060
1003
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
1061
|
-
core.
|
1004
|
+
core.StepsItem,
|
1062
1005
|
{
|
1006
|
+
render,
|
1063
1007
|
name: child.props.name,
|
1064
1008
|
title: child.props.title,
|
1065
1009
|
isCompleted,
|
@@ -1070,11 +1014,12 @@ var FormStepper = (props) => {
|
|
1070
1014
|
}
|
1071
1015
|
return child;
|
1072
1016
|
});
|
1073
|
-
const onChange =
|
1017
|
+
const onChange = React12__namespace.useCallback((i) => {
|
1074
1018
|
setIndex(i);
|
1019
|
+
onChangeProp == null ? void 0 : onChangeProp(i);
|
1075
1020
|
}, []);
|
1076
1021
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
1077
|
-
core.
|
1022
|
+
core.Steps,
|
1078
1023
|
{
|
1079
1024
|
orientation,
|
1080
1025
|
step: activeIndex,
|
@@ -1082,13 +1027,13 @@ var FormStepper = (props) => {
|
|
1082
1027
|
colorScheme,
|
1083
1028
|
size,
|
1084
1029
|
onChange,
|
1085
|
-
children:
|
1030
|
+
children: elements
|
1086
1031
|
}
|
1087
1032
|
);
|
1088
1033
|
};
|
1089
1034
|
var FormStep = (props) => {
|
1090
|
-
const { name,
|
1091
|
-
const step = useFormStep({ name,
|
1035
|
+
const { name, children, className, onSubmit, ...rest } = props;
|
1036
|
+
const step = useFormStep({ name, onSubmit });
|
1092
1037
|
const { isActive } = step;
|
1093
1038
|
return isActive ? /* @__PURE__ */ jsxRuntime.jsx(react.chakra.div, { ...rest, className: utils.cx("sui-form__step", className), children }) : null;
|
1094
1039
|
};
|
@@ -1099,7 +1044,7 @@ var PrevButton = (props) => {
|
|
1099
1044
|
react.Button,
|
1100
1045
|
{
|
1101
1046
|
isDisabled: isFirstStep || isCompleted,
|
1102
|
-
|
1047
|
+
children: "Back",
|
1103
1048
|
...props,
|
1104
1049
|
className: utils.cx("sui-form__prev-button", props.className),
|
1105
1050
|
onClick: utils.callAllHandlers(props.onClick, prevStep)
|
@@ -1158,12 +1103,96 @@ var WatchField = (props) => {
|
|
1158
1103
|
});
|
1159
1104
|
return props.children(field, form) || null;
|
1160
1105
|
};
|
1106
|
+
var Form = react.forwardRef(
|
1107
|
+
(props, ref) => {
|
1108
|
+
const {
|
1109
|
+
mode = "all",
|
1110
|
+
resolver,
|
1111
|
+
fieldResolver,
|
1112
|
+
fields,
|
1113
|
+
reValidateMode,
|
1114
|
+
shouldFocusError,
|
1115
|
+
shouldUnregister,
|
1116
|
+
shouldUseNativeValidation,
|
1117
|
+
criteriaMode,
|
1118
|
+
delayError,
|
1119
|
+
schema,
|
1120
|
+
defaultValues,
|
1121
|
+
values,
|
1122
|
+
context,
|
1123
|
+
resetOptions,
|
1124
|
+
onChange,
|
1125
|
+
onSubmit,
|
1126
|
+
onError,
|
1127
|
+
formRef,
|
1128
|
+
children,
|
1129
|
+
...rest
|
1130
|
+
} = props;
|
1131
|
+
const form = {
|
1132
|
+
mode,
|
1133
|
+
resolver,
|
1134
|
+
defaultValues,
|
1135
|
+
values,
|
1136
|
+
reValidateMode,
|
1137
|
+
shouldFocusError,
|
1138
|
+
shouldUnregister,
|
1139
|
+
shouldUseNativeValidation,
|
1140
|
+
criteriaMode,
|
1141
|
+
delayError,
|
1142
|
+
context,
|
1143
|
+
resetOptions
|
1144
|
+
};
|
1145
|
+
const methods = reactHookForm.useForm(form);
|
1146
|
+
const { handleSubmit } = methods;
|
1147
|
+
React12__namespace.useImperativeHandle(formRef, () => methods, [formRef, methods]);
|
1148
|
+
React12__namespace.useEffect(() => {
|
1149
|
+
let subscription;
|
1150
|
+
if (onChange) {
|
1151
|
+
subscription = methods.watch(onChange);
|
1152
|
+
}
|
1153
|
+
return () => subscription == null ? void 0 : subscription.unsubscribe();
|
1154
|
+
}, [methods, onChange]);
|
1155
|
+
let _children = children;
|
1156
|
+
if (!_children && fieldResolver) {
|
1157
|
+
_children = /* @__PURE__ */ jsxRuntime.jsxs(FormLayout, { children: [
|
1158
|
+
/* @__PURE__ */ jsxRuntime.jsx(AutoFields, {}),
|
1159
|
+
/* @__PURE__ */ jsxRuntime.jsx(SubmitButton, { ...fields == null ? void 0 : fields.submit })
|
1160
|
+
] });
|
1161
|
+
}
|
1162
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
1163
|
+
FormProvider,
|
1164
|
+
{
|
1165
|
+
...methods,
|
1166
|
+
schema,
|
1167
|
+
fieldResolver,
|
1168
|
+
fields,
|
1169
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
1170
|
+
react.chakra.form,
|
1171
|
+
{
|
1172
|
+
ref,
|
1173
|
+
onSubmit: handleSubmit(onSubmit, onError),
|
1174
|
+
...rest,
|
1175
|
+
className: utils.cx("sui-form", props.className),
|
1176
|
+
children: utils.runIfFn(_children, {
|
1177
|
+
Field,
|
1178
|
+
DisplayIf,
|
1179
|
+
ArrayField,
|
1180
|
+
ObjectField,
|
1181
|
+
...methods
|
1182
|
+
})
|
1183
|
+
}
|
1184
|
+
)
|
1185
|
+
}
|
1186
|
+
);
|
1187
|
+
}
|
1188
|
+
);
|
1189
|
+
Form.displayName = "Form";
|
1161
1190
|
function createForm({
|
1162
1191
|
resolver,
|
1163
1192
|
fieldResolver = objectFieldResolver,
|
1164
1193
|
fields
|
1165
1194
|
} = {}) {
|
1166
|
-
const
|
1195
|
+
const DefaultForm = react.forwardRef(
|
1167
1196
|
(props, ref) => {
|
1168
1197
|
const { schema, ...rest } = props;
|
1169
1198
|
return /* @__PURE__ */ jsxRuntime.jsx(FieldsProvider, { value: fields || {}, children: /* @__PURE__ */ jsxRuntime.jsx(
|
@@ -1177,9 +1206,34 @@ function createForm({
|
|
1177
1206
|
) });
|
1178
1207
|
}
|
1179
1208
|
);
|
1180
|
-
|
1209
|
+
DefaultForm.displayName = "Form";
|
1210
|
+
DefaultForm.id = "Form";
|
1211
|
+
return DefaultForm;
|
1212
|
+
}
|
1213
|
+
function createStepForm({ fields, resolver, fieldResolver } = {}) {
|
1214
|
+
const StepForm2 = react.forwardRef((props, ref) => {
|
1215
|
+
const { children, steps, ...rest } = props;
|
1216
|
+
const stepper = useStepForm({
|
1217
|
+
resolver,
|
1218
|
+
fieldResolver,
|
1219
|
+
...props
|
1220
|
+
});
|
1221
|
+
const { getFormProps, ...ctx } = stepper;
|
1222
|
+
const context = React12.useMemo(() => ctx, [ctx]);
|
1223
|
+
return /* @__PURE__ */ jsxRuntime.jsx(core.StepperProvider, { value: context, children: /* @__PURE__ */ jsxRuntime.jsx(StepFormProvider, { value: context, children: /* @__PURE__ */ jsxRuntime.jsx(FieldsProvider, { value: fields || {}, children: /* @__PURE__ */ jsxRuntime.jsx(Form2, { ref, ...rest, ...getFormProps(), children: utils.runIfFn(children, {
|
1224
|
+
...stepper,
|
1225
|
+
Field,
|
1226
|
+
FormStep,
|
1227
|
+
DisplayIf,
|
1228
|
+
ArrayField,
|
1229
|
+
ObjectField
|
1230
|
+
}) }) }) }) });
|
1231
|
+
});
|
1232
|
+
StepForm2.displayName = `Step${Form2.displayName || Form2.name}`;
|
1233
|
+
return StepForm2;
|
1181
1234
|
}
|
1182
1235
|
var Form2 = createForm();
|
1236
|
+
var StepForm = createStepForm();
|
1183
1237
|
|
1184
1238
|
Object.defineProperty(exports, 'Controller', {
|
1185
1239
|
enumerable: true,
|
@@ -1260,6 +1314,7 @@ exports.TextareaField = TextareaField;
|
|
1260
1314
|
exports.WatchField = WatchField;
|
1261
1315
|
exports.createField = createField;
|
1262
1316
|
exports.createForm = createForm;
|
1317
|
+
exports.createStepForm = createStepForm;
|
1263
1318
|
exports.defaultFieldTypes = defaultFieldTypes;
|
1264
1319
|
exports.objectFieldResolver = objectFieldResolver;
|
1265
1320
|
exports.useArrayField = useArrayField;
|