From 9eac05c8fb1117434cabfc087e507012dc47eed2 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Wed, 17 May 2017 13:18:59 -0700 Subject: [PATCH 1/4] Ignored user tombstones work again --- .../src/components/Stream.js | 15 ++++--- .../src/containers/Stream.js | 4 ++ .../coral-embed-stream/src/graphql/index.js | 44 ++++++++++++++----- client/coral-framework/reducers/user.js | 11 +---- 4 files changed, 48 insertions(+), 26 deletions(-) diff --git a/client/coral-embed-stream/src/components/Stream.js b/client/coral-embed-stream/src/components/Stream.js index 2297a295b..90fa0aca8 100644 --- a/client/coral-embed-stream/src/components/Stream.js +++ b/client/coral-embed-stream/src/components/Stream.js @@ -25,7 +25,7 @@ class Stream extends React.Component { render() { const { - root: {asset, asset: {comments}, comment, myIgnoredUsers}, + root: {asset, asset: {comments}, comment, me}, postComment, addNotification, postFlag, @@ -58,8 +58,9 @@ class Stream extends React.Component { const firstCommentDate = asset.comments[0] ? asset.comments[0].created_at : new Date(Date.now() - 1000 * 60 * 60 * 24 * 7).toISOString(); - const commentIsIgnored = (comment) => - myIgnoredUsers && myIgnoredUsers.includes(comment.user.id); + const commentIsIgnored = (comment) => { + return me && me.ignoredUsers && me.ignoredUsers.find((u) => u.id === comment.user.id); + }; return (
{open @@ -150,8 +151,8 @@ class Stream extends React.Component { />
{comments.map( - (comment) => - (commentIsIgnored(comment) + (comment) => { + return (commentIsIgnored(comment) ? : ) + /> + ); + } )}
{ this.getCounts(this.props.data.variables); @@ -205,6 +206,9 @@ const fragments = { } me { status + ignoredUsers { + id + } } ...${getDefinitionName(Comment.fragments.root)} } diff --git a/client/coral-embed-stream/src/graphql/index.js b/client/coral-embed-stream/src/graphql/index.js index 5ab1f0c37..09756fcd1 100644 --- a/client/coral-embed-stream/src/graphql/index.js +++ b/client/coral-embed-stream/src/graphql/index.js @@ -122,19 +122,43 @@ const extension = { `, }, mutations: { - IgnoreUser: () => ({ - - // TODO: don't rely on refetching. - refetchQueries: [ - 'EmbedQuery', 'EmbedStreamProfileQuery', - ], + IgnoreUser: ({variables}) => ({ + updateQueries: { + EmbedQuery: (previousData, {mutationResult}) => { + const ignoredUserId = variables.id; + const response = mutationResult.data.ignoreUser; + if (ignoredUserId && !response.errors) { + const updated = update(previousData, {me: {ignoredUsers: {$push: [{ + id: ignoredUserId, + __typename: 'User', + }]}}}); + return updated; + } + return previousData; + } + } }), - StopIgnoringUser: () => ({ - - // TODO: don't rely on refetching. + StopIgnoringUser: ({variables}) => ({ refetchQueries: [ - 'EmbedQuery', 'EmbedStreamProfileQuery', + 'EmbedQuery', ], + updateQueries: { + EmbedStreamProfileQuery: (previousData, {mutationResult}) => { + const noLongerIgnoredUserId = variables.id; + const response = mutationResult.data.stopIgnoringUser; + if (noLongerIgnoredUserId && !response.errors) { + + // remove noLongerIgnoredUserId from ignoredUsers + const updated = update(previousData, {me: {ignoredUsers: { + $apply: (ignoredUsers) => { + return ignoredUsers.filter((u) => u.id !== noLongerIgnoredUserId); + } + }}}); + return updated; + } + return previousData; + } + } }), PostComment: ({ variables: {comment: {asset_id, body, parent_id, tags = []}}, diff --git a/client/coral-framework/reducers/user.js b/client/coral-framework/reducers/user.js index 2969665e3..bc40cf3ae 100644 --- a/client/coral-framework/reducers/user.js +++ b/client/coral-framework/reducers/user.js @@ -1,4 +1,4 @@ -import {Map, Set} from 'immutable'; +import {Map} from 'immutable'; import * as authActions from '../constants/auth'; import * as actions from '../constants/user'; import * as assetActions from '../constants/assets'; @@ -9,7 +9,6 @@ const initialState = Map({ settings: {}, myComments: [], myAssets: [], // the assets from which myComments (above) originated - ignoredUsers: Set(), }); const purge = (user) => { @@ -39,14 +38,6 @@ export default function user (state = initialState, action) { return state.set('myAssets', action.assets); case actions.LOGOUT_SUCCESS: return initialState; - case 'APOLLO_MUTATION_RESULT': - switch (action.operationName) { - case 'ignoreUser': - return state.updateIn(['ignoredUsers'], (i) => i.add(action.variables.id)); - case 'stopIgnoringUser': - return state.updateIn(['ignoredUsers'], (i) => i.delete(action.variables.id)); - } - break; } return state; } From 340d3cea62e3d9df4a3d110b88a6fdac16867cce Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Thu, 18 May 2017 08:10:20 -0700 Subject: [PATCH 2/4] contains/Stream setCommentCountCache waits for refetch promise --- client/coral-embed-stream/src/containers/Stream.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/coral-embed-stream/src/containers/Stream.js b/client/coral-embed-stream/src/containers/Stream.js index b4b800d3c..b54e69dd6 100644 --- a/client/coral-embed-stream/src/containers/Stream.js +++ b/client/coral-embed-stream/src/containers/Stream.js @@ -112,8 +112,8 @@ class StreamContainer extends React.Component { componentDidMount() { if (this.props.previousTab) { - this.props.data.refetch(); - this.props.setCommentCountCache(0); + this.props.data.refetch() + .then(() => this.props.setCommentCountCache(0)); } this.countPoll = setInterval(() => { this.getCounts(this.props.data.variables); From 6bbeee3a6b5fa942ae5a29079071c54aed25b3a0 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Thu, 18 May 2017 08:11:39 -0700 Subject: [PATCH 3/4] StopIgnoringUser does not refetch EmbedQuery --- client/coral-embed-stream/src/graphql/index.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/client/coral-embed-stream/src/graphql/index.js b/client/coral-embed-stream/src/graphql/index.js index 09756fcd1..079f0697b 100644 --- a/client/coral-embed-stream/src/graphql/index.js +++ b/client/coral-embed-stream/src/graphql/index.js @@ -139,9 +139,6 @@ const extension = { } }), StopIgnoringUser: ({variables}) => ({ - refetchQueries: [ - 'EmbedQuery', - ], updateQueries: { EmbedStreamProfileQuery: (previousData, {mutationResult}) => { const noLongerIgnoredUserId = variables.id; From aaa2da6c237185a7e4dc2b03dcdf107aadf56a26 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Thu, 18 May 2017 10:43:38 -0700 Subject: [PATCH 4/4] Stream container refetch then setCommentCountCache to asset.commentCount instead of silly zero --- client/coral-embed-stream/src/containers/Stream.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/coral-embed-stream/src/containers/Stream.js b/client/coral-embed-stream/src/containers/Stream.js index b54e69dd6..467242592 100644 --- a/client/coral-embed-stream/src/containers/Stream.js +++ b/client/coral-embed-stream/src/containers/Stream.js @@ -113,7 +113,9 @@ class StreamContainer extends React.Component { componentDidMount() { if (this.props.previousTab) { this.props.data.refetch() - .then(() => this.props.setCommentCountCache(0)); + .then(({data: {asset: {commentCount}}}) => { + return this.props.setCommentCountCache(commentCount); + }); } this.countPoll = setInterval(() => { this.getCounts(this.props.data.variables);