azure-devops-ui
Version:
React components for building web UI in Azure DevOps
125 lines (124 loc) • 6.54 kB
TypeScript
import { IObservable, IObservableArray, IObservableArrayEventArgs, ObservableArrayAction } from '../Core/Observable';
import { IListBoxGroup, IListBoxItem } from '../ListBox';
import { IItemProvider } from '../Utilities/Provider';
export declare class GroupedItemProvider<T = {}> implements IItemProvider<IListBoxItem<T>>, IObservable<IObservableArrayEventArgs<IListBoxItem<T>>, ObservableArrayAction>, IObservableArray<IListBoxItem<T>> {
private manageHeaders;
private listItems;
private internalGroups;
private groupedItems;
private omitDividers;
/**
* Create a Provider that arranges IListBoxItems by their groupId.
* @param initialItems The initial set of items. Items will be arranged in group order,
* and dividers and headers will be moved to the top of each group.
* @param initialGroups The initial set of groups. Items will be arranged in the order specified by this set.
* @param manageHeaders Set to true to have the provider create headers and dividers for groups that don't already have them.
* @param omitDividers Set to true to not add dividers between groups.
* Headers created this way will have text matching the group's name.
*/
constructor(initialItems: IListBoxItem<T>[], initialGroups: IListBoxGroup<T>[], manageHeaders?: boolean, omitDividers?: boolean);
/**
* Get the internal array of groups.
*/
get groups(): IListBoxGroup<T>[];
/**
* Get the length of the listItems array.
*/
get length(): number;
/**
* Get the interal array of listItems.
*/
get value(): IListBoxItem<T>[];
/**
* Subscribe to changes in the underlying set of items.
* @param observer the delegate to be called when there are updates.
* @param action the action on the set to observe.
*/
subscribe(observer: (value: IObservableArrayEventArgs<IListBoxItem<T>>, action?: ObservableArrayAction) => void, action?: ObservableArrayAction): (value: IObservableArrayEventArgs<IListBoxItem<T>>, action?: ObservableArrayAction) => void;
/**
* Unsubscribe from changes in the underlying set of items.
* @param observer the delegate that was used to subscribe.
* @param action the action that was used to subsribe.
*/
unsubscribe(observer: (value: IObservableArrayEventArgs<IListBoxItem<T>>, action?: ObservableArrayAction) => void, action?: ObservableArrayAction): void;
/**
* Add items to the end of whichever group they belong to.
* @param items a list of items to add.
*/
push(...items: IListBoxItem<T>[]): number;
/**
* Add groups to the end of the group list. If there are items with these group id's already in the
* item set they will arrange into these new groups.
* @param groups
*/
pushGroups(...groups: IListBoxGroup<T>[]): number;
/**
* Remove the last item in the item set and return it.
*/
pop(): IListBoxItem<T> | undefined;
/**
* Remove all items that match the given filter.
* @param filter the filter function to run on all items. If this returns true, the item will be deleted.
*/
removeAll(filter?: (item: IListBoxItem<T>) => boolean): IListBoxItem<T>[];
/**
* Remove and add items from a provided index. Added items will be arranged by their groupId.
* @param start the index to start insertion and deletion.
* @param deleteCount the number of items to delete.
* @param itemsToAdd the items to insert at the start index.
*/
splice(start: number, deleteCount: number, ...itemsToAdd: IListBoxItem<T>[]): IListBoxItem<T>[];
/**
* Changes a subsection of the items to a different set of items. Use over splice if you want to optimize by listening to the change event instead.
* @param start the index to start the change.
* @param itemsToAdd the items to replace the current set with.
*/
change(start: number, ...items: IListBoxItem<T>[]): number;
/**
* Remove and add groups from a provided index. All items in deleted groups will be removed from the item set.
* @param start the index to start insertion and deletion.
* @param deleteCount the number of groups to delete.
* @param groupsToAdd the groups to insert at the start index.
*/
spliceGroups(start: number, deleteCount: number, ...groupsToAdd: IListBoxGroup<T>[]): IListBoxGroup<T>[];
/**
* Set a group's loading status to true or false. A loading item will be added or removed from the group.
* @param groupId The group to set the loading status of.
* @param loading Set to true to add a loading row. Set to false to remove a loading row.
* @param loadingItem Provide this to use a custom loading item, otherwise a standard spinner item will be used.
*/
setGroupLoading(groupId: string, loading: boolean, loadingItem?: IListBoxItem<T>): void;
/**
* Add headers and didvers to groups that don't already have them.
* @param start the groupMap index to add header/dividers to.
* This is 1 more than the internalGroup index since there is an unassigned group at index 0.
* @param count the number of groups that are new and may need headers.
*/
private addHeaders;
/**
* Add groups to the internal list of groups. Items from the unsassigned group will be moved to the new groups
* If they have a matching groupId.
* @param index the index to add the groups at.
* @param groups the groups to add.
*/
private addGroups;
/**
* Add items to the item set, arranging them according to their groupId.
* @param items the items to add.
* @param addToListItems set to false to only add to groupedItems and not to full listItems set.
* @param index the index to try to add the item to. If the index is out of the bounds of the item's group,
* it will be added at the closest index.
*/
private addItems;
/**
* Diff this.groupedItems and this.listItems and splice in the extra items in as few splices as possible.
*/
private addToListItems;
private addItem;
/**
* Removed items from the internal groupedItems lists and optionally from the actual list of items.
* @param items the items to remove.
* @param removeFromListItems Whether or not to remove the items from the list of items.
*/
private removeItems;
}