import PropTypes from 'prop-types'; import { defineMessages, injectIntl } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; import LockIcon from '@material-symbols/svg-600/outlined/lock.svg?react'; import LockOpenIcon from '@material-symbols/svg-600/outlined/lock_open.svg?react'; import MailIcon from '@material-symbols/svg-600/outlined/mail.svg?react'; import PublicIcon from '@material-symbols/svg-600/outlined/public.svg?react'; import { Button } from 'flavours/glitch/components/button'; import { Icon } from 'flavours/glitch/components/icon'; const messages = defineMessages({ publish: { defaultMessage: 'Publish', id: 'compose_form.publish', }, publishLoud: { defaultMessage: '{publish}!', id: 'compose_form.publish_loud', }, saveChanges: { id: 'compose_form.save_changes', defaultMessage: 'Save changes' }, 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' }, }); class Publisher extends ImmutablePureComponent { static propTypes = { disabled: PropTypes.bool, intl: PropTypes.object.isRequired, onSecondarySubmit: PropTypes.func, privacy: PropTypes.oneOf(['direct', 'private', 'unlisted', 'public']), sideArm: PropTypes.oneOf(['none', 'direct', 'private', 'unlisted', 'public']), isEditing: PropTypes.bool, }; render () { const { disabled, intl, onSecondarySubmit, privacy, sideArm, isEditing } = this.props; const privacyIcons = { direct: { id: 'envelope', icon: MailIcon, }, private: { id: 'lock', icon: LockIcon, }, public: { id: 'globe', icon: PublicIcon, }, unlisted: { id: 'unlock', icon: LockOpenIcon, }, }; let publishText; if (isEditing) { publishText = intl.formatMessage(messages.saveChanges); } else if (privacy === 'private' || privacy === 'direct') { const icon = privacyIcons[privacy]; publishText = ( {intl.formatMessage(messages.publish)} ); } else { publishText = privacy !== 'unlisted' ? intl.formatMessage(messages.publishLoud, { publish: intl.formatMessage(messages.publish) }) : intl.formatMessage(messages.publish); } const privacyNames = { public: messages.public, unlisted: messages.unlisted, private: messages.private, direct: messages.direct, }; return (
{sideArm && !isEditing && sideArm !== 'none' && (
)}
); } } export default injectIntl(Publisher);