diff --git a/client/coral-admin/src/components/Drawer.js b/client/coral-admin/src/components/Drawer.js index 60973e8c2..0d59d3bbe 100644 --- a/client/coral-admin/src/components/Drawer.js +++ b/client/coral-admin/src/components/Drawer.js @@ -44,7 +44,7 @@ const CoralDrawer = ({ handleLogout, auth = {} }) => ( {t('configure.configure')} )} - Sign Out + {t('configure.sign_out')} {`v${process.env.VERSION}`} diff --git a/client/coral-admin/src/routes/Moderation/components/ModerationQueue.js b/client/coral-admin/src/routes/Moderation/components/ModerationQueue.js index ce957b82d..0e7cbe347 100644 --- a/client/coral-admin/src/routes/Moderation/components/ModerationQueue.js +++ b/client/coral-admin/src/routes/Moderation/components/ModerationQueue.js @@ -397,6 +397,13 @@ class ModerationQueue extends React.Component { const index = comments.findIndex( comment => comment.id === selectedCommentId ); + + // This can happen temporarily when we call redux to change the selected comment + // but it didn't fully take effect yet. + if (index === -1) { + return null; + } + const comment = comments[index]; return (
@@ -414,7 +421,7 @@ class ModerationQueue extends React.Component { dangling={ !this.props.commentBelongToQueue(this.props.activeTab, comment) } - />; + />
); } diff --git a/client/coral-embed-stream/src/tabs/stream/components/FlagButton.js b/client/coral-embed-stream/src/tabs/stream/components/FlagButton.js index bc673ba28..002297415 100644 --- a/client/coral-embed-stream/src/tabs/stream/components/FlagButton.js +++ b/client/coral-embed-stream/src/tabs/stream/components/FlagButton.js @@ -8,6 +8,7 @@ import ClickOutside from 'coral-framework/components/ClickOutside'; import cn from 'classnames'; import styles from './FlagButton.css'; import * as REASONS from 'coral-framework/graphql/flagReasons'; +import PropTypes from 'prop-types'; import { getErrorMessages, forEachError } from 'coral-framework/utils'; @@ -77,9 +78,10 @@ export default class FlagButton extends Component { return; } break; - case this.props.getPopupMenu.length: - this.closeMenu(); - return; + case 2: + return this.closeMenu(); + default: + throw new Error(`Unexpected step ${step}`); } // If itemType and reason are both set, post the action @@ -92,6 +94,8 @@ export default class FlagButton extends Component { case 'USERS': item_id = author_id; break; + default: + throw new Error(`Unexpected itemType ${itemType}`); } let action = { @@ -272,3 +276,12 @@ export default class FlagButton extends Component { ); } } + +FlagButton.propTypes = { + currentUser: PropTypes.object, + showSignInDialog: PropTypes.func, + notify: PropTypes.func, + getPopupMenu: PropTypes.array, + flaggedByCurrentUser: PropTypes.bool, + banned: PropTypes.bool, +}; diff --git a/package.json b/package.json index 6a3b1b447..1c801db93 100644 --- a/package.json +++ b/package.json @@ -218,7 +218,7 @@ "yaml-lint": "^1.0.0" }, "engines": { - "node": "^8" + "node": ">=8" }, "pre-commit": { "silent": false, diff --git a/services/users.js b/services/users.js index 96386108f..a8a6b292b 100644 --- a/services/users.js +++ b/services/users.js @@ -21,7 +21,7 @@ const debug = require('debug')('talk:services:users'); const UserModel = require('../models/user'); const RECAPTCHA_WINDOW = '10m'; // 10 minutes. -const RECAPTCHA_INCORRECT_TRIGGER = 5; // after 3 incorrect attempts, recaptcha will be required. +const RECAPTCHA_INCORRECT_TRIGGER = 5; // after 5 incorrect attempts, recaptcha will be required. const ActionsService = require('./actions'); const mailer = require('./mailer');