~cytrogen/masto-fe

9af04d5a46be1887525a42d515d204f62bc94385 — Claire 2 years ago b27a9a5
[Glitch] Add a confirmation screen when suspending a domain

Port e9385e93e9b4601c87d1f5d6b8ddfd815f7aedcb to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
A app/javascript/flavours/glitch/components/admin/ImpactReport.jsx => app/javascript/flavours/glitch/components/admin/ImpactReport.jsx +91 -0
@@ 0,0 1,91 @@
import PropTypes from 'prop-types';
import { PureComponent } from 'react';

import { FormattedNumber, FormattedMessage } from 'react-intl';

import classNames from 'classnames';

import api from 'flavours/glitch/api';
import { Skeleton } from 'flavours/glitch/components/skeleton';

export default class ImpactReport extends PureComponent {

  static propTypes = {
    domain: PropTypes.string.isRequired,
  };

  state = {
    loading: true,
    data: null,
  };

  componentDidMount () {
    const { domain } = this.props;

    const params = {
      domain: domain,
      include_subdomains: true,
    };

    api().post('/api/v1/admin/measures', {
      keys: ['instance_accounts', 'instance_follows', 'instance_followers'],
      start_at: null,
      end_at: null,
      instance_accounts: params,
      instance_follows: params,
      instance_followers: params,
    }).then(res => {
      this.setState({
        loading: false,
        data: res.data,
      });
    }).catch(err => {
      console.error(err);
    });
  }

  render () {
    const { loading, data } = this.state;

    return (
      <div className='dimension'>
        <h4><FormattedMessage id='admin.impact_report.title' defaultMessage='Impact summary' /></h4>

        <table>
          <tbody>
            <tr className='dimension__item'>
              <td className='dimension__item__key'>
                <FormattedMessage id='admin.impact_report.instance_accounts' defaultMessage='Accounts profiles this would delete' />
              </td>

              <td className='dimension__item__value'>
                {loading ? <Skeleton width={60} /> : <FormattedNumber value={data[0].total} />}
              </td>
            </tr>

            <tr className={classNames('dimension__item', { negative: !loading && data[1].total > 0 })}>
              <td className='dimension__item__key'>
                <FormattedMessage id='admin.impact_report.instance_follows' defaultMessage='Followers their users would lose' />
              </td>

              <td className='dimension__item__value'>
                {loading ? <Skeleton width={60} /> : <FormattedNumber value={data[1].total} />}
              </td>
            </tr>

            <tr className={classNames('dimension__item', { negative: !loading && data[2].total > 0 })}>
              <td className='dimension__item__key'>
                <FormattedMessage id='admin.impact_report.instance_followers' defaultMessage='Followers our users would lose' />
              </td>

              <td className='dimension__item__value'>
                {loading ? <Skeleton width={60} /> : <FormattedNumber value={data[2].total} />}
              </td>
            </tr>
          </tbody>
        </table>
      </div>
    );
  }

}

M app/javascript/flavours/glitch/styles/admin.scss => app/javascript/flavours/glitch/styles/admin.scss +9 -0
@@ 1315,6 1315,15 @@ a.sparkline {
    &:last-child {
      border-bottom: 0;
    }

    &.negative {
      color: $error-value-color;
      font-weight: 700;

      .dimension__item__value {
        color: $error-value-color;
      }
    }
  }
}