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.
@@ -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, scrollToFirstError);
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
  );
@@ -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
- if (_scrollToFirstError.current) {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "x-ui-design",
3
- "version": "0.3.76",
3
+ "version": "0.3.78",
4
4
  "license": "ISC",
5
5
  "author": "Gabriel Boyajyan",
6
6
  "main": "dist/index.js",
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>