@vtaits/form-schema
Version:
Serialization and parsing form values by schema
235 lines (234 loc) • 4.45 kB
JavaScript
import {
parse,
serialize,
setFieldErrors,
setValues,
validateBeforeSubmit
} from "./chunk-3DE3JEEE.js";
// src/fields/set/set.ts
import { isPromise } from "es-toolkit";
var set = {
createGetFieldSchema: ({ fieldSchema }) => {
const { schemas } = fieldSchema;
return (name) => schemas[name];
},
serializer: async ({
name,
value,
values,
fieldSchema,
getFieldSchema,
getFieldType,
parents
}) => {
const { schemas, nested } = fieldSchema;
const names = Object.keys(schemas);
if (nested) {
const currentValues = value || {};
const nextParents = [
...parents,
{
name,
values: currentValues
}
];
const result = await serialize({
values: currentValues,
names,
getFieldSchema,
getFieldType,
parents: nextParents
});
return {
[name]: result
};
}
return serialize({
values,
names,
getFieldSchema,
getFieldType,
parents
});
},
parser: ({
name,
value,
values,
fieldSchema,
getFieldSchema,
getFieldType,
parents
}) => {
const { schemas, nested } = fieldSchema;
const names = Object.keys(schemas);
if (nested) {
const currentValues = value || {};
const nextParents = [
...parents,
{
name,
values: currentValues
}
];
const parseResult = parse({
values: currentValues,
names,
getFieldSchema,
getFieldType,
parents: nextParents
});
if (!parseResult) {
return {
[name]: {}
};
}
if (isPromise(parseResult)) {
return parseResult.then((promiseResult) => ({
[name]: promiseResult
}));
}
return {
[name]: parseResult
};
}
return parse({
values,
names,
getFieldSchema,
getFieldType,
parents
}) || {};
},
validatorBeforeSubmit: ({
name,
setError,
value,
values,
fieldSchema,
getFieldSchema,
getFieldType,
parents
}) => {
const { nested, schemas } = fieldSchema;
const names = Object.keys(schemas);
if (nested) {
const currentValues = value || {};
const nextParents = [
...parents,
{
name,
values: currentValues
}
];
validateBeforeSubmit({
setError,
values: currentValues,
names,
getFieldSchema,
getFieldType,
parents: nextParents
});
return;
}
validateBeforeSubmit({
setError,
values,
names,
getFieldSchema,
getFieldType,
parents
});
},
errorsSetter: ({
name,
setError,
errors,
fieldSchema,
getFieldSchema,
getFieldType,
value,
values,
rawValue,
rawValues,
parents
}) => {
const { nested, schemas } = fieldSchema;
const names = Object.keys(schemas);
if (nested) {
const currentValues = value || {};
const nextParents = [
...parents,
{
name,
values: currentValues
}
];
setFieldErrors({
setError,
errors: errors[name] || {},
names,
getFieldSchema,
getFieldType,
values: currentValues,
rawValues: rawValue || {},
parents: nextParents
});
return;
}
setFieldErrors({
setError,
errors,
names,
getFieldSchema,
getFieldType,
values,
rawValues,
parents
});
},
valueSetter: ({
name,
setValue,
fieldSchema,
getFieldSchema,
getFieldType,
value,
values,
parents
}) => {
const { nested, schemas } = fieldSchema;
const names = Object.keys(schemas);
if (nested) {
const currentValues = value || {};
const nextParents = [
...parents,
{
name,
values: currentValues
}
];
setValues({
setValue,
names,
getFieldSchema,
getFieldType,
values: currentValues,
parents: nextParents
});
return;
}
setValues({
setValue,
names,
getFieldSchema,
getFieldType,
values,
parents
});
}
};
export {
set
};
//# sourceMappingURL=fields_set.js.map