Added central action for navigation
[arvados-workbench2.git] / src / views / data-explorer / data-explorer-selectors.ts
index 5f17037f2322fa1a514c8d33f302fb8ba77141e8..ceb87d22cd637ea1a565ea853b8cf3d6273b1e6f 100644 (file)
@@ -1,11 +1,58 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
 import { TreeItem } from "../../components/tree/tree";
 import { Project } from "../../models/project";
 import { DataItem } from "../../views-components/data-explorer/data-item";
+import { findTreeItem } from "../../store/project/project-reducer";
+import { ResourceKind } from "../../models/resource";
+import { Collection } from "../../models/collection";
+import { getResourceUrl } from "../../store/navigation/navigation-action";
+
+export const projectExplorerItems = (projects: Array<TreeItem<Project>>, treeItemId: string, collections: Array<Collection>): DataItem[] => {
+    const dataItems: DataItem[] = [];
+
+    const treeItem = findTreeItem(projects, treeItemId);
+    if (treeItem) {
+        dataItems.push({
+            name: "..",
+            url: getResourceUrl(treeItem.data),
+            kind: ResourceKind.LEVEL_UP,
+            owner: treeItem.data.ownerUuid,
+            uuid: treeItem.data.uuid,
+            lastModified: treeItem.data.modifiedAt
+        });
+
+        if (treeItem.items) {
+            treeItem.items.forEach(p => {
+                const item = {
+                    name: p.data.name,
+                    kind: ResourceKind.PROJECT,
+                    url: getResourceUrl(treeItem.data),
+                    owner: p.data.ownerUuid,
+                    uuid: p.data.uuid,
+                    lastModified: p.data.modifiedAt
+                } as DataItem;
+
+                dataItems.push(item);
+            });
+        }
+    }
+
+    collections.forEach(c => {
+        const item = {
+            name: c.name,
+            kind: ResourceKind.COLLECTION,
+            url: getResourceUrl(c),
+            owner: c.ownerUuid,
+            uuid: c.uuid,
+            lastModified: c.modifiedAt
+        } as DataItem;
+
+        dataItems.push(item);
+    });
+
+    return dataItems;
+};
 
-export const mapProjectTreeItem = (item: TreeItem<Project>): DataItem => ({
-    name: item.data.name,
-    type: item.data.kind,
-    owner: item.data.ownerUuid,
-    lastModified: item.data.modifiedAt,
-    uuid: item.data.uuid
-});