x-ui-design 0.4.75 → 0.4.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/types/types/form.d.ts +1 -1
- package/dist/index.esm.js +23 -4
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +23 -4
- package/dist/index.js.map +1 -1
- package/lib/components/Form/Item/Item.tsx +22 -3
- package/lib/hooks/useForm.ts +5 -1
- package/lib/types/form.ts +1 -1
- package/package.json +1 -1
|
@@ -87,7 +87,7 @@ export interface FormInstance {
|
|
|
87
87
|
setFields: (fields: FieldData[]) => void;
|
|
88
88
|
resetFields: (nameList?: string[], showError?: boolean | null) => void;
|
|
89
89
|
getFieldError: (name: string) => string[];
|
|
90
|
-
registerField: (name: string, rules?: RuleObject[], remove?: boolean) => void;
|
|
90
|
+
registerField: (name: string, rules?: RuleObject[], remove?: boolean, fieldRef?: FieldInstancesRef) => void;
|
|
91
91
|
setFieldValue: (name: string, value: RuleTypes, errors?: string[], reset?: boolean | null | undefined, touch?: boolean) => void;
|
|
92
92
|
getFieldValue: (name: string) => RuleTypes;
|
|
93
93
|
validateFields: (nameList?: string[]) => Promise<boolean>;
|
package/dist/index.esm.js
CHANGED
|
@@ -710,7 +710,7 @@ const useForm = (initialValues = {}, onFieldsChange, onValuesChange, scrollToFir
|
|
|
710
710
|
function isFieldValidating(name) {
|
|
711
711
|
return !!name;
|
|
712
712
|
}
|
|
713
|
-
function registerField(name, rules = [], remove = false) {
|
|
713
|
+
function registerField(name, rules = [], remove = false, fieldRef) {
|
|
714
714
|
if (remove) {
|
|
715
715
|
delete formRef.current[stepRef.current]?.[name];
|
|
716
716
|
delete rulesRef.current[name];
|
|
@@ -719,6 +719,9 @@ const useForm = (initialValues = {}, onFieldsChange, onValuesChange, scrollToFir
|
|
|
719
719
|
formRef.current[stepRef.current][name] = initialValues?.[name];
|
|
720
720
|
}
|
|
721
721
|
rulesRef.current[name] = rules;
|
|
722
|
+
if (fieldRef) {
|
|
723
|
+
fieldInstancesRef.current[name] = fieldRef;
|
|
724
|
+
}
|
|
722
725
|
}
|
|
723
726
|
}
|
|
724
727
|
async function validateField(name) {
|
|
@@ -986,6 +989,7 @@ const FormItem$1 = ({
|
|
|
986
989
|
}) => {
|
|
987
990
|
const formContext = useContext(FormContext);
|
|
988
991
|
const errorRef = useRef(null);
|
|
992
|
+
const fieldRef = useRef(null);
|
|
989
993
|
if (!formContext) {
|
|
990
994
|
throw new Error('FormItem must be used within a Form');
|
|
991
995
|
}
|
|
@@ -1002,10 +1006,10 @@ const FormItem$1 = ({
|
|
|
1002
1006
|
const childrenList = useMemo(() => flattenChildren(children), [children]);
|
|
1003
1007
|
useEffect(() => {
|
|
1004
1008
|
if (name && !getFieldInstance(name)) {
|
|
1005
|
-
registerField(name, rules);
|
|
1009
|
+
registerField(name, rules, false, fieldRef.current ?? undefined);
|
|
1006
1010
|
}
|
|
1007
1011
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1008
|
-
}, [name, rules]);
|
|
1012
|
+
}, [name, rules, fieldRef.current]);
|
|
1009
1013
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1010
1014
|
useEffect(() => () => registerField(name, undefined, true), [name]);
|
|
1011
1015
|
useEffect(() => {
|
|
@@ -1027,6 +1031,17 @@ const FormItem$1 = ({
|
|
|
1027
1031
|
}, [dependencies, name]);
|
|
1028
1032
|
const isRequired = useMemo(() => rules.some(rule => rule.required), [rules]);
|
|
1029
1033
|
const errorMessage = getFieldError(name)?.[0];
|
|
1034
|
+
const mergeRefs = elementRef => {
|
|
1035
|
+
return el => {
|
|
1036
|
+
fieldRef.current = el;
|
|
1037
|
+
if (typeof elementRef === 'function') {
|
|
1038
|
+
elementRef(el);
|
|
1039
|
+
} else if (elementRef && typeof elementRef === 'object') {
|
|
1040
|
+
// @ts-ignore
|
|
1041
|
+
elementRef.current = el;
|
|
1042
|
+
}
|
|
1043
|
+
};
|
|
1044
|
+
};
|
|
1030
1045
|
return /*#__PURE__*/React.createElement("div", {
|
|
1031
1046
|
style: style,
|
|
1032
1047
|
className: clsx([`${prefixCls}`, {
|
|
@@ -1049,7 +1064,11 @@ const FormItem$1 = ({
|
|
|
1049
1064
|
...childProps
|
|
1050
1065
|
} = child.props;
|
|
1051
1066
|
const fieldValue = value ?? getFieldValue(name) ?? initialValue;
|
|
1052
|
-
return /*#__PURE__*/React.createElement("div",
|
|
1067
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
1068
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
1069
|
+
// @ts-expect-error
|
|
1070
|
+
ref: mergeRefs(child.ref)
|
|
1071
|
+
}, /*#__PURE__*/React.createElement(FormItemChildComponent, _extends({}, props, {
|
|
1053
1072
|
key: `${key}_${isReseting}`,
|
|
1054
1073
|
name: name,
|
|
1055
1074
|
child: child,
|