From 3c52d58a6e3248640982f4b077c551541208239f Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Wed, 17 Jan 2018 18:01:42 +0100 Subject: [PATCH] Cleanup Dangling --- .../routes/Community/components/FlaggedUser.js | 4 ++-- .../Community/containers/FlaggedAccounts.js | 17 ++++++++++++----- .../coral-admin/src/routes/Community/graphql.js | 11 +++++++++++ .../coral-admin/src/routes/Community/utils.js | 3 +++ 4 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 client/coral-admin/src/routes/Community/utils.js diff --git a/client/coral-admin/src/routes/Community/components/FlaggedUser.js b/client/coral-admin/src/routes/Community/components/FlaggedUser.js index 826c17e37..00377e679 100644 --- a/client/coral-admin/src/routes/Community/components/FlaggedUser.js +++ b/client/coral-admin/src/routes/Community/components/FlaggedUser.js @@ -6,6 +6,7 @@ import t from 'coral-framework/services/i18n'; import { username } from 'talk-plugin-flags/helpers/flagReasons'; import ApproveButton from 'coral-admin/src/components/ApproveButton'; import RejectButton from 'coral-admin/src/components/RejectButton'; +import { isFlaggedUserDangling } from '../utils'; const shortReasons = { [username.other]: t('community.other'), @@ -28,8 +29,7 @@ class User extends React.Component { render() { const { user, viewUserDetail, selected, className } = this.props; - const dangling = - ['APPROVED', 'REJECTED'].indexOf(user.state.status.username.status) >= 0; + const dangling = isFlaggedUserDangling(user); return (
  • - !['APPROVED', 'REJECTED'].includes(node.state.status.username.status) + node => !isFlaggedUserDangling(node) ).length; } @@ -50,7 +50,6 @@ class FlaggedAccountsContainer extends Component { prev, { subscriptionData: { data: { usernameApproved: user } } } ) => { - console.log(user); return handleFlaggedUserChange(prev, user, () => { this.props.notify('info', `user ${user.username} approved`); }); @@ -62,7 +61,6 @@ class FlaggedAccountsContainer extends Component { prev, { subscriptionData: { data: { usernameRejected: user } } } ) => { - console.log(user); return handleFlaggedUserChange(prev, user, () => { this.props.notify('info', `user ${user.username} rejected`); }); @@ -98,6 +96,15 @@ class FlaggedAccountsContainer extends Component { componentWillUnmount() { this.unsubscribe(); + this.cleanUpDangling(); + } + + cleanUpDangling() { + if (!this.props.data.loading) { + this.props.data.updateQuery(query => { + return cleanUpDangling(query); + }); + } } approveUser = ({ userId: id }) => { diff --git a/client/coral-admin/src/routes/Community/graphql.js b/client/coral-admin/src/routes/Community/graphql.js index a1dfcee03..241a1d379 100644 --- a/client/coral-admin/src/routes/Community/graphql.js +++ b/client/coral-admin/src/routes/Community/graphql.js @@ -1,4 +1,5 @@ import update from 'immutability-helper'; +import { isFlaggedUserDangling } from './utils'; function shouldAddFlaggedUser(root, user) { const isEmpty = !root.flaggedUsers.nodes.length; @@ -48,6 +49,16 @@ function decrementFlaggedUserCount(root) { }); } +export function cleanUpDangling(root) { + return update(root, { + flaggedUsers: { + nodes: { + $apply: nodes => nodes.filter(node => !isFlaggedUserDangling(node)), + }, + }, + }); +} + /** * Assimilate flagged user changes into current store. * @param {Object} root current state of the store diff --git a/client/coral-admin/src/routes/Community/utils.js b/client/coral-admin/src/routes/Community/utils.js new file mode 100644 index 000000000..42d9f5875 --- /dev/null +++ b/client/coral-admin/src/routes/Community/utils.js @@ -0,0 +1,3 @@ +export function isFlaggedUserDangling(user) { + return ['APPROVED', 'REJECTED'].includes(user.state.status.username.status); +}