Просмотр исходного кода

feat: add validate to Form facade, deprecate FieldArray.delete but use remove instead (#94)

* feat: expose validate api in form facade

* refactor: deprecate FieldArray.delete but expose remove instead

* refactor: only change api on facade
YuanHeDx 9 месяцев назад
Родитель
Сommit
c75f92d379

+ 1 - 1
packages/node-engine/form/src/core/field-array-model.ts

@@ -85,7 +85,7 @@ export class FieldArrayModel<TValue = FieldValue> extends FieldModel<Array<TValu
   }
 
   /**
-   * 删除数组项,该操作会删除数组项的值并销毁数组项的Field模型
+   * Delete the element in given index and delete the corresponding FieldModel as well
    * @param index
    */
   delete(index: number) {

+ 5 - 0
packages/node-engine/form/src/core/to-field-array.ts

@@ -19,7 +19,12 @@ export function toFieldArray<TValue>(model: FieldArrayModel<TValue>): FieldArray
     map: <T = any>(cb: (f: Field, index: number) => T) =>
       model.map<T>((f, index) => cb(toField(f), index)),
     append: (value) => toField<TValue>(model.append(value)),
+    /**
+     * @deprecated: use remove instead
+     * @param index
+     */
     delete: (index: number) => model.delete(index),
+    remove: (index: number) => model.delete(index),
     swap: (from: number, to: number) => model.swap(from, to),
     move: (from: number, to: number) => model.move(from, to),
   } as FieldArray<TValue>;

+ 1 - 0
packages/node-engine/form/src/core/to-form.ts

@@ -14,6 +14,7 @@ export function toForm<TValue>(model: FormModel): Form<TValue> {
     state: toFormState(model.state),
     getValueIn: <TValue = FieldValue>(name: FieldName) => model.getValueIn(name),
     setValueIn: <TValue>(name: FieldName, value: TValue) => model.setValueIn(name, value),
+    validate: model.validate.bind(model),
   };
 
   Object.defineProperty(res, '_formModel', {

+ 6 - 0
packages/node-engine/form/src/types/field.ts

@@ -79,10 +79,16 @@ export interface FieldArray<TFieldValue extends FieldValue = FieldValue>
    */
   append: (value: TFieldValue) => Field<TFieldValue>;
   /**
+   * @deprecated use remove instead
    * Delete the value and the related field at certain index of the array.
    * @param index the index of the element to delete
    */
   delete: (index: number) => void;
+  /**
+   * Delete the value and the related field at certain index of the array.
+   * @param index the index of the element to delete
+   */
+  remove: (index: number) => void;
   /**
    * Move an array element from one position to another.
    * @param from from position

+ 6 - 1
packages/node-engine/form/src/types/form.ts

@@ -1,5 +1,5 @@
 import { FormModel } from '../core/form-model';
-import { Errors, Validate, ValidateTrigger, Warnings } from './validate';
+import { Errors, FormValidateReturn, Validate, ValidateTrigger, Warnings } from './validate';
 import { Field, FieldArray, FieldName, FieldValue } from './field';
 import { Context } from './common';
 
@@ -81,6 +81,11 @@ export interface Form<TValues = any> {
    * @param name path
    */
   setValueIn<TValue>(name: FieldName, value: TValue): void;
+
+  /**
+   * Trigger validate for the whole form.
+   */
+  validate: () => Promise<FormValidateReturn>;
 }
 
 export interface FormRenderProps<TValues> {