From: Lisa Knox Date: Wed, 6 Dec 2023 16:22:00 +0000 (-0500) Subject: 21128: fixed navToOutput and circular deps Arvados-DCO-1.1-Signed-off-by: Lisa Knox... X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/73e8a8225a4a702e3392da9ac9bb50ff479377c0 21128: fixed navToOutput and circular deps Arvados-DCO-1.1-Signed-off-by: Lisa Knox --- diff --git a/src/components/multiselect-toolbar/MultiselectToolbar.tsx b/src/components/multiselect-toolbar/MultiselectToolbar.tsx index fc97dbfe..079078f8 100644 --- a/src/components/multiselect-toolbar/MultiselectToolbar.tsx +++ b/src/components/multiselect-toolbar/MultiselectToolbar.tsx @@ -13,7 +13,8 @@ import { ContextMenuResource } from "store/context-menu/context-menu-actions"; import { Resource, ResourceKind, extractUuidKind } from "models/resource"; import { getResource } from "store/resources/resources"; import { ResourcesState } from "store/resources/resources"; -import { MultiSelectMenuAction, MultiSelectMenuActionSet, MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions"; +import { MultiSelectMenuAction, MultiSelectMenuActionSet } from "views-components/multiselect-toolbar/ms-menu-actions"; +import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions"; import { ContextMenuAction } from "views-components/context-menu/context-menu-action-set"; import { multiselectActionsFilters, TMultiselectActionsFilters, msMenuResourceKind } from "./ms-toolbar-action-filters"; import { kindToActionSet, findActionByName } from "./ms-kind-action-differentiator"; @@ -32,6 +33,7 @@ import { CollectionResource } from "models/collection"; import { getProcess } from "store/processes/process"; import { Process } from "store/processes/process"; import { PublicFavoritesState } from "store/public-favorites/public-favorites-reducer"; +import { isExactlyOneSelected } from "store/multiselect/multiselect-actions"; type CssRules = "root" | "button" | "iconContainer"; @@ -267,17 +269,6 @@ function selectActionsByKind(currentResourceKinds: Array, filterSet: TMu }); } -export const isExactlyOneSelected = (checkedList: TCheckedList) => { - let tally = 0; - let current = ''; - for (const uuid in checkedList) { - if (checkedList[uuid] === true) { - tally++; - current = uuid; - } - } - return tally === 1 ? current : null -}; //--------------------------------------------------// diff --git a/src/store/multiselect/multiselect-actions.tsx b/src/store/multiselect/multiselect-actions.tsx index 9b564486..a246ddbc 100644 --- a/src/store/multiselect/multiselect-actions.tsx +++ b/src/store/multiselect/multiselect-actions.tsx @@ -3,7 +3,14 @@ // SPDX-License-Identifier: AGPL-3.0 import { TCheckedList } from "components/data-table/data-table"; -import { isExactlyOneSelected } from "components/multiselect-toolbar/MultiselectToolbar"; +import { ContainerRequestResource } from "models/container-request"; +import { Dispatch } from "redux"; +import { navigateTo } from "store/navigation/navigation-action"; +import { snackbarActions } from "store/snackbar/snackbar-actions"; +import { RootState } from "store/store"; +import { ServiceRepository } from "services/services"; +import { SnackbarKind } from "store/snackbar/snackbar-actions"; +import { ContextMenuResource } from 'store/context-menu/context-menu-actions'; export const multiselectActionContants = { TOGGLE_VISIBLITY: "TOGGLE_VISIBLITY", @@ -16,6 +23,27 @@ export const multiselectActionContants = { REMOVE_DISABLED: 'REMOVE_DISABLED', }; +export const msNavigateToOutput = (resource: ContextMenuResource | ContainerRequestResource) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + try { + await services.collectionService.get(resource.outputUuid || ''); + dispatch(navigateTo(resource.outputUuid || '')); + } catch { + dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Output collection was trashed or deleted.", hideDuration: 4000, kind: SnackbarKind.WARNING })); + } +}; + +export const isExactlyOneSelected = (checkedList: TCheckedList) => { + let tally = 0; + let current = ''; + for (const uuid in checkedList) { + if (checkedList[uuid] === true) { + tally++; + current = uuid; + } + } + return tally === 1 ? current : null +}; + export const toggleMSToolbar = (isVisible: boolean) => { return dispatch => { dispatch({ type: multiselectActionContants.TOGGLE_VISIBLITY, payload: isVisible }); diff --git a/src/store/process-panel/process-panel-actions.ts b/src/store/process-panel/process-panel-actions.ts index 81f8dd6b..2111afdb 100644 --- a/src/store/process-panel/process-panel-actions.ts +++ b/src/store/process-panel/process-panel-actions.ts @@ -20,6 +20,7 @@ import { CommandInputParameter, getIOParamId, WorkflowInputsData } from "models/ import { getIOParamDisplayValue, ProcessIOParameter } from "views/process-panel/process-io-card"; import { OutputDetails, NodeInstanceType, NodeInfo } from "./process-panel"; import { AuthState } from "store/auth/auth-reducer"; +import { ContextMenuResource } from "store/context-menu/context-menu-actions"; export const processPanelActions = unionize({ RESET_PROCESS_PANEL: ofType<{}>(), @@ -53,10 +54,10 @@ export const loadProcessPanel = (uuid: string) => async (dispatch: Dispatch, get dispatch(loadSubprocessPanel()); }; -export const navigateToOutput = (uuid: string) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { +export const navigateToOutput = (resource: ContextMenuResource | ContainerRequestResource) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { try { - await services.collectionService.get(uuid); - dispatch(navigateTo(uuid)); + await services.collectionService.get(resource.outputUuid || ''); + dispatch(navigateTo(resource.outputUuid || '')); } catch { dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Output collection was trashed or deleted.", hideDuration: 4000, kind: SnackbarKind.WARNING })); } diff --git a/src/store/trash/trash-actions.ts b/src/store/trash/trash-actions.ts index dd442188..f4e3d3f0 100644 --- a/src/store/trash/trash-actions.ts +++ b/src/store/trash/trash-actions.ts @@ -77,7 +77,6 @@ export const toggleCollectionTrashed = async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository): Promise => { let errorMessage = ""; let successMessage = ""; - console.log('hi') dispatch(addDisabledButton(MultiSelectMenuActionNames.MOVE_TO_TRASH)) try { if (isTrashed) { diff --git a/src/views-components/context-menu/action-sets/process-resource-action-set.ts b/src/views-components/context-menu/action-sets/process-resource-action-set.ts index 64b90ff4..2aa7faa1 100644 --- a/src/views-components/context-menu/action-sets/process-resource-action-set.ts +++ b/src/views-components/context-menu/action-sets/process-resource-action-set.ts @@ -60,8 +60,8 @@ export const readOnlyProcessResourceActionSet: ContextMenuActionSet = [ icon: OutputIcon, name: "Outputs", execute: (dispatch, resources) => { - if (resources[0].outputUuid) { - dispatch(navigateToOutput(resources[0].outputUuid)); + if (resources[0]) { + dispatch(navigateToOutput(resources[0])); } }, }, diff --git a/src/views-components/context-menu/context-menu.tsx b/src/views-components/context-menu/context-menu.tsx index 2a5cccc0..877d927a 100644 --- a/src/views-components/context-menu/context-menu.tsx +++ b/src/views-components/context-menu/context-menu.tsx @@ -16,7 +16,7 @@ type DataProps = Pick & { resou const mapStateToProps = (state: RootState): DataProps => { const { open, position, resource } = state.contextMenu; - + const fullResource = resource ? state.resources[resource?.uuid] as any : resource const filteredItems = getMenuActionSet(resource).map(group => group.filter(item => { if (resource && item.filters) { @@ -32,7 +32,7 @@ const mapStateToProps = (state: RootState): DataProps => { anchorEl: resource ? createAnchorAt(position) : undefined, items: filteredItems, open, - resource, + resource: fullResource, }; }; diff --git a/src/views-components/multiselect-toolbar/ms-collection-action-set.ts b/src/views-components/multiselect-toolbar/ms-collection-action-set.ts index cd7ce832..a8a8f457 100644 --- a/src/views-components/multiselect-toolbar/ms-collection-action-set.ts +++ b/src/views-components/multiselect-toolbar/ms-collection-action-set.ts @@ -7,7 +7,8 @@ import { openMoveCollectionDialog } from "store/collections/collection-move-acti import { openCollectionCopyDialog, openMultiCollectionCopyDialog } from "store/collections/collection-copy-actions"; import { toggleCollectionTrashed } from "store/trash/trash-actions"; import { ContextMenuResource } from "store/context-menu/context-menu-actions"; -import { msCommonActionSet, MultiSelectMenuActionSet, MultiSelectMenuActionNames, MultiSelectMenuAction } from "./ms-menu-actions"; +import { msCommonActionSet, MultiSelectMenuActionSet, MultiSelectMenuAction } from "./ms-menu-actions"; +import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions"; import { TrashIcon, Link, FolderSharedIcon } from "components/icon/icon"; import { openCollectionUpdateDialog } from "store/collections/collection-update-actions"; import { copyToClipboardAction } from "store/open-in-new-tab/open-in-new-tab.actions"; @@ -47,10 +48,10 @@ const msToggleTrashAction: MultiSelectMenuAction = { } const msEditCollection: MultiSelectMenuAction = { + name: MultiSelectMenuActionNames.EDIT_COLLECTION, icon: RenameIcon, hasAlts: false, isForMulti: false, - name: "Edit collection", execute: (dispatch, resources) => { dispatch(openCollectionUpdateDialog(resources[0])); }, diff --git a/src/views-components/multiselect-toolbar/ms-process-action-set.ts b/src/views-components/multiselect-toolbar/ms-process-action-set.ts index 467da899..a5a4f0fb 100644 --- a/src/views-components/multiselect-toolbar/ms-process-action-set.ts +++ b/src/views-components/multiselect-toolbar/ms-process-action-set.ts @@ -6,9 +6,10 @@ import { MoveToIcon, RemoveIcon, ReRunProcessIcon, OutputIcon, RenameIcon } from import { openMoveProcessDialog } from "store/processes/process-move-actions"; import { openCopyProcessDialog } from "store/processes/process-copy-actions"; import { openRemoveProcessDialog } from "store/processes/processes-actions"; -import { MultiSelectMenuAction, MultiSelectMenuActionSet, MultiSelectMenuActionNames, msCommonActionSet } from "./ms-menu-actions"; -import { navigateToOutput } from "store/process-panel/process-panel-actions"; +import { MultiSelectMenuAction, MultiSelectMenuActionSet, msCommonActionSet } from "./ms-menu-actions"; +import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions"; import { openProcessUpdateDialog } from "store/processes/process-update-actions"; +import { msNavigateToOutput } from "store/multiselect/multiselect-actions"; const msCopyAndRerunProcess: MultiSelectMenuAction = { name: MultiSelectMenuActionNames.COPY_AND_RERUN_PROCESS, @@ -48,8 +49,8 @@ const msViewOutputs: MultiSelectMenuAction = { hasAlts: false, isForMulti: false, execute: (dispatch, resources) => { - if (resources[0].outputUuid) { - dispatch(navigateToOutput(resources[0].outputUuid)); + if (resources[0]) { + dispatch(msNavigateToOutput(resources[0])); } }, } 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 c394ea90..9fafca0d 100644 --- a/src/views-components/multiselect-toolbar/ms-project-action-set.ts +++ b/src/views-components/multiselect-toolbar/ms-project-action-set.ts @@ -2,7 +2,8 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { MultiSelectMenuAction, MultiSelectMenuActionSet, MultiSelectMenuActionNames, msCommonActionSet } from 'views-components/multiselect-toolbar/ms-menu-actions'; +import { MultiSelectMenuAction, MultiSelectMenuActionSet, msCommonActionSet } from 'views-components/multiselect-toolbar/ms-menu-actions'; +import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions"; import { openMoveProjectDialog } from 'store/projects/project-move-actions'; import { toggleProjectTrashed } from 'store/trash/trash-actions'; import { diff --git a/src/views-components/multiselect-toolbar/ms-workflow-action-set.ts b/src/views-components/multiselect-toolbar/ms-workflow-action-set.ts index 4095828d..f856d9ac 100644 --- a/src/views-components/multiselect-toolbar/ms-workflow-action-set.ts +++ b/src/views-components/multiselect-toolbar/ms-workflow-action-set.ts @@ -4,7 +4,8 @@ import { openRunProcess, deleteWorkflow } from 'store/workflow-panel/workflow-panel-actions'; import { StartIcon, TrashIcon } from 'components/icon/icon'; -import { MultiSelectMenuAction, MultiSelectMenuActionSet, MultiSelectMenuActionNames, msCommonActionSet } from './ms-menu-actions'; +import { MultiSelectMenuAction, MultiSelectMenuActionSet, msCommonActionSet } from './ms-menu-actions'; +import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions"; const { OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, RUN_WORKFLOW, DELETE_WORKFLOW } = MultiSelectMenuActionNames; diff --git a/src/views/process-panel/process-details-attributes.tsx b/src/views/process-panel/process-details-attributes.tsx index ffacd967..1f3a73a5 100644 --- a/src/views/process-panel/process-details-attributes.tsx +++ b/src/views/process-panel/process-details-attributes.tsx @@ -75,12 +75,12 @@ const mapStateToProps = (state: RootState, props: { request: ProcessResource }) }; interface ProcessDetailsAttributesActionProps { - navigateToOutput: (uuid: string) => void; + navigateToOutput: (resource: ContainerRequestResource) => void; openWorkflow: (uuid: string) => void; } const mapDispatchToProps = (dispatch: Dispatch): ProcessDetailsAttributesActionProps => ({ - navigateToOutput: (uuid) => dispatch(navigateToOutput(uuid)), + navigateToOutput: (resource) => dispatch(navigateToOutput(resource)), openWorkflow: (uuid) => dispatch(openWorkflow(uuid)), }); @@ -156,7 +156,7 @@ export const ProcessDetailsAttributes = withStyles(styles, { withTheme: true })( - {containerRequest.outputUuid && props.navigateToOutput(containerRequest.outputUuid!)}> + {containerRequest.outputUuid && props.navigateToOutput(containerRequest!)}> }