Add combobox groups

This commit is contained in:
Clément Pons
2025-08-11 17:52:53 +02:00
parent 920ce2e1b6
commit 4e5ea504ea
7 changed files with 129 additions and 2805 deletions

View File

@@ -111,6 +111,22 @@ export class Tree<T extends Omit<LocalContent, 'content'>>
return recursive(1, this._data);
}
static each<T extends Record<string, any>>(tree: Array<T | undefined>, children: keyof T, callback: (item: T, depth: number, parent?: T) => void)
{
const recursive = (depth: number, data?: Array<T | undefined>, parent?: T) => data?.forEach(e => { if(!e) return; callback(e, depth, parent); !Array.isArray(e[children]) ? undefined : recursive(depth + 1, e[children] as T[] | undefined, e) });
recursive(1, tree);
}
static accumulate<T extends Record<string, any>>(tree: Array<T | undefined>, children: keyof T, callback: (item: T, depth: number, parent?: T) => any): any[]
{
const recursive = (depth: number, data?: Array<T | undefined>, parent?: T): any[] => data?.flatMap(e => e && [callback(e, depth, parent), ...!Array.isArray(e[children]) ? [] : recursive(depth + 1, e[children] as T[] | undefined, e)]) ?? [];
return recursive(1, tree);
}
static flatten<T extends Record<string, any>>(tree: T[], children: keyof T): T[]
{
return Tree.accumulate(tree, children, (item) => item);
}
get data()
{
return this._data;