From: Pawel Kowalczyk Date: Fri, 17 Aug 2018 09:57:05 +0000 (+0200) Subject: merge master X-Git-Tag: 1.3.0~147^2~8 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/f0ac109691369516a5adf9370838cb4eacf16a45 merge master Feature #13902 Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk --- f0ac109691369516a5adf9370838cb4eacf16a45 diff --cc src/index.tsx index bf3002e9,cfdbb46c..461904c4 --- a/src/index.tsx +++ b/src/index.tsx @@@ -46,8 -45,7 +46,8 @@@ fetchConfig( store.dispatch(initAuth()); store.dispatch(getProjectList(services.authService.getUuid())); + store.dispatch(initPickerProjectTree()); - + const TokenComponent = (props: any) => ; const WorkbenchComponent = (props: any) => ; diff --cc src/store/data-explorer/data-explorer-reducer.test.tsx index 11296ce5,6b1c9079..56ea3e84 --- a/src/store/data-explorer/data-explorer-reducer.test.tsx +++ b/src/store/data-explorer/data-explorer-reducer.test.tsx @@@ -14,7 -14,7 +14,9 @@@ describe('data-explorer-reducer', () = name: "Column 1", render: jest.fn(), selected: true, - configurable: false ++ sortDirection: SortDirection.ASC, ++ filters: [], + configurable: true }]; const state = dataExplorerReducer(undefined, dataExplorerActions.SET_COLUMNS({ id: "Data explorer", columns })); @@@ -26,14 -26,14 +28,16 @@@ name: "Column 1", render: jest.fn(), selected: true, - configurable: true, - sortDirection: SortDirection.ASC + sortDirection: SortDirection.ASC, - configurable: false ++ filters: [], ++ configurable: true }, { name: "Column 2", render: jest.fn(), selected: true, + configurable: true, sortDirection: SortDirection.NONE, - configurable: false ++ filters: [], }]; const state = dataExplorerReducer({ "Data explorer": { ...initialDataExplorer, columns } }, dataExplorerActions.TOGGLE_SORT({ id: "Data explorer", columnName: "Column 2" })); @@@ -46,7 -46,7 +50,9 @@@ name: "Column 1", render: jest.fn(), selected: true, - configurable: false - configurable: true ++ configurable: true, ++ sortDirection: SortDirection.NONE, ++ filters: [], }]; const filters: DataTableFilterItem[] = [{ diff --cc src/store/tree-picker/tree-picker-reducer.ts index e4ca2629,8d61714c..cf67aa76 --- a/src/store/tree-picker/tree-picker-reducer.ts +++ b/src/store/tree-picker/tree-picker-reducer.ts @@@ -2,35 -2,25 +2,35 @@@ // // SPDX-License-Identifier: AGPL-3.0 - import { createTree, setNodeValueWith, TreeNode, setNode, mapTreeValues, Tree } from "../../models/tree"; -import { createTree, setNodeValueWith, TreeNode, setNode, mapTreeValues } from "~/models/tree"; ++import { createTree, setNodeValueWith, TreeNode, setNode, mapTreeValues, Tree } from "~/models/tree"; import { TreePicker, TreePickerNode } from "./tree-picker"; import { treePickerActions, TreePickerAction } from "./tree-picker-actions"; - import { TreeItemStatus } from "../../components/tree/tree"; + import { TreeItemStatus } from "~/components/tree/tree"; -export const treePickerReducer = (state: TreePicker = createTree(), action: TreePickerAction) => +export const treePickerReducer = (state: TreePicker = {}, action: TreePickerAction) => treePickerActions.match(action, { - LOAD_TREE_PICKER_NODE: ({ id }) => - setNodeValueWith(setPending)(id)(state), - LOAD_TREE_PICKER_NODE_SUCCESS: ({ id, nodes }) => { - const [newState] = [state] + LOAD_TREE_PICKER_NODE: ({ id, pickerId }) => { + const picker = state[pickerId] || createTree(); + const updatedPicker = setNodeValueWith(setPending)(id)(picker); + return { ...state, [pickerId]: updatedPicker }; + }, + LOAD_TREE_PICKER_NODE_SUCCESS: ({ id, nodes, pickerId }) => { + const picker = state[pickerId] || createTree(); + const [updatedPicker] = [picker] .map(receiveNodes(nodes)(id)) .map(setNodeValueWith(setLoaded)(id)); - return newState; + return { ...state, [pickerId]: updatedPicker }; + }, + TOGGLE_TREE_PICKER_NODE_COLLAPSE: ({ id, pickerId }) => { + const picker = state[pickerId] || createTree(); + const updatedPicker = setNodeValueWith(toggleCollapse)(id)(picker); + return { ...state, [pickerId]: updatedPicker }; + }, + TOGGLE_TREE_PICKER_NODE_SELECT: ({ id, pickerId }) => { + const picker = state[pickerId] || createTree(); + const updatedPicker = mapTreeValues(toggleSelect(id))(picker); + return { ...state, [pickerId]: updatedPicker }; }, - TOGGLE_TREE_PICKER_NODE_COLLAPSE: ({ id }) => - setNodeValueWith(toggleCollapse)(id)(state), - TOGGLE_TREE_PICKER_NODE_SELECT: ({ id }) => - mapTreeValues(toggleSelect(id))(state), default: () => state }); diff --cc src/store/tree-picker/tree-picker.ts index 5cb2d97f,e19ce3a7..5029cbe6 --- a/src/store/tree-picker/tree-picker.ts +++ b/src/store/tree-picker/tree-picker.ts @@@ -2,10 -2,10 +2,10 @@@ // // SPDX-License-Identifier: AGPL-3.0 - import { Tree } from "../../models/tree"; - import { TreeItemStatus } from "../../components/tree/tree"; + import { Tree } from "~/models/tree"; + import { TreeItemStatus } from "~/components/tree/tree"; -export type TreePicker = Tree; +export type TreePicker = { [key: string]: Tree }; export interface TreePickerNode { id: string; diff --cc src/views-components/context-menu/action-sets/collection-action-set.ts index 75ffdb3b,4561f9d3..e6dd686a --- a/src/views-components/context-menu/action-sets/collection-action-set.ts +++ b/src/views-components/context-menu/action-sets/collection-action-set.ts @@@ -4,11 -4,10 +4,11 @@@ import { ContextMenuActionSet } from "../context-menu-action-set"; import { ToggleFavoriteAction } from "../actions/favorite-action"; - import { toggleFavorite } from "../../../store/favorites/favorites-actions"; - import { RenameIcon, ShareIcon, MoveToIcon, CopyIcon, DetailsIcon, ProvenanceGraphIcon, AdvancedIcon, RemoveIcon } from "../../../components/icon/icon"; - import { openUpdater } from "../../../store/collections/updater/collection-updater-action"; - import { favoritePanelActions } from "../../../store/favorite-panel/favorite-panel-action"; + import { toggleFavorite } from "~/store/favorites/favorites-actions"; + import { RenameIcon, ShareIcon, MoveToIcon, CopyIcon, DetailsIcon, ProvenanceGraphIcon, AdvancedIcon, RemoveIcon } from "~/components/icon/icon"; + import { openUpdater } from "~/store/collections/updater/collection-updater-action"; + import { favoritePanelActions } from "~/store/favorite-panel/favorite-panel-action"; +import { openMoveToDialog } from "../../move-to-dialog/move-to-dialog"; export const collectionActionSet: ContextMenuActionSet = [[ { diff --cc src/views-components/context-menu/action-sets/collection-resource-action-set.ts index f0e7efeb,7d8364bd..fd2f8d75 --- a/src/views-components/context-menu/action-sets/collection-resource-action-set.ts +++ b/src/views-components/context-menu/action-sets/collection-resource-action-set.ts @@@ -4,11 -4,10 +4,11 @@@ import { ContextMenuActionSet } from "../context-menu-action-set"; import { ToggleFavoriteAction } from "../actions/favorite-action"; - import { toggleFavorite } from "../../../store/favorites/favorites-actions"; - import { RenameIcon, ShareIcon, MoveToIcon, CopyIcon, DetailsIcon, RemoveIcon } from "../../../components/icon/icon"; - import { openUpdater } from "../../../store/collections/updater/collection-updater-action"; - import { favoritePanelActions } from "../../../store/favorite-panel/favorite-panel-action"; + import { toggleFavorite } from "~/store/favorites/favorites-actions"; + import { RenameIcon, ShareIcon, MoveToIcon, CopyIcon, DetailsIcon, RemoveIcon } from "~/components/icon/icon"; + import { openUpdater } from "~/store/collections/updater/collection-updater-action"; + import { favoritePanelActions } from "~/store/favorite-panel/favorite-panel-action"; +import { openMoveToDialog } from "../../move-to-dialog/move-to-dialog"; export const collectionResourceActionSet: ContextMenuActionSet = [[ { diff --cc src/views-components/context-menu/action-sets/project-action-set.ts index 06ffb9d8,1b000c88..ca9a4f67 --- a/src/views-components/context-menu/action-sets/project-action-set.ts +++ b/src/views-components/context-menu/action-sets/project-action-set.ts @@@ -2,35 -2,39 +2,47 @@@ // // SPDX-License-Identifier: AGPL-3.0 - import { reset } from "redux-form"; + import { reset, initialize } from "redux-form"; import { ContextMenuActionSet } from "../context-menu-action-set"; - import { projectActions } from "../../../store/project/project-action"; - import { NewProjectIcon, MoveToIcon } from "../../../components/icon/icon"; + import { projectActions, PROJECT_FORM_NAME } from "~/store/project/project-action"; -import { NewProjectIcon, RenameIcon } from "~/components/icon/icon"; ++import { NewProjectIcon, MoveToIcon, RenameIcon } from "~/components/icon/icon"; import { ToggleFavoriteAction } from "../actions/favorite-action"; - import { toggleFavorite } from "../../../store/favorites/favorites-actions"; - import { favoritePanelActions } from "../../../store/favorite-panel/favorite-panel-action"; + import { toggleFavorite } from "~/store/favorites/favorites-actions"; + import { favoritePanelActions } from "~/store/favorite-panel/favorite-panel-action"; +import { openMoveToDialog } from "../../move-to-dialog/move-to-dialog"; import { PROJECT_CREATE_DIALOG } from "../../dialog-create/dialog-project-create"; - export const projectActionSet: ContextMenuActionSet = [[{ - icon: NewProjectIcon, - name: "New project", - execute: (dispatch, resource) => { - dispatch(reset(PROJECT_CREATE_DIALOG)); - dispatch(projectActions.OPEN_PROJECT_CREATOR({ ownerUuid: resource.uuid })); - } - }, { - component: ToggleFavoriteAction, - execute: (dispatch, resource) => { - dispatch(toggleFavorite(resource)).then(() => { - dispatch(favoritePanelActions.REQUEST_ITEMS()); - }); - } - }, { - icon: MoveToIcon, - name: "Move to", - execute: (dispatch) => { - dispatch(openMoveToDialog()); - } - },]]; + export const projectActionSet: ContextMenuActionSet = [[ + { + icon: NewProjectIcon, + name: "New project", + execute: (dispatch, resource) => { + dispatch(reset(PROJECT_CREATE_DIALOG)); + dispatch(projectActions.OPEN_PROJECT_CREATOR({ ownerUuid: resource.uuid })); + } + }, + { + icon: RenameIcon, + name: "Edit project", + execute: (dispatch, resource) => { + dispatch(projectActions.OPEN_PROJECT_UPDATER({ uuid: resource.uuid })); + dispatch(initialize(PROJECT_FORM_NAME, { name: resource.name, description: resource.description })); + } + }, + { + component: ToggleFavoriteAction, + execute: (dispatch, resource) => { + dispatch(toggleFavorite(resource)).then(() => { + dispatch(favoritePanelActions.REQUEST_ITEMS()); + }); + } - } ++ }, ++ { ++ icon: MoveToIcon, ++ name: "Move to", ++ execute: (dispatch) => { ++ dispatch(openMoveToDialog()); ++ } ++ }, + ]]; diff --cc src/views-components/create-collection-dialog-with-selected/create-collection-dialog-with-selected.tsx index ece06395,46bc724d..60ce05c7 --- a/src/views-components/create-collection-dialog-with-selected/create-collection-dialog-with-selected.tsx +++ b/src/views-components/create-collection-dialog-with-selected/create-collection-dialog-with-selected.tsx @@@ -4,9 -4,10 +4,9 @@@ import { Dispatch } from "redux"; import { reduxForm, reset, startSubmit, stopSubmit } from "redux-form"; - import { withDialog } from "../../store/dialog/with-dialog"; - import { dialogActions } from "../../store/dialog/dialog-actions"; + import { withDialog } from "~/store/dialog/with-dialog"; + import { dialogActions } from "~/store/dialog/dialog-actions"; import { DialogCollectionCreateWithSelected } from "../dialog-create/dialog-collection-create-selected"; -import { loadProjectTreePickerProjects } from "../project-tree-picker/project-tree-picker"; export const DIALOG_COLLECTION_CREATE_WITH_SELECTED = 'dialogCollectionCreateWithSelected'; diff --cc src/views-components/project-tree-picker/project-tree-picker.tsx index 0338534d,9143c47a..e18af9e4 --- a/src/views-components/project-tree-picker/project-tree-picker.tsx +++ b/src/views-components/project-tree-picker/project-tree-picker.tsx @@@ -6,29 -6,28 +6,29 @@@ import * as React from "react" import { Dispatch } from "redux"; import { connect } from "react-redux"; import { Typography } from "@material-ui/core"; -import { TreePicker } from "../tree-picker/tree-picker"; -import { TreeProps, TreeItem, TreeItemStatus } from "~/components/tree/tree"; +import { TreePicker, TreePickerProps } from "../tree-picker/tree-picker"; - import { TreeItem, TreeItemStatus } from "../../components/tree/tree"; - import { ProjectResource } from "../../models/project"; - import { treePickerActions } from "../../store/tree-picker/tree-picker-actions"; - import { ListItemTextIcon } from "../../components/list-item-text-icon/list-item-text-icon"; - import { ProjectIcon, FavoriteIcon, ProjectsIcon, ShareMeIcon } from "../../components/icon/icon"; - import { createTreePickerNode } from "../../store/tree-picker/tree-picker"; - import { RootState } from "../../store/store"; - import { ServiceRepository } from "../../services/services"; - import { FilterBuilder } from "../../common/api/filter-builder"; ++import { TreeItem, TreeItemStatus } from "~/components/tree/tree"; + import { ProjectResource } from "~/models/project"; + import { treePickerActions } from "~/store/tree-picker/tree-picker-actions"; + import { ListItemTextIcon } from "~/components/list-item-text-icon/list-item-text-icon"; -import { ProjectIcon } from "~/components/icon/icon"; ++import { ProjectIcon, FavoriteIcon, ProjectsIcon, ShareMeIcon } from "~/components/icon/icon"; + import { createTreePickerNode } from "~/store/tree-picker/tree-picker"; + import { RootState } from "~/store/store"; + import { ServiceRepository } from "~/services/services"; + import { FilterBuilder } from "~/common/api/filter-builder"; -type ProjectTreePickerProps = Pick, 'toggleItemActive' | 'toggleItemOpen'>; +type ProjectTreePickerProps = Pick; + +const mapDispatchToProps = (dispatch: Dispatch, props: { onChange: (projectUuid: string) => void }): ProjectTreePickerProps => ({ + toggleItemActive: (id, status, pickerId) => { + getNotSelectedTreePickerKind(pickerId) + .forEach(pickerId => dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id: '', pickerId }))); + dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id, pickerId })); -const mapDispatchToProps = (dispatch: Dispatch, props: {onChange: (projectUuid: string) => void}): ProjectTreePickerProps => ({ - toggleItemActive: id => { - dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id })); props.onChange(id); }, - toggleItemOpen: (id, status) => { - status === TreeItemStatus.INITIAL - ? dispatch(loadProjectTreePickerProjects(id)) - : dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id })); + toggleItemOpen: (id, status, pickerId) => { + dispatch(toggleItemOpen(id, status, pickerId)); } }); @@@ -83,47 -54,12 +83,47 @@@ export const loadProjectTreePickerProje const { items } = await services.projectService.list({ filters }); - dispatch(receiveProjectTreePickerData(id, items)); + dispatch(receiveTreePickerData(id, items, TreePickerKind.PROJECTS)); }; +export const loadFavoriteTreePickerProjects = (id: string) => + async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + const parentId = services.authService.getUuid() || ''; + + if (id === '') { + dispatch(treePickerActions.LOAD_TREE_PICKER_NODE({ id: parentId, pickerId: TreePickerKind.FAVORITES })); + const { items } = await services.favoriteService.list(parentId); + + dispatch(receiveTreePickerData(parentId, items as ProjectResource[], TreePickerKind.FAVORITES)); + } else { + dispatch(treePickerActions.LOAD_TREE_PICKER_NODE({ id, pickerId: TreePickerKind.FAVORITES })); - const filters = FilterBuilder - .create() - .addEqual('ownerUuid', id); ++ const filters = new FilterBuilder() ++ .addEqual('ownerUuid', id) ++ .getFilters(); + + const { items } = await services.projectService.list({ filters }); + + dispatch(receiveTreePickerData(id, items, TreePickerKind.FAVORITES)); + } + + }; + +const getProjectPickerIcon = (item: TreeItem) => { + switch (item.data.name) { + case TreePickerKind.FAVORITES: + return FavoriteIcon; + case TreePickerKind.PROJECTS: + return ProjectsIcon; + case TreePickerKind.SHARED_WITH_ME: + return ShareMeIcon; + default: + return ProjectIcon; + } +}; + const renderTreeItem = (item: TreeItem) => ; @@@ -134,10 -69,7 +134,10 @@@ export const receiveTreePickerData = (i (dispatch: Dispatch) => { dispatch(treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id, - nodes: projects.map(project => createTreePickerNode({ id: project.uuid, value: project })) + nodes: projects.map(project => createTreePickerNode({ id: project.uuid, value: project })), + pickerId, })); - dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id })); ++ + dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id, pickerId })); }; + - diff --cc src/views-components/tree-picker/tree-picker.ts index a0eae9f1,09a07443..fb05b818 --- a/src/views-components/tree-picker/tree-picker.ts +++ b/src/views-components/tree-picker/tree-picker.ts @@@ -3,23 -3,24 +3,23 @@@ // SPDX-License-Identifier: AGPL-3.0 import { connect } from "react-redux"; - import { Tree, TreeProps, TreeItem, TreeItemStatus } from "../../components/tree/tree"; - import { RootState } from "../../store/store"; - import { createTreePickerNode, TreePickerNode } from "../../store/tree-picker/tree-picker"; - import { getNodeValue, getNodeChildren, Tree as Ttree, createTree } from "../../models/tree"; - import { Dispatch } from "node_modules/redux"; -import { Tree, TreeProps, TreeItem } from "~/components/tree/tree"; ++import { Tree, TreeProps, TreeItem, TreeItemStatus } from "~/components/tree/tree"; + import { RootState } from "~/store/store"; -import { TreePicker as TTreePicker, TreePickerNode, createTreePickerNode } from "~/store/tree-picker/tree-picker"; -import { getNodeValue, getNodeChildren } from "~/models/tree"; ++import { createTreePickerNode, TreePickerNode } from "~/store/tree-picker/tree-picker"; ++import { getNodeValue, getNodeChildren, Tree as Ttree, createTree } from "~/models/tree"; ++import { Dispatch } from "redux"; -const memoizedMapStateToProps = () => { - let prevState: TTreePicker; - let prevTree: Array>; +export interface TreePickerProps { + pickerId: string; + toggleItemOpen: (id: string, status: TreeItemStatus, pickerId: string) => void; + toggleItemActive: (id: string, status: TreeItemStatus, pickerId: string) => void; +} - return (state: RootState): Pick, 'items'> => { - if (prevState !== state.treePicker) { - prevState = state.treePicker; - prevTree = getNodeChildren('')(state.treePicker) - .map(treePickerToTreeItems(state.treePicker)); - } - return { - items: prevTree - }; +const mapStateToProps = (state: RootState, props: TreePickerProps): Pick, 'items'> => { + const tree = state.treePicker[props.pickerId] || createTree(); + return { + items: getNodeChildren('')(tree) + .map(treePickerToTreeItems(tree)) }; }; diff --cc src/views/workbench/workbench.tsx index c8d44744,a38afb7a..9210fb32 --- a/src/views/workbench/workbench.tsx +++ b/src/views/workbench/workbench.tsx @@@ -6,50 -6,50 +6,51 @@@ import * as React from 'react' import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles'; import Drawer from '@material-ui/core/Drawer'; import { connect, DispatchProp } from "react-redux"; - import { Route, Switch, RouteComponentProps } from "react-router"; - import { login, logout } from "../../store/auth/auth-action"; - import { User } from "../../models/user"; - import { RootState } from "../../store/store"; - import { MainAppBar, MainAppBarActionProps, MainAppBarMenuItem } from '../../views-components/main-app-bar/main-app-bar'; - import { Breadcrumb } from '../../components/breadcrumbs/breadcrumbs'; + import { Route, RouteComponentProps, Switch, Redirect } from "react-router"; + import { login, logout } from "~/store/auth/auth-action"; + import { User } from "~/models/user"; + import { RootState } from "~/store/store"; + import { MainAppBar, MainAppBarActionProps, MainAppBarMenuItem } from '~/views-components/main-app-bar/main-app-bar'; + import { Breadcrumb } from '~/components/breadcrumbs/breadcrumbs'; import { push } from 'react-router-redux'; import { reset } from 'redux-form'; - import { ProjectTree } from '../../views-components/project-tree/project-tree'; - import { TreeItem } from "../../components/tree/tree"; - import { getTreePath } from '../../store/project/project-reducer'; - import { sidePanelActions } from '../../store/side-panel/side-panel-action'; - import { SidePanel, SidePanelItem } from '../../components/side-panel/side-panel'; - import { ItemMode, setProjectItem } from "../../store/navigation/navigation-action"; - import { projectActions } from "../../store/project/project-action"; - import { collectionCreateActions } from '../../store/collections/creator/collection-creator-action'; - import { ProjectPanel } from "../project-panel/project-panel"; - import { DetailsPanel } from '../../views-components/details-panel/details-panel'; - import { ArvadosTheme } from '../../common/custom-theme'; - import { CreateProjectDialog } from "../../views-components/create-project-dialog/create-project-dialog"; + import { ProjectTree } from '~/views-components/project-tree/project-tree'; + import { TreeItem } from "~/components/tree/tree"; + import { getTreePath } from '~/store/project/project-reducer'; + import { sidePanelActions } from '~/store/side-panel/side-panel-action'; + import { SidePanel, SidePanelItem } from '~/components/side-panel/side-panel'; + import { ItemMode, setProjectItem } from "~/store/navigation/navigation-action"; + import { projectActions } from "~/store/project/project-action"; + import { collectionCreateActions } from '~/store/collections/creator/collection-creator-action'; + import { ProjectPanel } from "~/views/project-panel/project-panel"; + import { DetailsPanel } from '~/views-components/details-panel/details-panel'; + import { ArvadosTheme } from '~/common/custom-theme'; + import { CreateProjectDialog } from "~/views-components/create-project-dialog/create-project-dialog"; - import { detailsPanelActions, loadDetails } from "../../store/details-panel/details-panel-action"; - import { contextMenuActions } from "../../store/context-menu/context-menu-actions"; - import { SidePanelIdentifiers } from '../../store/side-panel/side-panel-reducer'; - import { ProjectResource } from '../../models/project'; - import { ResourceKind } from '../../models/resource'; - import { ContextMenu, ContextMenuKind } from "../../views-components/context-menu/context-menu"; + import { detailsPanelActions, loadDetails } from "~/store/details-panel/details-panel-action"; + import { contextMenuActions } from "~/store/context-menu/context-menu-actions"; + import { SidePanelIdentifiers } from '~/store/side-panel/side-panel-reducer'; + import { ProjectResource } from '~/models/project'; + import { ResourceKind } from '~/models/resource'; + import { ContextMenu, ContextMenuKind } from "~/views-components/context-menu/context-menu"; import { FavoritePanel } from "../favorite-panel/favorite-panel"; - import { CurrentTokenDialog } from '../../views-components/current-token-dialog/current-token-dialog'; - import { Snackbar } from '../../views-components/snackbar/snackbar'; - import { favoritePanelActions } from '../../store/favorite-panel/favorite-panel-action'; - import { CreateCollectionDialog } from '../../views-components/create-collection-dialog/create-collection-dialog'; + import { CurrentTokenDialog } from '~/views-components/current-token-dialog/current-token-dialog'; + import { Snackbar } from '~/views-components/snackbar/snackbar'; + import { favoritePanelActions } from '~/store/favorite-panel/favorite-panel-action'; + import { CreateCollectionDialog } from '~/views-components/create-collection-dialog/create-collection-dialog'; import { CollectionPanel } from '../collection-panel/collection-panel'; - import { loadCollection, loadCollectionTags } from '../../store/collection-panel/collection-panel-action'; - import { getCollectionUrl } from '../../models/collection'; - import { UpdateCollectionDialog } from '../../views-components/update-collection-dialog/update-collection-dialog.'; - import { AuthService } from "../../services/auth-service/auth-service"; - import { RenameFileDialog } from '../../views-components/rename-file-dialog/rename-file-dialog'; - import { FileRemoveDialog } from '../../views-components/file-remove-dialog/file-remove-dialog'; - import { MultipleFilesRemoveDialog } from '../../views-components/file-remove-dialog/multiple-files-remove-dialog'; - import { DialogCollectionCreateWithSelectedFile } from '../../views-components/create-collection-dialog-with-selected/create-collection-dialog-with-selected'; + import { loadCollection, loadCollectionTags } from '~/store/collection-panel/collection-panel-action'; + import { getCollectionUrl } from '~/models/collection'; + import { UpdateCollectionDialog } from '~/views-components/update-collection-dialog/update-collection-dialog.'; + import { UpdateProjectDialog } from '~/views-components/update-project-dialog/update-project-dialog'; + import { AuthService } from "~/services/auth-service/auth-service"; + import { RenameFileDialog } from '~/views-components/rename-file-dialog/rename-file-dialog'; + import { FileRemoveDialog } from '~/views-components/file-remove-dialog/file-remove-dialog'; + import { MultipleFilesRemoveDialog } from '~/views-components/file-remove-dialog/multiple-files-remove-dialog'; + import { DialogCollectionCreateWithSelectedFile } from '~/views-components/create-collection-dialog-with-selected/create-collection-dialog-with-selected'; +import { MoveToProjectDialog } from '../../views-components/move-to-dialog/move-to-dialog'; - import { COLLECTION_CREATE_DIALOG } from '../../views-components/dialog-create/dialog-collection-create'; - import { PROJECT_CREATE_DIALOG } from '../../views-components/dialog-create/dialog-project-create'; + import { COLLECTION_CREATE_DIALOG } from '~/views-components/dialog-create/dialog-collection-create'; + import { PROJECT_CREATE_DIALOG } from '~/views-components/dialog-create/dialog-project-create'; const DRAWER_WITDH = 240; const APP_BAR_HEIGHT = 100;