This commit is contained in:
dap
2024-09-21 19:12:42 +08:00
9 changed files with 171 additions and 11 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);