diff --git a/src/components/Group/InvitationsList.vue b/src/components/Group/InvitationsList.vue index bb810b598..4f6c48c5d 100644 --- a/src/components/Group/InvitationsList.vue +++ b/src/components/Group/InvitationsList.vue @@ -4,8 +4,8 @@ v-for="member in invitations" :key="member.id" :member="member" - @accept="acceptInvitation({ id: member.id })" - @reject="rejectInvitation({ id: member.id })" + @accept="() => member.id && acceptInvitation({ id: member.id })" + @reject="() => member.id && rejectInvitation({ id: member.id })" /> @@ -24,25 +24,33 @@ defineProps<{ invitations: IMember[]; }>(); -const { mutate: acceptInvitation, onError: onAcceptInvitationError } = - useMutation<{ acceptInvitation: IMember }, { id: string }>( - ACCEPT_INVITATION, - { - refetchQueries({ data }) { - const profile = data?.acceptInvitation?.actor as IPerson; - const group = data?.acceptInvitation?.parent as IGroup; - if (profile && group) { - return [ - { - query: PERSON_STATUS_GROUP, - variables: { id: profile.id, group: usernameWithDomain(group) }, - }, - ]; - } - return []; - }, - } - ); +const emit = defineEmits<{ + (e: "accept-invitation", member: IMember): void; + (e: "reject-invitation", member: IMember): void; +}>(); + +const { + mutate: acceptInvitation, + onDone: onAcceptInvitationDone, + onError: onAcceptInvitationError, +} = useMutation<{ acceptInvitation: IMember }, { id: string }>( + ACCEPT_INVITATION, + { + refetchQueries({ data }) { + const profile = data?.acceptInvitation?.actor as IPerson; + const group = data?.acceptInvitation?.parent as IGroup; + if (profile && group) { + return [ + { + query: PERSON_STATUS_GROUP, + variables: { id: profile.id, group: usernameWithDomain(group) }, + }, + ]; + } + return []; + }, + } +); const notifier = inject("notifier"); @@ -53,27 +61,49 @@ const onError = (error: ErrorResponse) => { } }; +onAcceptInvitationDone((result) => { + if (!result.data?.acceptInvitation) { + console.error(result); + alert("Error while accepting invitation"); + return; + } + emit("accept-invitation", result.data?.acceptInvitation); +}); + onAcceptInvitationError((err) => onError(err as unknown as ErrorResponse)); -const { mutate: rejectInvitation, onError: onRejectInvitationError } = - useMutation<{ rejectInvitation: IMember }, { id: string }>( - REJECT_INVITATION, - { - refetchQueries({ data }) { - const profile = data?.rejectInvitation?.actor as IPerson; - const group = data?.rejectInvitation?.parent as IGroup; - if (profile && group) { - return [ - { - query: PERSON_STATUS_GROUP, - variables: { id: profile.id, group: usernameWithDomain(group) }, - }, - ]; - } - return []; - }, - } - ); +const { + mutate: rejectInvitation, + onDone: onRejectInvitationDone, + onError: onRejectInvitationError, +} = useMutation<{ rejectInvitation: IMember }, { id: string }>( + REJECT_INVITATION, + { + refetchQueries({ data }) { + // TODO Refetching the PERSON_STATUS_GROUP query is useless for the Mygroup.vue page + const profile = data?.rejectInvitation?.actor as IPerson; + const group = data?.rejectInvitation?.parent as IGroup; + if (profile && group) { + return [ + { + query: PERSON_STATUS_GROUP, + variables: { id: profile.id, group: usernameWithDomain(group) }, + }, + ]; + } + return []; + }, + } +); + +onRejectInvitationDone((result) => { + if (!result.data?.rejectInvitation) { + console.error(result); + alert("Error while rejecting invitation"); + return; + } + emit("reject-invitation", result.data?.rejectInvitation); +}); onRejectInvitationError((err) => onError(err as unknown as ErrorResponse)); diff --git a/src/views/Group/MyGroups.vue b/src/views/Group/MyGroups.vue index 1679109a8..422ea7019 100644 --- a/src/views/Group/MyGroups.vue +++ b/src/views/Group/MyGroups.vue @@ -19,8 +19,8 @@
; }>( LOGGED_USER_MEMBERSHIPS, @@ -129,26 +131,6 @@ useHead({ const notifier = inject("notifier"); -const router = useRouter(); - -const acceptInvitation = (member: IMember) => { - return router.push({ - name: RouteName.GROUP, - params: { preferredUsername: usernameWithDomain(member.parent) }, - }); -}; - -const rejectInvitation = ({ id: memberId }: { id: string }) => { - const index = membershipsPages.value.elements.findIndex( - (membership) => - membership.role === MemberRole.INVITED && membership.id === memberId - ); - if (index > -1) { - membershipsPages.value.elements.splice(index, 1); - membershipsPages.value.total -= 1; - } -}; - const { mutate: leaveGroup, onError: onLeaveGroupError } = useMutation( LEAVE_GROUP, () => ({