@alauda-fe/common
Version:
Alauda frontend team common codes.
72 lines (71 loc) • 5.4 kB
TypeScript
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[];