[arvados-workbench2] updated: 2.6.0-33-g5534b46d

git repository hosting git at public.arvados.org
Tue May 16 16:21:28 UTC 2023


Summary of changes:
 .../multiselectToolbar/MultiselectToolbar.tsx      | 87 ++++++++++++++++------
 src/store/store.ts                                 |  1 +
 2 files changed, 67 insertions(+), 21 deletions(-)

       via  5534b46d016782428c8acc5ee2ff91958f9a0e0c (commit)
      from  c79e65e93760c758aa297b9eb5561c69b36a1d46 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 5534b46d016782428c8acc5ee2ff91958f9a0e0c
Author: Lisa Knox <lisaknox83 at gmail.com>
Date:   Tue May 16 12:21:23 2023 -0400

    15768: reomve works except for 403  Arvados-DCO-1.1-Signed-off-by: Lisa Knox <lisa.knox at curii.com>

diff --git a/src/components/multiselectToolbar/MultiselectToolbar.tsx b/src/components/multiselectToolbar/MultiselectToolbar.tsx
index 94570c6c..9e36289c 100644
--- a/src/components/multiselectToolbar/MultiselectToolbar.tsx
+++ b/src/components/multiselectToolbar/MultiselectToolbar.tsx
@@ -7,8 +7,13 @@ import { connect } from 'react-redux';
 import { StyleRulesCallback, withStyles, WithStyles, Toolbar, Button } from '@material-ui/core';
 import { ArvadosTheme } from 'common/custom-theme';
 import { RootState } from 'store/store';
+import { Dispatch } from 'redux';
 import { CopyToClipboardSnackbar } from 'components/copy-to-clipboard-snackbar/copy-to-clipboard-snackbar';
 import { TCheckedList } from 'components/data-table/data-table';
+import { openRemoveProcessDialog } from 'store/processes/processes-actions';
+import { processResourceActionSet } from '../../views-components/context-menu/action-sets/process-resource-action-set';
+import { ContextMenuResource } from 'store/context-menu/context-menu-actions';
+import { toggleTrashed } from 'store/trash/trash-actions';
 
 type CssRules = 'root' | 'button';
 
@@ -19,43 +24,50 @@ const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
     },
     button: {
         color: theme.palette.text.primary,
-        margin: '0.5rem',
+        // margin: '0.5rem',
     },
 });
 
 type MultiselectToolbarAction = {
-    fn: (checkedList) => ReactElement;
-};
-
-export type MultiselectToolbarProps = {
-    buttons: Array<MultiselectToolbarAction>;
-    checkedList: TCheckedList;
+    name: string;
+    fn: string;
 };
 
 export const defaultActions: Array<MultiselectToolbarAction> = [
+    // {
+    //     name: 'copy',
+    //     fn: (name, checkedList) => MSToolbarCopyButton(name, checkedList),
+    // },
     {
-        fn: (checkedList) => MSToolbarCopyButton(checkedList),
+        name: 'remove',
+        fn: 'REMOVE',
     },
 ];
 
-const MSToolbarCopyButton = (checkedList) => {
-    let stringifiedSelectedList: string = '';
-    for (const [key, value] of Object.entries(checkedList)) {
-        if (value === true) {
-            stringifiedSelectedList += key + '\n';
-        }
-    }
-    return <CopyToClipboardSnackbar value={stringifiedSelectedList} children={<div>Copy</div>} />;
+export type MultiselectToolbarProps = {
+    buttons: Array<MultiselectToolbarAction>;
+    checkedList: TCheckedList;
+    copySelected: () => void;
+    removeSelected: (selectedList: TCheckedList) => void;
 };
 
-export const MultiselectToolbar = connect(mapStateToProps)(
+export const MultiselectToolbar = connect(
+    mapStateToProps,
+    mapDispatchToProps
+)(
     withStyles(styles)((props: MultiselectToolbarProps & WithStyles<CssRules>) => {
+        console.log(props);
+        const actions = {
+            COPY: props.copySelected,
+            REMOVE: props.removeSelected,
+        };
+
         const { classes, buttons, checkedList } = props;
         return (
             <Toolbar className={classes.root}>
-                {buttons.map((btn, i) => (
-                    <Button key={i} className={classes.button}>
-                        {btn.fn(checkedList)}
+                {buttons.map((btn) => (
+                    <Button key={btn.name} className={classes.button} onClick={() => actions[btn.fn](checkedList)}>
+                        {btn.name}
                     </Button>
                 ))}
             </Toolbar>
@@ -63,8 +75,41 @@ export const MultiselectToolbar = connect(mapStateToProps)(
     })
 );
 
+function selectedToString(checkedList: TCheckedList) {
+    let stringifiedSelectedList: string = '';
+    for (const [key, value] of Object.entries(checkedList)) {
+        if (value === true) {
+            stringifiedSelectedList += key + ',';
+        }
+    }
+    return stringifiedSelectedList.slice(0, -1);
+}
+
+function selectedToArray<T>(checkedList: TCheckedList): Array<T | string> {
+    const arrayifiedSelectedList: Array<string> = [];
+    for (const [key, value] of Object.entries(checkedList)) {
+        if (value === true) {
+            arrayifiedSelectedList.push(key);
+        }
+    }
+    return arrayifiedSelectedList;
+}
+
 function mapStateToProps(state: RootState) {
+    // console.log(state.resources, state.multiselect.checkedList);
+    return {
+        checkedList: state.multiselect.checkedList as TCheckedList,
+        // selectedList: state.multiselect.checkedList.forEach(processUUID=>containerRequestUUID)
+    };
+}
+
+function mapDispatchToProps(dispatch: Dispatch) {
     return {
-        checkedList: state.multiselect.checkedList,
+        copySelected: () => {},
+        removeSelected: (selectedList) => removeMany(dispatch, selectedList),
     };
 }
+
+function removeMany(dispatch: Dispatch, checkedList: TCheckedList): void {
+    selectedToArray(checkedList).forEach((uuid: string) => dispatch<any>(openRemoveProcessDialog(uuid)));
+}
diff --git a/src/store/store.ts b/src/store/store.ts
index b6edaaef..f4b82cb9 100644
--- a/src/store/store.ts
+++ b/src/store/store.ts
@@ -113,6 +113,7 @@ export function configureStore(history: History, services: ServiceRepository, co
     const publicFavoritesMiddleware = dataExplorerMiddleware(new PublicFavoritesMiddlewareService(services, PUBLIC_FAVORITE_PANEL_ID));
     const collectionsContentAddress = dataExplorerMiddleware(new CollectionsWithSameContentAddressMiddlewareService(services, COLLECTIONS_CONTENT_ADDRESS_PANEL_ID));
     const subprocessMiddleware = dataExplorerMiddleware(new SubprocessMiddlewareService(services, SUBPROCESS_PANEL_ID));
+
     const redirectToMiddleware = (store: any) => (next: any) => (action: any) => {
         const state = store.getState();
 

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list