import { defineMessages, injectIntl, FormattedMessage } from "react-intl"; import { connect } from "react-redux"; import { openURL } from "mastodon/actions/search"; import { followAccount, unfollowAccount, unblockAccount, unmuteAccount, pinAccount, unpinAccount, } from "../../../actions/accounts"; import { initBlockModal } from "../../../actions/blocks"; import { mentionCompose, directCompose, } from "../../../actions/compose"; import { blockDomain, unblockDomain } from "../../../actions/domain_blocks"; import { openModal } from "../../../actions/modal"; import { initMuteModal } from "../../../actions/mutes"; import { initReport } from "../../../actions/reports"; import { unfollowModal } from "../../../initial_state"; import { makeGetAccount, getAccountHidden } from "../../../selectors"; import Header from "../components/header"; const messages = defineMessages({ cancelFollowRequestConfirm: { id: "confirmations.cancel_follow_request.confirm", defaultMessage: "Withdraw request" }, unfollowConfirm: { id: "confirmations.unfollow.confirm", defaultMessage: "Unfollow" }, blockDomainConfirm: { id: "confirmations.domain_block.confirm", defaultMessage: "Block entire domain" }, }); const makeMapStateToProps = () => { const getAccount = makeGetAccount(); const mapStateToProps = (state, { accountId }) => ({ account: getAccount(state, accountId), domain: state.getIn(["meta", "domain"]), hidden: getAccountHidden(state, accountId), }); return mapStateToProps; }; const mapDispatchToProps = (dispatch, { intl }) => ({ onFollow (account) { if (account.getIn(["relationship", "following"])) { if (unfollowModal) { dispatch(openModal({ modalType: "CONFIRM", modalProps: { message: @{account.get("acct")} }} />, confirm: intl.formatMessage(messages.unfollowConfirm), onConfirm: () => dispatch(unfollowAccount(account.get("id"))), }, })); } else { dispatch(unfollowAccount(account.get("id"))); } } else if (account.getIn(["relationship", "requested"])) { if (unfollowModal) { dispatch(openModal({ modalType: "CONFIRM", modalProps: { message: @{account.get("acct")} }} />, confirm: intl.formatMessage(messages.cancelFollowRequestConfirm), onConfirm: () => dispatch(unfollowAccount(account.get("id"))), }, })); } else { dispatch(unfollowAccount(account.get("id"))); } } else { dispatch(followAccount(account.get("id"))); } }, onInteractionModal (account) { dispatch(openModal({ modalType: "INTERACTION", modalProps: { type: "follow", accountId: account.get("id"), url: account.get("uri"), }, })); }, onBlock (account) { if (account.getIn(["relationship", "blocking"])) { dispatch(unblockAccount(account.get("id"))); } else { dispatch(initBlockModal(account)); } }, onMention (account, router) { dispatch(mentionCompose(account, router)); }, onDirect (account, router) { dispatch(directCompose(account, router)); }, onReblogToggle (account) { if (account.getIn(["relationship", "showing_reblogs"])) { dispatch(followAccount(account.get("id"), { reblogs: false })); } else { dispatch(followAccount(account.get("id"), { reblogs: true })); } }, onEndorseToggle (account) { if (account.getIn(["relationship", "endorsed"])) { dispatch(unpinAccount(account.get("id"))); } else { dispatch(pinAccount(account.get("id"))); } }, onNotifyToggle (account) { if (account.getIn(["relationship", "notifying"])) { dispatch(followAccount(account.get("id"), { notify: false })); } else { dispatch(followAccount(account.get("id"), { notify: true })); } }, onReport (account) { dispatch(initReport(account)); }, onMute (account) { if (account.getIn(["relationship", "muting"])) { dispatch(unmuteAccount(account.get("id"))); } else { dispatch(initMuteModal(account)); } }, onBlockDomain (domain) { dispatch(openModal({ modalType: "CONFIRM", modalProps: { message: {domain} }} />, confirm: intl.formatMessage(messages.blockDomainConfirm), onConfirm: () => dispatch(blockDomain(domain)), }, })); }, onUnblockDomain (domain) { dispatch(unblockDomain(domain)); }, onAddToList (account) { dispatch(openModal({ modalType: "LIST_ADDER", modalProps: { accountId: account.get("id"), }, })); }, onChangeLanguages (account) { dispatch(openModal({ modalType: "SUBSCRIBED_LANGUAGES", modalProps: { accountId: account.get("id"), }, })); }, onOpenAvatar (account) { dispatch(openModal({ modalType: "IMAGE", modalProps: { src: account.get("avatar"), alt: account.get("acct"), }, })); }, onOpenURL (url, routerHistory, onFailure) { dispatch(openURL(url, routerHistory, onFailure)); }, }); export default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Header));