UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

72 lines (71 loc) 5.4 kB
import { Sort, SortDirection } from '@alauda/ui'; import { LiteralUnion, KubernetesResource } from '../core/public-api'; import { Translation, TranslationValue } from '../translate/types'; import { TableUtilService } from './util.service'; export type TableColumnSortDirection = Exclude<SortDirection, ''>; export type TableColumnSortHandler<Item extends object, Context = TableUtilService<Item>, Value = string | number> = (this: Context, a: Value, b: Value) => number; export interface TableColumnSort<Item extends object, Context = TableUtilService<Item>, Value = string | number> { direction?: TableColumnSortDirection; active?: true; handler?: TableColumnSortHandler<Item, Context, Value>; } export type TableColumnDefPath<Item extends object, Context = TableUtilService<Item>> = string | number | ReadonlyArray<string | number> | ((this: Context, item: Item) => string | number); export type TableColumnTranslateHandler<Item extends object, Context = TableUtilService<Item>, Value = string | number> = (value: Value, context: Context) => TranslationValue; export interface TableColumnDef<Item extends object, Context = TableUtilService<Item>, Extra extends object = object, Name extends string = string, Value = string | number> { label?: string; name: Name; path?: TableColumnDefPath<Item, Context>; direction?: 'column' | 'row'; translate?: string | Translation | TableColumnTranslateHandler<Item, Context, Value> | true; sort?: TableColumnSortDirection | TableColumnSortHandler<Item, Context> | TableColumnSort<Item, Context> | true; filter?(this: Context, value: Value, filterValue: Value, item: Item, name: string, params: Record<string, unknown>): boolean; ellipsis?: boolean; class?: string | Record<string, boolean>; style?: string | Record<string, string | number>; sticky?: boolean; stickyEnd?: boolean; extra?: Extra; } export interface TableColumnNameExtra { link: boolean; } export type TableColumnActionDisabledHandler<Item extends object, Context = TableUtilService<Item>> = (item: Item, util: Context) => boolean; export type TableColumnActionTooltipHandler<Item extends object, Context = TableUtilService<Item>> = (item: Item, util: Context) => string; export interface TableColumnActionConfig<Item extends object, Context = TableUtilService<Item>> { handler: TableColumnActionDisabledHandler<Item, Context>; tooltip?: string | TableColumnActionTooltipHandler<Item, Context>; } export interface TableColumnActionExtraItem<Item extends object, Context = TableUtilService<Item>> { disabled?: TableColumnActionDisabledHandler<Item, Context> | TableColumnActionConfig<Item, Context>; } export interface NormalizedTableColumnActionExtraItem<Item extends object, Context = TableUtilService<Item>> { disabled: TableColumnActionConfig<Item, Context>; } export interface TableColumnActionExtra<Item extends object, Context = TableUtilService<Item>> { update?: (TableColumnActionExtraItem<Item, Context> & { link?: boolean; }) | false; delete?: TableColumnActionExtraItem<Item, Context> | false; } export interface NormalizedTableColumnActionExtra<Item extends object, Context = TableUtilService<Item>> { update?: (NormalizedTableColumnActionExtraItem<Item, Context> & { link?: boolean; }) | false; delete?: NormalizedTableColumnActionExtraItem<Item, Context> | false; } export interface DefaultExtraMapper<Item extends object, Context = TableUtilService<Item>> { name: TableColumnNameExtra; action: TableColumnActionExtra<Item, Context>; } export interface NormalizedDefaultExtraMapper<Item extends object, Context = TableUtilService<Item>> { name: TableColumnNameExtra; action: NormalizedTableColumnActionExtra<Item, Context>; } export type NormalizedTableColumnDef<Item extends object, Context = TableUtilService<Item>, Extra extends object = object, Name extends string = string> = TableColumnDef<Item, Context, Extra, Name> & { sort?: TableColumnSort<Item>; translate?: TableColumnTranslateHandler<Item, Context>; }; export type TableColumn<Item extends object = KubernetesResource, Context = TableUtilService<Item>, Extra extends object = object, Name extends string = string> = string | TableColumnDef<Item, Context, Extra, Name>; export type TableColumns<Item extends object = KubernetesResource, Context = TableUtilService<Item>, ExtendExtraMapper extends object = object, ExtraMapper extends object = DefaultExtraMapper<Item, Context> & ExtendExtraMapper, Name extends keyof ExtraMapper & string = keyof ExtraMapper & string> = ReadonlyArray<LiteralUnion<Name, string> | TableColumnDef<Item, Context, ExtraMapper[Name] & object, LiteralUnion<Name, string>>>; export type TableColumnDefs<Item extends object = KubernetesResource, Context = TableUtilService<Item>, ExtendExtraMapper extends object = object, ExtraMapper extends object = NormalizedDefaultExtraMapper<Item, Context> & ExtendExtraMapper, Name extends keyof ExtraMapper & string = keyof ExtraMapper & string> = Array<NormalizedTableColumnDef<Item, Context, ExtraMapper[Name] & object, LiteralUnion<Name, string>>>; export type TableFilterFn<Item extends object, Context = TableUtilService<Item>> = (this: Context, items: Item[], columnDefs: Array<TableColumnDef<Item, Context>>, activeSort?: Sort, filterParams?: Record<string, unknown>, context?: Context) => Item[];