>
);
}}
/>
>
);
}
export function RecordFormField({ field, form, tableName }: RecordFormFieldProps) {
const {
control,
register,
formState: { errors },
} = form;
// TODO: This is a mess, we need to clean it up. To fix in future.
const renderField = () => {
// Infer frontend type from field name and SQLite type
switch (field.type) {
case ColumnType.BOOLEAN:
return (
(
)}
/>
);
case ColumnType.INTEGER:
case ColumnType.FLOAT:
return (
(
)}
/>
);
case ColumnType.DATE:
case ColumnType.DATETIME:
return (
(
)}
/>
);
case ColumnType.JSON:
return (
{
return (
{
const result = convertValueForColumn(ColumnType.JSON, newValue as string);
if (result.success) {
formField.onChange(result.value as JSON);
} else {
// If parsing fails, keep the string value
formField.onChange(newValue);
}
}}
/>
);
}}
/>
);
case ColumnType.UUID:
return (
);
case ColumnType.STRING:
default:
return (
);
}
};
return (
{renderField()}
{errors[field.columnName] && (
{(errors[field.columnName] as FieldError)?.message || `${field.columnName} is required`}