// Package imports. import PropTypes from "prop-types"; import { PureComponent } from "react"; import { defineMessages, injectIntl } from "react-intl"; import ImmutablePropTypes from "react-immutable-proptypes"; // Mastodon imports. import { Icon } from "flavours/glitch/components/icon"; import { languages } from "flavours/glitch/initial_state"; import { IconButton } from "./icon_button"; import VisibilityIcon from "./status_visibility_icon"; // Messages for use with internationalization stuff. const messages = defineMessages({ collapse: { id: "status.collapse", defaultMessage: "Collapse" }, uncollapse: { id: "status.uncollapse", defaultMessage: "Uncollapse" }, inReplyTo: { id: "status.in_reply_to", defaultMessage: "This toot is a reply" }, previewCard: { id: "status.has_preview_card", defaultMessage: "Features an attached preview card" }, pictures: { id: "status.has_pictures", defaultMessage: "Features attached pictures" }, poll: { id: "status.is_poll", defaultMessage: "This toot is a poll" }, video: { id: "status.has_video", defaultMessage: "Features attached videos" }, audio: { id: "status.has_audio", defaultMessage: "Features attached audio files" }, localOnly: { id: "status.local_only", defaultMessage: "Only visible from your instance" }, }); const LanguageIcon = ({ language }) => { if (!languages) { return null; } const lang = languages.find((lang) => lang[0] === language); if (!lang) { return null; } return ( ); }; LanguageIcon.propTypes = { language: PropTypes.string.isRequired, }; class StatusIcons extends PureComponent { static propTypes = { status: ImmutablePropTypes.map.isRequired, mediaIcons: PropTypes.arrayOf(PropTypes.string), collapsible: PropTypes.bool, collapsed: PropTypes.bool, setCollapsed: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, settings: ImmutablePropTypes.map.isRequired, }; // Handles clicks on collapsed button handleCollapsedClick = (e) => { const { collapsed, setCollapsed } = this.props; if (e.button === 0) { setCollapsed(!collapsed); e.preventDefault(); } }; mediaIconTitleText (mediaIcon) { const { intl } = this.props; const message = { "link": messages.previewCard, "picture-o": messages.pictures, "tasks": messages.poll, "video-camera": messages.video, "music": messages.audio, }[mediaIcon]; return message && intl.formatMessage(message); } renderIcon (mediaIcon) { return ( ); } // Rendering. render () { const { status, mediaIcons, collapsible, collapsed, settings, intl, } = this.props; return (