X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/237776fd3412409bf0a9c9f0ac538f82d4b4a8d4..cfa8c66b29ba7eb4cab946ab8bb2f58ca93bc80a:/src/store/group-details-panel/group-details-panel-members-middleware-service.ts diff --git a/src/store/group-details-panel/group-details-panel-members-middleware-service.ts b/src/store/group-details-panel/group-details-panel-members-middleware-service.ts new file mode 100644 index 00000000..e295579a --- /dev/null +++ b/src/store/group-details-panel/group-details-panel-members-middleware-service.ts @@ -0,0 +1,66 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +import { Dispatch, MiddlewareAPI } from "redux"; +import { DataExplorerMiddlewareService, listResultsToDataExplorerItemsMeta } 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 { FilterBuilder } from 'services/api/filter-builder'; +import { updateResources } from 'store/resources/resources-actions'; +import { getCurrentGroupDetailsPanelUuid, GroupMembersPanelActions } from 'store/group-details-panel/group-details-panel-actions'; +import { LinkClass } from 'models/link'; + +export class GroupDetailsPanelMembersMiddlewareService extends DataExplorerMiddlewareService { + + constructor(private services: ServiceRepository, id: string) { + super(id); + } + + async requestItems(api: MiddlewareAPI) { + const dataExplorer = getDataExplorer(api.getState().dataExplorer, this.getId()); + const groupUuid = getCurrentGroupDetailsPanelUuid(api.getState().properties); + if (!dataExplorer || !groupUuid) { + api.dispatch(groupsDetailsPanelDataExplorerIsNotSet()); + } else { + try { + const permissions = await this.services.permissionService.list({ + filters: new FilterBuilder() + .addEqual('head_uuid', groupUuid) + .addEqual('link_class', LinkClass.PERMISSION) + .getFilters() + }); + api.dispatch(updateResources(permissions.items)); + + const users = await this.services.userService.list({ + filters: new FilterBuilder() + .addIn('uuid', permissions.items.map(item => item.tailUuid)) + .getFilters(), + count: "none" + }); + api.dispatch(updateResources(users.items)); + + api.dispatch(GroupMembersPanelActions.SET_ITEMS({ + ...listResultsToDataExplorerItemsMeta(permissions), + items: users.items.map(item => item.uuid), + })); + } catch (e) { + api.dispatch(couldNotFetchGroupDetailsContents()); + } + } + } +} + +const groupsDetailsPanelDataExplorerIsNotSet = () => + snackbarActions.OPEN_SNACKBAR({ + message: 'Group details panel is not ready.', + kind: SnackbarKind.ERROR + }); + +const couldNotFetchGroupDetailsContents = () => + snackbarActions.OPEN_SNACKBAR({ + message: 'Could not fetch group details.', + kind: SnackbarKind.ERROR + });