X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/1c0f11ed17dea5be97e8ca63385f979925f1fb08..2c2339c775f9112f5da638b2beb81d8b6d5abc2b:/src/views-components/breadcrumbs/breadcrumbs.ts diff --git a/src/views-components/breadcrumbs/breadcrumbs.ts b/src/views-components/breadcrumbs/breadcrumbs.ts index 306b29e7db..0334097d2e 100644 --- a/src/views-components/breadcrumbs/breadcrumbs.ts +++ b/src/views-components/breadcrumbs/breadcrumbs.ts @@ -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; +type BreadcrumbsDataProps = Pick; type BreadcrumbsActionProps = Pick; -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(BREADCRUMBS)(properties) || []), + resources, +}); const mapDispatchToProps = (dispatch: Dispatch): BreadcrumbsActionProps => ({ - onClick: ({ uuid }: ResourceBreadcrumb) => { - dispatch(navigateToResource(uuid)); + onClick: ({ uuid }: Breadcrumb) => { + dispatch(navigateTo(uuid)); }, - onContextMenu: () => { return; } + onContextMenu: (event, breadcrumb: Breadcrumb) => { + dispatch(openSidePanelContextMenu(event, breadcrumb.uuid)); + } }); -export const Breadcrumbs = connect(memoizedMapStateToProps(), mapDispatchToProps)(BreadcrumbsComponent); \ No newline at end of file +export const Breadcrumbs = connect(mapStateToProps(), mapDispatchToProps)(BreadcrumbsComponent);