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}
/>