feat: add updateSchema to form api (#4453)

* feat: add updateSchema to form api

* chore: typo

* chore: typo
This commit is contained in:
Vben
2024-09-21 11:26:14 +08:00
committed by GitHub
parent 68dbe04bef
commit 60cffb0dec
3 changed files with 138 additions and 6 deletions

View File

@@ -5,7 +5,7 @@ import type {
ValidationOptions,
} from 'vee-validate';
import type { FormActions, VbenFormProps } from './types';
import type { FormActions, FormSchema, VbenFormProps } from './types';
import { toRaw } from 'vue';
@@ -186,6 +186,37 @@ export class FormApi {
this.stateHandler.reset();
}
updateSchema(schema: Partial<FormSchema>[]) {
const updated: Partial<FormSchema>[] = [...schema];
const hasField = updated.every(
(item) => Reflect.has(item, 'fieldName') && item.fieldName,
);
if (!hasField) {
console.error(
'All items in the schema array must have a valid `fieldName` property to be updated',
);
return;
}
const currentSchema = [...(this.state?.schema ?? [])];
const updatedMap: Record<string, any> = {};
updated.forEach((item) => {
if (item.fieldName) {
updatedMap[item.fieldName] = item;
}
});
currentSchema.forEach((schema, index) => {
const updatedData = updatedMap[schema.fieldName];
if (updatedData) {
currentSchema[index] = merge(updatedData, schema) as FormSchema;
}
});
this.setState({ schema: currentSchema });
}
async validate(opts?: Partial<ValidationOptions>) {
const form = await this.getForm();
return await form.validate(opts);