import { toDataExtensionFieldType, type FieldDraft, type FieldManagement, type FieldPermissions, type NewFieldConfig, type NewFieldType, } from '@wix/bex-core'; // Resolve the four FieldDraft permission booleans from a FieldPermissions bag, // defaulting to read-for-apps / hidden-from-visitors when a slot is unset. const resolvePermissions = (permissions?: FieldPermissions) => ({ readApps: permissions?.installedApps?.defaultRead ?? true, writeApps: permissions?.installedApps?.defaultWrite ?? true, readUsers: permissions?.siteVisitors?.defaultRead ?? false, writeUsers: permissions?.siteVisitors?.defaultWrite ?? false, }); type NewFieldMapping = { fieldType: NewFieldType; displayName?: string; config?: NewFieldConfig; }; /** * Turns a column's `new` mapping into the DataExtension `FieldDraft` used to both * create the field and pre-fill the editor. The precise type comes from a prior * edit (`config.deType`) or the default for the detected type; permissions come * from a prior edit or the source defaults. Key derives from the resolved column * (creation) or the name (editor). */ export const mappingToFieldDraft = ( mapping: NewFieldMapping, key: string, name: string, fieldManagement: FieldManagement, ): FieldDraft => ({ type: mapping.config?.deType ?? toDataExtensionFieldType(mapping.fieldType), key, name, containsPii: mapping.config?.isPii ?? false, ...resolvePermissions( mapping.config?.permissions ?? fieldManagement.permissions, ), });