X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/12531884583ab85a114eed12f5179ed0b5fb8a88..9afa6683615d76c6783c81ca3ef224cfadb5a11e:/src/store/groups-panel/groups-panel-middleware-service.ts diff --git a/src/store/groups-panel/groups-panel-middleware-service.ts b/src/store/groups-panel/groups-panel-middleware-service.ts index 9d43b116..3997e33c 100644 --- a/src/store/groups-panel/groups-panel-middleware-service.ts +++ b/src/store/groups-panel/groups-panel-middleware-service.ts @@ -3,55 +3,65 @@ // SPDX-License-Identifier: AGPL-3.0 import { Dispatch, MiddlewareAPI } from "redux"; -import { DataExplorerMiddlewareService, listResultsToDataExplorerItemsMeta, dataExplorerToListParams } from "~/store/data-explorer/data-explorer-middleware-service"; -import { RootState } from "~/store/store"; -import { ServiceRepository } from "~/services/services"; -import { snackbarActions, SnackbarKind } from '~/store/snackbar/snackbar-actions'; -import { getDataExplorer } from "~/store/data-explorer/data-explorer-reducer"; -import { GroupsPanelActions } from '~/store/groups-panel/groups-panel-actions'; -import { FilterBuilder } from '~/services/api/filter-builder'; -import { updateResources } from '~/store/resources/resources-actions'; +import { DataExplorerMiddlewareService, listResultsToDataExplorerItemsMeta, dataExplorerToListParams } from "store/data-explorer/data-explorer-middleware-service"; +import { RootState } from "store/store"; +import { ServiceRepository } from "services/services"; +import { snackbarActions, SnackbarKind } from 'store/snackbar/snackbar-actions'; +import { getDataExplorer, getSortColumn } from "store/data-explorer/data-explorer-reducer"; +import { GroupsPanelActions } from 'store/groups-panel/groups-panel-actions'; +import { FilterBuilder } from 'services/api/filter-builder'; +import { updateResources } from 'store/resources/resources-actions'; +import { OrderBuilder, OrderDirection } from 'services/api/order-builder'; +import { GroupResource, GroupClass } from 'models/group'; +import { SortDirection } from 'components/data-table/data-column'; +import { GroupsPanelColumnNames } from 'views/groups-panel/groups-panel'; +import { progressIndicatorActions } from "store/progress-indicator/progress-indicator-actions"; export class GroupsPanelMiddlewareService extends DataExplorerMiddlewareService { - constructor(private services: ServiceRepository, id: string) { super(id); } - async requestItems(api: MiddlewareAPI) { - const dataExplorer = getDataExplorer(api.getState().dataExplorer, this.getId()); - if (!dataExplorer) { - api.dispatch(groupsPanelDataExplorerIsNotSet()); - } else { - try { - + api.dispatch(progressIndicatorActions.START_WORKING(this.getId())); + const order = new OrderBuilder(); + const sortColumn = getSortColumn(dataExplorer); + if (sortColumn) { + const direction = + sortColumn.sortDirection === SortDirection.ASC && sortColumn.name === GroupsPanelColumnNames.GROUP + ? OrderDirection.ASC + : OrderDirection.DESC; + order.addOrder(direction, 'name'); + } const filters = new FilterBuilder() - .addEqual('groupClass', null) + .addEqual('group_class', GroupClass.ROLE) + .addILike('name', dataExplorer.searchValue) .getFilters(); - const response = await this.services.groupsService .list({ ...dataExplorerToListParams(dataExplorer), filters, + order: order.getOrder(), }); - api.dispatch(updateResources(response.items)); - api.dispatch(GroupsPanelActions.SET_ITEMS({ ...listResultsToDataExplorerItemsMeta(response), items: response.items.map(item => item.uuid), })); - - + const permissions = await this.services.permissionService.list({ + filters: new FilterBuilder() + .addIn('head_uuid', response.items.map(item => item.uuid)) + .getFilters() + }); + api.dispatch(updateResources(permissions.items)); } catch (e) { - api.dispatch(couldNotFetchFavoritesContents()); - + } finally { + api.dispatch(progressIndicatorActions.STOP_WORKING(this.getId())); } } } @@ -59,7 +69,8 @@ export class GroupsPanelMiddlewareService extends DataExplorerMiddlewareService const groupsPanelDataExplorerIsNotSet = () => snackbarActions.OPEN_SNACKBAR({ - message: 'Groups panel is not ready.' + message: 'Groups panel is not ready.', + kind: SnackbarKind.ERROR }); const couldNotFetchFavoritesContents = () =>