///
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;
updateTemplate: (templateId: string, data: {
name: string;
layout: LayoutSection[];
}) => Promise;
deleteTemplate: (templateId: string) => Promise;
tableMode: TableMode;
onToggleSheetView: () => void;
isTemplatesLoading?: boolean;
lang?: string;
mainDefaultTemplate?: Template;
}
export interface CustomViewsConfigResult {
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;
}