X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/6d0382ab90d7ac8ddcfcd291dc78c15194a25c28..571f9757f7bce4b151921368b4a4d4e97d22d055:/src/store/project-panel/project-panel-middleware-service.ts diff --git a/src/store/project-panel/project-panel-middleware-service.ts b/src/store/project-panel/project-panel-middleware-service.ts index 03ccbfde..fd893a3c 100644 --- a/src/store/project-panel/project-panel-middleware-service.ts +++ b/src/store/project-panel/project-panel-middleware-service.ts @@ -3,52 +3,35 @@ // SPDX-License-Identifier: AGPL-3.0 import { DataExplorerMiddlewareService } from "../data-explorer/data-explorer-middleware-service"; -import { PROJECT_PANEL_ID, columns, ProjectPanelColumnNames, ProjectPanelFilter } from "../../views/project-panel/project-panel"; -import { getDataExplorer } from "../data-explorer/data-explorer-reducer"; +import { ProjectPanelColumnNames, ProjectPanelFilter } from "../../views/project-panel/project-panel"; import { RootState } from "../store"; import { DataColumns } from "../../components/data-table/data-table"; -import { groupsService } from "../../services/services"; +import { ServiceRepository } from "../../services/services"; import { ProjectPanelItem, resourceToDataItem } from "../../views/project-panel/project-panel-item"; import { SortDirection } from "../../components/data-table/data-column"; import { OrderBuilder } from "../../common/api/order-builder"; import { FilterBuilder } from "../../common/api/filter-builder"; import { ProcessResource } from "../../models/process"; import { GroupContentsResourcePrefix, GroupContentsResource } from "../../services/groups-service/groups-service"; -import { dataExplorerActions } from "../data-explorer/data-explorer-action"; import { checkPresenceInFavorites } from "../favorites/favorites-actions"; +import { projectPanelActions } from "./project-panel-action"; +import { Dispatch, MiddlewareAPI } from "redux"; export class ProjectPanelMiddlewareService extends DataExplorerMiddlewareService { - - private static instance: ProjectPanelMiddlewareService; - - static getInstance() { - return ProjectPanelMiddlewareService.instance - ? ProjectPanelMiddlewareService.instance - : new ProjectPanelMiddlewareService(); - } - - private constructor() { - super(); - } - - get Id() { - return PROJECT_PANEL_ID; - } - - get Columns() { - return columns; + constructor(private services: ServiceRepository, id: string) { + super(id); } - requestItems() { - const state = this.api.getState() as RootState; - const dataExplorer = getDataExplorer(state.dataExplorer, PROJECT_PANEL_ID); + requestItems(api: MiddlewareAPI) { + const state = api.getState(); + const dataExplorer = state.dataExplorer[this.getId()]; const columns = dataExplorer.columns as DataColumns; const typeFilters = getColumnFilters(columns, ProjectPanelColumnNames.TYPE); const statusFilters = getColumnFilters(columns, ProjectPanelColumnNames.STATUS); const sortColumn = dataExplorer.columns.find(({ sortDirection }) => Boolean(sortDirection && sortDirection !== "none")); const sortDirection = sortColumn && sortColumn.sortDirection === SortDirection.ASC ? SortDirection.ASC : SortDirection.DESC; if (typeFilters.length > 0) { - groupsService + this.services.groupsService .contents(state.projects.currentItemId, { limit: dataExplorer.rowsPerPage, offset: dataExplorer.page * dataExplorer.rowsPerPage, @@ -63,23 +46,21 @@ export class ProjectPanelMiddlewareService extends DataExplorerMiddlewareService .create() .addIsA("uuid", typeFilters.map(f => f.type))) .concat(FilterBuilder - .create(GroupContentsResourcePrefix.PROCESS) + .create(GroupContentsResourcePrefix.PROCESS) .addIn("state", statusFilters.map(f => f.type))) .concat(getSearchFilter(dataExplorer.searchValue)) }) .then(response => { - this.api.dispatch(dataExplorerActions.SET_ITEMS({ - id: PROJECT_PANEL_ID, + api.dispatch(projectPanelActions.SET_ITEMS({ items: response.items.map(resourceToDataItem), itemsAvailable: response.itemsAvailable, page: Math.floor(response.offset / response.limit), rowsPerPage: response.limit })); - this.api.dispatch(checkPresenceInFavorites(response.items.map(item => item.uuid))); + api.dispatch(checkPresenceInFavorites(response.items.map(item => item.uuid))); }); } else { - this.api.dispatch(dataExplorerActions.SET_ITEMS({ - id: PROJECT_PANEL_ID, + api.dispatch(projectPanelActions.SET_ITEMS({ items: [], itemsAvailable: 0, page: 0, @@ -107,9 +88,9 @@ const getOrder = (attribute: "name" | "createdAt", direction: SortDirection) => const getSearchFilter = (searchValue: string) => searchValue ? [ - FilterBuilder.create(GroupContentsResourcePrefix.COLLECTION), - FilterBuilder.create(GroupContentsResourcePrefix.PROCESS), - FilterBuilder.create(GroupContentsResourcePrefix.PROJECT)] + FilterBuilder.create(GroupContentsResourcePrefix.COLLECTION), + FilterBuilder.create(GroupContentsResourcePrefix.PROCESS), + FilterBuilder.create(GroupContentsResourcePrefix.PROJECT)] .reduce((acc, b) => acc.concat(b.addILike("name", searchValue)), FilterBuilder.create()) - : FilterBuilder.create(); \ No newline at end of file + : FilterBuilder.create();