zod-to-fields
Version:
Turn your Zod schemas into configurable field arrays for easy integration with HTML, React, Vue, and more.
55 lines • 1.79 kB
JavaScript
const handleZodString = (fieldOptions) => {
return { ...fieldOptions, type: fieldOptions.type ?? 'text' };
};
const handleZodNumber = (fieldOptions) => {
return {
...fieldOptions,
inputMode: fieldOptions.inputMode ?? 'numeric',
type: fieldOptions.type ?? 'number',
};
};
const handleZodBoolean = (fieldOptions) => {
return { ...fieldOptions, type: fieldOptions.type ?? 'checkbox' };
};
const handleZodEnum = (fieldOptions, fieldValue) => {
const options = fieldValue._def.values.map(value => ({
label: value.charAt(0).toUpperCase() + value.slice(1),
value,
}));
if (fieldOptions.tag === 'select') {
// handle select
return {
...fieldOptions,
options: fieldOptions.options ?? options,
type: fieldOptions.type ?? 'select',
};
}
else {
// handle radio
return {
...fieldOptions,
type: fieldOptions.type ?? 'checkbox',
options: fieldOptions.options ?? options,
};
}
};
const handleNativeZodEnum = (fieldOptions, fieldValue) => {
const options = Object.entries(fieldValue._def.values).map(([key, value]) => ({
label: key.charAt(0).toUpperCase() + key.slice(1),
value,
}));
if (fieldOptions.tag === 'select') {
// handle select
return { ...fieldOptions, options: fieldOptions.options ?? options };
}
else {
// handle radio
return {
...fieldOptions,
type: fieldOptions.type ?? 'checkbox',
options: fieldOptions.options ?? options,
};
}
};
export { handleZodBoolean, handleZodNumber, handleZodString, handleZodEnum, handleNativeZodEnum, };
//# sourceMappingURL=fieldHandlers.js.map