import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { injectIntl, FormattedMessage, defineMessages } from 'react-intl'; import { connect } from 'react-redux'; import { Link } from 'react-router-dom'; import { closeReports } from 'soapbox/actions/admin'; import { deactivateUserModal, deleteUserModal } from 'soapbox/actions/moderation'; import snackbar from 'soapbox/actions/snackbar'; import Avatar from 'soapbox/components/avatar'; import { Button } from 'soapbox/components/ui'; import DropdownMenu from 'soapbox/containers/dropdown_menu_container'; import Accordion from 'soapbox/features/ui/components/accordion'; import ReportStatus from './report_status'; const messages = defineMessages({ reportClosed: { id: 'admin.reports.report_closed_message', defaultMessage: 'Report on @{name} was closed' }, deactivateUser: { id: 'admin.users.actions.deactivate_user', defaultMessage: 'Deactivate @{name}' }, deleteUser: { id: 'admin.users.actions.delete_user', defaultMessage: 'Delete @{name}' }, }); export default @connect() @injectIntl class Report extends ImmutablePureComponent { static propTypes = { report: ImmutablePropTypes.map.isRequired, }; state = { accordionExpanded: false, }; makeMenu = () => { const { intl, report } = this.props; return [{ text: intl.formatMessage(messages.deactivateUser, { name: report.getIn(['account', 'username']) }), action: this.handleDeactivateUser, icon: require('@tabler/icons/icons/user-off.svg'), }, { text: intl.formatMessage(messages.deleteUser, { name: report.getIn(['account', 'username']) }), action: this.handleDeleteUser, icon: require('@tabler/icons/icons/user-minus.svg'), }]; } handleCloseReport = () => { const { intl, dispatch, report } = this.props; dispatch(closeReports([report.get('id')])).then(() => { const message = intl.formatMessage(messages.reportClosed, { name: report.getIn(['account', 'username']) }); dispatch(snackbar.success(message)); }).catch(() => {}); } handleDeactivateUser = () => { const { intl, dispatch, report } = this.props; const accountId = report.getIn(['account', 'id']); dispatch(deactivateUserModal(intl, accountId, () => this.handleCloseReport())); } handleDeleteUser = () => { const { intl, dispatch, report } = this.props; const accountId = report.getIn(['account', 'id']); dispatch(deleteUserModal(intl, accountId, () => this.handleCloseReport())); } handleAccordionToggle = setting => { this.setState({ accordionExpanded: setting }); } render() { const { report } = this.props; const { accordionExpanded } = this.state; const menu = this.makeMenu(); const statuses = report.get('statuses'); const statusCount = statuses.count(); const acct = report.getIn(['account', 'acct']); const reporterAcct = report.getIn(['actor', 'acct']); return (