mirror of
https://github.com/mastodon/mastodon.git
synced 2024-12-15 07:34:58 +01:00
acb434b0c9
Unlike boosts and like, there is no confirmation dialog as misclicking can be recovered without another user seeing it.
173 lines
4.7 KiB
JavaScript
173 lines
4.7 KiB
JavaScript
import React from 'react';
|
|
import { connect } from 'react-redux';
|
|
import Status from 'flavours/glitch/components/status';
|
|
import { makeGetStatus } from 'flavours/glitch/selectors';
|
|
import {
|
|
replyCompose,
|
|
mentionCompose,
|
|
} from 'flavours/glitch/actions/compose';
|
|
import {
|
|
reblog,
|
|
favourite,
|
|
bookmark,
|
|
unreblog,
|
|
unfavourite,
|
|
unbookmark,
|
|
pin,
|
|
unpin,
|
|
} from 'flavours/glitch/actions/interactions';
|
|
import { blockAccount } from 'flavours/glitch/actions/accounts';
|
|
import { muteStatus, unmuteStatus, deleteStatus } from 'flavours/glitch/actions/statuses';
|
|
import { initMuteModal } from 'flavours/glitch/actions/mutes';
|
|
import { initReport } from 'flavours/glitch/actions/reports';
|
|
import { openModal } from 'flavours/glitch/actions/modal';
|
|
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
|
import { boostModal, favouriteModal, deleteModal } from 'flavours/glitch/util/initial_state';
|
|
|
|
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?' },
|
|
blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },
|
|
});
|
|
|
|
const makeMapStateToProps = () => {
|
|
const getStatus = makeGetStatus();
|
|
|
|
const mapStateToProps = (state, props) => {
|
|
|
|
let status = getStatus(state, props.id);
|
|
let reblogStatus = status ? status.get('reblog', null) : null;
|
|
let account = undefined;
|
|
let prepend = undefined;
|
|
|
|
if (props.featured) {
|
|
account = status.get('account');
|
|
prepend = 'featured';
|
|
} else if (reblogStatus !== null && typeof reblogStatus === 'object') {
|
|
account = status.get('account');
|
|
status = reblogStatus;
|
|
prepend = 'reblogged_by';
|
|
}
|
|
|
|
return {
|
|
containerId : props.containerId || props.id, // Should match reblogStatus's id for reblogs
|
|
status : status,
|
|
account : account || props.account,
|
|
settings : state.get('local_settings'),
|
|
prepend : prepend || props.prepend,
|
|
};
|
|
};
|
|
|
|
return mapStateToProps;
|
|
};
|
|
|
|
const mapDispatchToProps = (dispatch, { intl }) => ({
|
|
|
|
onReply (status, router) {
|
|
dispatch(replyCompose(status, router));
|
|
},
|
|
|
|
onModalReblog (status) {
|
|
dispatch(reblog(status));
|
|
},
|
|
|
|
onReblog (status, e) {
|
|
if (status.get('reblogged')) {
|
|
dispatch(unreblog(status));
|
|
} else {
|
|
if (e.shiftKey || !boostModal) {
|
|
this.onModalReblog(status);
|
|
} else {
|
|
dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog }));
|
|
}
|
|
}
|
|
},
|
|
|
|
onBookmark (status) {
|
|
if (status.get('bookmarked')) {
|
|
dispatch(unbookmark(status));
|
|
} else {
|
|
dispatch(bookmark(status));
|
|
}
|
|
},
|
|
|
|
onModalFavourite (status) {
|
|
dispatch(favourite(status));
|
|
},
|
|
|
|
onFavourite (status, e) {
|
|
if (status.get('favourited')) {
|
|
dispatch(unfavourite(status));
|
|
} else {
|
|
if (e.shiftKey || !favouriteModal) {
|
|
this.onModalFavourite(status);
|
|
} else {
|
|
dispatch(openModal('FAVOURITE', { status, onFavourite: this.onModalFavourite }));
|
|
}
|
|
}
|
|
},
|
|
|
|
onPin (status) {
|
|
if (status.get('pinned')) {
|
|
dispatch(unpin(status));
|
|
} else {
|
|
dispatch(pin(status));
|
|
}
|
|
},
|
|
|
|
onEmbed (status) {
|
|
dispatch(openModal('EMBED', { url: status.get('url') }));
|
|
},
|
|
|
|
onDelete (status) {
|
|
if (!deleteModal) {
|
|
dispatch(deleteStatus(status.get('id')));
|
|
} else {
|
|
dispatch(openModal('CONFIRM', {
|
|
message: intl.formatMessage(messages.deleteMessage),
|
|
confirm: intl.formatMessage(messages.deleteConfirm),
|
|
onConfirm: () => dispatch(deleteStatus(status.get('id'))),
|
|
}));
|
|
}
|
|
},
|
|
|
|
onMention (account, router) {
|
|
dispatch(mentionCompose(account, router));
|
|
},
|
|
|
|
onOpenMedia (media, index) {
|
|
dispatch(openModal('MEDIA', { media, index }));
|
|
},
|
|
|
|
onOpenVideo (media, time) {
|
|
dispatch(openModal('VIDEO', { media, time }));
|
|
},
|
|
|
|
onBlock (account) {
|
|
dispatch(openModal('CONFIRM', {
|
|
message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
|
|
confirm: intl.formatMessage(messages.blockConfirm),
|
|
onConfirm: () => dispatch(blockAccount(account.get('id'))),
|
|
}));
|
|
},
|
|
|
|
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')));
|
|
}
|
|
},
|
|
|
|
});
|
|
|
|
export default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Status));
|