//
// SPDX-License-Identifier: AGPL-3.0
-import { dialogActions } from "~/store/dialog/dialog-actions";
-import { withDialog } from "~/store/dialog/with-dialog";
+import { dialogActions } from "store/dialog/dialog-actions";
+import { withDialog } from "store/dialog/with-dialog";
import { SHARING_DIALOG_NAME, SharingPublicAccessFormData, SHARING_PUBLIC_ACCESS_FORM_NAME, SHARING_INVITATION_FORM_NAME, SharingManagementFormData, SharingInvitationFormData, VisibilityLevel, getSharingMangementFormData, getSharingPublicAccessFormData } from './sharing-dialog-types';
import { Dispatch } from 'redux';
-import { ServiceRepository } from "~/services/services";
-import { FilterBuilder } from '~/services/api/filter-builder';
+import { ServiceRepository } from "services/services";
+import { FilterBuilder } from 'services/api/filter-builder';
import { initialize, getFormValues, reset } from 'redux-form';
-import { SHARING_MANAGEMENT_FORM_NAME } from '~/store/sharing-dialog/sharing-dialog-types';
-import { RootState } from '~/store/store';
-import { getDialog } from '~/store/dialog/dialog-reducer';
-import { PermissionLevel } from '~/models/permission';
-import { getPublicGroupUuid } from "~/store/workflow-panel/workflow-panel-actions";
-import { PermissionResource } from '~/models/permission';
+import { SHARING_MANAGEMENT_FORM_NAME } from 'store/sharing-dialog/sharing-dialog-types';
+import { RootState } from 'store/store';
+import { getDialog } from 'store/dialog/dialog-reducer';
+import { PermissionLevel } from 'models/permission';
+import { getPublicGroupUuid } from "store/workflow-panel/workflow-panel-actions";
+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.ts';
+import { withProgress } from "store/progress-indicator/with-progress";
+import { progressIndicatorActions } from 'store/progress-indicator/progress-indicator-actions';
import { snackbarActions, SnackbarKind } from "../snackbar/snackbar-actions";
-import { extractUuidKind, ResourceKind } from "~/models/resource";
-import { LinkClass } from "~/models/link";
+import { extractUuidKind, ResourceKind } from "models/resource";
-export const openSharingDialog = (resourceUuid: string) =>
+export const openSharingDialog = (resourceUuid: string, refresh?: () => void) =>
(dispatch: Dispatch) => {
- dispatch(dialogActions.OPEN_DIALOG({ id: SHARING_DIALOG_NAME, data: resourceUuid }));
+ dispatch(dialogActions.OPEN_DIALOG({ id: SHARING_DIALOG_NAME, data: {resourceUuid, refresh} }));
dispatch<any>(loadSharingDialog);
};
export const connectSharingDialogProgress = withProgress(SHARING_DIALOG_NAME);
-export const saveSharingDialogChanges = async (dispatch: Dispatch) => {
+export const saveSharingDialogChanges = async (dispatch: Dispatch, getState: () => RootState) => {
dispatch(progressIndicatorActions.START_WORKING(SHARING_DIALOG_NAME));
await dispatch<any>(savePublicPermissionChanges);
await dispatch<any>(saveManagementChanges);
await dispatch<any>(sendInvitations);
dispatch(reset(SHARING_INVITATION_FORM_NAME));
await dispatch<any>(loadSharingDialog);
+
+ const dialog = getDialog<SharingDialogData>(getState().dialog, SHARING_DIALOG_NAME);
+ if (dialog && dialog.data.refresh) {
+ dialog.data.refresh();
+ }
};
-export const sendSharingInvitations = async (dispatch: Dispatch) => {
+export const sendSharingInvitations = async (dispatch: Dispatch, getState: () => RootState) => {
dispatch(progressIndicatorActions.START_WORKING(SHARING_DIALOG_NAME));
await dispatch<any>(sendInvitations);
dispatch(closeSharingDialog());
kind: SnackbarKind.SUCCESS,
}));
dispatch(progressIndicatorActions.STOP_WORKING(SHARING_DIALOG_NAME));
+
+ const dialog = getDialog<SharingDialogData>(getState().dialog, SHARING_DIALOG_NAME);
+ if (dialog && dialog.data.refresh) {
+ dialog.data.refresh();
+ }
};
+interface SharingDialogData {
+ resourceUuid: string;
+ refresh: () => void;
+}
+
const loadSharingDialog = async (dispatch: Dispatch, getState: () => RootState, { permissionService }: ServiceRepository) => {
- const dialog = getDialog<string>(getState().dialog, SHARING_DIALOG_NAME);
+ const dialog = getDialog<SharingDialogData>(getState().dialog, SHARING_DIALOG_NAME);
if (dialog) {
dispatch(progressIndicatorActions.START_WORKING(SHARING_DIALOG_NAME));
try {
- const { items } = await permissionService.listResourcePermissions(dialog.data);
+ const { items } = await permissionService.listResourcePermissions(dialog.data.resourceUuid);
dispatch<any>(initializePublicAccessForm(items));
await dispatch<any>(initializeManagementForm(items));
dispatch(progressIndicatorActions.STOP_WORKING(SHARING_DIALOG_NAME));
.addIn('uuid', permissionLinks.map(({ tailUuid }) => tailUuid))
.getFilters();
- const { items: users } = await userService.list({ filters });
- const { items: groups} = await groupsService.list({ filters });
+ const { items: users } = await userService.list({ filters, count: "none" });
+ const { items: groups } = await groupsService.list({ filters, count: "none" });
const getEmail = (tailUuid: string) => {
const user = users.find(({ uuid }) => uuid === tailUuid);
const savePublicPermissionChanges = async (_: Dispatch, getState: () => RootState, { permissionService }: ServiceRepository) => {
const state = getState();
const { user } = state.auth;
- const dialog = getDialog<string>(state.dialog, SHARING_DIALOG_NAME);
+ const dialog = getDialog<SharingDialogData>(state.dialog, SHARING_DIALOG_NAME);
if (dialog && user) {
const { permissionUuid, visibility } = getSharingPublicAccessFormData(state);
await permissionService.create({
ownerUuid: user.uuid,
- headUuid: dialog.data,
+ headUuid: dialog.data.resourceUuid,
tailUuid: getPublicGroupUuid(state),
name: PermissionLevel.CAN_READ,
});
const sendInvitations = async (_: Dispatch, getState: () => RootState, { permissionService, userService }: ServiceRepository) => {
const state = getState();
const { user } = state.auth;
- const dialog = getDialog<string>(state.dialog, SHARING_DIALOG_NAME);
+ const dialog = getDialog<SharingDialogData>(state.dialog, SHARING_DIALOG_NAME);
if (dialog && user) {
const invitations = getFormValues(SHARING_INVITATION_FORM_NAME)(state) as SharingInvitationFormData;
const getGroupsFromForm = invitations.invitedPeople.filter((invitation) => extractUuidKind(invitation.uuid) === ResourceKind.GROUP);
const getUsersFromForm = invitations.invitedPeople.filter((invitation) => extractUuidKind(invitation.uuid) === ResourceKind.USER);
- const uuids = getGroupsFromForm.map(group => group.uuid);
-
- const permissions = await permissionService.list({
- filters: new FilterBuilder()
- .addIn('tailUuid', uuids)
- .addEqual('linkClass', LinkClass.PERMISSION)
- .getFilters()
- });
-
- const usersFromGroups = await userService.list({
- filters: new FilterBuilder()
- .addIn('uuid', permissions.items.map(item => item.headUuid))
- .getFilters()
-
- });
const invitationDataUsers = getUsersFromForm
.map(person => ({
ownerUuid: user.uuid,
- headUuid: dialog.data,
+ headUuid: dialog.data.resourceUuid,
tailUuid: person.uuid,
name: invitations.permissions
}));
- const invitationsDataGroups = usersFromGroups.items.map(
- person => ({
+ const invitationsDataGroups = getGroupsFromForm.map(
+ group => ({
ownerUuid: user.uuid,
- headUuid: dialog.data,
- tailUuid: person.uuid,
+ headUuid: dialog.data.resourceUuid,
+ tailUuid: group.uuid,
name: invitations.permissions
})
);