From 04f902333b5f6571d7e1d51537c6ebbd9d9ddd35 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Mon, 17 May 2021 18:20:25 +0200 Subject: [PATCH] Fix event participation Signed-off-by: Thomas Citharel --- js/src/mixins/event.ts | 41 ++++++++++++++++++++---------------- js/src/views/Event/Event.vue | 31 ++++++++++++++++++--------- 2 files changed, 44 insertions(+), 28 deletions(-) diff --git a/js/src/mixins/event.ts b/js/src/mixins/event.ts index 0608ae0d6..f599fe810 100644 --- a/js/src/mixins/event.ts +++ b/js/src/mixins/event.ts @@ -44,19 +44,18 @@ export default class EventMixin extends mixins(Vue) { }); if (participationCachedData == null) return; const { person } = participationCachedData; - if (person === null) { - console.error( - "Cannot update participation cache, because of null value." - ); - return; - } [participation] = person.participations.elements; - person.participations.elements = []; - person.participations.total = 0; - store.writeQuery({ - query: EVENT_PERSON_PARTICIPATION, - variables: { eventId: event.id, actorId }, - data: { person }, + + store.modify({ + id: `Person:${actorId}`, + fields: { + participations() { + return { + elements: [], + total: 0, + }; + }, + }, }); } @@ -70,21 +69,27 @@ export default class EventMixin extends mixins(Vue) { console.error("Cannot update event cache, because of null value."); return; } + const participantStats = { ...eventCached.participantStats }; if ( participation && - participation.role === ParticipantRole.NOT_APPROVED + participation?.role === ParticipantRole.NOT_APPROVED ) { - eventCached.participantStats.notApproved -= 1; + participantStats.notApproved -= 1; } else if (anonymousParticipationConfirmed === false) { - eventCached.participantStats.notConfirmed -= 1; + participantStats.notConfirmed -= 1; } else { - eventCached.participantStats.going -= 1; - eventCached.participantStats.participant -= 1; + participantStats.going -= 1; + participantStats.participant -= 1; } store.writeQuery({ query: FETCH_EVENT, variables: { uuid: event.uuid }, - data: { event: eventCached }, + data: { + event: { + ...eventCached, + participantStats, + }, + }, }); }, }); diff --git a/js/src/views/Event/Event.vue b/js/src/views/Event/Event.vue index 89a73caa8..d6ee18f80 100755 --- a/js/src/views/Event/Event.vue +++ b/js/src/views/Event/Event.vue @@ -1010,20 +1010,25 @@ export default class Event extends EventMixin { query: EVENT_PERSON_PARTICIPATION, variables: { eventId: this.event.id, actorId: identity.id }, }); - if (participationCachedData == null) return; - const { person } = participationCachedData; - if (person === null) { + + if (participationCachedData?.person == undefined) { console.error( "Cannot update participation cache, because of null value." ); return; } - person.participations.elements.push(data.joinEvent); - person.participations.total += 1; store.writeQuery({ query: EVENT_PERSON_PARTICIPATION, variables: { eventId: this.event.id, actorId: identity.id }, - data: { person }, + data: { + person: { + ...participationCachedData?.person, + participations: { + elements: [data.joinEvent], + total: 1, + }, + }, + }, }); const cachedData = store.readQuery<{ event: IEvent }>({ @@ -1038,18 +1043,24 @@ export default class Event extends EventMixin { ); return; } + const participantStats = { ...event.participantStats }; if (data.joinEvent.role === ParticipantRole.NOT_APPROVED) { - event.participantStats.notApproved += 1; + participantStats.notApproved += 1; } else { - event.participantStats.going += 1; - event.participantStats.participant += 1; + participantStats.going += 1; + participantStats.participant += 1; } store.writeQuery({ query: FETCH_EVENT, variables: { uuid: this.uuid }, - data: { event }, + data: { + event: { + ...event, + participantStats, + }, + }, }); }, });