From 6aaca9130aef5074e698cb493916e34f8ffc37e8 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Thu, 13 Apr 2017 12:56:48 -0600 Subject: [PATCH 1/9] saving my place --- .gitignore | 1 + .../ModerationQueue/components/Comment.js | 2 +- .../ModerationQueue/components/FlagBox.js | 34 +++++++++++++------ 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 8982613ac..c938dd984 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,5 @@ coverage/ plugins.json plugins/* !plugins/coral-plugin-facebook-auth +**/node_modules/* !plugins/coral-plugin-respect diff --git a/client/coral-admin/src/containers/ModerationQueue/components/Comment.js b/client/coral-admin/src/containers/ModerationQueue/components/Comment.js index a2bbbf092..f125460fa 100644 --- a/client/coral-admin/src/containers/ModerationQueue/components/Comment.js +++ b/client/coral-admin/src/containers/ModerationQueue/components/Comment.js @@ -45,7 +45,7 @@ const Comment = ({actions = [], ...props}) => {
Story: {props.comment.asset.title} {!props.currentAsset && ( - Moderate → + Moderate → )}
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js b/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js index 00b7d4273..0006c182d 100644 --- a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js +++ b/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js @@ -2,6 +2,11 @@ import React, {Component, PropTypes} from 'react'; import {Icon} from 'coral-ui'; import styles from './FlagBox.css'; +const shortReasons = { + 'This comment is offensive': 'Offensive', + 'This looks like an ad/marketing': 'Spam/Ads' +}; + class FlagBox extends Component { constructor () { super(); @@ -16,6 +21,13 @@ class FlagBox extends Component { })); } + reasonMap = (reason) => { + const shortReason = shortReasons[reason]; + + // if the short reason isn't found, just return the long one. + return shortReason ? shortReason : reason; + } + render() { const {props} = this; return ( @@ -23,19 +35,19 @@ class FlagBox extends Component {

Flags ({props.actionSummaries.length}):

-
    +
    {props.actionSummaries.map((action, i) => -
  • {!action.reason ? No reason provided : action.reason} ({action.count})
  • + {this.reasonMap(action.reason)} ({action.count}) )} -
- {/* More detail*/} +
+ More detail
{this.state.showDetail && (
-
    - {props.actionSummaries.map((action, i) => -
  • {!action.reason ? No reason provided : action.reason} ({action.count})
  • - )} -
+
    + {props.actionSummaries.map((action, i) => +
  • {this.reasonMap(action.reason)} ({action.count})
  • + )} +
)}
@@ -44,7 +56,9 @@ class FlagBox extends Component { } FlagBox.propTypes = { - actionSummaries: PropTypes.array.isRequired + actionSummaries: PropTypes.arrayOf(PropTypes.shape({ + + })).isRequired }; export default FlagBox; From ff3cffdc8f193729c3ffc8031ff737176658f935 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Fri, 14 Apr 2017 14:59:51 -0600 Subject: [PATCH 2/9] load actions --- .../ModerationQueue/components/Comment.js | 31 ++++++++++--------- .../ModerationQueue/components/FlagBox.js | 3 ++ .../src/graphql/fragments/commentView.graphql | 6 ++++ 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/client/coral-admin/src/containers/ModerationQueue/components/Comment.js b/client/coral-admin/src/containers/ModerationQueue/components/Comment.js index f125460fa..6a4b8d36b 100644 --- a/client/coral-admin/src/containers/ModerationQueue/components/Comment.js +++ b/client/coral-admin/src/containers/ModerationQueue/components/Comment.js @@ -17,25 +17,27 @@ import I18n from 'coral-framework/modules/i18n/i18n'; import translations from 'coral-admin/src/translations.json'; const lang = new I18n(translations); -const Comment = ({actions = [], ...props}) => { - const links = linkify.getMatches(props.comment.body); +const Comment = ({actions = [], comment, ...props}) => { + const links = linkify.getMatches(comment.body); const linkText = links ? links.map(link => link.raw) : []; - const actionSummaries = props.comment.action_summaries; + const actionSummaries = comment.action_summaries; + const flagActions = comment.actions.filter(a => a.__typename === 'FlagAction'); + return (
  • - {props.comment.user.name} + {comment.user.name} - {timeago().format(props.comment.created_at || (Date.now() - props.index * 60 * 1000), lang.getLocale().replace('-', '_'))} + {timeago().format(comment.created_at || (Date.now() - props.index * 60 * 1000), lang.getLocale().replace('-', '_'))} - props.showBanUserDialog(props.comment.user, props.comment.id, props.comment.status !== 'REJECTED')} /> + props.showBanUserDialog(comment.user, comment.id, comment.status !== 'REJECTED')} />
    - {props.comment.user.status === 'banned' ? + {comment.user.status === 'banned' ? {lang.t('comment.banned_user')} @@ -43,16 +45,16 @@ const Comment = ({actions = [], ...props}) => { : null}
    - Story: {props.comment.asset.title} + Story: {comment.asset.title} {!props.currentAsset && ( - Moderate → + Moderate → )}

    + textToHighlight={comment.body} />

    {links ? Contains Link : null} @@ -60,16 +62,16 @@ const Comment = ({actions = [], ...props}) => { {actions.map((action, i) => props.acceptComment({commentId: props.comment.id})} - rejectComment={() => props.rejectComment({commentId: props.comment.id})} + user={comment.user} + acceptComment={() => props.acceptComment({commentId: comment.id})} + rejectComment={() => props.rejectComment({commentId: comment.id})} /> )}
    - {actionSummaries && } + {flagActions && }
  • ); }; @@ -83,6 +85,7 @@ Comment.propTypes = { comment: PropTypes.shape({ body: PropTypes.string.isRequired, action_summaries: PropTypes.array, + actions: PropTypes.array, created_at: PropTypes.string.isRequired, user: PropTypes.shape({ status: PropTypes.string diff --git a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js b/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js index 0006c182d..3b1843629 100644 --- a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js +++ b/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js @@ -58,6 +58,9 @@ class FlagBox extends Component { FlagBox.propTypes = { actionSummaries: PropTypes.arrayOf(PropTypes.shape({ + })).isRequired, + flagActions: PropTypes.arrayOf(PropTypes.shape({ + })).isRequired }; diff --git a/client/coral-admin/src/graphql/fragments/commentView.graphql b/client/coral-admin/src/graphql/fragments/commentView.graphql index e78c28a28..36943602e 100644 --- a/client/coral-admin/src/graphql/fragments/commentView.graphql +++ b/client/coral-admin/src/graphql/fragments/commentView.graphql @@ -12,4 +12,10 @@ fragment commentView on Comment { id title } + actions { + ... on FlagAction { + reason + message + } + } } From d5ff9d3eeb1dbd8a6027bda80a6872d9a8e7e2fd Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Fri, 14 Apr 2017 15:32:06 -0600 Subject: [PATCH 3/9] show the details --- .gitignore | 1 - .../ModerationQueue/components/Comment.js | 2 +- .../ModerationQueue/components/FlagBox.css | 14 ++++++ .../ModerationQueue/components/FlagBox.js | 49 +++++++++++++------ .../src/graphql/fragments/commentView.graphql | 3 ++ 5 files changed, 51 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index a160b7f6e..f4014b561 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,5 @@ coverage/ plugins.json plugins/* !plugins/coral-plugin-facebook-auth -**/node_modules/* !plugins/coral-plugin-respect **/node_modules/* diff --git a/client/coral-admin/src/containers/ModerationQueue/components/Comment.js b/client/coral-admin/src/containers/ModerationQueue/components/Comment.js index 6a4b8d36b..a31fbd313 100644 --- a/client/coral-admin/src/containers/ModerationQueue/components/Comment.js +++ b/client/coral-admin/src/containers/ModerationQueue/components/Comment.js @@ -20,7 +20,7 @@ const lang = new I18n(translations); const Comment = ({actions = [], comment, ...props}) => { const links = linkify.getMatches(comment.body); const linkText = links ? links.map(link => link.raw) : []; - const actionSummaries = comment.action_summaries; + const actionSummaries = comment.action_summaries.filter(a => a.__typename === 'FlagActionSummary'); const flagActions = comment.actions.filter(a => a.__typename === 'FlagAction'); return ( diff --git a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.css b/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.css index fa7bb0cca..5b8ea4f91 100644 --- a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.css +++ b/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.css @@ -53,3 +53,17 @@ font-size: 12px; } } + +.lessDetail { + display: inline-block; + margin-right: 10px; +} + +.subDetail { + font-weight: normal; + color: #888; + + span { + color: black; + } +} diff --git a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js b/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js index 3b1843629..6068f76b5 100644 --- a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js +++ b/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js @@ -4,7 +4,8 @@ import styles from './FlagBox.css'; const shortReasons = { 'This comment is offensive': 'Offensive', - 'This looks like an ad/marketing': 'Spam/Ads' + 'This looks like an ad/marketing': 'Spam/Ads', + 'Other': 'other' }; class FlagBox extends Component { @@ -29,26 +30,42 @@ class FlagBox extends Component { } render() { - const {props} = this; + const {actionSummaries, actions} = this.props; + const {showDetail} = this.state; + return (
    -

    Flags ({props.actionSummaries.length}):

    -
    - {props.actionSummaries.map((action, i) => - {this.reasonMap(action.reason)} ({action.count}) +

    Flags ({actionSummaries.length}):

    +
      + {actionSummaries.map((action, i) => +
    • {this.reasonMap(action.reason)} ({action.count})
    • )} -
    - More detail + + {showDetail ? 'Less' : 'More'} detail
    - {this.state.showDetail && (
    -
      - {props.actionSummaries.map((action, i) => -
    • {this.reasonMap(action.reason)} ({action.count})
    • - )} -
    -
    )} + {showDetail && ( +
    +
      + {actionSummaries.map((summary, i) => { + + const actionList = actions.filter(a => a.reason === summary.reason); + + return ( +
    • + {this.reasonMap(summary.reason)} ({summary.count}) +
        + { + actionList.map((action, j) =>
      • {action.user.username} {action.message}
      • ) + } +
      +
    • + ); + })} +
    +
    + )}
    ); @@ -59,7 +76,7 @@ FlagBox.propTypes = { actionSummaries: PropTypes.arrayOf(PropTypes.shape({ })).isRequired, - flagActions: PropTypes.arrayOf(PropTypes.shape({ + actions: PropTypes.arrayOf(PropTypes.shape({ })).isRequired }; diff --git a/client/coral-admin/src/graphql/fragments/commentView.graphql b/client/coral-admin/src/graphql/fragments/commentView.graphql index 36943602e..8c7310bdf 100644 --- a/client/coral-admin/src/graphql/fragments/commentView.graphql +++ b/client/coral-admin/src/graphql/fragments/commentView.graphql @@ -16,6 +16,9 @@ fragment commentView on Comment { ... on FlagAction { reason message + user { + username + } } } } From 55cdc983031eacfa9410a4e6a62093b3817fd400 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Fri, 14 Apr 2017 15:36:29 -0600 Subject: [PATCH 4/9] add some proptypes --- .../src/containers/ModerationQueue/components/FlagBox.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js b/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js index 6068f76b5..85623f62d 100644 --- a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js +++ b/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js @@ -74,10 +74,12 @@ class FlagBox extends Component { FlagBox.propTypes = { actionSummaries: PropTypes.arrayOf(PropTypes.shape({ - + reason: PropTypes.string, + count: PropTypes.number })).isRequired, actions: PropTypes.arrayOf(PropTypes.shape({ - + message: PropTypes.string, + user: PropTypes.shape({username: PropTypes.string}) })).isRequired }; From cc6882168b00624646bddd9d9311c36a2165d2b4 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Mon, 17 Apr 2017 14:31:45 -0600 Subject: [PATCH 5/9] add translations --- .../ModerationQueue/components/FlagBox.js | 11 ++++++++--- client/coral-admin/src/translations.json | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js b/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js index 85623f62d..a7a8455b1 100644 --- a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js +++ b/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js @@ -1,11 +1,16 @@ import React, {Component, PropTypes} from 'react'; import {Icon} from 'coral-ui'; import styles from './FlagBox.css'; +import I18n from 'coral-framework/modules/i18n/i18n'; +import translations from 'coral-admin/src/translations.json'; +const lang = new I18n(translations); const shortReasons = { - 'This comment is offensive': 'Offensive', - 'This looks like an ad/marketing': 'Spam/Ads', - 'Other': 'other' + 'This comment is offensive': lang.t('modqueue.offensive'), + 'This looks like an ad/marketing': lang.t('modqueue.spam/ads'), + 'This user is impersonating': lang.t('modqueue.impersonating'), + 'I don\'t like this username': lang.t('modqueue.dont-like-username'), + 'Other': lang.t('modqueue.other') }; class FlagBox extends Component { diff --git a/client/coral-admin/src/translations.json b/client/coral-admin/src/translations.json index 911411523..e062ccedb 100644 --- a/client/coral-admin/src/translations.json +++ b/client/coral-admin/src/translations.json @@ -51,7 +51,12 @@ "singleview": "Toggle single comment edit view", "thismenu": "Open this menu", "emptyqueue": "No more comments to moderate! You're all caught up. Go have some ☕️", - "showshortcuts": "Show Shortcuts" + "showshortcuts": "Show Shortcuts", + "dont-like-username": "Don't like username", + "impersonating": "Impersonating", + "offensive": "Offensive", + "spam/ads": "Spam/Ads", + "other": "Other" }, "comment": { "flagged": "flagged", @@ -221,7 +226,12 @@ "shortcuts": "Atajos de teclado", "close": "Cerrar", "emptyqueue": "No se encontro ningún usuario. Están escondidos.", - "showshortcuts": "Mostrar atajos" + "showshortcuts": "Mostrar atajos", + "dont-like-username": "No me gusta ese nombre de usuario", + "impersonating": "Suplantación", + "offensive": "Ofensivo", + "spam/ads": "Spam/Propaganda", + "other": "Otros" }, "comment": { "flagged": "marcado", From b5210f37270b4744b61abee838dd1c3273fad363 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Mon, 17 Apr 2017 14:42:18 -0600 Subject: [PATCH 6/9] more translations --- .../src/containers/ModerationQueue/components/FlagBox.js | 2 +- client/coral-admin/src/translations.json | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js b/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js index a7a8455b1..62b4e554d 100644 --- a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js +++ b/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js @@ -48,7 +48,7 @@ class FlagBox extends Component {
  • {this.reasonMap(action.reason)} ({action.count})
  • )} - {showDetail ? 'Less' : 'More'} detail + {showDetail ? lang.t('modqueue.less-detail') : lang.t('modqueue.more-detail')} {showDetail && (
    diff --git a/client/coral-admin/src/translations.json b/client/coral-admin/src/translations.json index e062ccedb..f317b71a7 100644 --- a/client/coral-admin/src/translations.json +++ b/client/coral-admin/src/translations.json @@ -52,6 +52,8 @@ "thismenu": "Open this menu", "emptyqueue": "No more comments to moderate! You're all caught up. Go have some ☕️", "showshortcuts": "Show Shortcuts", + "more-detail": "More detail", + "less-detail": "Less detail", "dont-like-username": "Don't like username", "impersonating": "Impersonating", "offensive": "Offensive", @@ -227,6 +229,8 @@ "close": "Cerrar", "emptyqueue": "No se encontro ningún usuario. Están escondidos.", "showshortcuts": "Mostrar atajos", + "more-detail": "Mas detalle", + "less-detail": "Menos detalle", "dont-like-username": "No me gusta ese nombre de usuario", "impersonating": "Suplantación", "offensive": "Ofensivo", From 4ce4c74fd9851804a455a9dc95224bbb633366b2 Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Wed, 19 Apr 2017 01:09:59 +0700 Subject: [PATCH 7/9] Return a value for notification actions --- client/coral-framework/actions/notification.js | 3 +++ client/coral-framework/constants/notification.js | 2 ++ 2 files changed, 5 insertions(+) create mode 100644 client/coral-framework/constants/notification.js diff --git a/client/coral-framework/actions/notification.js b/client/coral-framework/actions/notification.js index 37679972d..d77a3a16c 100644 --- a/client/coral-framework/actions/notification.js +++ b/client/coral-framework/actions/notification.js @@ -1,9 +1,12 @@ import pym from '../services/PymConnection'; +import * as actions from '../constants/notification'; export const addNotification = (notifType, text) => { pym.sendMessage('coral-alert', `${notifType}|${text}`); + return {type: actions.ADD_NOTIFICATION, notifType, text}; }; export const clearNotification = () => { pym.sendMessage('coral-clear-notification'); + return {type: actions.CLEAR_NOTIFICATION}; }; diff --git a/client/coral-framework/constants/notification.js b/client/coral-framework/constants/notification.js new file mode 100644 index 000000000..a7334119a --- /dev/null +++ b/client/coral-framework/constants/notification.js @@ -0,0 +1,2 @@ +export const ADD_NOTIFICATION = 'ADD_NOTIFICATION'; +export const CLEAR_NOTIFICATION = 'CLEAR_NOTIFICATION'; From 7698bdf930b80f1806c507a343613a4439f95b20 Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Wed, 19 Apr 2017 16:35:53 +0700 Subject: [PATCH 8/9] Fix load more in premod queue --- client/coral-admin/src/graphql/queries/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/coral-admin/src/graphql/queries/index.js b/client/coral-admin/src/graphql/queries/index.js index f0e8e5b70..7d03b5092 100644 --- a/client/coral-admin/src/graphql/queries/index.js +++ b/client/coral-admin/src/graphql/queries/index.js @@ -55,7 +55,7 @@ export const loadMore = (fetchMore) => ({limit, cursor, sort, tab, asset_id}) => statuses, asset_id }, - updateQuery: (oldData, {fetchMoreResult:{data:{comments}}}) => { + updateQuery: (oldData, {fetchMoreResult:{comments}}) => { return { ...oldData, [tab]: [ From f724353cf0b83f3ce9388ac4c3e83621d8cc221b Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Wed, 19 Apr 2017 16:38:02 +0700 Subject: [PATCH 9/9] Fix collapsing UI --- .../src/containers/ModerationQueue/ModerationContainer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/coral-admin/src/containers/ModerationQueue/ModerationContainer.js b/client/coral-admin/src/containers/ModerationQueue/ModerationContainer.js index 61352b921..3487f9fde 100644 --- a/client/coral-admin/src/containers/ModerationQueue/ModerationContainer.js +++ b/client/coral-admin/src/containers/ModerationQueue/ModerationContainer.js @@ -116,7 +116,7 @@ class ModerationContainer extends Component { let asset; - if (data.loading) { + if (!('premodCount' in data)) { return
    ; }