@igo2/utils
Version:
55 lines (54 loc) • 1.57 kB
TypeScript
interface ITreeConfig<T> {
getChildren: (dataNode: T) => T[] | undefined | null;
getId: (dataNode: T) => string;
getLevel: (dataNode: T) => number;
reverse?: boolean;
}
export declare const TREE_SEPERATOR = ".";
export declare class Tree<T> {
private config;
private _data;
getChildren: (dataNode: T) => T[] | undefined | null;
getId: (dataNode: T) => string;
getLevel: (dataNode: T) => number;
constructor(initialData: T[], config: ITreeConfig<T>);
get data(): readonly T[];
get flattened(): readonly T[];
add(...nodes: T[]): T[];
addBefore(beforeId: string | undefined, ...nodes: T[]): void;
remove(...nodes: T[]): T[];
clear(): void;
exist(node: T): boolean;
/**
* Move a node to a different position
* @param node
* @param beforeTo The position of index into the tree. If -1 move at the end
*/
moveTo(beforeTo: number[], ...nodes: T[]): T[];
getPosition(node: T): number[];
private _addBefore;
private _remove;
/**
* Move an node before an id
* @param node Node to be move
* @param recipient
* @param beforeId
*/
private move;
private _getPosition;
private getAncestorAtPosition;
/** Recursive */
private sortDeep;
private sort;
/** Recursive */
private _getNodeById;
getNodeByPosition(indexes: number[]): T;
private _getByIndex;
private getNodeAncestor;
/** Recursive */
private getAncestorById;
/** Recursive */
private flatten;
private getIndex;
}
export {};