Add admin links to status and account menus (fixes #673)
If the current logged-in user is an admin, add quick links to the admin interface in account and toot dropdown menu. Suggestion by @ashkitten
This commit is contained in:
		| @@ -5,7 +5,7 @@ import IconButton from './icon_button'; | ||||
| import DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container'; | ||||
| import { defineMessages, injectIntl } from 'react-intl'; | ||||
| import ImmutablePureComponent from 'react-immutable-pure-component'; | ||||
| import { me } from 'flavours/glitch/util/initial_state'; | ||||
| import { me, isStaff } from 'flavours/glitch/util/initial_state'; | ||||
| import RelativeTimestamp from './relative_timestamp'; | ||||
|  | ||||
| const messages = defineMessages({ | ||||
| @@ -31,6 +31,8 @@ const messages = defineMessages({ | ||||
|   pin: { id: 'status.pin', defaultMessage: 'Pin on profile' }, | ||||
|   unpin: { id: 'status.unpin', defaultMessage: 'Unpin from profile' }, | ||||
|   embed: { id: 'status.embed', defaultMessage: 'Embed' }, | ||||
|   admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' }, | ||||
|   admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' }, | ||||
| }); | ||||
|  | ||||
| const obfuscatedCount = count => { | ||||
| @@ -186,6 +188,11 @@ export default class StatusActionBar extends ImmutablePureComponent { | ||||
|       menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick }); | ||||
|       menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick }); | ||||
|       menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport }); | ||||
|       if (isStaff) { | ||||
|         menu.push(null); | ||||
|         menu.push({ text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }), href: `/admin/accounts/${status.getIn(['account', 'id'])}` }); | ||||
|         menu.push({ text: intl.formatMessage(messages.admin_status), href: `/admin/accounts/${status.getIn(['account', 'id'])}/statuses/${status.get('id')}` }); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     if (status.get('in_reply_to_id', null) === null) { | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; | ||||
| import DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container'; | ||||
| import { Link } from 'react-router-dom'; | ||||
| import { defineMessages, injectIntl, FormattedMessage, FormattedNumber } from 'react-intl'; | ||||
| import { me } from 'flavours/glitch/util/initial_state'; | ||||
| import { me, isStaff } from 'flavours/glitch/util/initial_state'; | ||||
|  | ||||
| const messages = defineMessages({ | ||||
|   mention: { id: 'account.mention', defaultMessage: 'Mention @{name}' }, | ||||
| @@ -25,6 +25,7 @@ const messages = defineMessages({ | ||||
|   showReblogs: { id: 'account.show_reblogs', defaultMessage: 'Show boosts from @{name}' }, | ||||
|   endorse: { id: 'account.endorse', defaultMessage: 'Feature on profile' }, | ||||
|   unendorse: { id: 'account.unendorse', defaultMessage: 'Don\'t feature on profile' }, | ||||
|   admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' }, | ||||
| }); | ||||
|  | ||||
| @injectIntl | ||||
| @@ -120,6 +121,11 @@ export default class ActionBar extends React.PureComponent { | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     if (account.get('id') !== me && isStaff) { | ||||
|       menu.push(null); | ||||
|       menu.push({ text: intl.formatMessage(messages.admin_account, { name: account.get('username') }), href: `/admin/accounts/${account.get('id')}` }); | ||||
|     } | ||||
|  | ||||
|     return ( | ||||
|       <div> | ||||
|         {extraInfo} | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import IconButton from 'flavours/glitch/components/icon_button'; | ||||
| import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
| import DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container'; | ||||
| import { defineMessages, injectIntl } from 'react-intl'; | ||||
| import { me } from 'flavours/glitch/util/initial_state'; | ||||
| import { me, isStaff } from 'flavours/glitch/util/initial_state'; | ||||
|  | ||||
| const messages = defineMessages({ | ||||
|   delete: { id: 'status.delete', defaultMessage: 'Delete' }, | ||||
| @@ -26,6 +26,8 @@ const messages = defineMessages({ | ||||
|   pin: { id: 'status.pin', defaultMessage: 'Pin on profile' }, | ||||
|   unpin: { id: 'status.unpin', defaultMessage: 'Unpin from profile' }, | ||||
|   embed: { id: 'status.embed', defaultMessage: 'Embed' }, | ||||
|   admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' }, | ||||
|   admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' }, | ||||
| }); | ||||
|  | ||||
| @injectIntl | ||||
| @@ -146,6 +148,11 @@ export default class ActionBar extends React.PureComponent { | ||||
|       menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick }); | ||||
|       menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick }); | ||||
|       menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport }); | ||||
|       if (isStaff) { | ||||
|         menu.push(null); | ||||
|         menu.push({ text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }), href: `/admin/accounts/${status.getIn(['account', 'id'])}` }); | ||||
|         menu.push({ text: intl.formatMessage(messages.admin_status), href: `/admin/accounts/${status.getIn(['account', 'id'])}/statuses/${status.get('id')}` }); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     const shareButton = ('share' in navigator) && status.get('visibility') === 'public' && ( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user