@sixbell-telco/sdk
Version:
A collection of reusable components designed for use in Sixbell Telco Angular projects
59 lines (58 loc) • 1.76 kB
TypeScript
export interface FilterOption {
value: string;
label: string;
}
export interface PaginatedFilterOptions {
results: FilterOption[];
total: number;
hasMore: boolean;
}
export type FilterType = 'text' | 'numberRange' | 'multiSelect' | 'multiSelectCombobox';
export interface FilterMetadataBase {
type: FilterType;
label: string;
}
export interface TextFilterMetadata extends FilterMetadataBase {
type: 'text';
}
export interface NumberRangeFilterMetadata extends FilterMetadataBase {
type: 'numberRange';
min?: number;
max?: number;
}
export interface MultiSelectFilterMetadata extends FilterMetadataBase {
type: 'multiSelect';
options: FilterOption[];
searchable?: boolean;
}
export interface MultiSelectComboboxFilterMetadata extends FilterMetadataBase {
type: 'multiSelectCombobox';
pageSize?: number;
}
export type FilterMetadata = TextFilterMetadata | NumberRangeFilterMetadata | MultiSelectFilterMetadata | MultiSelectComboboxFilterMetadata;
export type AllFilterMetadata = Record<string, FilterMetadata>;
export interface TextFilterState {
value: string | null;
}
export interface NumberRangeFilterState {
min: number | null;
max: number | null;
}
export interface MultiSelectFilterState {
values: string[];
}
export type ColumnFilterState = TextFilterState | NumberRangeFilterState | MultiSelectFilterState;
export type FiltersState = Record<string, ColumnFilterState>;
export interface DataTablePagination {
id: string;
currentPage: number;
itemsPerPage: number;
search: string;
sortColumn: string | null;
sortDirection: 'asc' | 'desc' | null;
filters: FiltersState;
}
export interface BackendPagination<T> {
total: number;
results: T[];
}