/// import type { ColumnViewProps, TableMode, TextAndLang } from '../../types/index.js'; export type TableViewOption = { id: string; label: string; }; export type ColumnViewsTemplatesConfig = { templates: Template[]; onCreateCustomView: (data: { name: string; selectedColumns: ColumnViewProps[]; layout: LayoutSection; sourceTemplateId?: string; }) => Promise<{ id: string; name: string; } | void>; onEditCustomView: (viewId: string, data: { name: string; selectedColumns: ColumnViewProps[]; layout: LayoutSection; }) => Promise; onDeleteCustomView: (viewId: string) => Promise; isLoading?: boolean; mainDefaultTemplate?: Template; }; export interface ColumnViewsPickerProps { onViewChange?: (selectedView?: ViewMenuItem) => void; setIsViewVisible: (visible: boolean) => void; setTableViews?: (columns: ColumnViewProps[]) => void; tableViews?: ColumnViewProps[]; resetTableViews?: (option: TableViewOption) => void; onTableViewOptionClick?: (option: TableViewOption) => void; } export interface CustomViewsProps { open: boolean; onSelect: (e: React.MouseEvent) => void; setTableViews?: (columns: ColumnViewProps[]) => void; tableViews?: ColumnViewProps[]; anchorEl: Element | null; onClose?: () => void; } export interface ViewMenuItem { selected?: boolean; label: string; id: string; columns?: string[]; submenu?: ColumnViewProps[]; isCustom?: boolean; default?: boolean; /** Marks a preset/system view. When present the view renders as a nested column-picker dropdown. Absent for user-created custom views. */ role?: string; } export interface FieldItem { code: string; name?: TextAndLang[]; order?: number | null; default?: boolean; } export interface ColumnItem { code: string; name: TextAndLang[]; order?: number; default?: boolean; fields?: FieldItem[]; } export interface LayoutSection { code: string; columns: ColumnItem[]; } export interface TemplateAPIMetadata { segment: string; app: string; service: string; user: { id: string; }; master_template_id?: string; } export interface CreateTemplatePayload extends TemplateAPIMetadata { name: string; layout: LayoutSection[]; } export interface UpdateTemplatePayload extends TemplateAPIMetadata { name: string; layout: LayoutSection[]; } export interface Template { segment: string; app: string; service: string; name: string; layout: LayoutSection[]; id: string; masterTemplateId: string; user: { id: string; }; created: number; updated: number; default: boolean; /** Preset/system role from the API. When present (or when `default` is true) the view renders as a nested column-picker dropdown. */ role?: string; selected?: boolean; modified?: Partial>; } export interface TemplatesList { object: string; live_mode: boolean; api_version: string; feature_version: string; count: number; has_more: boolean; templates: Template[]; } export interface CreateOrEditViewPayload { name: string; selectedColumns: ColumnViewProps[]; layout: LayoutSection; } export interface ColumnChange { columnName: string; selected: boolean; subItemName?: string; } export interface CreateCustomViewDialogProps { open: boolean; onClose: () => void; onCreate?: (data: { name: string; selectedColumns: ColumnViewProps[]; layout: LayoutSection; }) => Promise; availableColumns?: ColumnViewProps[]; defaultColumns?: ColumnViewProps[]; editingView?: { id: string; label: string; submenu?: ColumnViewProps[]; } | null; onDelete?: (viewId: string) => Promise; tableViews?: ColumnViewProps[]; mode?: TableMode; stackOrder?: number; } export interface ColumnCheckState { checked: boolean; indeterminate: boolean; } export interface ColumnViewsMenuProps extends ColumnViewsTemplatesConfig { onViewChange?: (selectedView?: ViewMenuItem) => void; tableMode?: TableMode; lang?: string; } export interface ViewsDropdownProps { open: boolean; selectedViewInfo: TableViewOption; setSelectedViewInfo: (selected: TableViewOption, viewMenuItem?: ViewMenuItem) => void; anchorEl: Element | null; onClose?: () => void; onCreateCustomView?: (useCurrentState?: boolean, initialColumns?: ColumnViewProps[], availableColumns?: ColumnViewProps[], sourceTemplateId?: string) => void; customViews?: ViewMenuItem[]; onEditCustomView?: (view: ViewMenuItem) => void; defaultColumns?: ColumnViewProps[]; defaultTemplate?: ViewMenuItem; defaultTemplates?: ViewMenuItem[]; customTemplateCount?: number; isLoading?: boolean; } export interface ColumnListProps { selectedColumns: ColumnViewProps[]; columnNames: string[]; allSelected: boolean; someSelected: boolean; hoveredColumn: string | null; anchorEl: HTMLElement | null; onReorder: (reorderedNames: string[]) => void; onColumnToggle: (columnName: string) => void; onSubItemToggle: (columnName: string, subItemName: string) => void; onSelectAll: () => void; onResetToDefault: () => void; onSubmenuEnter: (columnName: string, element: HTMLElement) => void; onSubmenuLeave: () => void; onCancelClose: () => void; hasChanges?: boolean; } export interface ViewsSubmenuProps { columns: ColumnViewProps[]; allCurrentSelected: boolean; someCurrentSelected: boolean; onSelectAll: () => void; onReset: () => void; onColumnToggle: (columnName: string) => void; onNestedItemToggle: (columnName: string, subItemName: string) => void; anchorEl: HTMLElement | null; isModified?: boolean; } export interface UseCreateViewDialogProps { open: boolean; availableColumns: ColumnViewProps[]; defaultColumns: ColumnViewProps[]; editingView?: { id: string; label: string; submenu?: ColumnViewProps[]; } | null; tableViews?: ColumnViewProps[]; } export interface UseViewsManagerProps { tableMode: TableMode; templates: Template[]; lang?: string; mainDefaultTemplate?: Template; } export interface UseDragAutoScrollResult { onDragStart: () => void; onDragEnd: () => void; } export interface ColumnModifier { columnsIds: string[]; selected: boolean; } export interface UseTableViewsProps { templates: Template[]; setTemplates: (updateTemplates: (templates: Template[]) => Template[]) => void; createTemplate: (data: { name: string; layout: LayoutSection[]; }) => Promise