in apps/newsletters-ui/src/app/components/SchemaForm/index.tsx [33:84]
export function SchemaForm<T extends z.ZodRawShape>({
schema,
data,
changeValue,
options = {},
numberConfig = {},
stringConfig = {},
showUnsupported = false,
excludedKeys = [],
readOnlyKeys = [],
validationWarnings,
maxOptionsForRadioButtons = 0,
explanations = {},
}: Props<T>) {
const fields: FieldDef[] = [];
for (const key in schema.shape) {
const zod: ZodTypeAny | undefined = schema.shape[key];
if (!zod) {
continue;
}
if (excludedKeys.includes(key)) {
continue;
}
fields.push({
key,
value: data[key],
readOnly: readOnlyKeys.includes(key),
zod,
});
}
return (
<article>
{fields.map((field) => (
<SchemaField
key={field.key}
options={options[field.key]}
numberInputSettings={numberConfig[field.key]}
stringInputSettings={stringConfig[field.key]}
change={changeValue}
field={field}
showUnsupported={showUnsupported}
validationWarning={validationWarnings[field.key]}
maxOptionsForRadioButtons={maxOptionsForRadioButtons}
explanation={explanations[field.key]}
/>
))}
</article>
);
}