From f55d7e31aa315de4eece3139c4fa1df7d6eb929e Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Mon, 16 May 2022 09:29:40 -0300 Subject: [PATCH] 16115: Refresh permission management form on tab change. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- .../sharing-dialog/sharing-dialog-actions.ts | 15 ++++++++++----- .../sharing-dialog/sharing-dialog-component.tsx | 11 +++++++++-- .../sharing-dialog/sharing-dialog.tsx | 6 +++++- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/store/sharing-dialog/sharing-dialog-actions.ts b/src/store/sharing-dialog/sharing-dialog-actions.ts index d734d601..3eec0b59 100644 --- a/src/store/sharing-dialog/sharing-dialog-actions.ts +++ b/src/store/sharing-dialog/sharing-dialog-actions.ts @@ -19,7 +19,6 @@ import { SHARING_MANAGEMENT_FORM_NAME } from 'store/sharing-dialog/sharing-dialo import { RootState } from 'store/store'; import { getDialog } from 'store/dialog/dialog-reducer'; import { PermissionLevel } from 'models/permission'; -import { PermissionResource } from 'models/permission'; import { differenceWith } from "lodash"; import { withProgress } from "store/progress-indicator/with-progress"; import { progressIndicatorActions } from 'store/progress-indicator/progress-indicator-actions'; @@ -117,8 +116,7 @@ const loadSharingDialog = async (dispatch: Dispatch, getState: () => RootState, dispatch(progressIndicatorActions.START_WORKING(SHARING_DIALOG_NAME)); try { const resourceUuid = dialog.data.resourceUuid; - const { items } = await permissionService.listResourcePermissions(resourceUuid); - await dispatch(initializeManagementForm(items)); + await dispatch(initializeManagementForm); // For collections, we need to load the public sharing tokens if (extractUuidObjectType(resourceUuid) === ResourceObjectType.COLLECTION) { const sharingTokens = await apiClientAuthorizationService.listCollectionSharingTokens(resourceUuid); @@ -136,9 +134,15 @@ const loadSharingDialog = async (dispatch: Dispatch, getState: () => RootState, } }; -const initializeManagementForm = (permissionLinks: PermissionResource[]) => - async (dispatch: Dispatch, getState: () => RootState, { userService, groupsService }: ServiceRepository) => { +export const initializeManagementForm = async (dispatch: Dispatch, getState: () => RootState, { userService, groupsService, permissionService }: ServiceRepository) => { + const dialog = getDialog(getState().dialog, SHARING_DIALOG_NAME); + if (!dialog) { + return; + } + dispatch(progressIndicatorActions.START_WORKING(SHARING_DIALOG_NAME)); + const resourceUuid = dialog?.data.resourceUuid; + const { items: permissionLinks } = await permissionService.listResourcePermissions(resourceUuid); const filters = new FilterBuilder() .addIn('uuid', permissionLinks.map(({ tailUuid }) => tailUuid)) .getFilters(); @@ -169,6 +173,7 @@ const initializeManagementForm = (permissionLinks: PermissionResource[]) => }; dispatch(initialize(SHARING_MANAGEMENT_FORM_NAME, managementFormData)); + dispatch(progressIndicatorActions.STOP_WORKING(SHARING_DIALOG_NAME)); }; const saveManagementChanges = async (_: Dispatch, getState: () => RootState, { permissionService }: ServiceRepository) => { diff --git a/src/views-components/sharing-dialog/sharing-dialog-component.tsx b/src/views-components/sharing-dialog/sharing-dialog-component.tsx index 4ff9150b..259390aa 100644 --- a/src/views-components/sharing-dialog/sharing-dialog-component.tsx +++ b/src/views-components/sharing-dialog/sharing-dialog-component.tsx @@ -38,6 +38,7 @@ export interface SharingDialogActionProps { onClose: () => void; onSave: () => void; onCreateSharingToken: () => void; + refreshPermissions: () => void; } enum SharingDialogTab { PERMISSIONS = 0, @@ -45,7 +46,7 @@ enum SharingDialogTab { } export default (props: SharingDialogDataProps & SharingDialogActionProps) => { const { open, loading, saveEnabled, sharedResourceUuid, - onClose, onSave, onCreateSharingToken } = props; + onClose, onSave, onCreateSharingToken, refreshPermissions } = props; const showTabs = extractUuidObjectType(sharedResourceUuid) === ResourceObjectType.COLLECTION; const [tabNr, setTabNr] = React.useState(SharingDialogTab.PERMISSIONS); @@ -65,7 +66,13 @@ export default (props: SharingDialogDataProps & SharingDialogActionProps) => { Sharing settings { showTabs && - setTabNr(tb)}> + { + if (tb === SharingDialogTab.PERMISSIONS) { + refreshPermissions(); + } + setTabNr(tb)} + }> diff --git a/src/views-components/sharing-dialog/sharing-dialog.tsx b/src/views-components/sharing-dialog/sharing-dialog.tsx index a077f7ee..e48983a2 100644 --- a/src/views-components/sharing-dialog/sharing-dialog.tsx +++ b/src/views-components/sharing-dialog/sharing-dialog.tsx @@ -10,7 +10,8 @@ import { saveSharingDialogChanges, connectSharingDialogProgress, SharingDialogData, - createSharingToken + createSharingToken, + initializeManagementForm } from 'store/sharing-dialog/sharing-dialog-actions'; import { WithDialogProps } from 'store/dialog/with-dialog'; import SharingDialogComponent, { @@ -44,6 +45,9 @@ const mapDispatchToProps = (dispatch: Dispatch, { ...props }: Props): SharingDia }, onCreateSharingToken: () => { dispatch(createSharingToken); + }, + refreshPermissions: () => { + dispatch(initializeManagementForm); } }); -- 2.30.2