From 964ad5378b3cb1a3f02b8c89afb13340e69337a1 Mon Sep 17 00:00:00 2001 From: Lisa Knox Date: Thu, 16 Nov 2023 14:05:49 -0500 Subject: [PATCH] 21128: fixed unfreezing from toolbar Arvados-DCO-1.1-Signed-off-by: Lisa Knox --- .../MultiselectToolbar.tsx | 32 +++++++++++-------- .../ms-project-action-set.ts | 14 ++++---- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/components/multiselect-toolbar/MultiselectToolbar.tsx b/src/components/multiselect-toolbar/MultiselectToolbar.tsx index 927da8c3..227fd2b1 100644 --- a/src/components/multiselect-toolbar/MultiselectToolbar.tsx +++ b/src/components/multiselect-toolbar/MultiselectToolbar.tsx @@ -43,17 +43,21 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ export type MultiselectToolbarProps = { checkedList: TCheckedList; selectedUuid: string | null - resources: ResourcesState; + iconProps: IconProps executeMulti: (action: ContextMenuAction, checkedList: TCheckedList, resources: ResourcesState) => void; - favorites: FavoritesState }; +type IconProps = { + resources: ResourcesState; + favorites: FavoritesState +} + export const MultiselectToolbar = connect( mapStateToProps, mapDispatchToProps )( withStyles(styles)((props: MultiselectToolbarProps & WithStyles) => { - const { classes, checkedList, resources, selectedUuid: singleSelectedUuid, favorites } = props; + const { classes, checkedList, selectedUuid: singleSelectedUuid, iconProps } = props; const currentResourceKinds = Array.from(selectedToKindSet(checkedList)); const currentPathIsTrash = window.location.pathname === "/trash"; @@ -75,12 +79,12 @@ export const MultiselectToolbar = connect( action.hasAlts ? ( - props.executeMulti(action, checkedList, resources)}> - {action.useAlts(singleSelectedUuid, resources, favorites) ? action.altIcon && action.altIcon({}): action.icon({})} + props.executeMulti(action, checkedList, iconProps.resources)}> + {action.useAlts(singleSelectedUuid, iconProps) ? action.altIcon && action.altIcon({}): action.icon({})} ) : ( @@ -90,7 +94,7 @@ export const MultiselectToolbar = connect( key={i} disableFocusListener > - props.executeMulti(action, checkedList, resources)}>{action.icon({})} + props.executeMulti(action, checkedList, iconProps.resources)}>{action.icon({})} ) ) @@ -194,13 +198,15 @@ const isExactlyOneSelected = (checkedList: TCheckedList) => { //--------------------------------------------------// -function mapStateToProps(state: RootState) { +function mapStateToProps({multiselect, resources, favorites}: RootState) { return { - checkedList: state.multiselect.checkedList as TCheckedList, - selectedUuid: isExactlyOneSelected(state.multiselect.checkedList), - resources: state.resources, - favorites: state.favorites - }; + checkedList: multiselect.checkedList as TCheckedList, + selectedUuid: isExactlyOneSelected(multiselect.checkedList), + iconProps: { + resources, + favorites + } + } } function mapDispatchToProps(dispatch: Dispatch) { diff --git a/src/views-components/multiselect-toolbar/ms-project-action-set.ts b/src/views-components/multiselect-toolbar/ms-project-action-set.ts index dc620a19..b61cded5 100644 --- a/src/views-components/multiselect-toolbar/ms-project-action-set.ts +++ b/src/views-components/multiselect-toolbar/ms-project-action-set.ts @@ -41,8 +41,8 @@ export const msToggleFavoriteAction = { altName: 'Remove from Favorites', altIcon: RemoveFavoriteIcon, isForMulti: false, - useAlts: (uuid, resources, favorites) => { - return checkFavorite(uuid, favorites); + useAlts: (uuid, iconProps) => { + return checkFavorite(uuid, iconProps.favorites); }, execute: (dispatch, resources) => { dispatch(toggleFavorite(resources[0])).then(() => { @@ -138,8 +138,8 @@ export const msToggleTrashAction = { altName: 'Restore from Trash', altIcon: RestoreFromTrashIcon, isForMulti: true, - useAlts: (uuid, resources, favorites = []) => { - return uuid ? (getResource(uuid)(resources) as any).isTrashed : false; + useAlts: (uuid, iconProps) => { + return uuid ? (getResource(uuid)(iconProps.resources) as any).isTrashed : false; }, execute: (dispatch, resources) => { for (const resource of [...resources]) { @@ -155,9 +155,11 @@ export const msFreezeProjectAction = { altName: 'Unfreeze Project', altIcon: UnfreezeIcon, isForMulti: false, - useAlts: () => false, + useAlts: (uuid, iconProps) => { + return uuid ? !!(getResource(uuid)(iconProps.resources) as any).frozenByUuid : false; + }, execute: (dispatch, resources) => { - if (resources[0].isFrozen) { + if (resources[0].frozenByUuid) { dispatch(unfreezeProject(resources[0].uuid)); } else { dispatch(freezeProject(resources[0].uuid)); -- 2.30.2