From 842dde75b5bfb41acf9e26ddf46922b9d8fe69cd Mon Sep 17 00:00:00 2001 From: erezrokah Date: Fri, 13 Apr 2018 18:56:04 +0300 Subject: [PATCH 1/2] fix duplicate events and comments --- src/App.js | 3 ++- src/Components/AllEvents.js | 5 ++++- src/Components/NewComment.js | 11 +---------- src/Components/NewEvent.js | 2 +- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/App.js b/src/App.js index 3d5572e..784640c 100644 --- a/src/App.js +++ b/src/App.js @@ -36,7 +36,8 @@ const client = new AWSAppSyncClient({ auth: { type: appSyncConfig.authenticationType, apiKey: appSyncConfig.apiKey, - } + }, + disableOffline: true }); const WithProvider = () => ( diff --git a/src/Components/AllEvents.js b/src/Components/AllEvents.js index 52a15a5..a108b0f 100644 --- a/src/Components/AllEvents.js +++ b/src/Components/AllEvents.js @@ -86,7 +86,10 @@ export default compose( const query = QueryAllEvents; const data = proxy.readQuery({ query }); - data.listEvents.items = data.listEvents.items.filter(event => event.id !== deleteEvent.id); + const index = data.listEvents.items.findIndex(event => event.id === deleteEvent.id) + if (index > -1) { + data.listEvents.items.splice(index, 1) + } proxy.writeQuery({ query, data }); } diff --git a/src/Components/NewComment.js b/src/Components/NewComment.js index 5b283e4..8114e75 100644 --- a/src/Components/NewComment.js +++ b/src/Components/NewComment.js @@ -68,16 +68,7 @@ const NewCommentWithData = graphql( const variables = { id: props.eventId }; const data = proxy.readQuery({ query, variables }); - data.getEvent = { - ...data.getEvent, - comments: { - ...data.getEvent.comments, - items: [ - ...data.getEvent.comments.items.filter(c => c.commentId !== commentOnEvent.commentId), - commentOnEvent, - ] - } - }; + data.getEvent.comments.items.push(commentOnEvent); proxy.writeQuery({ query, data }); }, diff --git a/src/Components/NewEvent.js b/src/Components/NewEvent.js index da62f95..cc41384 100644 --- a/src/Components/NewEvent.js +++ b/src/Components/NewEvent.js @@ -110,7 +110,7 @@ export default graphql( const query = QueryAllEvents; const data = proxy.readQuery({ query }); - data.listEvents.items = [...data.listEvents.items.filter(e => e.id !== createEvent.id), createEvent]; + data.listEvents.items.push(createEvent); proxy.writeQuery({ query, data }); } From dc7f3e32d9c46b2d2c8c86e0a7190577fea1c85b Mon Sep 17 00:00:00 2001 From: erezrokah Date: Fri, 13 Apr 2018 20:18:35 +0300 Subject: [PATCH 2/2] Handle comment duplicate update from Mutation and Subscription --- src/Components/EventComments.js | 14 +++++++------- src/Components/NewComment.js | 5 ++++- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/Components/EventComments.js b/src/Components/EventComments.js index 56f91c8..d130825 100644 --- a/src/Components/EventComments.js +++ b/src/Components/EventComments.js @@ -67,6 +67,12 @@ const EventCommentsWithData = graphql( eventId: props.ownProps.eventId, }, updateQuery: (prev, { subscriptionData: { data: { subscribeToEventComments } } }) => { + //skip the update if the comment exists. + //This can happen when the `createComment` Mutation updates the query + if (prev.getEvent.comments.items.some(c => c.commentId === subscribeToEventComments.commentId)) { + return prev; + } + const res = { ...prev, ...{ @@ -75,13 +81,7 @@ const EventCommentsWithData = graphql( comments: { __typename: 'CommentConnections', items: [ - ...prev.getEvent.comments.items.filter(c => { - return ( - c.content !== subscribeToEventComments.content && - c.createdAt !== subscribeToEventComments.createdAt && - c.commentId !== subscribeToEventComments.commentId - ); - }), + ...prev.getEvent.comments.items, subscribeToEventComments, ] } diff --git a/src/Components/NewComment.js b/src/Components/NewComment.js index 8114e75..ab0db95 100644 --- a/src/Components/NewComment.js +++ b/src/Components/NewComment.js @@ -68,7 +68,10 @@ const NewCommentWithData = graphql( const variables = { id: props.eventId }; const data = proxy.readQuery({ query, variables }); - data.getEvent.comments.items.push(commentOnEvent); + //don't add an existing comment (can happen when the comments subscription updates the query) + if (!data.getEvent.comments.items.some(c => c.commentId === commentOnEvent.commentId)) { + data.getEvent.comments.items.push(commentOnEvent); + } proxy.writeQuery({ query, data }); },