17256: Code optimisation 17256-file-selection-dialog-issue
authorDaniel Kutyła <daniel.kutyla@contractors.roche.com>
Fri, 15 Jan 2021 17:18:50 +0000 (18:18 +0100)
committerDaniel Kutyła <daniel.kutyla@contractors.roche.com>
Fri, 15 Jan 2021 17:18:50 +0000 (18:18 +0100)
Arvados-DCO-1.1-Signed-off-by: Daniel Kutyła <daniel.kutyla@contractors.roche.com>

src/views-components/tree-picker/tree-picker.ts

index 9bb52dee871ae8cb5e57ec511c1b393edee325ff..822fdcf2891029ddd1aedaa83de7956f224ce3d4 100644 (file)
@@ -18,22 +18,18 @@ export interface TreePickerProps<T> {
     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;
 };
@@ -42,6 +38,7 @@ const memoizedMapStateToProps = () => {
     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;
@@ -49,11 +46,11 @@ const memoizedMapStateToProps = () => {
                 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,
             };