diff --git a/app/javascript/mastodon/actions/announcements.js b/app/javascript/mastodon/actions/announcements.js
index 64bf5ef91bd..53b19a6fda0 100644
--- a/app/javascript/mastodon/actions/announcements.js
+++ b/app/javascript/mastodon/actions/announcements.js
@@ -56,12 +56,27 @@ export const updateAnnouncements = announcement => ({
});
export const addReaction = (announcementId, name) => (dispatch, getState) => {
- dispatch(addReactionRequest(announcementId, name));
+ const announcement = getState().getIn(['announcements', 'items']).find(x => x.get('id') === announcementId);
+
+ let alreadyAdded = false;
+
+ if (announcement) {
+ const reaction = announcement.get('reactions').find(x => x.get('name') === name);
+ if (reaction && reaction.get('me')) {
+ alreadyAdded = true;
+ }
+ }
+
+ if (!alreadyAdded) {
+ dispatch(addReactionRequest(announcementId, name, alreadyAdded));
+ }
api(getState).put(`/api/v1/announcements/${announcementId}/reactions/${name}`).then(() => {
- dispatch(addReactionSuccess(announcementId, name));
+ dispatch(addReactionSuccess(announcementId, name, alreadyAdded));
}).catch(err => {
- dispatch(addReactionFail(announcementId, name, err));
+ if (!alreadyAdded) {
+ dispatch(addReactionFail(announcementId, name, err));
+ }
});
};
diff --git a/app/javascript/mastodon/components/column_header.js b/app/javascript/mastodon/components/column_header.js
index 0038995c8be..ea82f9ef9d3 100644
--- a/app/javascript/mastodon/components/column_header.js
+++ b/app/javascript/mastodon/components/column_header.js
@@ -33,6 +33,7 @@ class ColumnHeader extends React.PureComponent {
onPin: PropTypes.func,
onMove: PropTypes.func,
onClick: PropTypes.func,
+ appendContent: PropTypes.node,
};
state = {
@@ -81,7 +82,7 @@ class ColumnHeader extends React.PureComponent {
}
render () {
- const { title, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, placeholder } = this.props;
+ const { title, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, placeholder, appendContent } = this.props;
const { collapsed, animating } = this.state;
const wrapperClassName = classNames('column-header__wrapper', {
@@ -172,6 +173,8 @@ class ColumnHeader extends React.PureComponent {
{(!collapsed || animating) && collapsedContent}
+
+ {appendContent}
);
diff --git a/app/javascript/mastodon/features/home_timeline/index.js b/app/javascript/mastodon/features/home_timeline/index.js
index c7de8c9cbf4..2bad22bc1de 100644
--- a/app/javascript/mastodon/features/home_timeline/index.js
+++ b/app/javascript/mastodon/features/home_timeline/index.js
@@ -143,12 +143,11 @@ class HomeTimeline extends React.PureComponent {
pinned={pinned}
multiColumn={multiColumn}
extraButton={announcementsButton}
+ appendContent={hasAnnouncements && showAnnouncements && }
>
- {hasAnnouncements && showAnnouncements && }
-