fix: prefill fields (#1689)

Users can now selectively choose which properties to pre-fill for each
field - from just a label to all available properties.
This commit is contained in:
Catalin Pit
2025-03-07 00:09:15 +02:00
committed by GitHub
parent 0df29fce36
commit 65be37514f
2 changed files with 24 additions and 12 deletions

View File

@ -118,6 +118,7 @@ const getUpdatedFieldMeta = (field: Field, prefillField?: TFieldMetaPrefillField
...existingMeta,
type: 'text',
label: field.label,
placeholder: field.placeholder,
text: field.value,
};
@ -134,6 +135,7 @@ const getUpdatedFieldMeta = (field: Field, prefillField?: TFieldMetaPrefillField
...existingMeta,
type: 'number',
label: field.label,
placeholder: field.placeholder,
value: field.value,
};
@ -190,8 +192,16 @@ const getUpdatedFieldMeta = (field: Field, prefillField?: TFieldMetaPrefillField
const checkboxMeta = result.data;
if (!field.value) {
throw new AppError(AppErrorCode.INVALID_BODY, {
message: `Value is required for CHECKBOX field ${field.id}`,
});
}
const fieldValue = field.value;
// Validate that all values exist in the options
for (const value of field.value) {
for (const value of fieldValue) {
const valueExists = checkboxMeta.values?.some((option) => option.value === value);
if (!valueExists) {
@ -203,7 +213,7 @@ const getUpdatedFieldMeta = (field: Field, prefillField?: TFieldMetaPrefillField
const newValues = checkboxMeta.values?.map((option) => ({
...option,
checked: field.value.includes(option.value),
checked: fieldValue.includes(option.value),
}));
const meta: TCheckboxFieldMeta = {

View File

@ -130,28 +130,30 @@ export const ZFieldMetaPrefillFieldsSchema = z
z.discriminatedUnion('type', [
z.object({
type: z.literal('text'),
label: z.string(),
value: z.string(),
label: z.string().optional(),
placeholder: z.string().optional(),
value: z.string().optional(),
}),
z.object({
type: z.literal('number'),
label: z.string(),
value: z.string(),
label: z.string().optional(),
placeholder: z.string().optional(),
value: z.string().optional(),
}),
z.object({
type: z.literal('radio'),
label: z.string(),
value: z.string(),
label: z.string().optional(),
value: z.string().optional(),
}),
z.object({
type: z.literal('checkbox'),
label: z.string(),
value: z.array(z.string()),
label: z.string().optional(),
value: z.array(z.string()).optional(),
}),
z.object({
type: z.literal('dropdown'),
label: z.string(),
value: z.string(),
label: z.string().optional(),
value: z.string().optional(),
}),
]),
);