@saas-ui/forms 2.0.0-next.9 → 2.0.0-rc.23
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/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;
|