//
// SPDX-License-Identifier: AGPL-3.0
-import React from "react";
-import { connect, DispatchProp } from "react-redux";
-import { StyleRulesCallback, Tooltip, WithStyles, withStyles } from "@material-ui/core";
+import React from 'react';
+import { connect, DispatchProp } from 'react-redux';
+import { StyleRulesCallback, Tooltip, WithStyles, withStyles } from '@material-ui/core';
import { ArvadosTheme } from 'common/custom-theme';
import CopyToClipboard from 'react-copy-to-clipboard';
import { snackbarActions, SnackbarKind } from 'store/snackbar/snackbar-actions';
type CssRules = 'copyIcon';
const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
- copyIcon: {
- marginLeft: theme.spacing.unit,
- color: theme.palette.grey["500"],
- cursor: 'pointer',
- display: 'inline',
- '& svg': {
- fontSize: '1rem',
- verticalAlign: 'middle',
- }
- }
+ copyIcon: {
+ marginLeft: theme.spacing.unit,
+ color: theme.palette.grey['500'],
+ cursor: 'pointer',
+ display: 'inline',
+ '& svg': {
+ fontSize: '1rem',
+ verticalAlign: 'middle',
+ },
+ },
});
interface CopyToClipboardDataProps {
- children?: React.ReactNode;
- value: string;
+ children?: React.ReactNode;
+ value: string;
}
type CopyToClipboardProps = CopyToClipboardDataProps & WithStyles<CssRules> & DispatchProp;
-export const CopyToClipboardSnackbar = connect()(withStyles(styles)(
- class CopyToClipboardSnackbar extends React.Component<CopyToClipboardProps> {
- onCopy = () => {
- this.props.dispatch(snackbarActions.OPEN_SNACKBAR({
- message: 'Copied',
- hideDuration: 2000,
- kind: SnackbarKind.SUCCESS
- }));
- };
+export const CopyToClipboardSnackbar = connect()(
+ withStyles(styles)(
+ class CopyToClipboardSnackbar extends React.Component<CopyToClipboardProps> {
+ onCopy = () => {
+ this.props.dispatch(
+ snackbarActions.OPEN_SNACKBAR({
+ message: 'Copied',
+ hideDuration: 2000,
+ kind: SnackbarKind.SUCCESS,
+ })
+ );
+ };
- render() {
- const { children, value, classes } = this.props;
- return (
- <Tooltip title="Copy to clipboard">
- <span className={classes.copyIcon}>
- <CopyToClipboard text={value} onCopy={this.onCopy}>
- {children || <CopyIcon />}
- </CopyToClipboard>
- </span>
- </Tooltip>
- );
- }
- }
-));
+ render() {
+ const { children, value, classes } = this.props;
+ return (
+ <Tooltip title='Copy to clipboard'>
+ <span className={classes.copyIcon}>
+ <CopyToClipboard text={value} onCopy={this.onCopy}>
+ {children || <CopyIcon />}
+ </CopyToClipboard>
+ </span>
+ </Tooltip>
+ );
+ }
+ }
+ )
+);
function mapDispatchToProps(dispatch: Dispatch) {
return {
- // executeMulti: (action: ContextMenuAction, checkedList: TCheckedList, resources: ResourcesState) => {
- // selectedToArray(checkedList).forEach((uuid) => {
- // const resource = getResource(uuid)(resources);
- // executeSpecific(dispatch, action.name, resource);
- // });
- // },
executeMulti: (selectedAction: ContextMenuAction, checkedList: TCheckedList, resources: ResourcesState) => {
- // selectedToArray(checkedList).forEach((uuid) => {
- // const resource = getResource(uuid)(resources);
- // executeSpecific(dispatch, action.name, resource);
- // });
const kindGroups = groupByKind(checkedList, resources);
- // console.log(kindGroups);
for (const kind in kindGroups) {
const actionSet = kindToActionSet[kind];
const action = findActionByName(selectedAction.name as string, actionSet);
- console.log(action?.execute);
- console.log(kindGroups[kind]);
if (action) action.execute(dispatch, kindGroups[kind]);
// if (action && action.name === 'ToggleTrashAction') action.execute(dispatch, kindGroups[kind]);
};
}
-// function executeSpecific(dispatch: Dispatch, actionName, resource) {
-// const actionSet = kindToActionSet[resource.kind];
-// const action = findActionByName(actionName, actionSet);
-// if (action) action.execute(dispatch, resource);
-// }
-
-function executeSpecific(dispatch: Dispatch, actionName, resource) {
- const actionSet = kindToActionSet[resource.kind];
- const action = findActionByName(actionName, actionSet);
- if (action) action.execute(dispatch, resource);
-}
-
function groupByKind(checkedList: TCheckedList, resources: ResourcesState): Record<string, ContextMenuResource[]> {
- // function groupByKind(checkedList: TCheckedList, resources: ResourcesState): Record<string, Array<Resource | undefined>> {
const result = {};
selectedToArray(checkedList).forEach((uuid) => {
const resource = getResource(uuid)(resources) as Resource;
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from "../context-menu-action-set";
+import { ContextMenuActionSet } from '../context-menu-action-set';
import { NewProjectIcon, RenameIcon, MoveToIcon, DetailsIcon, AdvancedIcon, OpenIcon, Link, FolderSharedIcon } 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 { ToggleFavoriteAction } from '../actions/favorite-action';
+import { toggleFavorite } from 'store/favorites/favorites-actions';
+import { favoritePanelActions } from 'store/favorite-panel/favorite-panel-action';
import { openMoveProjectDialog } from 'store/projects/project-move-actions';
import { openProjectCreateDialog } from 'store/projects/project-create-actions';
import { openProjectUpdateDialog } from 'store/projects/project-update-actions';
-import { ToggleTrashAction } from "views-components/context-menu/actions/trash-action";
-import { toggleProjectTrashed } from "store/trash/trash-actions";
+import { ToggleTrashAction } from 'views-components/context-menu/actions/trash-action';
+import { toggleProjectTrashed } from 'store/trash/trash-actions';
import { ShareIcon } from 'components/icon/icon';
-import { openSharingDialog } from "store/sharing-dialog/sharing-dialog-actions";
-import { openAdvancedTabDialog } from "store/advanced-tab/advanced-tab";
+import { openSharingDialog } from 'store/sharing-dialog/sharing-dialog-actions';
+import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
import { toggleDetailsPanel } from 'store/details-panel/details-panel-action';
-import { copyToClipboardAction, openInNewTabAction } from "store/open-in-new-tab/open-in-new-tab.actions";
-import { openWebDavS3InfoDialog } from "store/collections/collection-info-actions";
-import { ToggleLockAction } from "../actions/lock-action";
-import { freezeProject, unfreezeProject } from "store/projects/project-lock-actions";
+import { copyToClipboardAction, openInNewTabAction } from 'store/open-in-new-tab/open-in-new-tab.actions';
+import { openWebDavS3InfoDialog } from 'store/collections/collection-info-actions';
+import { ToggleLockAction } from '../actions/lock-action';
+import { freezeProject, unfreezeProject } from 'store/projects/project-lock-actions';
export const toggleFavoriteAction = {
component: ToggleFavoriteAction,
dispatch(toggleFavorite(resource)).then(() => {
dispatch(favoritePanelActions.REQUEST_ITEMS());
});
- }
+ },
};
export const openInNewTabMenuAction = {
icon: OpenIcon,
- name: "Open in new tab",
+ name: 'Open in new tab',
execute: (dispatch, resource) => {
dispatch(openInNewTabAction(resource));
- }
+ },
};
export const copyToClipboardMenuAction = {
icon: Link,
- name: "Copy to clipboard",
- execute: (dispatch, resource) => {
- dispatch(copyToClipboardAction(resource));
- }
+ name: 'Copy to clipboard',
+ execute: (dispatch, resources) => {
+ dispatch(copyToClipboardAction(resources));
+ },
};
export const viewDetailsAction = {
icon: DetailsIcon,
- name: "View details",
- execute: dispatch => {
+ name: 'View details',
+ execute: (dispatch) => {
dispatch(toggleDetailsPanel());
- }
-}
+ },
+};
export const advancedAction = {
icon: AdvancedIcon,
- name: "API Details",
+ name: 'API Details',
execute: (dispatch, resource) => {
dispatch(openAdvancedTabDialog(resource.uuid));
- }
-}
+ },
+};
export const openWith3rdPartyClientAction = {
icon: FolderSharedIcon,
- name: "Open with 3rd party client",
+ name: 'Open with 3rd party client',
execute: (dispatch, resource) => {
dispatch(openWebDavS3InfoDialog(resource.uuid));
- }
-}
+ },
+};
export const editProjectAction = {
icon: RenameIcon,
- name: "Edit project",
+ name: 'Edit project',
execute: (dispatch, resource) => {
dispatch(openProjectUpdateDialog(resource));
- }
-}
+ },
+};
export const shareAction = {
icon: ShareIcon,
- name: "Share",
+ name: 'Share',
execute: (dispatch, { uuid }) => {
dispatch(openSharingDialog(uuid));
- }
-}
+ },
+};
export const moveToAction = {
icon: MoveToIcon,
- name: "Move to",
+ name: 'Move to',
execute: (dispatch, resource) => {
dispatch(openMoveProjectDialog(resource));
- }
-}
+ },
+};
export const toggleTrashAction = {
component: ToggleTrashAction,
name: 'ToggleTrashAction',
execute: (dispatch, resource) => {
dispatch(toggleProjectTrashed(resource.uuid, resource.ownerUuid, resource.isTrashed!!));
- }
-}
+ },
+};
export const freezeProjectAction = {
component: ToggleLockAction,
} else {
dispatch(freezeProject(resource.uuid));
}
- }
-}
+ },
+};
export const newProjectAction: any = {
icon: NewProjectIcon,
- name: "New project",
+ name: 'New project',
execute: (dispatch, resource): void => {
dispatch(openProjectCreateDialog(resource.uuid));
- }
-}
-
-export const readOnlyProjectActionSet: ContextMenuActionSet = [[
- toggleFavoriteAction,
- openInNewTabMenuAction,
- copyToClipboardMenuAction,
- viewDetailsAction,
- advancedAction,
- openWith3rdPartyClientAction,
-]];
-
-export const filterGroupActionSet: ContextMenuActionSet = [[
- toggleFavoriteAction,
- openInNewTabMenuAction,
- copyToClipboardMenuAction,
- viewDetailsAction,
- advancedAction,
- openWith3rdPartyClientAction,
- editProjectAction,
- shareAction,
- moveToAction,
- toggleTrashAction,
-]];
-
-export const frozenActionSet: ContextMenuActionSet = [[
- shareAction,
- toggleFavoriteAction,
- openInNewTabMenuAction,
- copyToClipboardMenuAction,
- viewDetailsAction,
- advancedAction,
- openWith3rdPartyClientAction,
- freezeProjectAction
-]];
-
-export const projectActionSet: ContextMenuActionSet = [[
- toggleFavoriteAction,
- openInNewTabMenuAction,
- copyToClipboardMenuAction,
- viewDetailsAction,
- advancedAction,
- openWith3rdPartyClientAction,
- editProjectAction,
- shareAction,
- moveToAction,
- toggleTrashAction,
- newProjectAction,
- freezeProjectAction,
-]];
+ },
+};
+
+export const readOnlyProjectActionSet: ContextMenuActionSet = [
+ [toggleFavoriteAction, openInNewTabMenuAction, copyToClipboardMenuAction, viewDetailsAction, advancedAction, openWith3rdPartyClientAction],
+];
+
+export const filterGroupActionSet: ContextMenuActionSet = [
+ [
+ toggleFavoriteAction,
+ openInNewTabMenuAction,
+ copyToClipboardMenuAction,
+ viewDetailsAction,
+ advancedAction,
+ openWith3rdPartyClientAction,
+ editProjectAction,
+ shareAction,
+ moveToAction,
+ toggleTrashAction,
+ ],
+];
+
+export const frozenActionSet: ContextMenuActionSet = [
+ [
+ shareAction,
+ toggleFavoriteAction,
+ openInNewTabMenuAction,
+ copyToClipboardMenuAction,
+ viewDetailsAction,
+ advancedAction,
+ openWith3rdPartyClientAction,
+ freezeProjectAction,
+ ],
+];
+
+export const projectActionSet: ContextMenuActionSet = [
+ [
+ toggleFavoriteAction,
+ openInNewTabMenuAction,
+ copyToClipboardMenuAction,
+ viewDetailsAction,
+ advancedAction,
+ openWith3rdPartyClientAction,
+ editProjectAction,
+ shareAction,
+ moveToAction,
+ toggleTrashAction,
+ newProjectAction,
+ freezeProjectAction,
+ ],
+];