chuckya/app/javascript/flavours/glitch/components/status_visibility_icon.jsx

53 lines
1.4 KiB
React
Raw Normal View History

2017-07-27 07:41:28 +09:00
// Package imports //
import React from 'react';
import PropTypes from 'prop-types';
import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import Icon from 'flavours/glitch/components/icon';
2017-07-27 07:41:28 +09:00
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: 'Mentioned people only' },
2017-07-27 07:41:28 +09:00
});
class VisibilityIcon extends ImmutablePureComponent {
2017-07-27 07:41:28 +09:00
static propTypes = {
visibility: PropTypes.string,
intl: PropTypes.object.isRequired,
withLabel: PropTypes.bool,
};
render() {
const { withLabel, visibility, intl } = this.props;
const visibilityIcon = {
2017-07-27 07:41:28 +09:00
public: 'globe',
unlisted: 'unlock',
2017-07-27 07:41:28 +09:00
private: 'lock',
direct: 'envelope',
}[visibility];
const label = intl.formatMessage(messages[visibility]);
const icon = (<Icon
className='status__visibility-icon'
fixedWidth
id={visibilityIcon}
2017-07-27 07:41:28 +09:00
title={label}
aria-hidden='true'
/>);
if (withLabel) {
return (<span style={{ whiteSpace: 'nowrap' }}>{icon} {label}</span>);
} else {
return icon;
}
}
}
export default injectIntl(VisibilityIcon);