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 { CopyToClipboardSnackbar } from 'components/copy-to-clipboard-snackbar/copy-to-clipboard-snackbar';
12 type CssRules = 'root' | 'button';
14 const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
20 color: theme.palette.text.primary,
25 type MultiselectToolbarAction = {
27 fn: () => ReactElement;
30 export type MultiselectToolbarActions = {
31 actions: Array<MultiselectToolbarAction>;
34 export const defaultActions: Array<MultiselectToolbarAction> = [
37 fn: () => MSToolbarCopyButton({ button: { border: '1px solid blue' } }),
41 const MSToolbarCopyButton = (classes) => {
43 <Button className={classes.button}>
44 <CopyToClipboardSnackbar value='foo' children={<div>Copy</div>} />
49 type MultiselectToolbarProps = MultiselectToolbarActions & WithStyles<CssRules>;
51 export const MultiselectToolbar = connect(mapStateToProps)(
52 withStyles(styles)((props: MultiselectToolbarProps) => {
53 const { classes, actions } = props;
55 <Toolbar className={classes.root}>
56 {actions.map((action, i) => (
57 <Button key={i} className={classes.button} onClick={action.fn}>
61 <MSToolbarCopyButton />
62 {/* <CopyToClipboardSnackbar value='foo' children={<div>test</div>} /> */}
68 function mapStateToProps(state: RootState) {