Spaces:
Runtime error
Runtime error
File size: 1,449 Bytes
46252cd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import type { PluginConfigField } from '../services/api';
/** A blank value for a field, used to seed a form and to add a new array row. */
export function emptyForField(field: PluginConfigField): unknown {
if (field.default !== undefined) return field.default;
// A <select> always shows its first option, so seed enum state to it — otherwise the form shows a
// value the user never picked and would save '' instead.
if (field.enum && field.enum.length > 0) return field.enum[0];
switch (field.type) {
case 'boolean':
return false;
case 'array':
return [];
case 'object': {
const obj: Record<string, unknown> = {};
if (field.properties) for (const [k, sub] of Object.entries(field.properties)) obj[k] = emptyForField(sub);
return obj;
}
case 'number':
// Seed (and leave) a blank number as undefined, never '' — persisting an empty string for a
// type:'number' field hands the plugin a string where it expects a number.
return undefined;
default: // string | textarea
return '';
}
}
/** Coerce a text-input value to the field's type. A cleared number becomes undefined (so the key is
* omitted) rather than '' — the inverse of {@link emptyForField} for number fields. */
export function coerceFieldInput(field: PluginConfigField, raw: string): unknown {
if (field.type === 'number') return raw === '' ? undefined : Number(raw);
return raw;
}
|