import PropTypes from "prop-types"; import { defineMessages, injectIntl } from "react-intl"; import classNames from "classnames"; import ImmutablePureComponent from "react-immutable-pure-component"; import { length } from "stringz"; import Button from "flavours/glitch/components/button"; import { Icon } from "flavours/glitch/components/icon"; import { maxChars } from "flavours/glitch/initial_state"; const messages = defineMessages({ publish: { defaultMessage: "Promulgate", 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 = { countText: PropTypes.string, disabled: PropTypes.bool, intl: PropTypes.object.isRequired, onSecondarySubmit: PropTypes.func, onSubmit: PropTypes.func, privacy: PropTypes.oneOf(["direct", "private", "unlisted", "public"]), sideArm: PropTypes.oneOf(["none", "direct", "private", "unlisted", "public"]), isEditing: PropTypes.bool, }; handleSubmit = () => { this.props.onSubmit(); }; render () { const { countText, disabled, intl, onSecondarySubmit, privacy, sideArm, isEditing } = this.props; const diff = maxChars - length(countText || ""); const computedClass = classNames("compose-form__publish", { disabled: disabled, over: diff < 0, }); const privacyIcons = { direct: "at", private: "lock-simple", public: "planet", unlisted: "lock-open-simple" }; let publishText; if (isEditing) { publishText = intl.formatMessage(messages.saveChanges); } else if (privacy === "private" || privacy === "direct") { const iconId = 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" ? (
) : null}
); } } export default injectIntl(Publisher);