export function SchemaForm()

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>
	);
}