// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import * as React from "react"; import { Dispatch } from "redux"; import { connect } from "react-redux"; import { TreePicker, TreePickerProps } from "../tree-picker/tree-picker"; import { TreeItem } from "~/components/tree/tree"; import { ProjectResource } from "~/models/project"; import { ListItemTextIcon } from "~/components/list-item-text-icon/list-item-text-icon"; import { ProjectIcon, FavoriteIcon, ProjectsIcon, ShareMeIcon, TrashIcon } from '~/components/icon/icon'; import { RecentIcon, WorkflowIcon } from '~/components/icon/icon'; import { activateSidePanelTreeItem, toggleSidePanelTreeItemCollapse, SIDE_PANEL_TREE, SidePanelTreeCategory } from '~/store/side-panel-tree/side-panel-tree-actions'; import { openSidePanelContextMenu } from '~/store/context-menu/context-menu-actions'; import { noop } from 'lodash'; export interface SidePanelTreeProps { onItemActivation: (id: string) => void; sidePanelProgress?: boolean; } type SidePanelTreeActionProps = Pick, 'onContextMenu' | 'toggleItemActive' | 'toggleItemOpen' | 'toggleItemSelection'>; const mapDispatchToProps = (dispatch: Dispatch, props: SidePanelTreeProps): SidePanelTreeActionProps => ({ onContextMenu: (event, { id }) => { dispatch(openSidePanelContextMenu(event, id)); }, toggleItemActive: (_, { id }) => { dispatch(activateSidePanelTreeItem(id)); props.onItemActivation(id); }, toggleItemOpen: (_, { id }) => { dispatch(toggleSidePanelTreeItemCollapse(id)); }, toggleItemSelection: noop, }); export const SidePanelTree = connect(undefined, mapDispatchToProps)( (props: SidePanelTreeActionProps) => ); const renderSidePanelItem = (item: TreeItem) => ; const getProjectPickerIcon = (item: TreeItem) => typeof item.data === 'string' ? getSidePanelIcon(item.data) : ProjectIcon; const getSidePanelIcon = (category: string) => { switch (category) { case SidePanelTreeCategory.FAVORITES: return FavoriteIcon; case SidePanelTreeCategory.PROJECTS: return ProjectsIcon; case SidePanelTreeCategory.RECENT_OPEN: return RecentIcon; case SidePanelTreeCategory.SHARED_WITH_ME: return ShareMeIcon; case SidePanelTreeCategory.TRASH: return TrashIcon; case SidePanelTreeCategory.WORKFLOWS: return WorkflowIcon; default: return ProjectIcon; } };