import { DebouncedFunc } from 'lodash'; import { Ref } from 'vue'; import { SerializedTableFilter } from './filters/FilterInterfaces'; import { CalendarTableFilter, DefaultSelectTableFilter, EnumSelectTableFilter, MultipleDefaultSelectTableFilter, MultipleEnumSelectTableFilter, MultipleRelationSelectTableFilter, NumberTableFilter, PeriodCalendarTableFilter, RangeNumberTableFilter, RelationSelectTableFilter, TableFilter, TextTableFilter } from './filters/Filters'; import { CalendarHeaderInterface, DefaultSelectHeaderInterface, EmptyHeaderInterface, EnumSelectHeaderInterface, HeaderInterface, MultipleDefaultSelectHeaderInterface, MultipleEnumSelectHeaderInterface, MultipleParamsRelationSelectHeaderInterface, MultipleRelationSelectHeaderInterface, NumberSearchHeaderInterface, PeriodCalendarHeaderInterface, RangeNumberHeaderInterface, RelationSelectHeaderInterface, TextHeaderInterface, TextSearchHeaderInterface } from './headers/HeadersTableInterfaces'; export interface ColumnInterface { name: string; sort?: string; overflow?: 'hidden' | 'visible'; visibleByDefault?: boolean; field: (item: any, column: any, isExpandedRow?: boolean) => any; condition?: () => boolean; width?: number; hideSearch?: boolean; headerTooltipText?: string; isStatic?: boolean; /** * Остается в видимой области при горизонтальном скроле */ horizontalEyesight?: boolean; header: HeaderInterface | EmptyHeaderInterface | NumberSearchHeaderInterface | RangeNumberHeaderInterface | TextSearchHeaderInterface | TextHeaderInterface | PeriodCalendarHeaderInterface | CalendarHeaderInterface | EnumSelectHeaderInterface | MultipleEnumSelectHeaderInterface | DefaultSelectHeaderInterface | MultipleDefaultSelectHeaderInterface | RelationSelectHeaderInterface | MultipleRelationSelectHeaderInterface | MultipleParamsRelationSelectHeaderInterface; } export interface ComputedColumnInterface extends ColumnInterface { hash: string; isResizing: boolean; overflow: 'hidden' | 'visible'; wasResized: boolean; isVisible: boolean; right: boolean | undefined; order: number; width: number; defaultWidth: number; defaultOrder: number; hideSearch: boolean | undefined; headerTooltipText: string | undefined; filter: TableFilter | TextTableFilter | NumberTableFilter | RangeNumberTableFilter | PeriodCalendarTableFilter | CalendarTableFilter | EnumSelectTableFilter | MultipleEnumSelectTableFilter | DefaultSelectTableFilter | MultipleDefaultSelectTableFilter | RelationSelectTableFilter | MultipleRelationSelectTableFilter; } export interface CachedTableColumn { name: string; filter: SerializedTableFilter; isVisible: boolean; order: number; wasResized: boolean; width: number; horizontalEyesight: boolean | undefined; } export interface CachedTableData { columns: CachedTableColumn[]; } export interface AdditionalTableRow { id?: number | string; render?: (item: any) => JSX.Element; } export type DraggedColumn = { draftOrder: number; source: ComputedColumnInterface; }; export type ComputedColumn = DraggedColumn & { draftVisibility: ComputedColumnInterface['isVisible']; draftHorizontalEyesight: ColumnInterface['horizontalEyesight']; }; export interface TableSettingsInterface { columns: Array; toggleColumnVisibility: (column: ComputedColumn, value: boolean) => void; update: () => void; } export interface DefaultTableContextActionInterface { callback: (item: any) => void; name: string; } export interface DefaultTableContextMenuInterface { /** * Открывает контекстное меню * @param actions список действий * @param callback колбэк при клике на пункт меню * @returns Контейнер контекстного меню (полезно для useMotionTracker) */ open: (actions: DefaultTableContextActionInterface[], callback: (action: DefaultTableContextActionInterface) => void) => Promise; /** * Закрывает контекстное меню */ close: () => void; } export interface DefaultTableInterface { count: number; items: any[]; reload: () => Promise; reloadAndUpdateCount: () => Promise; refresh: DebouncedFunc<() => Promise>; clearChecked: () => void; onAddingRow: ({ id, render }: AdditionalTableRow) => void; params: { [key: string]: string | string[]; }; sorting: { [key: string]: string; }; isLoadingNext: Ref; isLoadingPrev: Ref; settings: TableSettingsInterface; checkedItems: any[]; columns: ColumnInterface[]; computedColumns: ComputedColumnInterface[]; isNodataStubVisible: boolean; additionalRows: Ref>; } export interface TreeTableInterface { count: number; items: any[]; addElement: (item: any, parentId?: string, onAdd?: (items: Ref, parentChilds: any[]) => void) => void; reload: () => Promise; reloadAndUpdateCount: () => Promise; clearChecked: () => void; params: { [key: string]: string | string[]; }; sorting: { [key: string]: string; }; settings: TableSettingsInterface; checkedItems: any[]; columns: ColumnInterface[]; computedColumns: ComputedColumnInterface[]; } export interface ShallowTableInterface { clearChecked: () => void; onAddingRow: (row: AdditionalTableRow) => void; checkAll: (items: any[], onCheckItem?: (items: any[]) => void, canCheckExactItem?: (item: any) => boolean) => void; params: { [key: string]: string | string[]; }; settings: TableSettingsInterface; columns: ColumnInterface[]; computedColumns: ComputedColumnInterface[]; additionalRows: AdditionalTableRow[]; checkedItems: any[]; }