1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import React, { ReactElement } from 'react';
6 import { connect } from 'react-redux';
7 import { StyleRulesCallback, withStyles, WithStyles, Toolbar, Button } from '@material-ui/core';
8 import { ArvadosTheme } from 'common/custom-theme';
9 import { RootState } from 'store/store';
10 import { Dispatch } from 'redux';
11 import { CopyToClipboardSnackbar } from 'components/copy-to-clipboard-snackbar/copy-to-clipboard-snackbar';
12 import { TCheckedList } from 'components/data-table/data-table';
13 import { openRemoveProcessDialog } from 'store/processes/processes-actions';
14 import { processResourceActionSet } from '../../views-components/context-menu/action-sets/process-resource-action-set';
15 import { ContextMenuResource } from 'store/context-menu/context-menu-actions';
16 import { toggleTrashed } from 'store/trash/trash-actions';
18 type CssRules = 'root' | 'button';
20 const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
26 color: theme.palette.text.primary,
31 type MultiselectToolbarAction = {
36 export const defaultActions: Array<MultiselectToolbarAction> = [
39 // fn: (name, checkedList) => MSToolbarCopyButton(name, checkedList),
47 export type MultiselectToolbarProps = {
48 buttons: Array<MultiselectToolbarAction>;
49 checkedList: TCheckedList;
50 copySelected: () => void;
51 removeSelected: (selectedList: TCheckedList) => void;
54 export const MultiselectToolbar = connect(
58 withStyles(styles)((props: MultiselectToolbarProps & WithStyles<CssRules>) => {
61 COPY: props.copySelected,
62 REMOVE: props.removeSelected,
65 const { classes, buttons, checkedList } = props;
67 <Toolbar className={classes.root}>
68 {buttons.map((btn) => (
69 <Button key={btn.name} className={classes.button} onClick={() => actions[btn.fn](checkedList)}>
78 function selectedToString(checkedList: TCheckedList) {
79 let stringifiedSelectedList: string = '';
80 for (const [key, value] of Object.entries(checkedList)) {
82 stringifiedSelectedList += key + ',';
85 return stringifiedSelectedList.slice(0, -1);
88 function selectedToArray<T>(checkedList: TCheckedList): Array<T | string> {
89 const arrayifiedSelectedList: Array<string> = [];
90 for (const [key, value] of Object.entries(checkedList)) {
92 arrayifiedSelectedList.push(key);
95 return arrayifiedSelectedList;
98 function mapStateToProps(state: RootState) {
99 // console.log(state.resources, state.multiselect.checkedList);
101 checkedList: state.multiselect.checkedList as TCheckedList,
102 // selectedList: state.multiselect.checkedList.forEach(processUUID=>containerRequestUUID)
106 function mapDispatchToProps(dispatch: Dispatch) {
108 copySelected: () => {},
109 removeSelected: (selectedList) => removeMany(dispatch, selectedList),
113 function removeMany(dispatch: Dispatch, checkedList: TCheckedList): void {
114 selectedToArray(checkedList).forEach((uuid: string) => dispatch<any>(openRemoveProcessDialog(uuid)));