fix(ui): antd nested form bugs

This commit is contained in:
Fu Diwei
2025-01-06 19:10:29 +08:00
parent 4ba7237326
commit 87e1749553
60 changed files with 1694 additions and 1358 deletions

View File

@@ -8,7 +8,7 @@ export interface UseAntdFormOptions<T extends NonNullable<unknown> = any> {
form?: FormInstance<T>;
initialValues?: Partial<T> | (() => Partial<T> | Promise<Partial<T>>);
name?: string;
onSubmit?: (values: T) => unknown;
onSubmit?: (values: T) => unknown | Promise<unknown>;
}
export interface UseAntdFormReturns<T extends NonNullable<unknown> = any> {
@@ -95,7 +95,7 @@ const useAntdForm = <T extends NonNullable<unknown> = any>({ form, initialValues
const formProps: FormProps = {
form: formInst,
initialValues: formInitialValues,
name: options.name ? formName : undefined,
name: formName,
onFinish,
};

View File

@@ -1,5 +1,6 @@
import { useCreation } from "ahooks";
import { type FormInstance } from "antd";
import { nanoid } from "nanoid/non-secure";
export interface UseAntdFormNameOptions<T extends NonNullable<unknown> = any> {
form: FormInstance<T>;
@@ -13,7 +14,7 @@ export interface UseAntdFormNameOptions<T extends NonNullable<unknown> = any> {
* @returns {string}
*/
const useAntdFormName = <T extends NonNullable<unknown> = any>(options: UseAntdFormNameOptions<T>) => {
const formName = useCreation(() => `${options.name}_${Math.random().toString(36).substring(2, 10)}${new Date().getTime()}`, [options.name, options.form]);
const formName = useCreation(() => `${options.name}_${nanoid()}`, [options.name, options.form]);
return formName;
};

View File

@@ -1,7 +1,7 @@
import { Fragment, cloneElement, createElement, isValidElement, useMemo } from "react";
export type UseTriggerElementOptions = {
onClick?: (e: MouseEvent) => void;
onClick?: (e: React.MouseEvent) => void;
};
/**
@@ -21,7 +21,7 @@ const useTriggerElement = (trigger: React.ReactNode, options?: UseTriggerElement
const el = isValidElement(trigger) ? trigger : createElement(Fragment, null, trigger);
return cloneElement(el, {
...el.props,
onClick: (e: MouseEvent) => {
onClick: (e: React.MouseEvent) => {
onClick?.(e);
el.props?.onClick?.(e);
},