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';
dispatch(progressIndicatorActions.START_WORKING(SHARING_DIALOG_NAME));
try {
const resourceUuid = dialog.data.resourceUuid;
- const { items } = await permissionService.listResourcePermissions(resourceUuid);
- await dispatch<any>(initializeManagementForm(items));
+ await dispatch<any>(initializeManagementForm);
// For collections, we need to load the public sharing tokens
if (extractUuidObjectType(resourceUuid) === ResourceObjectType.COLLECTION) {
const sharingTokens = await apiClientAuthorizationService.listCollectionSharingTokens(resourceUuid);
}
};
-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<SharingDialogData>(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();
};
dispatch(initialize(SHARING_MANAGEMENT_FORM_NAME, managementFormData));
+ dispatch(progressIndicatorActions.STOP_WORKING(SHARING_DIALOG_NAME));
};
const saveManagementChanges = async (_: Dispatch, getState: () => RootState, { permissionService }: ServiceRepository) => {
onClose: () => void;
onSave: () => void;
onCreateSharingToken: () => void;
+ refreshPermissions: () => void;
}
enum SharingDialogTab {
PERMISSIONS = 0,
}
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<number>(SharingDialogTab.PERMISSIONS);
Sharing settings
</DialogTitle>
{ showTabs &&
- <Tabs value={tabNr} onChange={(_, tb) => setTabNr(tb)}>
+ <Tabs value={tabNr}
+ onChange={(_, tb) => {
+ if (tb === SharingDialogTab.PERMISSIONS) {
+ refreshPermissions();
+ }
+ setTabNr(tb)}
+ }>
<Tab label="With users/groups" />
<Tab label="Sharing URLs" disabled={saveEnabled} />
</Tabs>
saveSharingDialogChanges,
connectSharingDialogProgress,
SharingDialogData,
- createSharingToken
+ createSharingToken,
+ initializeManagementForm
} from 'store/sharing-dialog/sharing-dialog-actions';
import { WithDialogProps } from 'store/dialog/with-dialog';
import SharingDialogComponent, {
},
onCreateSharingToken: () => {
dispatch<any>(createSharingToken);
+ },
+ refreshPermissions: () => {
+ dispatch<any>(initializeManagementForm);
}
});