diff --git a/app/soapbox/features/ui/components/instance_moderation_panel.js b/app/soapbox/features/ui/components/instance_moderation_panel.js new file mode 100644 index 000000000..693940540 --- /dev/null +++ b/app/soapbox/features/ui/components/instance_moderation_panel.js @@ -0,0 +1,80 @@ +'use strict'; + +import React from 'react'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; +import { injectIntl, defineMessages, FormattedMessage } from 'react-intl'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import { makeGetRemoteInstance } from 'soapbox/selectors'; +import InstanceRestrictions from 'soapbox/features/federation_restrictions/components/instance_restrictions'; +import DropdownMenu from 'soapbox/containers/dropdown_menu_container'; +import { openModal } from 'soapbox/actions/modal'; +import { isAdmin } from 'soapbox/utils/accounts'; + +const getRemoteInstance = makeGetRemoteInstance(); + +const messages = defineMessages({ + editFederation: { id: 'remote_instance.edit_federation', defaultMessage: 'Edit federation' }, +}); + +const mapStateToProps = (state, { host }) => { + const me = state.get('me'); + const account = state.getIn(['accounts', me]); + + return { + instance: state.get('instance'), + remoteInstance: getRemoteInstance(state, host), + isAdmin: isAdmin(account), + }; +}; + +export default @connect(mapStateToProps, null, null, { forwardRef: true }) +@injectIntl +class InstanceModerationPanel extends ImmutablePureComponent { + + static propTypes = { + intl: PropTypes.object.isRequired, + host: PropTypes.string.isRequired, + instance: ImmutablePropTypes.map, + remoteInstance: ImmutablePropTypes.map, + isAdmin: PropTypes.bool, + }; + + handleEditFederation = e => { + const { dispatch, host } = this.props; + dispatch(openModal('EDIT_FEDERATION', { host })); + } + + makeMenu = () => { + const { intl } = this.props; + + return [{ + text: intl.formatMessage(messages.editFederation), + action: this.handleEditFederation, + }]; + } + + render() { + const { remoteInstance, isAdmin } = this.props; + const menu = this.makeMenu(); + + return ( +