- if (visibility !== VisibilityLevel.PRIVATE) {
- const promises = invitations.invitedPeople
- .map(person => ({
- ownerUuid: user.uuid,
- headUuid: dialog.data,
- tailUuid: person.uuid,
- name: invitations.permissions
- }))
- .map(data => permissionService.create(data));
-
- await Promise.all(promises);
+ 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,
+ tailUuid: person.uuid,
+ name: invitations.permissions
+ }));
+
+ const invitationsDataGroups = usersFromGroups.items.map(
+ person => ({
+ ownerUuid: user.uuid,
+ headUuid: dialog.data,
+ tailUuid: person.uuid,
+ name: invitations.permissions
+ })
+ );
+
+ const data = invitationDataUsers.concat(invitationsDataGroups);
+
+ for (const invitation of data) {
+ await permissionService.create(invitation);