From 33963600639e6e7f3cd4afea9d4210ee815c180b Mon Sep 17 00:00:00 2001 From: Stephen Smith Date: Mon, 28 Feb 2022 18:23:07 -0500 Subject: [PATCH] 18559: Reduce unnecessary reloading in groups panel Arvados-DCO-1.1-Signed-off-by: Stephen Smith --- .../group-details-panel-actions.ts | 43 ++++++++----------- ...etails-panel-members-middleware-service.ts | 9 +--- 2 files changed, 20 insertions(+), 32 deletions(-) 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 e00ff773..71ca67c5 100644 --- a/src/store/group-details-panel/group-details-panel-actions.ts +++ b/src/store/group-details-panel/group-details-panel-actions.ts @@ -14,8 +14,9 @@ import { ServiceRepository } from 'services/services'; import { PermissionResource, PermissionLevel } from 'models/permission'; import { snackbarActions, SnackbarKind } from 'store/snackbar/snackbar-actions'; import { LinkResource } from 'models/link'; -import { deleteResources } from 'store/resources/resources-actions'; +import { deleteResources, updateResources } from 'store/resources/resources-actions'; import { openSharingDialog } from 'store/sharing-dialog/sharing-dialog-actions'; +// import { UserProfileGroupsActions } from 'store/user-profile/user-profile-actions'; export const GROUP_DETAILS_MEMBERS_PANEL_ID = 'groupDetailsMembersPanel'; export const GROUP_DETAILS_PERMISSIONS_PANEL_ID = 'groupDetailsPermissionsPanel'; @@ -48,9 +49,8 @@ export const openAddGroupMembersDialog = () => export const editPermissionLevel = (uuid: string, level: PermissionLevel) => async (dispatch: Dispatch, getState: () => RootState, { permissionService }: ServiceRepository) => { try { - await permissionService.update(uuid, {name: level}); - dispatch(GroupMembersPanelActions.REQUEST_ITEMS()); - dispatch(GroupPermissionsPanelActions.REQUEST_ITEMS()); + const permission = await permissionService.update(uuid, {name: level}); + dispatch(updateResources([permission])); dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Permission level changed.', hideDuration: 2000 })); } catch (e) { dispatch(snackbarActions.OPEN_SNACKBAR({ @@ -83,25 +83,19 @@ export const openRemoveGroupMemberDialog = (uuid: string) => export const removeGroupMember = (uuid: string) => async (dispatch: Dispatch, getState: () => RootState, { permissionService }: ServiceRepository) => { + dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Removing ...', kind: SnackbarKind.INFO })); + await deleteGroupMember({ + link: { + uuid, + }, + permissionService, + dispatch, + }); + dispatch(deleteResources([uuid])); + dispatch(GroupMembersPanelActions.REQUEST_ITEMS()); + // dispatch(UserProfileGroupsActions.REQUEST_ITEMS()); - const groupUuid = getCurrentGroupDetailsPanelUuid(getState().properties); - - if (groupUuid) { - dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Removing ...', kind: SnackbarKind.INFO })); - - await deleteGroupMember({ - link: { - uuid, - }, - permissionService, - dispatch, - }); - - dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Removed.', hideDuration: 2000, kind: SnackbarKind.SUCCESS })); - dispatch(GroupMembersPanelActions.REQUEST_ITEMS()); - - } - + dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Removed.', hideDuration: 2000, kind: SnackbarKind.SUCCESS })); }; export const setMemberIsHidden = (memberLinkUuid: string, permissionLinkUuid: string, visible: boolean) => @@ -113,7 +107,6 @@ export const setMemberIsHidden = (memberLinkUuid: string, permissionLinkUuid: st try { await permissionService.delete(permissionLinkUuid); dispatch(deleteResources([permissionLinkUuid])); - dispatch(GroupPermissionsPanelActions.REQUEST_ITEMS()); dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Removed read permission.', hideDuration: 2000, @@ -128,17 +121,17 @@ export const setMemberIsHidden = (memberLinkUuid: string, permissionLinkUuid: st } else if (visible && memberLink) { // Create read permission try { - await permissionService.create({ + const permission = await permissionService.create({ headUuid: memberLink.tailUuid, tailUuid: memberLink.headUuid, name: PermissionLevel.CAN_READ, }); + dispatch(updateResources([permission])); dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Created read permission.', hideDuration: 2000, kind: SnackbarKind.SUCCESS, })); - dispatch(GroupPermissionsPanelActions.REQUEST_ITEMS()); } catch(e) { dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Failed to create permission', 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 index e6f18f7f..3a58927a 100644 --- 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 @@ -24,7 +24,8 @@ export class GroupDetailsPanelMembersMiddlewareService extends DataExplorerMiddl const dataExplorer = getDataExplorer(api.getState().dataExplorer, this.getId()); const groupUuid = getCurrentGroupDetailsPanelUuid(api.getState().properties); if (!dataExplorer || !groupUuid) { - api.dispatch(groupsDetailsPanelDataExplorerIsNotSet()); + // Noop if data explorer refresh is triggered from another panel + return; } else { try { const groupResource = await this.services.groupsService.get(groupUuid); @@ -69,12 +70,6 @@ export class GroupDetailsPanelMembersMiddlewareService extends DataExplorerMiddl } } -const groupsDetailsPanelDataExplorerIsNotSet = () => - snackbarActions.OPEN_SNACKBAR({ - message: 'Group members panel is not ready.', - kind: SnackbarKind.ERROR - }); - const couldNotFetchGroupDetailsContents = () => snackbarActions.OPEN_SNACKBAR({ message: 'Could not fetch group members.', -- 2.30.2