Files
2025-10-12 13:42:02 +02:00

81 lines
2.5 KiB
JavaScript

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));