From 1899dcbb7eb724d459e0809b0473e1ea62fede7c Mon Sep 17 00:00:00 2001 From: gaba Date: Thu, 2 Mar 2017 09:27:53 -0800 Subject: [PATCH] Suspend User dialog. --- client/coral-admin/src/actions/community.js | 4 +- client/coral-admin/src/components/Modal.js | 1 - .../Community/CommunityContainer.js | 16 ++- .../containers/Community/FlaggedAccounts.js | 2 +- .../Community/components/ActionButton.js | 2 +- ...endUserModal.css => SuspendUserDialog.css} | 0 .../Community/components/SuspendUserDialog.js | 119 ++++++++++++++++++ .../Community/components/SuspendUserModal.js | 106 ---------------- .../containers/Community/components/User.js | 2 +- .../src/graphql/mutations/index.js | 5 +- client/coral-admin/src/reducers/community.js | 3 +- client/coral-admin/src/translations.json | 17 ++- 12 files changed, 155 insertions(+), 122 deletions(-) rename client/coral-admin/src/containers/Community/components/{SuspendUserModal.css => SuspendUserDialog.css} (100%) create mode 100644 client/coral-admin/src/containers/Community/components/SuspendUserDialog.js delete mode 100644 client/coral-admin/src/containers/Community/components/SuspendUserModal.js diff --git a/client/coral-admin/src/actions/community.js b/client/coral-admin/src/actions/community.js index ea9a28efa..0f53ea3da 100644 --- a/client/coral-admin/src/actions/community.js +++ b/client/coral-admin/src/actions/community.js @@ -63,8 +63,8 @@ export const setCommenterStatus = (id, status) => (dispatch) => { // Ban User Dialog export const showBanUserDialog = (user) => ({type: SHOW_BANUSER_DIALOG, user}); -export const hideBanUserDialog = (showDialog) => ({type: HIDE_BANUSER_DIALOG, showDialog}); +export const hideBanUserDialog = () => ({type: HIDE_BANUSER_DIALOG}); // Suspend User Dialog export const showSuspendUserDialog = (user) => ({type: SHOW_SUSPENDUSER_DIALOG, user}); -export const hideSuspendUserDialog = (showDialog) => ({type: HIDE_SUSPENDUSER_DIALOG, showDialog}); +export const hideSuspendUserDialog = () => ({type: HIDE_SUSPENDUSER_DIALOG}); diff --git a/client/coral-admin/src/components/Modal.js b/client/coral-admin/src/components/Modal.js index 99c27c3a1..b667258c2 100644 --- a/client/coral-admin/src/components/Modal.js +++ b/client/coral-admin/src/components/Modal.js @@ -1,4 +1,3 @@ - import React from 'react'; import {Button, Icon} from 'react-mdl'; import styles from './Modal.css'; diff --git a/client/coral-admin/src/containers/Community/CommunityContainer.js b/client/coral-admin/src/containers/Community/CommunityContainer.js index c9cc245c5..5e02b193b 100644 --- a/client/coral-admin/src/containers/Community/CommunityContainer.js +++ b/client/coral-admin/src/containers/Community/CommunityContainer.js @@ -11,12 +11,13 @@ import { newPage, showBanUserDialog, hideBanUserDialog, + showSuspendUserDialog, hideSuspendUserDialog } from '../../actions/community'; import CommunityMenu from './components/CommunityMenu'; import BanUserDialog from './components/BanUserDialog'; -import SuspendUserModal from './components/SuspendUserModal'; +import SuspendUserDialog from './components/SuspendUserDialog'; import People from './People'; import FlaggedAccounts from './FlaggedAccounts'; @@ -93,6 +94,7 @@ class CommunityContainer extends Component { ); } + console.log('debug props', props); return (
-
); @@ -143,7 +146,8 @@ const mapDispatchToProps = dispatch => ({ fetchAccounts: query => dispatch(fetchAccounts(query)), showBanUserDialog: (user) => dispatch(showBanUserDialog(user)), hideBanUserDialog: () => dispatch(hideBanUserDialog(false)), - hideSuspendUserDialog: () => dispatch(hideSuspendUserDialog(false)) + showSuspendUserDialog: () => dispatch(showSuspendUserDialog()), + hideSuspendUserDialog: () => dispatch(hideSuspendUserDialog()) }); export default compose( diff --git a/client/coral-admin/src/containers/Community/FlaggedAccounts.js b/client/coral-admin/src/containers/Community/FlaggedAccounts.js index 817f51a37..154e74ef0 100644 --- a/client/coral-admin/src/containers/Community/FlaggedAccounts.js +++ b/client/coral-admin/src/containers/Community/FlaggedAccounts.js @@ -27,8 +27,8 @@ const FlaggedAccounts = ({...props}) => { index={index} modActionButtons={['REJECT', 'APPROVE']} showBanUserDialog={props.showBanUserDialog} + showSuspendUserDialog={props.showSuspendUserDialog} approveUser={props.approveUser} - rejectUser={props.rejectUser} />; }) : {lang.t('community.no-flagged-accounts')} diff --git a/client/coral-admin/src/containers/Community/components/ActionButton.js b/client/coral-admin/src/containers/Community/components/ActionButton.js index 305cf8d1a..7ae8aa20b 100644 --- a/client/coral-admin/src/containers/Community/components/ActionButton.js +++ b/client/coral-admin/src/containers/Community/components/ActionButton.js @@ -15,7 +15,7 @@ const ActionButton = ({type = '', user, ...props}) => { cStyle={type.toLowerCase()} icon={menuActionsMap[type].icon} onClick={() => { - type === 'APPROVE' ? props.approveUser({userId: user.id}) : props.rejectUser({userId: user.id}); + type === 'APPROVE' ? props.approveUser({userId: user.id}) : props.showSuspendUserDialog({user: user}); }} /> ); diff --git a/client/coral-admin/src/containers/Community/components/SuspendUserModal.css b/client/coral-admin/src/containers/Community/components/SuspendUserDialog.css similarity index 100% rename from client/coral-admin/src/containers/Community/components/SuspendUserModal.css rename to client/coral-admin/src/containers/Community/components/SuspendUserDialog.css diff --git a/client/coral-admin/src/containers/Community/components/SuspendUserDialog.js b/client/coral-admin/src/containers/Community/components/SuspendUserDialog.js new file mode 100644 index 000000000..e385403c6 --- /dev/null +++ b/client/coral-admin/src/containers/Community/components/SuspendUserDialog.js @@ -0,0 +1,119 @@ +import React, {Component, PropTypes} from 'react'; + +import {Dialog, Button} from 'coral-ui'; +import styles from './SuspendUserDialog.css'; + +import I18n from 'coral-framework/modules/i18n/i18n'; +import translations from '../../../translations.json'; + +const lang = new I18n(translations); + +const stages = [ + { + title: 'suspenduser.title_0', + description: 'suspenduser.description_0', + options: { + 'j': 'suspenduser.no_cancel', + 'k': 'suspenduser.yes_suspend' + } + }, + { + title: 'suspenduser.title_1', + description: 'suspenduser.description_1', + options: { + 'j': 'bandialog.cancel', + 'k': 'suspenduser.send' + } + } +]; + +class SuspendUserDialog extends Component { + + state = {email: '', stage: 0} + + static propTypes = { + stage: PropTypes.number, + onClose: PropTypes.func.isRequired, + suspendUser: PropTypes.func.isRequired + } + + componentDidMount() { + this.setState({email: lang.t('suspenduser.email'), about: lang.t('suspenduser.username')}); + } + + /* + * When an admin clicks to suspend a user a dialog is shown, this function + * handles the possible actions for that dialog. + */ + onActionClick = (stage, menuOption) => () => { + const {suspendUser, user} = this.props; + const {stage, email} = this.state; + + console.log('DEBUG props --> ', this.props); + console.log('DEBUG user', user); + + const cancel = this.props.onClose; + const next = () => this.setState({stage: stage + 1}); + const suspend = () => { + suspendUser({userId: user.id, email}) + .then(() => { + this.props.onClose; + }); + }; + + const suspendModalActions = [ + [ cancel, next ], + [ cancel, suspend ] + ]; + return suspendModalActions[stage][menuOption](); + } + + onEmailChange = (e) => { + console.log('debug', e.target); + this.setState({email: e.target.value}); + } + + render () { + const {open, onClose} = this.props; + const {stage} = this.state; + + return +
+ {lang.t(stages[stage].title, lang.t('suspenduser.username'))} +
+
+
+ {lang.t(stages[stage].description, lang.t('suspenduser.username'))} +
+ { + stage === 1 && +
+
{lang.t('suspenduser.write_message')}
+
+