zod-to-fields
Version:
Turn your Zod schemas into configurable field arrays for easy integration with HTML, React, Vue, and more.
62 lines • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleNativeZodEnum = exports.handleZodEnum = exports.handleZodString = exports.handleZodNumber = exports.handleZodBoolean = void 0;
const handleZodString = (fieldOptions) => {
return { ...fieldOptions, type: fieldOptions.type ?? 'text' };
};
exports.handleZodString = handleZodString;
const handleZodNumber = (fieldOptions) => {
return {
...fieldOptions,
inputMode: fieldOptions.inputMode ?? 'numeric',
type: fieldOptions.type ?? 'number',
};
};
exports.handleZodNumber = handleZodNumber;
const handleZodBoolean = (fieldOptions) => {
return { ...fieldOptions, type: fieldOptions.type ?? 'checkbox' };
};
exports.handleZodBoolean = handleZodBoolean;
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,
};
}
};
exports.handleZodEnum = handleZodEnum;
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,
};
}
};
exports.handleNativeZodEnum = handleNativeZodEnum;
//# sourceMappingURL=fieldHandlers.js.map