From 4e508e00be54a40845147e17b2410d27a8516dc1 Mon Sep 17 00:00:00 2001 From: Stephen Smith Date: Fri, 17 May 2024 11:20:19 -0400 Subject: [PATCH] 21225: Rename project panel middleware to data middleware and separate data explorer Also removes unnecessary dependencies on the middleware like references to column names from other DataExplorers, shared getFilters that won't be able to be shared in the future, Arvados-DCO-1.1-Signed-off-by: Stephen Smith --- .../collections/collection-move-actions.ts | 4 +- .../favorite-panel-middleware-service.ts | 2 +- .../store/processes/process-move-actions.ts | 4 +- .../store/processes/process-update-actions.ts | 4 +- .../src/store/processes/processes-actions.ts | 4 +- .../processes/processes-middleware-service.ts | 2 +- .../project-panel-action-bind.ts | 4 +- .../project-panel/project-panel-action.ts | 7 +- ... project-panel-data-middleware-service.ts} | 16 +- .../store/projects/project-lock-actions.ts | 8 +- .../store/projects/project-move-actions.ts | 4 +- .../store/projects/project-update-actions.ts | 4 +- .../search-results-middleware-service.ts | 8 +- .../shared-with-me-middleware-service.ts | 27 ++- services/workbench2/src/store/store.ts | 8 +- .../trash-panel-middleware-service.ts | 4 +- .../src/store/trash/trash-actions.ts | 6 +- .../src/store/workbench/workbench-actions.ts | 8 +- .../workflow-panel/workflow-panel-actions.ts | 10 +- .../project-panel/project-panel-data.tsx | 198 ++++++++++++++++ .../src/views/project-panel/project-panel.tsx | 217 +----------------- .../workbench2/src/websocket/websocket.ts | 4 +- 22 files changed, 283 insertions(+), 270 deletions(-) rename services/workbench2/src/store/project-panel/{project-panel-middleware-service.ts => project-panel-data-middleware-service.ts} (94%) create mode 100644 services/workbench2/src/views/project-panel/project-panel-data.tsx diff --git a/services/workbench2/src/store/collections/collection-move-actions.ts b/services/workbench2/src/store/collections/collection-move-actions.ts index 56c7b24c60..89018867fe 100644 --- a/services/workbench2/src/store/collections/collection-move-actions.ts +++ b/services/workbench2/src/store/collections/collection-move-actions.ts @@ -9,7 +9,7 @@ import { ServiceRepository } from "services/services"; import { RootState } from "store/store"; import { getCommonResourceServiceError, CommonResourceServiceError } from "services/common-service/common-resource-service"; import { snackbarActions, SnackbarKind } from "store/snackbar/snackbar-actions"; -import { projectPanelActions } from "store/project-panel/project-panel-action-bind"; +import { projectPanelDataActions } from "store/project-panel/project-panel-action-bind"; import { MoveToFormDialogData } from "store/move-to-dialog/move-to-dialog"; import { resetPickerProjectTree } from "store/project-tree-picker/project-tree-picker-actions"; import { progressIndicatorActions } from "store/progress-indicator/progress-indicator-actions"; @@ -36,7 +36,7 @@ export const moveCollection = cachedCollection = await services.collectionService.get(resource.uuid); } const collection = await services.collectionService.update(resource.uuid, { ownerUuid: resource.ownerUuid }); - dispatch(projectPanelActions.REQUEST_ITEMS()); + dispatch(projectPanelDataActions.REQUEST_ITEMS()); dispatch(dialogActions.CLOSE_DIALOG({ id: COLLECTION_MOVE_FORM_NAME })); dispatch(progressIndicatorActions.STOP_WORKING(COLLECTION_MOVE_FORM_NAME)); return { ...cachedCollection, ...collection }; diff --git a/services/workbench2/src/store/favorite-panel/favorite-panel-middleware-service.ts b/services/workbench2/src/store/favorite-panel/favorite-panel-middleware-service.ts index a15690b3f4..f61ec39240 100644 --- a/services/workbench2/src/store/favorite-panel/favorite-panel-middleware-service.ts +++ b/services/workbench2/src/store/favorite-panel/favorite-panel-middleware-service.ts @@ -16,7 +16,7 @@ import { resourcesActions } from "store/resources/resources-actions"; import { snackbarActions, SnackbarKind } from 'store/snackbar/snackbar-actions'; import { progressIndicatorActions } from 'store/progress-indicator/progress-indicator-actions'; import { getDataExplorer } from "store/data-explorer/data-explorer-reducer"; -import { loadMissingProcessesInformation } from "store/project-panel/project-panel-middleware-service"; +import { loadMissingProcessesInformation } from "store/project-panel/project-panel-data-middleware-service"; import { getDataExplorerColumnFilters } from 'store/data-explorer/data-explorer-middleware-service'; import { serializeSimpleObjectTypeFilters } from '../resource-type-filters/resource-type-filters'; import { ResourceKind } from "models/resource"; diff --git a/services/workbench2/src/store/processes/process-move-actions.ts b/services/workbench2/src/store/processes/process-move-actions.ts index c3ac75f995..1e357cf56b 100644 --- a/services/workbench2/src/store/processes/process-move-actions.ts +++ b/services/workbench2/src/store/processes/process-move-actions.ts @@ -11,7 +11,7 @@ import { getCommonResourceServiceError, CommonResourceServiceError } from "servi import { snackbarActions, SnackbarKind } from "store/snackbar/snackbar-actions"; import { MoveToFormDialogData } from "store/move-to-dialog/move-to-dialog"; import { resetPickerProjectTree } from "store/project-tree-picker/project-tree-picker-actions"; -import { projectPanelActions } from "store/project-panel/project-panel-action-bind"; +import { projectPanelDataActions } from "store/project-panel/project-panel-action-bind"; import { getProcess } from "store/processes/process"; import { initProjectsTreePicker } from "store/tree-picker/tree-picker-actions"; @@ -35,7 +35,7 @@ export const moveProcess = (resource: MoveToFormDialogData) => async (dispatch: try { const process = await services.containerRequestService.get(resource.uuid); await services.containerRequestService.update(resource.uuid, { ownerUuid: resource.ownerUuid }); - dispatch(projectPanelActions.REQUEST_ITEMS()); + dispatch(projectPanelDataActions.REQUEST_ITEMS()); dispatch(dialogActions.CLOSE_DIALOG({ id: PROCESS_MOVE_FORM_NAME })); return process; } catch (e) { diff --git a/services/workbench2/src/store/processes/process-update-actions.ts b/services/workbench2/src/store/processes/process-update-actions.ts index c7bd2c7bee..b6b5ca829e 100644 --- a/services/workbench2/src/store/processes/process-update-actions.ts +++ b/services/workbench2/src/store/processes/process-update-actions.ts @@ -9,7 +9,7 @@ import { dialogActions } from "store/dialog/dialog-actions"; import { getCommonResourceServiceError, CommonResourceServiceError } from "services/common-service/common-resource-service"; import { ServiceRepository } from "services/services"; import { getProcess } from "store/processes/process"; -import { projectPanelActions } from "store/project-panel/project-panel-action-bind"; +import { projectPanelDataActions } from "store/project-panel/project-panel-action-bind"; import { snackbarActions, SnackbarKind } from "store/snackbar/snackbar-actions"; export interface ProcessUpdateFormDialogData { @@ -39,7 +39,7 @@ export const updateProcess = name: resource.name, description: resource.description, }); - dispatch(projectPanelActions.REQUEST_ITEMS()); + dispatch(projectPanelDataActions.REQUEST_ITEMS()); dispatch(dialogActions.CLOSE_DIALOG({ id: PROCESS_UPDATE_FORM_NAME })); return updatedProcess; } catch (e) { diff --git a/services/workbench2/src/store/processes/processes-actions.ts b/services/workbench2/src/store/processes/processes-actions.ts index eadb05e5e1..9e49aa97d8 100644 --- a/services/workbench2/src/store/processes/processes-actions.ts +++ b/services/workbench2/src/store/processes/processes-actions.ts @@ -9,7 +9,7 @@ import { updateResources } from "store/resources/resources-actions"; import { Process } from "./process"; import { dialogActions } from "store/dialog/dialog-actions"; import { snackbarActions, SnackbarKind } from "store/snackbar/snackbar-actions"; -import { projectPanelActions } from "store/project-panel/project-panel-action-bind"; +import { projectPanelDataActions } from "store/project-panel/project-panel-action-bind"; import { navigateToRunProcess } from "store/navigation/navigation-action"; import { goToStep, runProcessPanelActions } from "store/run-process-panel/run-process-panel-actions"; import { getResource } from "store/resources/resources"; @@ -329,7 +329,7 @@ export const removeProcessPermanently = (uuid: string) => async (dispatch: Dispa try { dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Removing ...", kind: SnackbarKind.INFO })); await services.containerRequestService.delete(process.uuid, false); - dispatch(projectPanelActions.REQUEST_ITEMS()); + dispatch(projectPanelDataActions.REQUEST_ITEMS()); dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Removed.", hideDuration: 2000, kind: SnackbarKind.SUCCESS })); } catch (e) { const error = getCommonResourceServiceError(e); diff --git a/services/workbench2/src/store/processes/processes-middleware-service.ts b/services/workbench2/src/store/processes/processes-middleware-service.ts index 3154e1aec9..f1e0936b5b 100644 --- a/services/workbench2/src/store/processes/processes-middleware-service.ts +++ b/services/workbench2/src/store/processes/processes-middleware-service.ts @@ -19,7 +19,7 @@ import { DataColumns } from 'components/data-table/data-table'; import { ProcessStatusFilter, buildProcessStatusFilters } from '../resource-type-filters/resource-type-filters'; import { ContainerRequestResource, containerRequestFieldsNoMounts } from 'models/container-request'; import { progressIndicatorActions } from '../progress-indicator/progress-indicator-actions'; -import { loadMissingProcessesInformation } from '../project-panel/project-panel-middleware-service'; +import { loadMissingProcessesInformation } from '../project-panel/project-panel-data-middleware-service'; export class ProcessesMiddlewareService extends DataExplorerMiddlewareService { constructor(private services: ServiceRepository, private actions: BoundDataExplorerActions, id: string) { diff --git a/services/workbench2/src/store/project-panel/project-panel-action-bind.ts b/services/workbench2/src/store/project-panel/project-panel-action-bind.ts index a84039571b..598f6f7442 100644 --- a/services/workbench2/src/store/project-panel/project-panel-action-bind.ts +++ b/services/workbench2/src/store/project-panel/project-panel-action-bind.ts @@ -7,5 +7,5 @@ import { bindDataExplorerActions } from "store/data-explorer/data-explorer-actio // These are split into a separate file to avoid circular imports causing // invariant violations with unit tests -export const PROJECT_PANEL_ID = "projectPanel"; -export const projectPanelActions = bindDataExplorerActions(PROJECT_PANEL_ID); +export const PROJECT_PANEL_DATA_ID = "projectPanelData"; +export const projectPanelDataActions = bindDataExplorerActions(PROJECT_PANEL_DATA_ID); diff --git a/services/workbench2/src/store/project-panel/project-panel-action.ts b/services/workbench2/src/store/project-panel/project-panel-action.ts index a0547ced23..af961a8dab 100644 --- a/services/workbench2/src/store/project-panel/project-panel-action.ts +++ b/services/workbench2/src/store/project-panel/project-panel-action.ts @@ -7,7 +7,7 @@ import { propertiesActions } from "store/properties/properties-actions"; import { RootState } from "store/store"; import { getProperty } from "store/properties/properties"; import { loadProject } from "store/workbench/workbench-actions"; -import { projectPanelActions } from "store/project-panel/project-panel-action-bind"; +import { projectPanelDataActions } from "store/project-panel/project-panel-action-bind"; export const PROJECT_PANEL_CURRENT_UUID = "projectPanelCurrentUuid"; export const IS_PROJECT_PANEL_TRASHED = "isProjectPanelTrashed"; @@ -15,8 +15,9 @@ export const IS_PROJECT_PANEL_TRASHED = "isProjectPanelTrashed"; export const openProjectPanel = (projectUuid: string) => async (dispatch: Dispatch) => { await dispatch(loadProject(projectUuid)); dispatch(propertiesActions.SET_PROPERTY({ key: PROJECT_PANEL_CURRENT_UUID, value: projectUuid })); - dispatch(projectPanelActions.RESET_EXPLORER_SEARCH_VALUE()); - dispatch(projectPanelActions.REQUEST_ITEMS()); + + dispatch(projectPanelDataActions.RESET_EXPLORER_SEARCH_VALUE()); + dispatch(projectPanelDataActions.REQUEST_ITEMS()); }; export const getProjectPanelCurrentUuid = (state: RootState) => getProperty(PROJECT_PANEL_CURRENT_UUID)(state.properties); diff --git a/services/workbench2/src/store/project-panel/project-panel-middleware-service.ts b/services/workbench2/src/store/project-panel/project-panel-data-middleware-service.ts similarity index 94% rename from services/workbench2/src/store/project-panel/project-panel-middleware-service.ts rename to services/workbench2/src/store/project-panel/project-panel-data-middleware-service.ts index 61c89cd6a7..6e599f5c34 100644 --- a/services/workbench2/src/store/project-panel/project-panel-middleware-service.ts +++ b/services/workbench2/src/store/project-panel/project-panel-data-middleware-service.ts @@ -8,7 +8,7 @@ import { getDataExplorerColumnFilters, listResultsToDataExplorerItemsMeta, } from "store/data-explorer/data-explorer-middleware-service"; -import { ProjectPanelColumnNames } from "views/project-panel/project-panel"; +import { ProjectPanelDataColumnNames } from "views/project-panel/project-panel-data"; import { RootState } from "store/store"; import { DataColumns } from "components/data-table/data-table"; import { ServiceRepository } from "services/services"; @@ -18,7 +18,7 @@ import { FilterBuilder, joinFilters } from "services/api/filter-builder"; import { GroupContentsResource, GroupContentsResourcePrefix } from "services/groups-service/groups-service"; import { updateFavorites } from "store/favorites/favorites-actions"; import { IS_PROJECT_PANEL_TRASHED, getProjectPanelCurrentUuid } from "store/project-panel/project-panel-action"; -import { projectPanelActions } from "store/project-panel/project-panel-action-bind"; +import { projectPanelDataActions } from "store/project-panel/project-panel-action-bind"; import { Dispatch, MiddlewareAPI } from "redux"; import { ProjectResource } from "models/project"; import { updateResources } from "store/resources/resources-actions"; @@ -35,11 +35,11 @@ import { updatePublicFavorites } from "store/public-favorites/public-favorites-a import { selectedFieldsOfGroup } from "models/group"; import { defaultCollectionSelectedFields } from "models/collection"; import { containerRequestFieldsNoMounts } from "models/container-request"; -import { ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set"; +import { ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set"; import { removeDisabledButton } from "store/multiselect/multiselect-actions"; import { dataExplorerActions } from "store/data-explorer/data-explorer-action"; -export class ProjectPanelMiddlewareService extends DataExplorerMiddlewareService { +export class ProjectPanelDataMiddlewareService extends DataExplorerMiddlewareService { constructor(private services: ServiceRepository, id: string) { super(id); } @@ -66,7 +66,7 @@ export class ProjectPanelMiddlewareService extends DataExplorerMiddlewareService api.dispatch(setItems(response)); } catch (e) { api.dispatch( - projectPanelActions.SET_ITEMS({ + projectPanelDataActions.SET_ITEMS({ items: [], itemsAvailable: 0, page: 0, @@ -80,7 +80,7 @@ export class ProjectPanelMiddlewareService extends DataExplorerMiddlewareService api.dispatch(couldNotFetchProjectContents()); } } finally { - if (!background) { + if (!background) { api.dispatch(progressIndicatorActions.PERSIST_STOP_WORKING(this.getId())); api.dispatch(removeDisabledButton(ContextMenuActionNames.MOVE_TO_TRASH)) } @@ -101,7 +101,7 @@ export const loadMissingProcessesInformation = (resources: GroupContentsResource }; export const setItems = (listResults: ListResults) => - projectPanelActions.SET_ITEMS({ + projectPanelDataActions.SET_ITEMS({ ...listResultsToDataExplorerItemsMeta(listResults), items: listResults.items.map(resource => resource.uuid), }); @@ -116,7 +116,7 @@ export const getParams = (dataExplorer: DataExplorer, isProjectTrashed: boolean) export const getFilters = (dataExplorer: DataExplorer) => { const columns = dataExplorer.columns as DataColumns; - const typeFilters = serializeResourceTypeFilters(getDataExplorerColumnFilters(columns, ProjectPanelColumnNames.TYPE)); + const typeFilters = serializeResourceTypeFilters(getDataExplorerColumnFilters(columns, ProjectPanelDataColumnNames.TYPE)); const statusColumnFilters = getDataExplorerColumnFilters(columns, "Status"); const activeStatusFilter = Object.keys(statusColumnFilters).find(filterName => statusColumnFilters[filterName].selected); diff --git a/services/workbench2/src/store/projects/project-lock-actions.ts b/services/workbench2/src/store/projects/project-lock-actions.ts index 84cea43809..5e9c9ea147 100644 --- a/services/workbench2/src/store/projects/project-lock-actions.ts +++ b/services/workbench2/src/store/projects/project-lock-actions.ts @@ -4,10 +4,10 @@ import { Dispatch } from "redux"; import { ServiceRepository } from "services/services"; -import { projectPanelActions } from "store/project-panel/project-panel-action-bind"; +import { projectPanelDataActions } from "store/project-panel/project-panel-action-bind"; import { loadResource } from "store/resources/resources-actions"; import { RootState } from "store/store"; -import { ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set"; +import { ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set"; import { addDisabledButton, removeDisabledButton } from "store/multiselect/multiselect-actions"; import { snackbarActions, SnackbarKind } from "store/snackbar/snackbar-actions"; @@ -25,7 +25,7 @@ export const freezeProject = (uuid: string) => async (dispatch: Dispatch, getSta dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Could not freeze project', hideDuration: 4000, kind: SnackbarKind.ERROR })); } - dispatch(projectPanelActions.REQUEST_ITEMS()); + dispatch(projectPanelDataActions.REQUEST_ITEMS()); dispatch(loadResource(uuid, false)); dispatch(removeDisabledButton(ContextMenuActionNames.FREEZE_PROJECT)) return updatedProject; @@ -38,7 +38,7 @@ export const unfreezeProject = (uuid: string) => async (dispatch: Dispatch, getS frozenByUuid: null, }); - dispatch(projectPanelActions.REQUEST_ITEMS()); + dispatch(projectPanelDataActions.REQUEST_ITEMS()); dispatch(loadResource(uuid, false)); dispatch(removeDisabledButton(ContextMenuActionNames.FREEZE_PROJECT)) return updatedProject; diff --git a/services/workbench2/src/store/projects/project-move-actions.ts b/services/workbench2/src/store/projects/project-move-actions.ts index 97cd5dbe71..b5355ba402 100644 --- a/services/workbench2/src/store/projects/project-move-actions.ts +++ b/services/workbench2/src/store/projects/project-move-actions.ts @@ -12,7 +12,7 @@ import { getCommonResourceServiceError, CommonResourceServiceError } from "servi import { MoveToFormDialogData } from "store/move-to-dialog/move-to-dialog"; import { resetPickerProjectTree } from "store/project-tree-picker/project-tree-picker-actions"; import { initProjectsTreePicker } from "store/tree-picker/tree-picker-actions"; -import { projectPanelActions } from "store/project-panel/project-panel-action-bind"; +import { projectPanelDataActions } from "store/project-panel/project-panel-action-bind"; import { loadSidePanelTreeProjects } from "../side-panel-tree/side-panel-tree-actions"; export const PROJECT_MOVE_FORM_NAME = "projectMoveFormName"; @@ -34,7 +34,7 @@ export const moveProject = (resource: MoveToFormDialogData) => async (dispatch: dispatch(startSubmit(PROJECT_MOVE_FORM_NAME)); try { const newProject = await services.projectService.update(resource.uuid, { ownerUuid: resource.ownerUuid }); - dispatch(projectPanelActions.REQUEST_ITEMS()); + dispatch(projectPanelDataActions.REQUEST_ITEMS()); dispatch(dialogActions.CLOSE_DIALOG({ id: PROJECT_MOVE_FORM_NAME })); await dispatch(loadSidePanelTreeProjects(userUuid)); diff --git a/services/workbench2/src/store/projects/project-update-actions.ts b/services/workbench2/src/store/projects/project-update-actions.ts index 812490319a..b51a31bc19 100644 --- a/services/workbench2/src/store/projects/project-update-actions.ts +++ b/services/workbench2/src/store/projects/project-update-actions.ts @@ -8,7 +8,7 @@ import { RootState } from "store/store"; import { dialogActions } from "store/dialog/dialog-actions"; import { getCommonResourceServiceError, CommonResourceServiceError } from "services/common-service/common-resource-service"; import { ServiceRepository } from "services/services"; -import { projectPanelActions } from "store/project-panel/project-panel-action-bind"; +import { projectPanelDataActions } from "store/project-panel/project-panel-action-bind"; import { GroupClass } from "models/group"; import { Participant } from "views-components/sharing-dialog/participant-select"; import { ProjectProperties } from "./project-create-actions"; @@ -56,7 +56,7 @@ export const updateProject = }, false ); - dispatch(projectPanelActions.REQUEST_ITEMS()); + dispatch(projectPanelDataActions.REQUEST_ITEMS()); dispatch(reset(PROJECT_UPDATE_FORM_NAME)); dispatch(dialogActions.CLOSE_DIALOG({ id: PROJECT_UPDATE_FORM_NAME })); return updatedProject; diff --git a/services/workbench2/src/store/search-results-panel/search-results-middleware-service.ts b/services/workbench2/src/store/search-results-panel/search-results-middleware-service.ts index 2c444813a1..f7b6e4a25a 100644 --- a/services/workbench2/src/store/search-results-panel/search-results-middleware-service.ts +++ b/services/workbench2/src/store/search-results-panel/search-results-middleware-service.ts @@ -24,7 +24,7 @@ import { getSortColumn } from "store/data-explorer/data-explorer-reducer"; import { FilterBuilder, joinFilters } from 'services/api/filter-builder'; import { DataColumns } from 'components/data-table/data-table'; import { serializeResourceTypeFilters } from 'store//resource-type-filters/resource-type-filters'; -import { ProjectPanelColumnNames } from 'views/project-panel/project-panel'; +import { SearchResultsPanelColumnNames } from 'views/search-results-panel/search-results-panel-view'; import { ResourceKind } from 'models/resource'; import { ContainerRequestResource } from 'models/container-request'; import { progressIndicatorActions } from 'store/progress-indicator/progress-indicator-actions'; @@ -106,7 +106,7 @@ export class SearchResultsMiddlewareService extends DataExplorerMiddlewareServic } } -export const searchSingleCluster = (session: Session, searchValue: string) => +export const searchSingleCluster = (session: Session, searchValue: string) => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { const state = getState(); const dataExplorer = getDataExplorer(state.dataExplorer, SEARCH_RESULTS_PANEL_ID); @@ -116,7 +116,7 @@ export const searchSingleCluster = (session: Session, searchValue: string) => } const params = getParams(dataExplorer, searchValue, session.apiRevision); - + // If the clusterId & search offset has already been fetched, we don't need to fetch the results again if(state.searchBar.searchOffsets[session.clusterId] === params.offset) { return; @@ -148,7 +148,7 @@ export const searchSingleCluster = (session: Session, searchValue: string) => dispatch(progressIndicatorActions.STOP_WORKING(SEARCH_RESULTS_PANEL_ID)) } -const typeFilters = (columns: DataColumns) => serializeResourceTypeFilters(getDataExplorerColumnFilters(columns, ProjectPanelColumnNames.TYPE)); +const typeFilters = (columns: DataColumns) => serializeResourceTypeFilters(getDataExplorerColumnFilters(columns, SearchResultsPanelColumnNames.TYPE)); export const getParams = (dataExplorer: DataExplorer, query: string, apiRevision: number) => ({ ...dataExplorerToListParams(dataExplorer), diff --git a/services/workbench2/src/store/shared-with-me-panel/shared-with-me-middleware-service.ts b/services/workbench2/src/store/shared-with-me-panel/shared-with-me-middleware-service.ts index 1a2bdabab3..af45b42a94 100644 --- a/services/workbench2/src/store/shared-with-me-panel/shared-with-me-middleware-service.ts +++ b/services/workbench2/src/store/shared-with-me-panel/shared-with-me-middleware-service.ts @@ -2,14 +2,14 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { DataExplorerMiddlewareService, listResultsToDataExplorerItemsMeta, dataExplorerToListParams } from '../data-explorer/data-explorer-middleware-service'; +import { DataExplorerMiddlewareService, listResultsToDataExplorerItemsMeta, dataExplorerToListParams, getDataExplorerColumnFilters } from '../data-explorer/data-explorer-middleware-service'; import { ServiceRepository } from 'services/services'; import { MiddlewareAPI, Dispatch } from 'redux'; import { RootState } from 'store/store'; import { getDataExplorer, DataExplorer } from 'store/data-explorer/data-explorer-reducer'; import { updateFavorites } from 'store/favorites/favorites-actions'; import { updateResources } from 'store/resources/resources-actions'; -import { loadMissingProcessesInformation, getFilters } from 'store/project-panel/project-panel-middleware-service'; +import { loadMissingProcessesInformation } from 'store/project-panel/project-panel-data-middleware-service'; import { snackbarActions, SnackbarKind } from 'store/snackbar/snackbar-actions'; import { sharedWithMePanelActions } from './shared-with-me-panel-actions'; import { ListResults } from 'services/common-service/common-service'; @@ -22,6 +22,9 @@ import { updatePublicFavorites } from 'store/public-favorites/public-favorites-a import { FilterBuilder, joinFilters } from 'services/api/filter-builder'; import { progressIndicatorActions } from 'store/progress-indicator/progress-indicator-actions'; import { AuthState } from 'store/auth/auth-reducer'; +import { SharedWithMePanelColumnNames } from 'views/shared-with-me-panel/shared-with-me-panel'; +import { buildProcessStatusFilters, serializeResourceTypeFilters } from 'store/resource-type-filters/resource-type-filters'; +import { DataColumns } from 'components/data-table/data-table'; export class SharedWithMeMiddlewareService extends DataExplorerMiddlewareService { constructor(private services: ServiceRepository, id: string) { @@ -78,6 +81,26 @@ const getOrder = (dataExplorer: DataExplorer) => { } }; +const getFilters = (dataExplorer: DataExplorer) => { + const columns = dataExplorer.columns as DataColumns; + const typeFilters = serializeResourceTypeFilters(getDataExplorerColumnFilters(columns, SharedWithMePanelColumnNames.TYPE)); + const statusColumnFilters = getDataExplorerColumnFilters(columns, "Status"); + const activeStatusFilter = Object.keys(statusColumnFilters).find(filterName => statusColumnFilters[filterName].selected); + + // TODO: Extract group contents name filter + const nameFilters = new FilterBuilder() + .addILike("name", dataExplorer.searchValue, GroupContentsResourcePrefix.COLLECTION) + .addILike("name", dataExplorer.searchValue, GroupContentsResourcePrefix.PROCESS) + .addILike("name", dataExplorer.searchValue, GroupContentsResourcePrefix.PROJECT) + .getFilters(); + + // Filter by container status + const statusFilters = buildProcessStatusFilters(new FilterBuilder(), activeStatusFilter || "", GroupContentsResourcePrefix.PROCESS).getFilters(); + + return joinFilters(statusFilters, typeFilters, nameFilters); +}; + + export const setItems = (listResults: ListResults) => sharedWithMePanelActions.SET_ITEMS({ ...listResultsToDataExplorerItemsMeta(listResults), diff --git a/services/workbench2/src/store/store.ts b/services/workbench2/src/store/store.ts index b18bf8199e..990e278687 100644 --- a/services/workbench2/src/store/store.ts +++ b/services/workbench2/src/store/store.ts @@ -19,9 +19,9 @@ import { snackbarReducer } from "./snackbar/snackbar-reducer"; import { collectionPanelFilesReducer } from "./collection-panel/collection-panel-files/collection-panel-files-reducer"; import { dataExplorerMiddleware } from "./data-explorer/data-explorer-middleware"; import { FAVORITE_PANEL_ID } from "./favorite-panel/favorite-panel-action"; -import { PROJECT_PANEL_ID } from "./project-panel/project-panel-action-bind"; import { WORKFLOW_PROCESSES_PANEL_ID } from "./workflow-panel/workflow-panel-actions"; -import { ProjectPanelMiddlewareService } from "./project-panel/project-panel-middleware-service"; +import { PROJECT_PANEL_DATA_ID } from "./project-panel/project-panel-action-bind"; +import { ProjectPanelDataMiddlewareService } from "./project-panel/project-panel-data-middleware-service"; import { FavoritePanelMiddlewareService } from "./favorite-panel/favorite-panel-middleware-service"; import { AllProcessesPanelMiddlewareService } from "./all-processes-panel/all-processes-panel-middleware-service"; import { WorkflowProcessesMiddlewareService } from "./workflow-panel/workflow-middleware-service"; @@ -96,7 +96,7 @@ export type RootStore = Store & { dispatch: Dispatch }; export function configureStore(history: History, services: ServiceRepository, config: Config): RootStore { const rootReducer = createRootReducer(services); - const projectPanelMiddleware = dataExplorerMiddleware(new ProjectPanelMiddlewareService(services, PROJECT_PANEL_ID)); + const projectPanelDataMiddleware = dataExplorerMiddleware(new ProjectPanelDataMiddlewareService(services, PROJECT_PANEL_DATA_ID)); const favoritePanelMiddleware = dataExplorerMiddleware(new FavoritePanelMiddlewareService(services, FAVORITE_PANEL_ID)); const allProcessessPanelMiddleware = dataExplorerMiddleware(new AllProcessesPanelMiddlewareService(services, ALL_PROCESSES_PANEL_ID)); const workflowProcessessPanelMiddleware = dataExplorerMiddleware(new WorkflowProcessesMiddlewareService(services, WORKFLOW_PROCESSES_PANEL_ID)); @@ -138,7 +138,7 @@ export function configureStore(history: History, services: ServiceRepository, co thunkMiddleware.withExtraArgument(services), authMiddleware(services), tooltipsMiddleware(services), - projectPanelMiddleware, + projectPanelDataMiddleware, favoritePanelMiddleware, allProcessessPanelMiddleware, trashPanelMiddleware, diff --git a/services/workbench2/src/store/trash-panel/trash-panel-middleware-service.ts b/services/workbench2/src/store/trash-panel/trash-panel-middleware-service.ts index b0fed19d0d..a71ce6f5a7 100644 --- a/services/workbench2/src/store/trash-panel/trash-panel-middleware-service.ts +++ b/services/workbench2/src/store/trash-panel/trash-panel-middleware-service.ts @@ -16,7 +16,7 @@ import { trashPanelActions } from "./trash-panel-action"; import { Dispatch, MiddlewareAPI } from "redux"; import { OrderBuilder, OrderDirection } from "services/api/order-builder"; import { GroupContentsResource, GroupContentsResourcePrefix } from "services/groups-service/groups-service"; -import { ProjectPanelColumnNames } from "views/project-panel/project-panel"; +import { TrashPanelColumnNames } from "views/trash-panel/trash-panel"; import { updateFavorites } from "store/favorites/favorites-actions"; import { updatePublicFavorites } from 'store/public-favorites/public-favorites-actions'; import { snackbarActions, SnackbarKind } from "store/snackbar/snackbar-actions"; @@ -38,7 +38,7 @@ export class TrashPanelMiddlewareService extends DataExplorerMiddlewareService { const dataExplorer = api.getState().dataExplorer[this.getId()]; const columns = dataExplorer.columns as DataColumns; - const typeFilters = serializeResourceTypeFilters(getDataExplorerColumnFilters(columns, ProjectPanelColumnNames.TYPE)); + const typeFilters = serializeResourceTypeFilters(getDataExplorerColumnFilters(columns, TrashPanelColumnNames.TYPE)); const otherFilters = new FilterBuilder() .addILike("name", dataExplorer.searchValue, GroupContentsResourcePrefix.COLLECTION) diff --git a/services/workbench2/src/store/trash/trash-actions.ts b/services/workbench2/src/store/trash/trash-actions.ts index b6740bf9ae..c7c3186c0f 100644 --- a/services/workbench2/src/store/trash/trash-actions.ts +++ b/services/workbench2/src/store/trash/trash-actions.ts @@ -8,7 +8,7 @@ import { ServiceRepository } from "services/services"; import { snackbarActions, SnackbarKind } from "store/snackbar/snackbar-actions"; import { trashPanelActions } from "store/trash-panel/trash-panel-action"; import { activateSidePanelTreeItem, loadSidePanelTreeProjects } from "store/side-panel-tree/side-panel-tree-actions"; -import { projectPanelActions } from "store/project-panel/project-panel-action-bind"; +import { projectPanelDataActions } from "store/project-panel/project-panel-action-bind"; import { sharedWithMePanelActions } from "store/shared-with-me-panel/shared-with-me-panel-actions"; import { ResourceKind } from "models/resource"; import { navigateTo, navigateToTrash } from "store/navigation/navigation-action"; @@ -35,7 +35,7 @@ export const toggleProjectTrashed = successMessage = "Added project to trash"; await services.groupsService.trash(uuid); dispatch(loadSidePanelTreeProjects(ownerUuid)); - + const { location } = getState().router; if (matchSharedWithMeRoute(location ? location.pathname : "")) { dispatch(sharedWithMePanelActions.REQUEST_ITEMS()); @@ -92,7 +92,7 @@ export const toggleCollectionTrashed = errorMessage = "Could not move collection to trash"; successMessage = "Added to trash"; await services.collectionService.trash(uuid); - dispatch(projectPanelActions.REQUEST_ITEMS()); + dispatch(projectPanelDataActions.REQUEST_ITEMS()); } dispatch( snackbarActions.OPEN_SNACKBAR({ diff --git a/services/workbench2/src/store/workbench/workbench-actions.ts b/services/workbench2/src/store/workbench/workbench-actions.ts index 83c457f94d..02d94c56bb 100644 --- a/services/workbench2/src/store/workbench/workbench-actions.ts +++ b/services/workbench2/src/store/workbench/workbench-actions.ts @@ -9,7 +9,7 @@ import { loadDetailsPanel } from "store/details-panel/details-panel-action"; import { snackbarActions, SnackbarKind } from "store/snackbar/snackbar-actions"; import { favoritePanelActions, loadFavoritePanel } from "store/favorite-panel/favorite-panel-action"; import { getProjectPanelCurrentUuid, setIsProjectPanelTrashed } from "store/project-panel/project-panel-action"; -import { projectPanelActions } from "store/project-panel/project-panel-action-bind"; +import { projectPanelDataActions } from "store/project-panel/project-panel-action-bind"; import { activateSidePanelTreeItem, initSidePanelTree, @@ -18,7 +18,7 @@ import { SIDE_PANEL_TREE, } from "store/side-panel-tree/side-panel-tree-actions"; import { updateResources } from "store/resources/resources-actions"; -import { projectPanelColumns } from "views/project-panel/project-panel"; +import { projectPanelDataColumns } from "views/project-panel/project-panel-data"; import { favoritePanelColumns } from "views/favorite-panel/favorite-panel"; import { matchRootRoute } from "routes/routes"; import { @@ -134,7 +134,7 @@ export const loadWorkbench = () => async (dispatch: Dispatch, getState: () => Ro const { auth, router } = getState(); const { user } = auth; if (user) { - dispatch(projectPanelActions.SET_COLUMNS({ columns: projectPanelColumns })); + dispatch(projectPanelDataActions.SET_COLUMNS({ columns: projectPanelDataColumns })); dispatch(favoritePanelActions.SET_COLUMNS({ columns: favoritePanelColumns })); dispatch( allProcessesPanelActions.SET_COLUMNS({ @@ -493,7 +493,7 @@ export const copyCollection = (data: CopyFormDialogData) => async (dispatch: Dis ); } } - dispatch(projectPanelActions.REQUEST_ITEMS()); + dispatch(projectPanelDataActions.REQUEST_ITEMS()); }; export const moveCollection = diff --git a/services/workbench2/src/store/workflow-panel/workflow-panel-actions.ts b/services/workbench2/src/store/workflow-panel/workflow-panel-actions.ts index ecb0c96b73..9791499d4b 100644 --- a/services/workbench2/src/store/workflow-panel/workflow-panel-actions.ts +++ b/services/workbench2/src/store/workflow-panel/workflow-panel-actions.ts @@ -24,12 +24,12 @@ import { getResource } from 'store/resources/resources'; import { ProjectResource } from 'models/project'; import { UserResource } from 'models/user'; import { getWorkflowInputs, parseWorkflowDefinition } from 'models/workflow'; -import { ContextMenuResource } from 'store/context-menu/context-menu-actions'; +import { ContextMenuResource } from 'store/context-menu/context-menu-actions'; import { dialogActions } from 'store/dialog/dialog-actions'; import { ResourceKind, Resource } from 'models/resource'; import { selectedToArray } from "components/multiselect-toolbar/MultiselectToolbar"; import { CommonResourceServiceError, getCommonResourceServiceError } from "services/common-service/common-resource-service"; -import { projectPanelActions } from "store/project-panel/project-panel-action-bind"; +import { projectPanelDataActions } from "store/project-panel/project-panel-action-bind"; export const WORKFLOW_PANEL_ID = "workflowPanel"; const UUID_PREFIX_PROPERTY_NAME = 'uuidPrefix'; @@ -57,7 +57,7 @@ export const openRunProcess = (workflowUuid: string, ownerUuid?: string, name?: async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { const response = await services.workflowService.list(); dispatch(runProcessPanelActions.SET_WORKFLOWS(response.items)); - + const workflows = getState().runProcessPanel.searchWorkflows; const listedWorkflow = workflows.find(workflow => workflow.uuid === workflowUuid); const workflow = listedWorkflow || await services.workflowService.get(workflowUuid); @@ -168,7 +168,7 @@ export const removeWorkflowPermanently = (uuid: string, ownerUuid?: string) => a try { dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Removing ...", kind: SnackbarKind.INFO })); await services.workflowService.delete(workflow.uuid); - dispatch(projectPanelActions.REQUEST_ITEMS()); + dispatch(projectPanelDataActions.REQUEST_ITEMS()); dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Removed.", hideDuration: 2000, kind: SnackbarKind.SUCCESS })); } catch (e) { const error = getCommonResourceServiceError(e); @@ -179,4 +179,4 @@ export const removeWorkflowPermanently = (uuid: string, ownerUuid?: string) => a } } } -}; \ No newline at end of file +}; diff --git a/services/workbench2/src/views/project-panel/project-panel-data.tsx b/services/workbench2/src/views/project-panel/project-panel-data.tsx new file mode 100644 index 0000000000..ed127f217c --- /dev/null +++ b/services/workbench2/src/views/project-panel/project-panel-data.tsx @@ -0,0 +1,198 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +import React from "react"; +import { ProjectIcon } from "components/icon/icon"; +import { PROJECT_PANEL_DATA_ID } from "store/project-panel/project-panel-action-bind"; +import { DataColumns } from 'components/data-table/data-table'; +import { DataExplorer } from "views-components/data-explorer/data-explorer"; +import { ProjectResource } from 'models/project'; +import { SortDirection } from "components/data-table/data-column"; +import { createTree } from "models/tree"; +import { ContainerRunTime, ResourceContainerUuid, ResourceCreatedAtDate, ResourceDeleteDate, ResourceFileCount, ResourceFileSize, ResourceLastModifiedDate, ResourceLogUuid, ResourceModifiedByUserUuid, ResourceName, ResourceOutputUuid, ResourceOwnerWithName, ResourceParentProcess, ResourcePortableDataHash, ResourceStatus, ResourceTrashDate, ResourceType, ResourceUUID, ResourceVersion } from "views-components/data-explorer/renderers"; +import { getInitialProcessStatusFilters, getInitialResourceTypeFilters } from "store/resource-type-filters/resource-type-filters"; + +export enum ProjectPanelDataColumnNames { + NAME = 'Name', + STATUS = 'Status', + TYPE = 'Type', + OWNER = 'Owner', + PORTABLE_DATA_HASH = 'Portable Data Hash', + FILE_SIZE = 'File Size', + FILE_COUNT = 'File Count', + UUID = 'UUID', + CONTAINER_UUID = 'Container UUID', + RUNTIME = 'Runtime', + OUTPUT_UUID = 'Output UUID', + LOG_UUID = 'Log UUID', + PARENT_PROCESS = 'Parent Process UUID', + MODIFIED_BY_USER_UUID = 'Modified by User UUID', + VERSION = 'Version', + CREATED_AT = 'Date Created', + LAST_MODIFIED = 'Last Modified', + TRASH_AT = 'Trash at', + DELETE_AT = 'Delete at', +} + +export const projectPanelDataColumns: DataColumns = [ + { + name: ProjectPanelDataColumnNames.NAME, + selected: true, + configurable: true, + sort: { direction: SortDirection.NONE, field: 'name' }, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.STATUS, + selected: true, + configurable: true, + mutuallyExclusiveFilters: true, + filters: getInitialProcessStatusFilters(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.TYPE, + selected: true, + configurable: true, + filters: getInitialResourceTypeFilters(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.OWNER, + selected: false, + configurable: true, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.PORTABLE_DATA_HASH, + selected: false, + configurable: true, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.FILE_SIZE, + selected: true, + configurable: true, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.FILE_COUNT, + selected: false, + configurable: true, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.UUID, + selected: false, + configurable: true, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.CONTAINER_UUID, + selected: false, + configurable: true, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.RUNTIME, + selected: false, + configurable: true, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.OUTPUT_UUID, + selected: false, + configurable: true, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.LOG_UUID, + selected: false, + configurable: true, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.PARENT_PROCESS, + selected: false, + configurable: true, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.MODIFIED_BY_USER_UUID, + selected: false, + configurable: true, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.VERSION, + selected: false, + configurable: true, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.CREATED_AT, + selected: false, + configurable: true, + sort: { direction: SortDirection.NONE, field: 'createdAt' }, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.LAST_MODIFIED, + selected: true, + configurable: true, + sort: { direction: SortDirection.DESC, field: 'modifiedAt' }, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.TRASH_AT, + selected: false, + configurable: true, + sort: { direction: SortDirection.NONE, field: 'trashAt' }, + filters: createTree(), + render: (uuid) => , + }, + { + name: ProjectPanelDataColumnNames.DELETE_AT, + selected: false, + configurable: true, + sort: { direction: SortDirection.NONE, field: 'deleteAt' }, + filters: createTree(), + render: (uuid) => , + }, +]; + +const DEFAULT_VIEW_MESSAGES = ['No data found']; + +export const ProjectPanelData = class extends React.Component { + handleRowClick = () => {}; + handleRowDoubleClick = () => {}; + handleContextMenu = () => {}; + + render () { + return ; + } +}; diff --git a/services/workbench2/src/views/project-panel/project-panel.tsx b/services/workbench2/src/views/project-panel/project-panel.tsx index 3d64f6517a..c77858cd0c 100644 --- a/services/workbench2/src/views/project-panel/project-panel.tsx +++ b/services/workbench2/src/views/project-panel/project-panel.tsx @@ -7,36 +7,8 @@ import withStyles from '@material-ui/core/styles/withStyles'; import { DispatchProp, connect } from 'react-redux'; import { RouteComponentProps } from 'react-router'; import { StyleRulesCallback, WithStyles } from '@material-ui/core'; - -import { DataExplorer } from 'views-components/data-explorer/data-explorer'; -import { DataColumns } from 'components/data-table/data-table'; import { RootState } from 'store/store'; -import { DataTableFilterItem } from 'components/data-table-filters/data-table-filters'; -import { ContainerRequestState } from 'models/container-request'; -import { SortDirection } from 'components/data-table/data-column'; -import { ResourceKind, Resource } from 'models/resource'; -import { - ResourceName, - ProcessStatus as ResourceStatus, - ResourceType, - ResourceOwnerWithName, - ResourcePortableDataHash, - ResourceFileSize, - ResourceFileCount, - ResourceUUID, - ResourceContainerUuid, - ContainerRunTime, - ResourceOutputUuid, - ResourceLogUuid, - ResourceParentProcess, - ResourceModifiedByUserUuid, - ResourceVersion, - ResourceCreatedAtDate, - ResourceLastModifiedDate, - ResourceTrashDate, - ResourceDeleteDate, -} from 'views-components/data-explorer/renderers'; -import { ProjectIcon } from 'components/icon/icon'; +import { Resource } from 'models/resource'; import { ResourcesState, getResource } from 'store/resources/resources'; import { loadDetailsPanel } from 'store/details-panel/details-panel-action'; import { openContextMenu, resourceUuidToContextMenuKind } from 'store/context-menu/context-menu-actions'; @@ -44,17 +16,14 @@ import { navigateTo } from 'store/navigation/navigation-action'; import { getProperty } from 'store/properties/properties'; import { PROJECT_PANEL_CURRENT_UUID } from 'store/project-panel/project-panel-action'; import { ArvadosTheme } from 'common/custom-theme'; -import { createTree } from 'models/tree'; -import { getInitialResourceTypeFilters, getInitialProcessStatusFilters } from 'store/resource-type-filters/resource-type-filters'; import { GroupContentsResource } from 'services/groups-service/groups-service'; import { GroupClass, GroupResource } from 'models/group'; import { CollectionResource } from 'models/collection'; import { resourceIsFrozen } from 'common/frozen-resources'; -import { ProjectResource } from 'models/project'; import { deselectAllOthers, toggleOne } from 'store/multiselect/multiselect-actions'; import { DetailsCardRoot } from 'views-components/details-card/details-card-root'; import { MPVContainer, MPVPanelContent, MPVPanelState } from 'components/multi-panel-view/multi-panel-view'; -import { PROJECT_PANEL_ID } from 'store/project-panel/project-panel-action-bind'; +import { ProjectPanelData } from './project-panel-data'; type CssRules = 'root' | 'button' | 'mpvRoot' | 'dataExplorer'; @@ -75,178 +44,8 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ }, }); -export enum ProjectPanelColumnNames { - NAME = 'Name', - STATUS = 'Status', - TYPE = 'Type', - OWNER = 'Owner', - PORTABLE_DATA_HASH = 'Portable Data Hash', - FILE_SIZE = 'File Size', - FILE_COUNT = 'File Count', - UUID = 'UUID', - CONTAINER_UUID = 'Container UUID', - RUNTIME = 'Runtime', - OUTPUT_UUID = 'Output UUID', - LOG_UUID = 'Log UUID', - PARENT_PROCESS = 'Parent Process UUID', - MODIFIED_BY_USER_UUID = 'Modified by User UUID', - VERSION = 'Version', - CREATED_AT = 'Date Created', - LAST_MODIFIED = 'Last Modified', - TRASH_AT = 'Trash at', - DELETE_AT = 'Delete at', -} - -export interface ProjectPanelFilter extends DataTableFilterItem { - type: ResourceKind | ContainerRequestState; -} - -export const projectPanelColumns: DataColumns = [ - { - name: ProjectPanelColumnNames.NAME, - selected: true, - configurable: true, - sort: { direction: SortDirection.NONE, field: 'name' }, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.STATUS, - selected: true, - configurable: true, - mutuallyExclusiveFilters: true, - filters: getInitialProcessStatusFilters(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.TYPE, - selected: true, - configurable: true, - filters: getInitialResourceTypeFilters(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.OWNER, - selected: false, - configurable: true, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.PORTABLE_DATA_HASH, - selected: false, - configurable: true, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.FILE_SIZE, - selected: true, - configurable: true, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.FILE_COUNT, - selected: false, - configurable: true, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.UUID, - selected: false, - configurable: true, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.CONTAINER_UUID, - selected: false, - configurable: true, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.RUNTIME, - selected: false, - configurable: true, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.OUTPUT_UUID, - selected: false, - configurable: true, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.LOG_UUID, - selected: false, - configurable: true, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.PARENT_PROCESS, - selected: false, - configurable: true, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.MODIFIED_BY_USER_UUID, - selected: false, - configurable: true, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.VERSION, - selected: false, - configurable: true, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.CREATED_AT, - selected: false, - configurable: true, - sort: { direction: SortDirection.NONE, field: 'createdAt' }, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.LAST_MODIFIED, - selected: true, - configurable: true, - sort: { direction: SortDirection.DESC, field: 'modifiedAt' }, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.TRASH_AT, - selected: false, - configurable: true, - sort: { direction: SortDirection.NONE, field: 'trashAt' }, - filters: createTree(), - render: (uuid) => , - }, - { - name: ProjectPanelColumnNames.DELETE_AT, - selected: false, - configurable: true, - sort: { direction: SortDirection.NONE, field: 'deleteAt' }, - filters: createTree(), - render: (uuid) => , - }, -]; - -const DEFAULT_VIEW_MESSAGES = ['Your project is empty.', 'Please create a project or create a collection and upload a data.']; - const panelsData: MPVPanelState[] = [ - { name: "Subprojects", visible: true }, + { name: "Data", visible: true }, ]; interface ProjectPanelDataProps { @@ -293,15 +92,7 @@ export const ProjectPanel = withStyles(styles)( xs="auto" data-cy="process-details" className={classes.dataExplorer}> - + diff --git a/services/workbench2/src/websocket/websocket.ts b/services/workbench2/src/websocket/websocket.ts index 1b74b11f3f..b7a55b5683 100644 --- a/services/workbench2/src/websocket/websocket.ts +++ b/services/workbench2/src/websocket/websocket.ts @@ -12,7 +12,7 @@ import { loadProcess } from "store/processes/processes-actions"; import { getProcess, getSubprocesses } from "store/processes/process"; import { LogEventType } from "models/log"; import { subprocessPanelActions } from "store/subprocess-panel/subprocess-panel-actions"; -import { projectPanelActions } from "store/project-panel/project-panel-action-bind"; +import { projectPanelDataActions } from "store/project-panel/project-panel-action-bind"; import { getProjectPanelCurrentUuid } from "store/project-panel/project-panel-action"; import { allProcessesPanelActions } from "store/all-processes-panel/all-processes-panel-action"; import { loadCollection } from "store/workbench/workbench-actions"; @@ -66,7 +66,7 @@ const messageListener = (store: RootStore) => (message: ResourceEventMessage) => store.dispatch(allProcessesPanelActions.REQUEST_ITEMS(false, true)); } if (matchProjectRoute(location) && message.objectOwnerUuid === getProjectPanelCurrentUuid(state)) { - store.dispatch(projectPanelActions.REQUEST_ITEMS(false, true)); + store.dispatch(projectPanelDataActions.REQUEST_ITEMS(false, true)); } return; default: -- 2.30.2