X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/7f2af309d0184d3515a1f910bbcb6435f5cd58fb..9a37cc202448e431064b247d36ac0229a6bfa9b2:/src/store/group-details-panel/group-details-panel-actions.ts diff --git a/src/store/group-details-panel/group-details-panel-actions.ts b/src/store/group-details-panel/group-details-panel-actions.ts index 75132a1544..4ad0159447 100644 --- a/src/store/group-details-panel/group-details-panel-actions.ts +++ b/src/store/group-details-panel/group-details-panel-actions.ts @@ -9,16 +9,22 @@ import { getProperty } from '~/store/properties/properties'; import { Person } from '~/views-components/sharing-dialog/people-select'; import { dialogActions } from '~/store/dialog/dialog-actions'; import { reset, startSubmit } from 'redux-form'; -import { addGroupMember } from '~/store/groups-panel/groups-panel-actions'; +import { addGroupMember, deleteGroupMember } from '~/store/groups-panel/groups-panel-actions'; import { getResource } from '~/store/resources/resources'; import { GroupResource } from '~/models/group'; import { RootState } from '~/store/store'; import { ServiceRepository } from '~/services/services'; +import { PermissionResource } from '~/models/permission'; +import { GroupDetailsPanel } from '~/views/group-details-panel/group-details-panel'; +import { snackbarActions, SnackbarKind } from '~/store/snackbar/snackbar-actions'; +import { UserResource, getUserFullname } from '~/models/user'; export const GROUP_DETAILS_PANEL_ID = 'groupDetailsPanel'; export const ADD_GROUP_MEMBERS_DIALOG = 'addGrupMembers'; export const ADD_GROUP_MEMBERS_FORM = 'addGrupMembers'; export const ADD_GROUP_MEMBERS_USERS_FIELD_NAME = 'users'; +export const MEMBER_ATTRIBUTES_DIALOG = 'memberAttributesDialog'; +export const MEMBER_REMOVE_DIALOG = 'memberRemoveDialog'; export const GroupDetailsPanelActions = bindDataExplorerActions(GROUP_DETAILS_PANEL_ID); @@ -71,3 +77,56 @@ export const addGroupMembers = ({ users }: AddGroupMembersFormData) => } }; + +export const openGroupMemberAttributes = (uuid: string) => + (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + const { resources } = getState(); + const data = getResource(uuid)(resources); + dispatch(dialogActions.OPEN_DIALOG({ id: MEMBER_ATTRIBUTES_DIALOG, data })); + }; + +export const openRemoveGroupMemberDialog = (uuid: string) => + (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + dispatch(dialogActions.OPEN_DIALOG({ + id: MEMBER_REMOVE_DIALOG, + data: { + title: 'Remove member', + text: 'Are you sure you want to remove this member from this group?', + confirmButtonLabel: 'Remove', + uuid + } + })); + }; + +export const removeGroupMember = (uuid: string) => + + async (dispatch: Dispatch, getState: () => RootState, { permissionService }: ServiceRepository) => { + + const groupUuid = getCurrentGroupDetailsPanelUuid(getState().properties); + + if (groupUuid) { + + const group = getResource(groupUuid)(getState().resources); + const user = getResource(groupUuid)(getState().resources); + + dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Removing ...' })); + + await deleteGroupMember({ + user: { + uuid, + name: user ? getUserFullname(user) : uuid, + }, + group: { + uuid: groupUuid, + name: group ? group.name : groupUuid, + }, + permissionService, + dispatch, + }); + + dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Removed.', hideDuration: 2000, kind: SnackbarKind.SUCCESS })); + dispatch(GroupDetailsPanelActions.REQUEST_ITEMS()); + + } + + };