@nova-ui/bits
Version:
SolarWinds Nova Framework
138 lines (137 loc) • 3.97 kB
TypeScript
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;
}