Merge branch '21128-toolbar-context-menu'
[arvados-workbench2.git] / src / views-components / breadcrumbs / breadcrumbs.ts
index 306b29e7dbadd018461f6a5d27a95e8530f69c04..0334097d2eee07ce079b2f7c9863e1bb59a2756d 100644 (file)
@@ -3,52 +3,29 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import { connect } from "react-redux";
-import { Breadcrumbs as BreadcrumbsComponent, BreadcrumbsProps } from '~/components/breadcrumbs/breadcrumbs';
-import { RootState } from '~/store/store';
-import { Breadcrumb } from '~/components/breadcrumbs/breadcrumbs';
-import { matchProjectRoute } from '~/routes/routes';
-import { getTreePicker } from '~/store/tree-picker/tree-picker';
-import { SIDE_PANEL_TREE } from '~/store/side-panel-tree/side-panel-tree-actions';
-import { getNodeAncestors, getNode } from '~/models/tree';
+import { Breadcrumb, Breadcrumbs as BreadcrumbsComponent, BreadcrumbsProps } from 'components/breadcrumbs/breadcrumbs';
+import { RootState } from 'store/store';
 import { Dispatch } from 'redux';
-import { navigateToResource } from '~/store/navigation/navigation-action';
+import { navigateTo } from 'store/navigation/navigation-action';
+import { getProperty } from '../../store/properties/properties';
+import { BREADCRUMBS } from '../../store/breadcrumbs/breadcrumbs-actions';
+import { openSidePanelContextMenu } from 'store/context-menu/context-menu-actions';
 
-interface ResourceBreadcrumb extends Breadcrumb {
-    uuid: string;
-}
-
-type BreadcrumbsDataProps = Pick<BreadcrumbsProps, 'items'>;
+type BreadcrumbsDataProps = Pick<BreadcrumbsProps, 'items' | 'resources'>;
 type BreadcrumbsActionProps = Pick<BreadcrumbsProps, 'onClick' | 'onContextMenu'>;
 
-const memoizedMapStateToProps = () => {
-    let items: ResourceBreadcrumb[] = [];
-    return ({ router, treePicker }: RootState): BreadcrumbsDataProps => {
-        if (router.location) {
-            const projectMatch = matchProjectRoute(location.pathname);
-            const collectionMatch = matchProjectRoute(location.pathname);
-            const uuid = projectMatch && projectMatch.params.id
-                || collectionMatch && collectionMatch.params.id
-                || '';
-            const tree = getTreePicker(SIDE_PANEL_TREE)(treePicker);
-            if (tree) {
-                const ancestors = getNodeAncestors(uuid)(tree);
-                const node = getNode(uuid)(tree);
-                const nodes = node ? [...ancestors, node] : ancestors;
-                items = nodes.map(({ value }) =>
-                    typeof value.value === 'string'
-                        ? { label: value.value, uuid: value.nodeId }
-                        : { label: value.value.name, uuid: value.value.uuid });
-            }
-        }
-        return { items };
-    };
-};
+const mapStateToProps = () => ({ properties, resources }: RootState): BreadcrumbsDataProps => ({
+    items: (getProperty<Breadcrumb[]>(BREADCRUMBS)(properties) || []),
+    resources,
+});
 
 const mapDispatchToProps = (dispatch: Dispatch): BreadcrumbsActionProps => ({
-    onClick: ({ uuid }: ResourceBreadcrumb) => {
-        dispatch<any>(navigateToResource(uuid));
+    onClick: ({ uuid }: Breadcrumb) => {
+        dispatch<any>(navigateTo(uuid));
     },
-    onContextMenu: () => { return; }
+    onContextMenu: (event, breadcrumb: Breadcrumb) => {
+        dispatch<any>(openSidePanelContextMenu(event, breadcrumb.uuid));
+    }
 });
 
-export const Breadcrumbs = connect(memoizedMapStateToProps(), mapDispatchToProps)(BreadcrumbsComponent);
\ No newline at end of file
+export const Breadcrumbs = connect(mapStateToProps(), mapDispatchToProps)(BreadcrumbsComponent);