]> cat aescling's git repositories - mastodon.git/blob - app/javascript/mastodon/containers/status_container.js
Optional notification muting (#5087)
[mastodon.git] / app / javascript / mastodon / containers / status_container.js
1 import React from 'react';
2 import { connect } from 'react-redux';
3 import Status from '../components/status';
4 import { makeGetStatus } from '../selectors';
5 import {
6 replyCompose,
7 mentionCompose,
8 } from '../actions/compose';
9 import {
10 reblog,
11 favourite,
12 unreblog,
13 unfavourite,
14 pin,
15 unpin,
16 } from '../actions/interactions';
17 import { blockAccount } from '../actions/accounts';
18 import { muteStatus, unmuteStatus, deleteStatus } from '../actions/statuses';
19 import { initMuteModal } from '../actions/mutes';
20 import { initReport } from '../actions/reports';
21 import { openModal } from '../actions/modal';
22 import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
23 import { boostModal, deleteModal } from '../initial_state';
24
25 const messages = defineMessages({
26 deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
27 deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },
28 blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },
29 });
30
31 const makeMapStateToProps = () => {
32 const getStatus = makeGetStatus();
33
34 const mapStateToProps = (state, props) => ({
35 status: getStatus(state, props.id),
36 });
37
38 return mapStateToProps;
39 };
40
41 const mapDispatchToProps = (dispatch, { intl }) => ({
42
43 onReply (status, router) {
44 dispatch(replyCompose(status, router));
45 },
46
47 onModalReblog (status) {
48 dispatch(reblog(status));
49 },
50
51 onReblog (status, e) {
52 if (status.get('reblogged')) {
53 dispatch(unreblog(status));
54 } else {
55 if (e.shiftKey || !boostModal) {
56 this.onModalReblog(status);
57 } else {
58 dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog }));
59 }
60 }
61 },
62
63 onFavourite (status) {
64 if (status.get('favourited')) {
65 dispatch(unfavourite(status));
66 } else {
67 dispatch(favourite(status));
68 }
69 },
70
71 onPin (status) {
72 if (status.get('pinned')) {
73 dispatch(unpin(status));
74 } else {
75 dispatch(pin(status));
76 }
77 },
78
79 onEmbed (status) {
80 dispatch(openModal('EMBED', { url: status.get('url') }));
81 },
82
83 onDelete (status) {
84 if (!deleteModal) {
85 dispatch(deleteStatus(status.get('id')));
86 } else {
87 dispatch(openModal('CONFIRM', {
88 message: intl.formatMessage(messages.deleteMessage),
89 confirm: intl.formatMessage(messages.deleteConfirm),
90 onConfirm: () => dispatch(deleteStatus(status.get('id'))),
91 }));
92 }
93 },
94
95 onMention (account, router) {
96 dispatch(mentionCompose(account, router));
97 },
98
99 onOpenMedia (media, index) {
100 dispatch(openModal('MEDIA', { media, index }));
101 },
102
103 onOpenVideo (media, time) {
104 dispatch(openModal('VIDEO', { media, time }));
105 },
106
107 onBlock (account) {
108 dispatch(openModal('CONFIRM', {
109 message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
110 confirm: intl.formatMessage(messages.blockConfirm),
111 onConfirm: () => dispatch(blockAccount(account.get('id'))),
112 }));
113 },
114
115 onReport (status) {
116 dispatch(initReport(status.get('account'), status));
117 },
118
119 onMute (account) {
120 dispatch(initMuteModal(account));
121 },
122
123 onMuteConversation (status) {
124 if (status.get('muted')) {
125 dispatch(unmuteStatus(status.get('id')));
126 } else {
127 dispatch(muteStatus(status.get('id')));
128 }
129 },
130
131 });
132
133 export default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Status));
This page took 0.11008 seconds and 4 git commands to generate.