浏览代码

feat(form): adding resetSchema method

zuihou 4 年之前
父节点
当前提交
c639e493a5

+ 2 - 0
src/components/Form/src/BasicForm.vue

@@ -168,6 +168,7 @@
         validateFields,
         getFieldsValue,
         updateSchema,
+        resetSchema,
         appendSchemaByField,
         removeSchemaByFiled,
         resetFields,
@@ -230,6 +231,7 @@
         setFieldsValue,
         resetFields,
         updateSchema,
+        resetSchema,
         setProps,
         removeSchemaByFiled,
         appendSchemaByField,

+ 5 - 0
src/components/Form/src/hooks/useForm.ts

@@ -65,6 +65,11 @@ export function useForm(props?: Props): UseFormReturnType {
       form.updateSchema(data);
     },
 
+    resetSchema: async (data: Partial<FormSchema> | Partial<FormSchema>[]) => {
+      const form = await getForm();
+      form.resetSchema(data);
+    },
+
     clearValidate: async (name?: string | string[]) => {
       const form = await getForm();
       form.clearValidate(name);

+ 21 - 0
src/components/Form/src/hooks/useFormEvents.ts

@@ -137,6 +137,26 @@ export function useFormEvents({
     schemaRef.value = schemaList;
   }
 
+  async function resetSchema(data: Partial<FormSchema> | Partial<FormSchema>[]) {
+    let updateData: Partial<FormSchema>[] = [];
+    if (isObject(data)) {
+      updateData.push(data as FormSchema);
+    }
+    if (isArray(data)) {
+      updateData = [...data];
+    }
+
+    const hasField = updateData.every((item) => Reflect.has(item, 'field') && item.field);
+
+    if (!hasField) {
+      error(
+        'All children of the form Schema array that need to be updated must contain the `field` field'
+      );
+      return;
+    }
+    schemaRef.value = updateData as FormSchema[];
+  }
+
   async function updateSchema(data: Partial<FormSchema> | Partial<FormSchema>[]) {
     let updateData: Partial<FormSchema>[] = [];
     if (isObject(data)) {
@@ -227,6 +247,7 @@ export function useFormEvents({
     validateFields,
     getFieldsValue,
     updateSchema,
+    resetSchema,
     appendSchemaByField,
     removeSchemaByFiled,
     resetFields,

+ 1 - 0
src/components/Form/src/types/form.ts

@@ -31,6 +31,7 @@ export interface FormActionType {
   getFieldsValue: () => Recordable;
   clearValidate: (name?: string | string[]) => Promise<void>;
   updateSchema: (data: Partial<FormSchema> | Partial<FormSchema>[]) => Promise<void>;
+  resetSchema: (data: Partial<FormSchema> | Partial<FormSchema>[]) => Promise<void>;
   setProps: (formProps: Partial<FormProps>) => Promise<void>;
   removeSchemaByFiled: (field: string | string[]) => Promise<void>;
   appendSchemaByField: (