Merge pull request #282 from coralproject/hide-pending-sometimes

Hide Pre-Mod tab sometimes
This commit is contained in:
David Erwin
2017-02-02 10:33:00 -05:00
committed by GitHub
6 changed files with 72 additions and 54 deletions
+7 -7
View File
@@ -14,30 +14,30 @@ export const fetchModerationQueueComments = () => {
dispatch({type: commentTypes.COMMENTS_MODERATION_QUEUE_FETCH_REQUEST});
return Promise.all([
coralApi('/queue/comments/pending'),
coralApi('/queue/comments/premod'),
coralApi('/queue/users/pending'),
coralApi('/queue/comments/rejected'),
coralApi('/queue/comments/flagged')
])
.then(([pendingComments, pendingUsers, rejected, flagged]) => {
.then(([premodComments, pendingUsers, rejected, flagged]) => {
/* Combine seperate calls into a single object */
flagged.comments.forEach(comment => comment.flagged = true);
return {
comments: [...pendingComments.comments, ...rejected.comments, ...flagged.comments],
users: [...pendingComments.users, ...pendingUsers.users, ...rejected.users, ...flagged.users],
actions: [...pendingComments.actions, ...pendingUsers.actions, ...rejected.actions, ...flagged.actions]
comments: [...premodComments.comments, ...rejected.comments, ...flagged.comments],
users: [...premodComments.users, ...pendingUsers.users, ...rejected.users, ...flagged.users],
actions: [...premodComments.actions, ...pendingUsers.actions, ...rejected.actions, ...flagged.actions]
};
})
.then(addUsersCommentsActions.bind(this, dispatch));
};
};
export const fetchPendingQueue = () => {
export const fetchPremodQueue = () => {
return dispatch => {
dispatch({type: commentTypes.COMMENTS_MODERATION_QUEUE_FETCH_REQUEST});
return coralApi('/queue/comments/pending')
return coralApi('/queue/comments/premod')
.then(addUsersCommentsActions.bind(this, dispatch));
};
};
@@ -6,7 +6,7 @@ import {
updateStatus,
showBanUserDialog,
hideBanUserDialog,
fetchPendingQueue,
fetchPremodQueue,
fetchRejectedQueue,
fetchFlaggedQueue,
fetchModerationQueueComments,
@@ -58,8 +58,8 @@ class ModerationContainer extends React.Component {
onTabClick(activeTab) {
this.setState({activeTab});
if (activeTab === 'pending') {
this.props.fetchPendingQueue();
if (activeTab === 'premod') {
this.props.fetchPremodQueue();
} else if (activeTab === 'rejected') {
this.props.fetchRejectedQueue();
} else if (activeTab === 'flagged') {
@@ -74,7 +74,7 @@ class ModerationContainer extends React.Component {
}
render () {
const {comments, actions} = this.props;
const {comments, actions, settings} = this.props;
const premodIds = comments.ids.filter(id => comments.byId[id].status === 'PREMOD');
const rejectedIds = comments.ids.filter(id => comments.byId[id].status === 'REJECTED');
const flaggedIds = comments.ids.filter(id =>
@@ -84,8 +84,12 @@ class ModerationContainer extends React.Component {
);
const userActionIds = actions.ids.filter(id => actions.byId[id].item_type === 'USERS');
// show the Pre-Mod tab if premod is enabled globally OR there are pre-mod comments in the db.
let enablePremodTab = (settings.settings && settings.settings.moderation === 'PRE') || premodIds.length;
return (
<ModerationQueue
enablePremodTab={enablePremodTab}
onTabClick={this.onTabClick}
onClose={this.onClose}
premodIds={premodIds}
@@ -110,7 +114,7 @@ const mapDispatchToProps = dispatch => {
return {
fetchSettings: () => dispatch(fetchSettings()),
fetchModerationQueueComments: () => dispatch(fetchModerationQueueComments()),
fetchPendingQueue: () => dispatch(fetchPendingQueue()),
fetchPremodQueue: () => dispatch(fetchPremodQueue()),
fetchRejectedQueue: () => dispatch(fetchRejectedQueue()),
fetchFlaggedQueue: () => dispatch(fetchFlaggedQueue()),
showBanUserDialog: (userId, userName, commentId) => dispatch(showBanUserDialog(userId, userName, commentId)),
@@ -1,4 +1,4 @@
import React from 'react';
import React, {PropTypes} from 'react';
import styles from './ModerationQueue.css';
import ModerationKeysModal from 'components/ModerationKeysModal';
@@ -10,7 +10,7 @@ import translations from '../../translations.json';
const lang = new I18n(translations);
export default (props) => (
const ModerationQueue = (props) => (
<div>
<div className='mdl-tabs'>
<div className={`mdl-tabs__tab-bar ${styles.tabBar}`}>
@@ -23,15 +23,18 @@ export default (props) => (
>
{lang.t('modqueue.all')}
</a>
<a href='#pending'
onClick={(e) => {
e.preventDefault();
props.onTabClick('pending');
}}
className={`mdl-tabs__tab ${styles.tab} ${props.activeTab === 'pending' ? styles.active : ''}`}
>
{lang.t('modqueue.pending')}
</a>
{
props.enablePremodTab
? <a href='#premod'
onClick={(e) => {
e.preventDefault();
props.onTabClick('premod');
}}
className={`mdl-tabs__tab ${styles.tab} ${props.activeTab === 'premod' ? styles.active : ''}`}>
{lang.t('modqueue.premod')}
</a>
: null
}
<a href='#account'
onClick={(e) => {
e.preventDefault();
@@ -87,33 +90,38 @@ export default (props) => (
</div>
}
</div>
<div className={`mdl-tabs__panel is-active ${styles.listContainer}`} id='pending'>
{
props.activeTab === 'pending' &&
<div>
<ModerationList
suspectWords={props.settings.settings.wordlist.suspect}
isActive={props.activeTab === 'pending'}
singleView={props.singleView}
commentIds={props.premodIds}
comments={props.comments.byId}
users={props.users.byId}
actions={props.actions.byId}
userStatusUpdate={props.userStatusUpdate}
suspendUser={props.suspendUser}
updateCommentStatus={props.updateStatus}
onClickShowBanDialog={props.showBanUserDialog}
modActions={['reject', 'approve', 'ban']}
loading={props.comments.loading}/>
<BanUserDialog
open={props.comments.showBanUserDialog}
handleClose={props.hideBanUserDialog}
onClickBanUser={props.userStatusUpdate}
user={props.comments.banUser}
/>
</div>
}
</div>
{
props.enablePremodTab
? <div className={`mdl-tabs__panel is-active ${styles.listContainer}`} id='premod'>
{
props.activeTab === 'premod' &&
<div>
<ModerationList
suspectWords={props.settings.settings.wordlist.suspect}
isActive={props.activeTab === 'premod'}
singleView={props.singleView}
commentIds={props.premodIds}
comments={props.comments.byId}
users={props.users.byId}
actions={props.actions.byId}
userStatusUpdate={props.userStatusUpdate}
suspendUser={props.suspendUser}
updateCommentStatus={props.updateStatus}
onClickShowBanDialog={props.showBanUserDialog}
modActions={['reject', 'approve', 'ban']}
loading={props.comments.loading}/>
<BanUserDialog
open={props.comments.showBanUserDialog}
handleClose={props.hideBanUserDialog}
onClickBanUser={props.userStatusUpdate}
user={props.comments.banUser}
/>
</div>
}
</div>
: null
}
<div className={`mdl-tabs__panel ${styles.listContainer}`} id='account'>
{
props.activeTab === 'account' &&
@@ -196,3 +204,9 @@ export default (props) => (
</div>
</div>
);
ModerationQueue.propTypes = {
enablePremodTab: PropTypes.bool.isRequired
};
export default ModerationQueue;
+2 -2
View File
@@ -17,7 +17,7 @@
},
"modqueue": {
"all": "all",
"pending": "pending",
"premod": "pre-mod",
"rejected": "rejected",
"flagged": "flagged",
"account": "account flags",
@@ -136,7 +136,7 @@
"loading": "Cargando resultados"
},
"modqueue": {
"pending": "pendiente",
"premod": "pre-mod",
"rejected": "rechazado",
"flagged": "marcado",
"shortcuts": "Atajos de teclado",
+1 -1
View File
@@ -27,7 +27,7 @@ function gatherActionsAndUsers (comments) {
// depending on the settings. The :moderation overwrites this settings.
// Pre-moderation: New comments are shown in the moderator queues immediately.
// Post-moderation: New comments do not appear in moderation queues unless they are flagged by other users.
router.get('/comments/pending', authorization.needed('ADMIN'), (req, res, next) => {
router.get('/comments/premod', authorization.needed('ADMIN'), (req, res, next) => {
const {asset_id} = req.query;
+1 -1
View File
@@ -97,7 +97,7 @@ describe('/api/v1/queue', () => {
it('should return all the pending comments, users and actions', () => {
return chai.request(app)
.get('/api/v1/queue/comments/pending')
.get('/api/v1/queue/comments/premod')
.set(passport.inject({roles: ['ADMIN']}))
.then((res) => {
expect(res).to.have.status(200);