1ff70886a1
Co-authored-by: tobi <tobi.smethurst@protonmail.com> Reviewed-on: https://codeberg.org/superseriousbusiness/masto-fe-standalone/pulls/88 Co-authored-by: Zoë Bijl <moiety@noreply.codeberg.org> Co-committed-by: Zoë Bijl <moiety@noreply.codeberg.org>
188 lines
5.3 KiB
JavaScript
188 lines
5.3 KiB
JavaScript
import { defineMessages, injectIntl } from "react-intl";
|
|
|
|
import { connect } from "react-redux";
|
|
|
|
import { showAlertForError } from "../../../actions/alerts";
|
|
import { initBlockModal } from "../../../actions/blocks";
|
|
import { initBoostModal } from "../../../actions/boosts";
|
|
import {
|
|
replyCompose,
|
|
mentionCompose,
|
|
directCompose,
|
|
} from "../../../actions/compose";
|
|
import {
|
|
reblog,
|
|
favourite,
|
|
unreblog,
|
|
unfavourite,
|
|
pin,
|
|
unpin,
|
|
} from "../../../actions/interactions";
|
|
import { openModal } from "../../../actions/modal";
|
|
import { initMuteModal } from "../../../actions/mutes";
|
|
import { initReport } from "../../../actions/reports";
|
|
import {
|
|
muteStatus,
|
|
unmuteStatus,
|
|
deleteStatus,
|
|
hideStatus,
|
|
revealStatus,
|
|
} from "../../../actions/statuses";
|
|
import { boostModal, deleteModal } from "../../../initial_state";
|
|
import { makeGetStatus, makeGetPictureInPicture } from "../../../selectors";
|
|
import DetailedStatus from "../components/detailed_status";
|
|
|
|
const messages = defineMessages({
|
|
deleteConfirm: { id: "confirmations.delete.confirm", defaultMessage: "Delete" },
|
|
deleteMessage: { id: "confirmations.delete.message", defaultMessage: "Are you sure you want to delete this status?" },
|
|
redraftConfirm: { id: "confirmations.redraft.confirm", defaultMessage: "Delete & redraft" },
|
|
redraftMessage: { id: "confirmations.redraft.message", defaultMessage: "Are you sure you want to delete this status and re-draft it? Favorites and boosts will be lost, and replies to the original post will be orphaned." },
|
|
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 makeMapStateToProps = () => {
|
|
const getStatus = makeGetStatus();
|
|
const getPictureInPicture = makeGetPictureInPicture();
|
|
|
|
const mapStateToProps = (state, props) => ({
|
|
status: getStatus(state, props),
|
|
domain: state.getIn(["meta", "domain"]),
|
|
pictureInPicture: getPictureInPicture(state, props),
|
|
});
|
|
|
|
return mapStateToProps;
|
|
};
|
|
|
|
const mapDispatchToProps = (dispatch, { intl }) => ({
|
|
|
|
onReply (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));
|
|
}
|
|
});
|
|
},
|
|
|
|
onModalReblog (status, privacy) {
|
|
dispatch(reblog(status, privacy));
|
|
},
|
|
|
|
onReblog (status, e) {
|
|
if (status.get("reblogged")) {
|
|
dispatch(unreblog(status));
|
|
} else {
|
|
if (e.shiftKey || !boostModal) {
|
|
this.onModalReblog(status);
|
|
} else {
|
|
dispatch(initBoostModal({ status, onReblog: this.onModalReblog }));
|
|
}
|
|
}
|
|
},
|
|
|
|
onFavourite (status) {
|
|
if (status.get("favourited")) {
|
|
dispatch(unfavourite(status));
|
|
} else {
|
|
dispatch(favourite(status));
|
|
}
|
|
},
|
|
|
|
onPin (status) {
|
|
if (status.get("pinned")) {
|
|
dispatch(unpin(status));
|
|
} else {
|
|
dispatch(pin(status));
|
|
}
|
|
},
|
|
|
|
onEmbed (status) {
|
|
dispatch(openModal({
|
|
modalType: "EMBED",
|
|
modalProps: {
|
|
id: status.get("id"),
|
|
onError: error => dispatch(showAlertForError(error)),
|
|
},
|
|
}));
|
|
},
|
|
|
|
onDelete (status, history, withRedraft = false) {
|
|
if (!deleteModal) {
|
|
dispatch(deleteStatus(status.get("id"), history, withRedraft));
|
|
} else {
|
|
dispatch(openModal({
|
|
modalType: "CONFIRM",
|
|
modalProps: {
|
|
message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),
|
|
confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),
|
|
onConfirm: () => dispatch(deleteStatus(status.get("id"), history, withRedraft)),
|
|
},
|
|
}));
|
|
}
|
|
},
|
|
|
|
onDirect (account, router) {
|
|
dispatch(directCompose(account, router));
|
|
},
|
|
|
|
onMention (account, router) {
|
|
dispatch(mentionCompose(account, router));
|
|
},
|
|
|
|
onOpenMedia (media, index, lang) {
|
|
dispatch(openModal({
|
|
modalType: "MEDIA",
|
|
modalProps: { media, index, lang },
|
|
}));
|
|
},
|
|
|
|
onOpenVideo (media, lang, options) {
|
|
dispatch(openModal({
|
|
modalType: "VIDEO",
|
|
modalProps: { media, lang, options },
|
|
}));
|
|
},
|
|
|
|
onBlock (status) {
|
|
const account = status.get("account");
|
|
dispatch(initBlockModal(account));
|
|
},
|
|
|
|
onReport (status) {
|
|
dispatch(initReport(status.get("account"), status));
|
|
},
|
|
|
|
onMute (account) {
|
|
dispatch(initMuteModal(account));
|
|
},
|
|
|
|
onMuteConversation (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(makeMapStateToProps, mapDispatchToProps)(DetailedStatus));
|