From 7b59323b262bc3d98425bff12e6dbef5b4c80876 Mon Sep 17 00:00:00 2001 From: Belen Curcio Date: Thu, 7 Sep 2017 08:05:39 -0300 Subject: [PATCH] Moderation Actions --- .eslintignore | 1 + .gitignore | 1 + .../client/components/Tag.js | 7 +- .../client/.babelrc | 14 ++++ .../client/.eslintrc.json | 23 +++++++ .../client/components/ModerationActions.css | 8 +++ .../client/components/ModerationActions.js | 54 ++++++++++++++++ .../client/components/RejectCommentAction.css | 17 +++++ .../client/components/RejectCommentAction.js | 14 ++++ .../client/components/Tooltip.css | 64 +++++++++++++++++++ .../client/components/Tooltip.js | 9 +++ .../talk-plugin-ignore-user/client/.babelrc | 14 ++++ .../client/.eslintrc.json | 23 +++++++ .../client/components/IgnoreUserAction.css | 17 +++++ .../client/components/IgnoreUserAction.js | 12 ++++ .../components/IgnoreUserConfirmation.css | 45 +++++++++++++ .../components/IgnoreUserConfirmation.js | 23 +++++++ .../client/components/IgnoredUserSection.css | 22 +++++++ .../client/components/IgnoredUserSection.js | 23 +++++++ .../client/containers/IgnoreUserAction.js | 53 +++++++++++++++ .../containers/IgnoreUserConfirmation.js | 60 +++++++++++++++++ .../client/containers/IgnoredUserSection.js | 36 +++++++++++ .../talk-plugin-ignore-user/client/index.js | 43 +++++++++++++ .../client/translations.yml | 25 ++++++++ .../talk-plugin-ignore-user/index.js | 1 + .../client/containers/RejectCommentAction.js | 12 ++++ .../client/index.js | 11 ++++ .../client/translations.yml | 6 ++ .../talk-plugin-moderation-actions/index.js | 1 + 29 files changed, 635 insertions(+), 4 deletions(-) create mode 100644 plugins/talk-plugin-moderation-actions/client/.babelrc create mode 100644 plugins/talk-plugin-moderation-actions/client/.eslintrc.json create mode 100644 plugins/talk-plugin-moderation-actions/client/components/ModerationActions.css create mode 100644 plugins/talk-plugin-moderation-actions/client/components/ModerationActions.js create mode 100644 plugins/talk-plugin-moderation-actions/client/components/RejectCommentAction.css create mode 100644 plugins/talk-plugin-moderation-actions/client/components/RejectCommentAction.js create mode 100644 plugins/talk-plugin-moderation-actions/client/components/Tooltip.css create mode 100644 plugins/talk-plugin-moderation-actions/client/components/Tooltip.js create mode 100644 plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/.babelrc create mode 100644 plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/.eslintrc.json create mode 100644 plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserAction.css create mode 100644 plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserAction.js create mode 100644 plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserConfirmation.css create mode 100644 plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserConfirmation.js create mode 100644 plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoredUserSection.css create mode 100644 plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoredUserSection.js create mode 100644 plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/containers/IgnoreUserAction.js create mode 100644 plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/containers/IgnoreUserConfirmation.js create mode 100644 plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/containers/IgnoredUserSection.js create mode 100644 plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/index.js create mode 100644 plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/translations.yml create mode 100644 plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/index.js create mode 100644 plugins/talk-plugin-moderation-actions/client/containers/RejectCommentAction.js create mode 100644 plugins/talk-plugin-moderation-actions/client/index.js create mode 100644 plugins/talk-plugin-moderation-actions/client/translations.yml create mode 100644 plugins/talk-plugin-moderation-actions/index.js diff --git a/.eslintignore b/.eslintignore index 4805e34a4..da39d3ccf 100644 --- a/.eslintignore +++ b/.eslintignore @@ -22,5 +22,6 @@ plugins/* !plugins/talk-plugin-author-menu !plugins/talk-plugin-member-since !plugins/talk-plugin-ignore-user +!plugins/talk-plugin-moderation-actions node_modules diff --git a/.gitignore b/.gitignore index 0a2ac00df..672409dbf 100644 --- a/.gitignore +++ b/.gitignore @@ -38,5 +38,6 @@ plugins/* !plugins/talk-plugin-author-menu !plugins/talk-plugin-member-since !plugins/talk-plugin-ignore-user +!plugins/talk-plugin-moderation-actions **/node_modules/* diff --git a/plugins/talk-plugin-featured-comments/client/components/Tag.js b/plugins/talk-plugin-featured-comments/client/components/Tag.js index a8ee80417..57a871ee9 100644 --- a/plugins/talk-plugin-featured-comments/client/components/Tag.js +++ b/plugins/talk-plugin-featured-comments/client/components/Tag.js @@ -31,15 +31,14 @@ export default class Tag extends React.Component { render() { const {tooltip} = this.state; return( -
- + {t('talk-plugin-featured-comments.featured')} {tooltip && } -
+ ); } } diff --git a/plugins/talk-plugin-moderation-actions/client/.babelrc b/plugins/talk-plugin-moderation-actions/client/.babelrc new file mode 100644 index 000000000..60be246eb --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/.babelrc @@ -0,0 +1,14 @@ +{ + "presets": [ + "es2015" + ], + "plugins": [ + "add-module-exports", + "transform-class-properties", + "transform-decorators-legacy", + "transform-object-assign", + "transform-object-rest-spread", + "transform-async-to-generator", + "transform-react-jsx" + ] +} \ No newline at end of file diff --git a/plugins/talk-plugin-moderation-actions/client/.eslintrc.json b/plugins/talk-plugin-moderation-actions/client/.eslintrc.json new file mode 100644 index 000000000..9fe56bd14 --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/.eslintrc.json @@ -0,0 +1,23 @@ +{ + "env": { + "browser": true, + "es6": true, + "mocha": true + }, + "parserOptions": { + "sourceType": "module", + "ecmaFeatures": { + "experimentalObjectRestSpread": true, + "jsx": true + } + }, + "parser": "babel-eslint", + "plugins": [ + "react" + ], + "rules": { + "react/jsx-uses-react": "error", + "react/jsx-uses-vars": "error", + "no-console": ["warn", { "allow": ["warn", "error"] }] + } +} diff --git a/plugins/talk-plugin-moderation-actions/client/components/ModerationActions.css b/plugins/talk-plugin-moderation-actions/client/components/ModerationActions.css new file mode 100644 index 000000000..fd841e1cd --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/ModerationActions.css @@ -0,0 +1,8 @@ +.moderationActions { + display: inline; + padding: 0 4px; +} + +.moderationActions:hover { + cursor: pointer; +} \ No newline at end of file diff --git a/plugins/talk-plugin-moderation-actions/client/components/ModerationActions.js b/plugins/talk-plugin-moderation-actions/client/components/ModerationActions.js new file mode 100644 index 000000000..1b7b35948 --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/ModerationActions.js @@ -0,0 +1,54 @@ +import React from 'react'; +import cn from 'classnames'; +import styles from './ModerationActions.css'; +import Tooltip from './Tooltip'; +import {t} from 'plugin-api/beta/client/services'; +import {Icon} from 'plugin-api/beta/client/components/ui'; +import RejectCommentAction from '../containers/RejectCommentAction.js'; +import ClickOutside from 'coral-framework/components/ClickOutside'; + +export default class Tag extends React.Component { + constructor() { + super(); + + this.state = { + tooltip: false + }; + + } + + toggleTooltip = (e) => { + e.preventDefault(); + const {tooltip} = this.state; + + this.setState({ + tooltip: !tooltip + }); + } + + hideTooltip = () => { + this.setState({ + tooltip: false + }); + } + + render() { + const {tooltip} = this.state; + return( + +
+ + + {tooltip ? : } + + + {tooltip && ( + + + + )} +
+
+ ); + } +} diff --git a/plugins/talk-plugin-moderation-actions/client/components/RejectCommentAction.css b/plugins/talk-plugin-moderation-actions/client/components/RejectCommentAction.css new file mode 100644 index 000000000..ac818278c --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/RejectCommentAction.css @@ -0,0 +1,17 @@ +.root { + white-space: nowrap; +} + +.button { + composes: buttonReset from "coral-framework/styles/reset.css"; + border: 1px solid rgba(1, 1, 1, 0.8); + border-radius: 1px; + padding: 3px 6px; + font-size: 12px; + transition: color 100ms, background 100ms; + + &:hover { + background-color: rgba(1, 1, 1, 0.8); + color: white; + } +} diff --git a/plugins/talk-plugin-moderation-actions/client/components/RejectCommentAction.js b/plugins/talk-plugin-moderation-actions/client/components/RejectCommentAction.js new file mode 100644 index 000000000..d15127294 --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/RejectCommentAction.js @@ -0,0 +1,14 @@ +import React from 'react'; +import styles from './RejectCommentAction.css'; +import {t} from 'plugin-api/beta/client/services'; +import {Icon} from 'plugin-api/beta/client/components/ui'; +import cn from 'classnames'; + +export default ({rejectComment}) => ( + +); diff --git a/plugins/talk-plugin-moderation-actions/client/components/Tooltip.css b/plugins/talk-plugin-moderation-actions/client/components/Tooltip.css new file mode 100644 index 000000000..63e0a1e1b --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/Tooltip.css @@ -0,0 +1,64 @@ +.tooltip { + background-color: white; + border: solid 1px #999; + border-radius: 3px; + padding: 10px; + position: absolute; + -webkit-box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 1px 5px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.2); + box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 1px 5px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.2); + z-index: 10; + top: 26px; + right: 0px; + width: 200px; + text-align: left; + color: #616161; +} + +.tooltip::before{ + content: ''; + border: 10px solid transparent; + border-top-color: #999; + position: absolute; + right: 0px; + top: -20px; + transform: rotate(180deg); +} + +.tooltip::after{ + content: ''; + border: 10px solid transparent; + border-top-color: white; + position: absolute; + right: 0px; + top: -19px; + transform: rotate(180deg); +} + +.headline { + color: #484747; + display: inline-block; + margin: 0; + padding: 0; + font-size: 1.02em; + margin-left: 6px; + letter-spacing: 0.2px; + vertical-align: middle; + margin-bottom: 2px; + line-height: 22px; +} + +.icon { + font-size: 1.4em; + vertical-align: middle; +} + +.description { + width: 100%; + box-sizing: border-box; + white-space: pre-wrap; + padding: 0; + margin: 0; + padding-left: 25px; + font-weight: 400; + font-size: 1em; +} \ No newline at end of file diff --git a/plugins/talk-plugin-moderation-actions/client/components/Tooltip.js b/plugins/talk-plugin-moderation-actions/client/components/Tooltip.js new file mode 100644 index 000000000..6b7428ce6 --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/Tooltip.js @@ -0,0 +1,9 @@ +import React from 'react'; +import cn from 'classnames'; +import styles from './Tooltip.css'; +import {t} from 'plugin-api/beta/client/services'; +import {Icon} from 'plugin-api/beta/client/components/ui'; + +export default ({className = '', children}) => ( +
{children}
+); diff --git a/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/.babelrc b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/.babelrc new file mode 100644 index 000000000..60be246eb --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/.babelrc @@ -0,0 +1,14 @@ +{ + "presets": [ + "es2015" + ], + "plugins": [ + "add-module-exports", + "transform-class-properties", + "transform-decorators-legacy", + "transform-object-assign", + "transform-object-rest-spread", + "transform-async-to-generator", + "transform-react-jsx" + ] +} \ No newline at end of file diff --git a/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/.eslintrc.json b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/.eslintrc.json new file mode 100644 index 000000000..9fe56bd14 --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/.eslintrc.json @@ -0,0 +1,23 @@ +{ + "env": { + "browser": true, + "es6": true, + "mocha": true + }, + "parserOptions": { + "sourceType": "module", + "ecmaFeatures": { + "experimentalObjectRestSpread": true, + "jsx": true + } + }, + "parser": "babel-eslint", + "plugins": [ + "react" + ], + "rules": { + "react/jsx-uses-react": "error", + "react/jsx-uses-vars": "error", + "no-console": ["warn", { "allow": ["warn", "error"] }] + } +} diff --git a/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserAction.css b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserAction.css new file mode 100644 index 000000000..ac818278c --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserAction.css @@ -0,0 +1,17 @@ +.root { + white-space: nowrap; +} + +.button { + composes: buttonReset from "coral-framework/styles/reset.css"; + border: 1px solid rgba(1, 1, 1, 0.8); + border-radius: 1px; + padding: 3px 6px; + font-size: 12px; + transition: color 100ms, background 100ms; + + &:hover { + background-color: rgba(1, 1, 1, 0.8); + color: white; + } +} diff --git a/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserAction.js b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserAction.js new file mode 100644 index 000000000..19319ec9c --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserAction.js @@ -0,0 +1,12 @@ +import React from 'react'; +import styles from './IgnoreUserAction.css'; +import {t} from 'plugin-api/beta/client/services'; +import cn from 'classnames'; + +export default ({ignoreUser}) => ( + +); diff --git a/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserConfirmation.css b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserConfirmation.css new file mode 100644 index 000000000..4f3d8e9da --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserConfirmation.css @@ -0,0 +1,45 @@ +.root { + width: 200px; +} + +.actions { + display: flex; + justify-content: flex-end; + margin-top: 8px; +} + +.message { + font-size: 13px; +} + +.title { + padding: 0; + margin: 0 0 8px 0; + font-size: 15px; +} + +.button { + composes: buttonReset from "coral-framework/styles/reset.css"; + border: 1px solid rgba(1, 1, 1, 0.8); + border-radius: 1px; + padding: 3px 6px; + font-size: 12px; + transition: color 100ms, background 100ms; + + &:hover { + background-color: rgba(1, 1, 1, 0.8); + color: white; + } +} + +.cancel { + composes: buttonReset from "coral-framework/styles/reset.css"; + padding: 3px 6px; + font-size: 12px; + transition: color 100ms; + margin-right: 4px; + + &:hover { + color: rgba(1, 1, 1, 0.75); + } +} diff --git a/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserConfirmation.js b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserConfirmation.js new file mode 100644 index 000000000..8da879f62 --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoreUserConfirmation.js @@ -0,0 +1,23 @@ +import React from 'react'; +import styles from './IgnoreUserConfirmation.css'; +import {t} from 'plugin-api/beta/client/services'; +import cn from 'classnames'; + +export default ({ignoreUser, cancel, username}) => ( + +); diff --git a/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoredUserSection.css b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoredUserSection.css new file mode 100644 index 000000000..b279101ea --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoredUserSection.css @@ -0,0 +1,22 @@ +.list { + display: table; + list-style-type: none; + margin-left: 0; + padding-left: 0; +} + +.listItem { + display: table-row; +} + +.username { + display: table-cell; +} + +.button { + composes: buttonReset from "coral-framework/styles/reset.css"; + + margin-left: 16px; + color: #D0011B; + text-decoration: underline; +} diff --git a/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoredUserSection.js b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoredUserSection.js new file mode 100644 index 000000000..3946626cd --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/components/IgnoredUserSection.js @@ -0,0 +1,23 @@ +import React from 'react'; +import styles from './IgnoredUserSection.css'; +import {t} from 'plugin-api/beta/client/services'; + +export default ({ignoredUsers, stopIgnoringUser}) => ( +
+

{t('talk-plugin-ignore-user.section_title')}

+

{t('talk-plugin-ignore-user.section_info')}

+ +
+); diff --git a/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/containers/IgnoreUserAction.js b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/containers/IgnoreUserAction.js new file mode 100644 index 000000000..d7e9d38b5 --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/containers/IgnoreUserAction.js @@ -0,0 +1,53 @@ +import React from 'react'; +import IgnoreUserAction from '../components/IgnoreUserAction'; +import {compose, gql} from 'react-apollo'; +import {connect, withFragments, excludeIf} from 'plugin-api/beta/client/hocs'; +import {bindActionCreators} from 'redux'; +import {setContentSlot} from 'plugins/talk-plugin-author-menu/client/actions'; +import IgnoreUserConfirmation from './IgnoreUserConfirmation'; +import {getDefinitionName} from 'plugin-api/beta/client/utils'; + +class IgnoreUserActionContainer extends React.Component { + + ignoreUser = () => { + this.props.setContentSlot('ignoreUserConfirmation'); + }; + + render() { + return ; + } +} + +const mapDispatchToProps = (dispatch) => + bindActionCreators({ + setContentSlot, + }, dispatch); + +const withIgnoreUserActionFragments = withFragments({ + root: gql` + fragment TalkIgnoreUser_IgnoreUserAction_root on RootQuery { + me { + id + } + } + `, + comment: gql` + fragment TalkIgnoreUser_IgnoreUserAction_comment on Comment { + user { + id + } + ...${getDefinitionName(IgnoreUserConfirmation.fragments.comment)} + } + ${IgnoreUserConfirmation.fragments.comment} + `, +}); + +const enhance = compose( + connect(null, mapDispatchToProps), + withIgnoreUserActionFragments, + excludeIf(({root: {me}, comment}) => !me || me.id === comment.user.id), +); + +export default enhance(IgnoreUserActionContainer); diff --git a/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/containers/IgnoreUserConfirmation.js b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/containers/IgnoreUserConfirmation.js new file mode 100644 index 000000000..fdf6d1986 --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/containers/IgnoreUserConfirmation.js @@ -0,0 +1,60 @@ +import React from 'react'; +import IgnoreUserConfirmation from '../components/IgnoreUserConfirmation'; +import {compose, gql} from 'react-apollo'; +import {connect, withFragments, withIgnoreUser} from 'plugin-api/beta/client/hocs'; +import {bindActionCreators} from 'redux'; +import {closeMenu} from 'plugins/talk-plugin-author-menu/client/actions'; +import {notify} from 'plugin-api/beta/client/actions/notification'; +import {t} from 'plugin-api/beta/client/services'; +import {getErrorMessages} from 'plugin-api/beta/client/utils'; + +class IgnoreUserConfirmationContainer extends React.Component { + + ignoreUser = () => { + const {ignoreUser, notify, comment, closeMenu} = this.props; + ignoreUser(comment.user.id) + .then(() => { + notify('success', t('talk-plugin-ignore-user.notify_success', comment.user.username)); + }) + .catch((err) => { + notify('error', getErrorMessages(err)); + }); + closeMenu(); + }; + + cancel = () => { + this.props.closeMenu(); + } + + render() { + return ; + } +} + +const mapDispatchToProps = (dispatch) => + bindActionCreators({ + closeMenu, + notify, + }, dispatch); + +const withIgnoreUserConfirmationFragments = withFragments({ + comment: gql` + fragment TalkIgnoreUser_IgnoreUserConfirmation_comment on Comment { + user { + id + username + } + }`, +}); + +const enhance = compose( + connect(null, mapDispatchToProps), + withIgnoreUserConfirmationFragments, + withIgnoreUser, +); + +export default enhance(IgnoreUserConfirmationContainer); diff --git a/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/containers/IgnoredUserSection.js b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/containers/IgnoredUserSection.js new file mode 100644 index 000000000..e420f180b --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/containers/IgnoredUserSection.js @@ -0,0 +1,36 @@ +import React from 'react'; +import IgnoredUserSection from '../components/IgnoredUserSection'; +import {compose, gql} from 'react-apollo'; +import {withFragments, excludeIf, withStopIgnoringUser} from 'plugin-api/beta/client/hocs'; + +class IgnoredUserSectionContainer extends React.Component { + + render() { + return ; + } +} + +const withIgnoredUserSectionFragments = withFragments({ + root: gql` + fragment TalkIgnoreUser_IgnoredUserSection_root on RootQuery { + me { + id + ignoredUsers { + id, + username, + } + } + } + `, +}); + +const enhance = compose( + withIgnoredUserSectionFragments, + withStopIgnoringUser, + excludeIf(({root: {me}}) => me.ignoredUsers.length === 0), +); + +export default enhance(IgnoredUserSectionContainer); diff --git a/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/index.js b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/index.js new file mode 100644 index 000000000..6583f68e6 --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/index.js @@ -0,0 +1,43 @@ +import IgnoreUserAction from './containers/IgnoreUserAction'; +import IgnoreUserConfirmation from './containers/IgnoreUserConfirmation'; +import IgnoredUserSection from './containers/IgnoredUserSection'; +import translations from './translations.yml'; +import update from 'immutability-helper'; + +export default { + slots: { + authorMenuActions: [IgnoreUserAction], + ignoreUserConfirmation: [IgnoreUserConfirmation], + profileSections: [IgnoredUserSection], + }, + translations, + mutations: { + IgnoreUser: ({variables}) => ({ + updateQueries: { + CoralEmbedStream_Embed: (previousData) => { + const ignoredUserId = variables.id; + const updated = update(previousData, {me: {ignoredUsers: {$push: [{ + id: ignoredUserId, + __typename: 'User', + }]}}}); + return updated; + } + } + }), + StopIgnoringUser: ({variables}) => ({ + updateQueries: { + CoralEmbedStream_Profile: (previousData) => { + const noLongerIgnoredUserId = variables.id; + + // remove noLongerIgnoredUserId from ignoredUsers + const updated = update(previousData, {me: {ignoredUsers: { + $apply: (ignoredUsers) => { + return ignoredUsers.filter((u) => u.id !== noLongerIgnoredUserId); + } + }}}); + return updated; + } + } + }), + }, +}; diff --git a/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/translations.yml b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/translations.yml new file mode 100644 index 000000000..a6c051ada --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/client/translations.yml @@ -0,0 +1,25 @@ +en: + talk-plugin-ignore-user: + section_title: Ignored users + section_info: Because you ignored the following commenters, their comments are hidden. + stop_ignoring: Stop ignoring + ignore_user: Ignore User + cancel: Cancel + confirmation: | + When you ignore a user, all comments they wrote on the site will be hidden from you. You can + undo this later from My Profile. + notify_success: | + You are now ignoring {0}. You can undo this action from My Profile. + confirmation_title: Ignore {0}? +es: + talk-plugin-ignore-user: + section_title: "Usuarios ignorados" + stop_ignoring: "No ignorar más" +fr: + talk-plugin-ignore-user: + section_title: "Utilisateurs ignorés" +pt_Br: + talk-plugin-ignore-user: + section_title: "Usuários ignorados" + section_info: "Porque você ignorou os seguintes comentadores, seus comentários estão ocultos." + stop_ignoring: "Pare de ignorar" diff --git a/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/index.js b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/index.js new file mode 100644 index 000000000..f053ebf79 --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/components/talk-plugin-ignore-user/index.js @@ -0,0 +1 @@ +module.exports = {}; diff --git a/plugins/talk-plugin-moderation-actions/client/containers/RejectCommentAction.js b/plugins/talk-plugin-moderation-actions/client/containers/RejectCommentAction.js new file mode 100644 index 000000000..9d24a2003 --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/containers/RejectCommentAction.js @@ -0,0 +1,12 @@ +import React from 'react'; +import {compose} from 'react-apollo'; +import {withSetCommentStatus} from 'coral-framework/graphql/mutations'; +import RejectCommentAction from '../components/RejectCommentAction'; + +// change this + +const enhance = compose( + withSetCommentStatus +); + +export default enhance(RejectCommentAction); diff --git a/plugins/talk-plugin-moderation-actions/client/index.js b/plugins/talk-plugin-moderation-actions/client/index.js new file mode 100644 index 000000000..9e7a0716c --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/index.js @@ -0,0 +1,11 @@ +// import RejectCommentAction from './containers/RejectCommentAction'; +import ModerationActions from './components/ModerationActions'; +import translations from './translations.yml'; +import update from 'immutability-helper'; + +export default { + slots: { + commentInfoBar: [ModerationActions], + }, + translations +}; diff --git a/plugins/talk-plugin-moderation-actions/client/translations.yml b/plugins/talk-plugin-moderation-actions/client/translations.yml new file mode 100644 index 000000000..fea7352ce --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/client/translations.yml @@ -0,0 +1,6 @@ +en: + talk-plugin-reject-comment: + reject_comment: "Reject comment" +es: + talk-plugin-reject-user: + reject_comment: "Rechazar commentario" \ No newline at end of file diff --git a/plugins/talk-plugin-moderation-actions/index.js b/plugins/talk-plugin-moderation-actions/index.js new file mode 100644 index 000000000..f053ebf79 --- /dev/null +++ b/plugins/talk-plugin-moderation-actions/index.js @@ -0,0 +1 @@ +module.exports = {};