/** @format */ import { ComponentType } from '@angular/cdk/portal'; import { Observable } from 'rxjs'; import { PipeFunction } from '../pipes/suffix-function.pipe'; import { NgxMatDatasourceRequestOrderDir } from './datasource-service.type'; type Color = string | ((row: Record) => string | undefined); type BaseColumn = { type?: string; columnDef: string; header: string; property: string; projection?: any; additionalProperties?: string[]; minWidth?: number; sticky?: boolean; hidden?: boolean; disabled?: boolean; searchable?: boolean; searchProperty?: string; searchValue?: any; sortable?: boolean; sortProperty?: string; order?: { index: number; dir: NgxMatDatasourceRequestOrderDir; }; tooltip?: string; align?: 'start' | 'center' | 'end'; export?: (exportRow: any, value: any, row: any) => void; searchUpdated?: (value: any) => void; }; export type DatatableComponentColumn = BaseColumn & { cellComponent: ComponentType; }; export type DatatableContentColumn = BaseColumn & { cellContentId: string; }; export type DatatablePrefixColumn = { prefix?: string; } | { prefixContentId?: string; } | { prefixFunction?: PipeFunction; } | { prefixComponent?: ComponentType; }; export type DatatableSuffixColumn = { suffix?: string; } | { suffixContentId?: string; } | { suffixFunction?: PipeFunction; } | { suffixComponent?: ComponentType; }; export type DatatableValueColumn = BaseColumn & { color?: Color; backgroundColor?: Color; transform?: (value: any, row: Record) => any; } & DatatablePrefixColumn & DatatableSuffixColumn; type Column = DatatableComponentColumn | DatatableContentColumn | DatatableValueColumn; type SearchableColumn = { searchable: true; searchProperty?: string; }; export type DatatableSearchListOption = { value: any; name: string; group?: string; color?: string; iconSrc?: 'mat-icon' | 'svg' | string; icon?: string; iconColor?: string; }; export type DatatableTextColumn = Column & { type: 'text'; }; export type DatatableSearchTextColumn = DatatableTextColumn & SearchableColumn & { regex?: boolean; }; export type DatatableNumberColumn = Column & { type: 'number'; format?: string; locale?: string; }; export type DatatableSearchNumberColumn = DatatableNumberColumn & SearchableColumn & {}; export type DatatableSelectColumn = Column & { type: 'select'; isArrayValue?: boolean; iconOnly?: boolean; options: Observable | DatatableSearchListOption[]; }; export type DatatableSearchSelectColumn = DatatableSelectColumn & SearchableColumn & { multiple?: boolean; placeholder?: string; hasGroup?: boolean; }; export type DatatableAutocompleteColumn = Column & { type: 'autocomplete'; }; export type DatatableSearchAutocompleteColumn = DatatableAutocompleteColumn & SearchableColumn & { placeholder?: string; limit?: number; loadOnFocus?: boolean; hasGroup?: boolean; options: (limit: number, skip: number, search: string, filter: any) => Promise; searchValueOptions?: DatatableSearchListOption[]; }; export type DatatableCheckboxColumn = Column & { type: 'checkbox'; }; export type DatatableSearchCheckboxColumn = DatatableCheckboxColumn & SearchableColumn; export type DatatableDateColumn = Column & { type: 'date'; format?: string; timezone?: string; locale?: string; withDuration?: boolean; durationRefreshTime?: number; }; export type DatatableSearchDateColumn = DatatableDateColumn & SearchableColumn & { placeholder?: string; }; export type DatatableDurationColumn = Column & { type: 'duration'; locale?: string; largest?: number; }; export type DatatableSearchDurationColumn = DatatableDurationColumn & SearchableColumn & { placeholder?: string; }; export type DatatableDefaultColumn = Column & { searchable?: false; }; export type DatatableColumn = DatatableDefaultColumn | DatatableTextColumn | DatatableSearchTextColumn | DatatableNumberColumn | DatatableSearchNumberColumn | DatatableSelectColumn | DatatableSearchSelectColumn | DatatableAutocompleteColumn | DatatableSearchAutocompleteColumn | DatatableCheckboxColumn | DatatableSearchCheckboxColumn | DatatableDateColumn | DatatableSearchDateColumn | DatatableDurationColumn | DatatableSearchDurationColumn; export {};