about summary refs log tree commit diff
path: root/app/javascript/flavours/glitch/components/status_visibility_icon.js
blob: 5e7b8ed00812e414e6b7e80c860f429761c8b05d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//  Package imports  //
import React from 'react';
import PropTypes from 'prop-types';
import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';

const messages = defineMessages({
  public: { id: 'privacy.public.short', defaultMessage: 'Public' },
  unlisted: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' },
  private: { id: 'privacy.private.short', defaultMessage: 'Followers-only' },
  direct: { id: 'privacy.direct.short', defaultMessage: 'Direct' },
});

@injectIntl
export default class VisibilityIcon extends ImmutablePureComponent {

  static propTypes = {
    visibility: PropTypes.string,
    intl: PropTypes.object.isRequired,
    withLabel: PropTypes.bool,
  };

  render() {
    const { withLabel, visibility, intl } = this.props;

    const visibilityClass = {
      public: 'globe',
      unlisted: 'unlock',
      private: 'lock',
      direct: 'envelope',
    }[visibility];

    const label = intl.formatMessage(messages[visibility]);

    const icon = (<i
      className={`status__visibility-icon fa fa-fw fa-${visibilityClass}`}
      title={label}
      aria-hidden='true'
    />);

    if (withLabel) {
      return (<span style={{ whiteSpace: 'nowrap' }}>{icon} {label}</span>);
    } else {
      return icon;
    }
  }

}