UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

138 lines (137 loc) 3.97 kB
import { BehaviorSubject, Subject } from "rxjs"; import { IMenuGroup } from "../../lib/menu/public-api"; import { RepeatSelectionMode } from "../../lib/repeat/types"; import { CheckboxStatus, SelectionType } from "../../lib/selector/public-api"; import { SorterDirection } from "../../lib/sorter/public-api"; import { ISelection } from "../public-api"; export interface IFilterItem<T> { [key: string]: T; } export interface IFilterGroup<T> { [key: string]: T; } export interface IMultiFilterMetadata { allCategories: string[]; } export interface IMultiFilter { [key: string]: IFilter<string[], IMultiFilterMetadata>; } export interface IFilteringOutputs { [key: string]: any; } export interface INovaFilteringOutputs extends IFilteringOutputs { repeat?: Repeat; paginator?: Paginator; selector?: Selector; } export interface Repeat { itemsSource: any[]; selectedItems?: any[]; } export interface Selector { selectorState?: ISelectorState; selection?: ISelection; } export interface Paginator { total: number; reset?: boolean; } export interface IFilterPub<F extends IFilters = IFilters> { onDestroy$?: Subject<void>; detectFilterChanges?: boolean; resetFilter?: () => void; getFilters: () => F; } export interface IFilters { [key: string]: any; } export interface INovaFilters extends IFilters { search?: IFilter<string>; paginator?: IFilter<IRange<number>>; sorter?: IFilter<ISorterFilter>; timerange?: IFilter<IRange<number>>; selection?: any; virtualScroll?: IFilter<IRange<number>>; [key: string]: IFilter<any> | undefined; } export interface IFilteringParticipant { componentInstance: IFilterPub; } export interface ISorterFilter { sortBy: string; direction: SorterDirection; } export interface IRepeatFilter { selection: any[]; itemsSource: any[]; selectionMode: RepeatSelectionMode; selectionHasChanged: boolean; } export interface ISelectorFilter { selectorState: ISelectorState; status: SelectionType; } export interface ISelectorState { checkboxStatus: CheckboxStatus; selectorItems: IMenuGroup[]; } export interface IFilter<T, E = any> extends IFilters { type: string; value: T; metadata?: E; } export interface IRange<T> { start: T; end: T; } export interface IFilteringParticipants { [key: string]: IFilteringParticipant; } export declare const defaultFilters: INovaFilters; export interface IDataSourceError { type: string | number; message?: string; } export interface IDataSourceOutput<T> { result: T; error?: IDataSourceError; } export interface IDataSource<T extends IFilteringOutputs = IFilteringOutputs> { outputsSubject: Subject<any | IDataSourceOutput<T>>; busy?: Subject<boolean>; features?: IDataSourceFeaturesConfiguration; dataFieldsConfig?: IDataFieldsConfig; applyFilters(): Promise<void>; registerComponent(components: Partial<IFilteringParticipants>): void; deregisterComponent?(componentKey: string): void; } export interface IDataSourceFeaturesConfiguration { featuresChanged: Subject<IDataSourceFeatures>; getSupportedFeatures: () => IDataSourceFeatures | undefined; setSupportedFeatures: (features: IDataSourceFeatures) => void; getFeatureConfig: (key: string) => IDataSourceFeature | undefined; } export interface IDataSourceFeatures { search?: IDataSourceFeature; sorting?: IDataSourceFeature; pagination?: IDataSourceFeature; [key: string]: IDataSourceFeature | undefined; } export interface IDataSourceFeature { enabled: boolean; metadata?: { [key: string]: any; }; } export interface IDataSourceDrilldown extends IDataSource { busy?: BehaviorSubject<boolean>; } export interface IDataFieldsConfig { dataFields$: BehaviorSubject<IDataField[]>; } export interface IDataField { id: string; label: string; dataType: string; sortable?: boolean; }