import { CatDynamicComponent } from '@catrx/ui/dynamic-component'; import { CatIconButtonColor } from '@catrx/ui/icon-button'; import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject'; import { Observable } from 'rxjs/internal/Observable'; export interface DatatableConfig { filter$?: BehaviorSubject; hasSelection?: boolean; hasAction?: boolean; columns: string[]; data: DatatableData[]; actionButtons: DatatableActionButtonConfig[]; service: (filter: any) => Observable>; typeDataList: DatatableTypeDataList; limitItemPerPage: 10 | 30 | 50 | 100; defaultColumSortIndex?: number; defaultColumOrder?: ColumOrderType; reloadList: BehaviorSubject<{ reload: boolean; preservePagination: boolean; }>; getDatasource?: (datasource: DataType[]) => void; getCurrentFilter?: (currentFilter: any) => void; getSelection?: (selection: CatDatatableSelection) => void; disableSelectionItem?: (item: DataType) => boolean; customEmptyComponent?: CatDynamicComponent; customLoaderComponent?: CatDynamicComponent; hideMenuAndPaginator?: boolean; hidePaginator?: boolean; } export interface DatatableFilterResponse { [key: string]: any; page: number; orderBy: string; direction: ColumOrderType; } export interface DatatableSelectedItem { index: number; item: T; } export interface CatDatatableSelection { selected: DatatableSelectedItem[]; lastSelected: DatatableSelectedItem | null; data: T[]; emit: boolean; checkAll: boolean; } export interface DatatableActionButtonConfig { iconColor?: CatIconButtonColor; iconName: string; fnAction?: (itemLine: DataType) => void; havePermission?: boolean; tooltip?: string; showBtn?: (itemLine: DataType) => boolean; } export interface DatatableData { columnIndex: number; showColumn?: () => boolean; sortColumn?: string; text?: (itemLine: DataType) => string; component?: (itemLine: DataType) => CatDynamicComponent; customWidthColumn?: string; } export interface CatDatatableDataHttpResponse { count: number; items: ListType[]; } export type ColumOrderType = 'asc' | 'desc'; export type DatatableTypeDataList = 'all' | 'onDemand' | 'onScroll';