X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/f9dde5c781766b8be71d43d0f031c201a0edcfbb..1d402d5f65011e082eb9332118c4dbfe4377952f:/src/store/users/user-panel-middleware-service.ts diff --git a/src/store/users/user-panel-middleware-service.ts b/src/store/users/user-panel-middleware-service.ts index bc4bb130..b062401c 100644 --- a/src/store/users/user-panel-middleware-service.ts +++ b/src/store/users/user-panel-middleware-service.ts @@ -2,21 +2,23 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { ServiceRepository } from '~/services/services'; +import { ServiceRepository } from 'services/services'; import { MiddlewareAPI, Dispatch } from 'redux'; -import { DataExplorerMiddlewareService, dataExplorerToListParams, listResultsToDataExplorerItemsMeta } from '~/store/data-explorer/data-explorer-middleware-service'; -import { RootState } from '~/store/store'; -import { snackbarActions, SnackbarKind } from '~/store/snackbar/snackbar-actions'; -import { DataExplorer, getDataExplorer } from '~/store/data-explorer/data-explorer-reducer'; -import { updateResources } from '~/store/resources/resources-actions'; -import { FilterBuilder } from '~/services/api/filter-builder'; -import { SortDirection } from '~/components/data-table/data-column'; -import { OrderDirection, OrderBuilder } from '~/services/api/order-builder'; -import { ListResults } from '~/services/common-service/common-service'; -import { userBindedActions } from '~/store/users/users-actions'; -import { getSortColumn } from "~/store/data-explorer/data-explorer-reducer"; -import { UserResource } from '~/models/user'; -import { UserPanelColumnNames } from '~/views/user-panel/user-panel'; +import { DataExplorerMiddlewareService, dataExplorerToListParams, listResultsToDataExplorerItemsMeta } from 'store/data-explorer/data-explorer-middleware-service'; +import { RootState } from 'store/store'; +import { snackbarActions, SnackbarKind } from 'store/snackbar/snackbar-actions'; +import { DataExplorer, getDataExplorer } from 'store/data-explorer/data-explorer-reducer'; +import { updateResources } from 'store/resources/resources-actions'; +import { FilterBuilder } from 'services/api/filter-builder'; +import { SortDirection } from 'components/data-table/data-column'; +import { OrderDirection, OrderBuilder } from 'services/api/order-builder'; +import { ListResults } from 'services/common-service/common-service'; +import { userBindedActions } from 'store/users/users-actions'; +import { getSortColumn } from "store/data-explorer/data-explorer-reducer"; +import { UserResource } from 'models/user'; +import { UserPanelColumnNames } from 'views/user-panel/user-panel'; +import { BuiltinGroups, getBuiltinGroupUuid } from 'models/group'; +import { LinkClass } from 'models/link'; export class UserMiddlewareService extends DataExplorerMiddlewareService { constructor(private services: ServiceRepository, id: string) { @@ -27,42 +29,49 @@ export class UserMiddlewareService extends DataExplorerMiddlewareService { const state = api.getState(); const dataExplorer = getDataExplorer(state.dataExplorer, this.getId()); try { - const response = await this.services.userService.list(getParams(dataExplorer)); - api.dispatch(updateResources(response.items)); - api.dispatch(setItems(response)); + const users = await this.services.userService.list(getParams(dataExplorer)); + api.dispatch(updateResources(users.items)); + api.dispatch(setItems(users)); + + // Get "all users" group memberships + const allUsersGroupUuid = getBuiltinGroupUuid(state.auth.localCluster, BuiltinGroups.ALL); + const allUserMemberships = await this.services.permissionService.list({ + filters: new FilterBuilder() + .addEqual('head_uuid', allUsersGroupUuid) + .addEqual('link_class', LinkClass.PERMISSION) + .getFilters() + }); + api.dispatch(updateResources(allUserMemberships.items)); } catch { api.dispatch(couldNotFetchUsers()); } } } -export const getParams = (dataExplorer: DataExplorer) => ({ +const getParams = (dataExplorer: DataExplorer) => ({ ...dataExplorerToListParams(dataExplorer), order: getOrder(dataExplorer), - filters: getFilters(dataExplorer) + filters: new FilterBuilder() + .addFullTextSearch(dataExplorer.searchValue) + .getFilters() }); -export const getFilters = (dataExplorer: DataExplorer) => { - const filters = new FilterBuilder() - .addILike("username", dataExplorer.searchValue) - .getFilters(); - return filters; -}; - export const getOrder = (dataExplorer: DataExplorer) => { - const sortColumn = getSortColumn(dataExplorer); + const sortColumn = getSortColumn(dataExplorer); const order = new OrderBuilder(); - if (sortColumn) { - const sortDirection = sortColumn && sortColumn.sortDirection === SortDirection.ASC + if (sortColumn && sortColumn.sort) { + const sortDirection = sortColumn.sort.direction === SortDirection.ASC ? OrderDirection.ASC : OrderDirection.DESC; - const columnName = sortColumn && sortColumn.name === UserPanelColumnNames.LAST_NAME ? "lastName" : "firstName"; - return order - .addOrder(sortDirection, columnName) - .getOrder(); - } else { - return order.getOrder(); + + if (sortColumn.name === UserPanelColumnNames.NAME) { + order.addOrder(sortDirection, "firstName") + .addOrder(sortDirection, "lastName"); + } else { + order.addOrder(sortDirection, sortColumn.sort.field); + } } + return order.getOrder(); }; export const setItems = (listResults: ListResults) => @@ -75,4 +84,4 @@ const couldNotFetchUsers = () => snackbarActions.OPEN_SNACKBAR({ message: 'Could not fetch users.', kind: SnackbarKind.ERROR - }); \ No newline at end of file + });