diff --git a/client/coral-admin/src/components/CommentLabels.js b/client/coral-admin/src/components/CommentLabels.js index 7af7e9a7e..bff4f575a 100644 --- a/client/coral-admin/src/components/CommentLabels.js +++ b/client/coral-admin/src/components/CommentLabels.js @@ -6,10 +6,21 @@ import FlagLabel from 'coral-ui/components/FlagLabel'; import cn from 'classnames'; import styles from './CommentLabels.css'; +const staffRoles = ['ADMIN', 'STAFF', 'MODERATOR']; + function isUserFlagged(actions) { return actions.some((action) => action.__typename === 'FlagAction' && action.user); } +function getUserFlaggedType(actions) { + return actions + .some((action) => + action.__typename === 'FlagAction' && + action.user && + action.user.roles.some((role) => staffRoles.includes(role)) + ) ? 'Staff' : 'User'; +} + function hasSuspectedWords(actions) { return actions.some((action) => action.__typename === 'FlagAction' && action.reason === 'Matched suspect word filter'); } @@ -24,7 +35,7 @@ const CommentLabels = ({comment, comment: {className, status, actions, hasParent
{hasParent && } {status === 'PREMOD' && } - {isUserFlagged(actions) && User} + {isUserFlagged(actions) && {getUserFlaggedType(actions)}} {hasSuspectedWords(actions) && Suspect} {hasHistoryFlag(actions) && History}
diff --git a/client/coral-admin/src/components/ModerationKeysModal.js b/client/coral-admin/src/components/ModerationKeysModal.js index 45304992c..5f43daf09 100644 --- a/client/coral-admin/src/components/ModerationKeysModal.js +++ b/client/coral-admin/src/components/ModerationKeysModal.js @@ -4,34 +4,38 @@ import Modal from 'components/Modal'; import styles from './ModerationKeysModal.css'; import t from 'coral-framework/services/i18n'; -const shortcuts = [ - { - title: 'modqueue.navigation', - shortcuts: { - 'j': 'modqueue.next_comment', - 'k': 'modqueue.prev_comment', - 'ctrl+f': 'modqueue.toggle_search', - 't': 'modqueue.next_queue', - 's': 'modqueue.singleview', - '?': 'modqueue.thismenu' - } - }, - { - title: 'modqueue.actions', - shortcuts: { - 'd': 'modqueue.approve', - 'f': 'modqueue.reject' - } - } -]; - export default class ModerationKeysModal extends React.Component { static propTypes = { open: PropTypes.bool.isRequired, onClose: PropTypes.func.isRequired, hideShortcutsNote: PropTypes.func.isRequired, - shortcutsNoteVisible: PropTypes.string.isRequired + shortcutsNoteVisible: PropTypes.string.isRequired, + queueCount: PropTypes.number.isRequired + } + + buildShortcuts = () => { + return [ + { + title: 'modqueue.navigation', + shortcuts: { + 'j': 'modqueue.next_comment', + 'k': 'modqueue.prev_comment', + 'ctrl+f': 'modqueue.toggle_search', + 't': 'modqueue.next_queue', + [`1...${this.props.queueCount}`]: 'modqueue.jump_to_queue', + 's': 'modqueue.singleview', + '?': 'modqueue.thismenu' + } + }, + { + title: 'modqueue.actions', + shortcuts: { + 'd': 'modqueue.approve', + 'f': 'modqueue.reject' + } + } + ]; } render () { @@ -51,7 +55,7 @@ export default class ModerationKeysModal extends React.Component {

{t('modqueue.shortcuts')}

- {shortcuts.map((shortcut, i) => ( + {this.buildShortcuts().map((shortcut, i) => ( diff --git a/client/coral-admin/src/containers/CommentLabels.js b/client/coral-admin/src/containers/CommentLabels.js index 1942d1ad0..1d57aa526 100644 --- a/client/coral-admin/src/containers/CommentLabels.js +++ b/client/coral-admin/src/containers/CommentLabels.js @@ -25,6 +25,7 @@ export default withFragments({ } user { id + roles } } ${getSlotFragmentSpreads(slots, 'comment')} diff --git a/client/coral-admin/src/routes/Moderation/components/Moderation.js b/client/coral-admin/src/routes/Moderation/components/Moderation.js index 64ccb1857..392db36e3 100644 --- a/client/coral-admin/src/routes/Moderation/components/Moderation.js +++ b/client/coral-admin/src/routes/Moderation/components/Moderation.js @@ -34,6 +34,8 @@ class Moderation extends Component { key('k', () => this.select(false)); key('f', () => this.moderate(false)); key('d', () => this.moderate(true)); + this.getMenuItems() + .forEach((menuItem, idx) => key(`${idx + 1}`, () => this.selectQueue(menuItem))); } onClose = () => { @@ -41,20 +43,23 @@ class Moderation extends Component { } nextQueue = () => { - const queueConfig = this.props.queueConfig; const activeTab = this.props.activeTab; - const assetId = this.props.data.variables.asset_id; - const menuItems = Object.keys(queueConfig).map((queue) => ({ - key: queue - })); + const menuItems = this.getMenuItems(); - const activeTabIndex = menuItems.findIndex((item) => item.key === activeTab); + const activeTabIndex = menuItems.findIndex((item) => item === activeTab); const nextQueueIndex = (activeTabIndex === menuItems.length - 1) ? 0 : activeTabIndex + 1; - this.props.router.push(this.props.getModPath(menuItems[nextQueueIndex].key, assetId)); + this.selectQueue(menuItems[nextQueueIndex]); } + selectQueue = (key) => { + const assetId = this.props.data.variables.asset_id; + this.props.router.push(this.props.getModPath(key, assetId)); + } + + getMenuItems = () => Object.keys(this.props.queueConfig); + closeSearch = () => { const {toggleStorySearch} = this.props; toggleStorySearch(false); @@ -175,6 +180,8 @@ class Moderation extends Component { key.unbind('k'); key.unbind('f'); key.unbind('d'); + this.getMenuItems() + .forEach((menuItem, idx) => key.unbind(`${idx + 1}`)); } componentWillReceiveProps(nextProps) { @@ -276,6 +283,7 @@ class Moderation extends Component { shortcutsNoteVisible={moderation.shortcutsNoteVisible} open={moderation.modalOpen} onClose={this.onClose} + queueCount={this.getMenuItems().length} />