x-ui-design 0.3.76 → 0.3.78
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/index.esm.js +17 -7
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +17 -7
- package/dist/index.js.map +1 -1
- package/lib/components/Form/Form.tsx +6 -7
- package/lib/hooks/useForm.ts +15 -3
- package/package.json +1 -1
- package/src/app/page.tsx +120 -0
|
@@ -36,16 +36,15 @@ const Form: FC<FormProps> & { Item: FC<FormItemProps> } = ({
|
|
|
36
36
|
scrollToFirstError = false,
|
|
37
37
|
...rest
|
|
38
38
|
}) => {
|
|
39
|
-
const internalForm = useForm(initialValues, onFieldsChange, onValuesChange
|
|
39
|
+
const internalForm = useForm(initialValues, onFieldsChange, onValuesChange);
|
|
40
40
|
const formInstance = form || internalForm;
|
|
41
|
-
|
|
42
|
-
formInstance.setScrollToFirstError(scrollToFirstError);
|
|
43
|
-
|
|
44
41
|
const formRef = useRef<HTMLFormElement>(null);
|
|
45
42
|
|
|
46
43
|
const handleSubmit = async (e: SyntheticEvent) => {
|
|
47
44
|
e.preventDefault();
|
|
48
45
|
|
|
46
|
+
formInstance.setScrollToFirstError(scrollToFirstError);
|
|
47
|
+
|
|
49
48
|
if (await formInstance.validateFields()) {
|
|
50
49
|
onFinish?.(formInstance.getFieldsValue());
|
|
51
50
|
} else if (onFinishFailed) {
|
|
@@ -66,7 +65,7 @@ const Form: FC<FormProps> & { Item: FC<FormItemProps> } = ({
|
|
|
66
65
|
}
|
|
67
66
|
}, [formInstance, onFieldsChange, onValuesChange]);
|
|
68
67
|
|
|
69
|
-
const injectPropsIntoFinalLeaf = (child: ReactNode): ReactNode => {
|
|
68
|
+
const injectPropsIntoFinalLeaf = (child: ReactNode, key: number): ReactNode => {
|
|
70
69
|
if (!isValidElement(child)) {
|
|
71
70
|
return child;
|
|
72
71
|
}
|
|
@@ -85,7 +84,7 @@ const Form: FC<FormProps> & { Item: FC<FormItemProps> } = ({
|
|
|
85
84
|
|
|
86
85
|
if (isWrapper) {
|
|
87
86
|
return (
|
|
88
|
-
<child.type {...childProps}>
|
|
87
|
+
<child.type {...childProps} data-item={key == 0 ? 'first-content' : ''}>
|
|
89
88
|
{Children.map(flattenChildren(childProps.children), injectPropsIntoFinalLeaf)}
|
|
90
89
|
</child.type>
|
|
91
90
|
)
|
|
@@ -113,7 +112,7 @@ const Form: FC<FormProps> & { Item: FC<FormItemProps> } = ({
|
|
|
113
112
|
onSubmit={handleSubmit}
|
|
114
113
|
className={`${prefixCls} ${className}`}
|
|
115
114
|
>
|
|
116
|
-
{Children.map(childrenList, child => injectPropsIntoFinalLeaf(child))}
|
|
115
|
+
{Children.map(childrenList, (child, key) => injectPropsIntoFinalLeaf(child, key))}
|
|
117
116
|
</form>
|
|
118
117
|
</FormContext.Provider>
|
|
119
118
|
);
|
package/lib/hooks/useForm.ts
CHANGED
|
@@ -28,6 +28,7 @@ const useForm = (
|
|
|
28
28
|
const formRef = useRef<Record<string, RuleTypes>>({ ...initialValues });
|
|
29
29
|
const fieldInstancesRef = useRef<Record<string, FieldInstancesRef>>({});
|
|
30
30
|
|
|
31
|
+
const [isSubmit, setIsSubmit] = useState(false);
|
|
31
32
|
const [isReseting, setIsReseting] = useState(false);
|
|
32
33
|
const [errors, setErrors] = useState<Record<string, string[]>>({});
|
|
33
34
|
|
|
@@ -222,11 +223,20 @@ const useForm = (
|
|
|
222
223
|
setErrors(prev => ({ ...prev, [name]: fieldErrors }));
|
|
223
224
|
warningsRef.current[name] = fieldWarnings;
|
|
224
225
|
|
|
225
|
-
|
|
226
|
+
console.log({
|
|
227
|
+
isSubmit,
|
|
228
|
+
_scrollToFirstError: _scrollToFirstError.current
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
if (isSubmit || _scrollToFirstError.current) {
|
|
226
233
|
const firstErrorContent = document.querySelectorAll('.xUi-form-item-error')?.[0];
|
|
227
|
-
|
|
234
|
+
|
|
228
235
|
if (firstErrorContent) {
|
|
229
|
-
firstErrorContent.closest('.xUi-form-item')?.scrollIntoView();
|
|
236
|
+
firstErrorContent.closest('.xUi-form-item')?.closest('[data-item="first-content"]')?.scrollIntoView();
|
|
237
|
+
|
|
238
|
+
setIsSubmit(false);
|
|
239
|
+
setScrollToFirstError(false);
|
|
230
240
|
}
|
|
231
241
|
}
|
|
232
242
|
|
|
@@ -267,6 +277,8 @@ const useForm = (
|
|
|
267
277
|
}
|
|
268
278
|
|
|
269
279
|
async function submit() {
|
|
280
|
+
setIsSubmit(true);
|
|
281
|
+
|
|
270
282
|
return (await validateFields()) ? formRef.current : undefined;
|
|
271
283
|
}
|
|
272
284
|
|
package/package.json
CHANGED
package/src/app/page.tsx
CHANGED
|
@@ -1878,10 +1878,130 @@ export default function Home() {
|
|
|
1878
1878
|
<div style={{ width: 500 }}></div>
|
|
1879
1879
|
|
|
1880
1880
|
<Form form={form} onFinish={handle} size="large" scrollToFirstError={true}>
|
|
1881
|
+
<div>
|
|
1882
|
+
<div style={{ height: 200 }}></div>
|
|
1883
|
+
|
|
1884
|
+
<Item rules={[{ required: true }]} name="gender" label="Gender">
|
|
1885
|
+
<Select options={CountryCodes} />
|
|
1886
|
+
</Item>
|
|
1887
|
+
</div>
|
|
1888
|
+
|
|
1881
1889
|
<Item rules={[{ required: true }]} name="gender" label="Gender">
|
|
1882
1890
|
<Select options={CountryCodes} />
|
|
1883
1891
|
</Item>
|
|
1884
1892
|
|
|
1893
|
+
<Item rules={[{ required: true }]} name="gender1" label="Gender">
|
|
1894
|
+
<Select options={CountryCodes} />
|
|
1895
|
+
</Item>
|
|
1896
|
+
|
|
1897
|
+
<Item rules={[{ required: true }]} name="gender2" label="Gender">
|
|
1898
|
+
<Select options={CountryCodes} />
|
|
1899
|
+
</Item>
|
|
1900
|
+
|
|
1901
|
+
<Item rules={[{ required: true }]} name="gender3" label="Gender">
|
|
1902
|
+
<Select options={CountryCodes} />
|
|
1903
|
+
</Item>
|
|
1904
|
+
|
|
1905
|
+
<Item rules={[{ required: true }]} name="gender4" label="Gender">
|
|
1906
|
+
<Select options={CountryCodes} />
|
|
1907
|
+
</Item>
|
|
1908
|
+
|
|
1909
|
+
<Item rules={[{ required: true }]} name="gender5" label="Gender">
|
|
1910
|
+
<Select options={CountryCodes} />
|
|
1911
|
+
</Item>
|
|
1912
|
+
|
|
1913
|
+
<Item rules={[{ required: true }]} name="gender6" label="Gender">
|
|
1914
|
+
<Select options={CountryCodes} />
|
|
1915
|
+
</Item>
|
|
1916
|
+
|
|
1917
|
+
<Item rules={[{ required: true }]} name="gender7" label="Gender">
|
|
1918
|
+
<Select options={CountryCodes} />
|
|
1919
|
+
</Item>
|
|
1920
|
+
|
|
1921
|
+
<Item rules={[{ required: true }]} name="gender8" label="Gender">
|
|
1922
|
+
<Select options={CountryCodes} />
|
|
1923
|
+
</Item>
|
|
1924
|
+
|
|
1925
|
+
<Item rules={[{ required: true }]} name="gender9" label="Gender">
|
|
1926
|
+
<Select options={CountryCodes} />
|
|
1927
|
+
</Item>
|
|
1928
|
+
|
|
1929
|
+
<Item rules={[{ required: true }]} name="gender10" label="Gender">
|
|
1930
|
+
<Select options={CountryCodes} />
|
|
1931
|
+
</Item>
|
|
1932
|
+
|
|
1933
|
+
<Item rules={[{ required: true }]} name="gender11" label="Gender">
|
|
1934
|
+
<Select options={CountryCodes} />
|
|
1935
|
+
</Item>
|
|
1936
|
+
|
|
1937
|
+
<Item rules={[{ required: true }]} name="gender12" label="Gender">
|
|
1938
|
+
<Select options={CountryCodes} />
|
|
1939
|
+
</Item>
|
|
1940
|
+
|
|
1941
|
+
<Item rules={[{ required: true }]} name="gender13" label="Gender">
|
|
1942
|
+
<Select options={CountryCodes} />
|
|
1943
|
+
</Item>
|
|
1944
|
+
|
|
1945
|
+
<Item rules={[{ required: true }]} name="gender14" label="Gender">
|
|
1946
|
+
<Select options={CountryCodes} />
|
|
1947
|
+
</Item>
|
|
1948
|
+
|
|
1949
|
+
<Item rules={[{ required: true }]} name="gender15" label="Gender">
|
|
1950
|
+
<Select options={CountryCodes} />
|
|
1951
|
+
</Item>
|
|
1952
|
+
|
|
1953
|
+
<Item rules={[{ required: true }]} name="gender16" label="Gender">
|
|
1954
|
+
<Select options={CountryCodes} />
|
|
1955
|
+
</Item>
|
|
1956
|
+
|
|
1957
|
+
<Item rules={[{ required: true }]} name="gender17" label="Gender">
|
|
1958
|
+
<Select options={CountryCodes} />
|
|
1959
|
+
</Item>
|
|
1960
|
+
|
|
1961
|
+
<Item rules={[{ required: true }]} name="gender18" label="Gender">
|
|
1962
|
+
<Select options={CountryCodes} />
|
|
1963
|
+
</Item>
|
|
1964
|
+
|
|
1965
|
+
<Item rules={[{ required: true }]} name="gender19" label="Gender">
|
|
1966
|
+
<Select options={CountryCodes} />
|
|
1967
|
+
</Item>
|
|
1968
|
+
|
|
1969
|
+
<Item rules={[{ required: true }]} name="gender20" label="Gender">
|
|
1970
|
+
<Select options={CountryCodes} />
|
|
1971
|
+
</Item>
|
|
1972
|
+
|
|
1973
|
+
<Item rules={[{ required: true }]} name="gender21" label="Gender">
|
|
1974
|
+
<Select options={CountryCodes} />
|
|
1975
|
+
</Item>
|
|
1976
|
+
|
|
1977
|
+
<Item rules={[{ required: true }]} name="gender22" label="Gender">
|
|
1978
|
+
<Select options={CountryCodes} />
|
|
1979
|
+
</Item>
|
|
1980
|
+
|
|
1981
|
+
<Item name="gender23" label="Gender">
|
|
1982
|
+
<Select options={CountryCodes} />
|
|
1983
|
+
</Item>
|
|
1984
|
+
|
|
1985
|
+
<Item rules={[{ required: true }]} name="gender24" label="Gender">
|
|
1986
|
+
<Select options={CountryCodes} />
|
|
1987
|
+
</Item>
|
|
1988
|
+
|
|
1989
|
+
<Item rules={[{ required: true }]} name="gender24" label="Gender">
|
|
1990
|
+
<Select options={CountryCodes} />
|
|
1991
|
+
</Item>
|
|
1992
|
+
|
|
1993
|
+
<Item rules={[{ required: true }]} name="gender26" label="Gender">
|
|
1994
|
+
<Select options={CountryCodes} />
|
|
1995
|
+
</Item>
|
|
1996
|
+
|
|
1997
|
+
<Item rules={[{ required: true }]} name="gender27" label="Gender">
|
|
1998
|
+
<Select options={CountryCodes} />
|
|
1999
|
+
</Item>
|
|
2000
|
+
|
|
2001
|
+
<Item rules={[{ required: true }]} name="gender30" label="Gender">
|
|
2002
|
+
<Select options={CountryCodes} />
|
|
2003
|
+
</Item>
|
|
2004
|
+
|
|
1885
2005
|
<Item rules={[{ required: true }]} name="country" label="country">
|
|
1886
2006
|
<Select options={CountryCodes} />
|
|
1887
2007
|
</Item>
|