import { type DebouncedFunc } from 'lodash' import { type Ref } from 'vue' import { type SerializedTableFilter } from './filters/FilterInterfaces' import { CalendarTableFilter, DefaultSelectTableFilter, EnumSelectTableFilter, MultipleDefaultSelectTableFilter, MultipleEnumSelectTableFilter, MultipleRelationSelectTableFilter, NumberTableFilter, PeriodCalendarTableFilter, RangeNumberTableFilter, RelationSelectTableFilter, TableFilter, TextTableFilter, } from './filters/Filters' import { type CalendarHeaderInterface, type DefaultSelectHeaderInterface, type EmptyHeaderInterface, type EnumSelectHeaderInterface, type HeaderInterface, type MultipleDefaultSelectHeaderInterface, type MultipleEnumSelectHeaderInterface, type MultipleParamsRelationSelectHeaderInterface, type MultipleRelationSelectHeaderInterface, type NumberSearchHeaderInterface, type PeriodCalendarHeaderInterface, type RangeNumberHeaderInterface, type RelationSelectHeaderInterface, type TextHeaderInterface, type 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[] }