import { defineMessages, injectIntl } from "react-intl"; import { connect } from "react-redux"; import { replyCompose } from "mastodon/actions/compose"; import { markConversationRead, deleteConversation } from "mastodon/actions/conversations"; import { openModal } from "mastodon/actions/modal"; import { muteStatus, unmuteStatus, hideStatus, revealStatus } from "mastodon/actions/statuses"; import { makeGetStatus } from "mastodon/selectors"; import Conversation from "../components/conversation"; const messages = defineMessages({ replyConfirm: { id: "confirmations.reply.confirm", defaultMessage: "Reply" }, replyMessage: { id: "confirmations.reply.message", defaultMessage: "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?" }, }); const mapStateToProps = () => { const getStatus = makeGetStatus(); return (state, { conversationId }) => { const conversation = state.getIn(["conversations", "items"]).find(x => x.get("id") === conversationId); const lastStatusId = conversation.get("last_status", null); return { accounts: conversation.get("accounts").map(accountId => state.getIn(["accounts", accountId], null)), unread: conversation.get("unread"), lastStatus: lastStatusId && getStatus(state, { id: lastStatusId }), }; }; }; const mapDispatchToProps = (dispatch, { intl, conversationId }) => ({ markRead () { dispatch(markConversationRead(conversationId)); }, reply (status, router) { dispatch((_, getState) => { let state = getState(); if (state.getIn(["compose", "text"]).trim().length !== 0) { dispatch(openModal({ modalType: "CONFIRM", modalProps: { message: intl.formatMessage(messages.replyMessage), confirm: intl.formatMessage(messages.replyConfirm), onConfirm: () => dispatch(replyCompose(status, router)), }, })); } else { dispatch(replyCompose(status, router)); } }); }, delete () { dispatch(deleteConversation(conversationId)); }, onMute (status) { if (status.get("muted")) { dispatch(unmuteStatus(status.get("id"))); } else { dispatch(muteStatus(status.get("id"))); } }, onToggleHidden (status) { if (status.get("hidden")) { dispatch(revealStatus(status.get("id"))); } else { dispatch(hideStatus(status.get("id"))); } }, }); export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Conversation));