X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d7a29f892371764b1bff2e6ec64f8011c001b725..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 e908e8e80f..4ad0159447 100644 --- a/src/store/group-details-panel/group-details-panel-actions.ts +++ b/src/store/group-details-panel/group-details-panel-actions.ts @@ -8,13 +8,23 @@ import { propertiesActions } from '~/store/properties/properties-actions'; import { getProperty } from '~/store/properties/properties'; import { Person } from '~/views-components/sharing-dialog/people-select'; import { dialogActions } from '~/store/dialog/dialog-actions'; -import { reset } from 'redux-form'; +import { reset, startSubmit } from 'redux-form'; +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); @@ -35,3 +45,88 @@ export const openAddGroupMembersDialog = () => dispatch(dialogActions.OPEN_DIALOG({ id: ADD_GROUP_MEMBERS_DIALOG, data: {} })); dispatch(reset(ADD_GROUP_MEMBERS_FORM)); }; + +export const addGroupMembers = ({ users }: AddGroupMembersFormData) => + + async (dispatch: Dispatch, getState: () => RootState, { permissionService }: ServiceRepository) => { + + const groupUuid = getCurrentGroupDetailsPanelUuid(getState().properties); + + if (groupUuid) { + + dispatch(startSubmit(ADD_GROUP_MEMBERS_FORM)); + + const group = getResource(groupUuid)(getState().resources); + + for (const user of users) { + + await addGroupMember({ + user, + group: { + uuid: groupUuid, + name: group ? group.name : groupUuid, + }, + dispatch, + permissionService, + }); + + } + + dispatch(dialogActions.CLOSE_DIALOG({ id: ADD_GROUP_MEMBERS_FORM })); + dispatch(GroupDetailsPanelActions.REQUEST_ITEMS()); + + } + }; + +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()); + + } + + };