toggleItemSelection: Callback<T>;
}
-const flatTree = (depth: number, items?: any): [] => {
+const flatTree = (itemsIdMap: Map<string, any>, depth: number, items?: any): [] => {
return items ? items
- .map(addToItemsIdMap)
- .reduce((prev: any, next: any) => {
+ .map((item: any) => addToItemsIdMap(item, itemsIdMap))
+ .reduce((prev: Array<any>, next: any) => {
const { items } = next;
-
- return [
- ...prev,
- { ...next, depth },
- ...(next.open ? flatTree(depth + 1, items) : []),
- ];
+ prev.push({ ...next, depth });
+ prev.push(...(next.open ? flatTree(itemsIdMap, depth + 1, items) : []));
+ return prev;
}, []) : [];
};
-const itemsIdMap = new Map();
-const addToItemsIdMap = <T>(item: TreeItem<T>) => {
+const addToItemsIdMap = <T>(item: TreeItem<T>, itemsIdMap: Map<string, TreeItem<T>>) => {
itemsIdMap[item.id] = item;
return item;
};
let prevTree: Ttree<any>;
let mappedProps: Pick<TreeProps<any>, 'items' | 'disableRipple' | 'itemsMap'>;
return <T>(state: RootState, props: TreePickerProps<T>): Pick<TreeProps<T>, 'items' | 'disableRipple' | 'itemsMap'> => {
+ const itemsIdMap: Map<string, TreeItem<T>> = new Map();
const tree = state.treePicker[props.pickerId] || createTree();
if (tree !== prevTree) {
prevTree = tree;
disableRipple: true,
items: getNodeChildrenIds('')(tree)
.map(treePickerToTreeItems(tree))
- .map(addToItemsIdMap)
+ .map(item => addToItemsIdMap(item, itemsIdMap))
.map(parentItem => ({
...parentItem,
flatTree: true,
- items: flatTree(2, parentItem.items || []),
+ items: flatTree(itemsIdMap, 2, parentItem.items || []),
})),
itemsMap: itemsIdMap,
};