import type { DataExtensionState, CustomFieldOrigin } from '@wix/bex-core'; import type { CustomFieldsPanelState, FieldActionsMenuBuilder, } from '../../state/CustomFields/CustomFieldsPanelState'; import { buildFieldActionsMenu, type FieldActionsBIContext, type FieldActionHandlers, type FieldActionHandlersConfig, type FieldActionKey, } from '../FieldActions'; // DataExtension field menu: edit + archive (one group, no divider). const DE_MENU_GROUPS: FieldActionKey[][] = [['editField', 'archive']]; /** * DataExtension's per-field management (edit + archive) as neutral callbacks. A * non-editable field returns null (no menu); an editable field with no write * permission returns a handler-less config with a `disabledTooltip` so the menu * shows a disabled trigger. The shared builder sees only the neutral config. */ export const dataExtensionFieldActionHandlers = (dataExtension: DataExtensionState, panel: CustomFieldsPanelState) => ({ fieldId, origin, }: { fieldId: string; origin: CustomFieldOrigin; location: string; }): FieldActionHandlersConfig | null => { const cf = dataExtension.availableCustomFields.find( (f) => f.id === fieldId, ); if (!cf || !cf.editable || dataExtension.disableUserDefinedWriting) { return null; } if (!dataExtension.hasWritePermissions) { return { handlers: {}, disabledTooltip: dataExtension.container.translate( 'cairo.customFields.writePermission.tooltip', ), }; } const handlers: FieldActionHandlers = { editField: () => panel.openCustomFieldModal({ fieldId, origin }), archive: () => panel.archiveFieldModal?.modal.open({ id: fieldId, origin, fieldName: panel.fieldManagement?.getFieldDraft(fieldId)?.name ?? '', archiveEnabled: dataExtension.enableArchive, }), }; return { handlers }; }; export const createDataExtensionFieldActionsMenu = (dataExtension: DataExtensionState) => (panel: CustomFieldsPanelState): FieldActionsMenuBuilder => { const handlers = dataExtensionFieldActionHandlers(dataExtension, panel); return (args) => { const t = panel.container.translate; const bi: FieldActionsBIContext = { reportBi: panel.reportBi, location: args.location, listSize: panel.manageableFields.length, }; return buildFieldActionsMenu({ fieldId: args.fieldId, config: handlers(args), groups: DE_MENU_GROUPS, translate: t, tooltipContent: t('cairo.custom-columns.more-actions.tooltip'), bi, }); }; };