@inkline/inkline
Version:
Inkline is the intuitive UI Components library that gives you a developer-friendly foundation for building high-quality, accessible, and customizable Vue.js 3 Design Systems.
44 lines (43 loc) • 1.09 kB
JavaScript
import {
defaultValidationFieldValues,
defaultValidationStateValues
} from "@inkline/inkline/constants";
import { isFormField, isFormGroup } from "@inkline/inkline/types";
export function createFormFieldSchema(field) {
return {
...defaultValidationStateValues,
...defaultValidationFieldValues,
...field
};
}
export function createFormArraySchema(items) {
return items.map((item) => {
if (isFormGroup(item)) {
return createSchema(item);
}
return createFormFieldSchema(item);
});
}
export function createFormSchema(schema) {
const resolved = {
...defaultValidationStateValues
};
for (const key of Object.keys(schema)) {
const field = schema[key];
if (Array.isArray(field)) {
resolved[key] = createFormArraySchema(
field
);
} else if (isFormGroup(field)) {
resolved[key] = createSchema(
field
);
} else if (isFormField(field)) {
resolved[key] = createFormFieldSchema(field);
}
}
return resolved;
}
export function createSchema(schema) {
return createFormSchema(schema);
}