| 1 |
import type { Field, NameSubField, AddressSubField } from '@/types/field' |
| 2 |
import { parentChildFieldConfigs } from './parentChildFieldTemplates' |
| 3 |
|
| 4 |
export function buildNewField( |
| 5 |
fieldData: Partial<Field> & { type: string }, |
| 6 |
index: number, |
| 7 |
getLabel: (key: string) => string, |
| 8 |
): Field { |
| 9 |
const config = parentChildFieldConfigs[fieldData.type] |
| 10 |
if (config) { |
| 11 |
// Parent-child field type |
| 12 |
const subFields = config.buildSubFields(getLabel) |
| 13 |
const parentChildExtras = |
| 14 |
config.type === 'name' |
| 15 |
? { nameFieldTypes: (subFields as NameSubField[]).map((subfield) => subfield.type) } |
| 16 |
: config.type === 'address' |
| 17 |
? { |
| 18 |
addressFieldTypes: (subFields as AddressSubField[]).map((subfield) => subfield.type), |
| 19 |
} |
| 20 |
: {} |
| 21 |
|
| 22 |
return { |
| 23 |
...(fieldData as Field), |
| 24 |
id: fieldData.id ?? 0, |
| 25 |
formId: fieldData.formId ?? 0, |
| 26 |
fieldIndex: index, |
| 27 |
type: config.type, |
| 28 |
label: fieldData.label ?? getLabel(config.type), |
| 29 |
defaultValue: fieldData.defaultValue || '', |
| 30 |
value: fieldData.value || '', |
| 31 |
required: fieldData.required || false, |
| 32 |
readOnly: fieldData.readOnly || false, |
| 33 |
[config.subFieldKey]: subFields, |
| 34 |
...parentChildExtras, |
| 35 |
limitMaxLength: fieldData.limitMaxLength ?? false, |
| 36 |
limitRange: fieldData.limitRange ?? false, |
| 37 |
maxLength: fieldData.maxLength ?? 255, |
| 38 |
labelPosition: fieldData.labelPosition || 'default', |
| 39 |
noDuplicates: fieldData.noDuplicates || false, |
| 40 |
inputPrefix: fieldData.inputPrefix || '', |
| 41 |
inputSuffix: fieldData.inputSuffix || '', |
| 42 |
limitDateRange: fieldData.limitDateRange ?? false, |
| 43 |
limitTimeRange: fieldData.limitTimeRange ?? false, |
| 44 |
} as Field |
| 45 |
} |
| 46 |
// Regular field type |
| 47 |
return { |
| 48 |
...(fieldData as Field), |
| 49 |
id: fieldData.id ?? 0, |
| 50 |
formId: fieldData.formId ?? 0, |
| 51 |
fieldIndex: index, |
| 52 |
defaultValue: fieldData.defaultValue || '', |
| 53 |
value: fieldData.value || '', |
| 54 |
required: fieldData.required || false, |
| 55 |
readOnly: fieldData.readOnly || false, |
| 56 |
limitMaxLength: fieldData.limitMaxLength ?? false, |
| 57 |
limitRange: fieldData.limitRange ?? false, |
| 58 |
maxLength: fieldData.maxLength ?? 255, |
| 59 |
labelPosition: fieldData.labelPosition || 'default', |
| 60 |
noDuplicates: fieldData.noDuplicates || false, |
| 61 |
confirmFieldEnabled: fieldData.confirmFieldEnabled || false, |
| 62 |
confirmFieldLabel: fieldData.confirmFieldLabel || '', |
| 63 |
confirmFieldPlaceholder: fieldData.confirmFieldPlaceholder || '', |
| 64 |
confirmFieldHideLabel: fieldData.confirmFieldHideLabel || false, |
| 65 |
inputPrefix: fieldData.inputPrefix || '', |
| 66 |
inputSuffix: fieldData.inputSuffix || '', |
| 67 |
limitDateRange: fieldData.limitDateRange ?? false, |
| 68 |
limitTimeRange: fieldData.limitTimeRange ?? false, |
| 69 |
} |
| 70 |
} |
| 71 |
|