diff --git a/app/javascript/mastodon/api_types/accounts.ts b/app/javascript/mastodon/api_types/accounts.ts index 5c886293f2..ead54bdd36 100644 --- a/app/javascript/mastodon/api_types/accounts.ts +++ b/app/javascript/mastodon/api_types/accounts.ts @@ -41,6 +41,7 @@ export interface ApiAccountJSON { discoverable: boolean; indexable: boolean; display_name: string; + emoji_reaction_available_server: boolean; emojis: ApiCustomEmojiJSON[]; fields: ApiAccountFieldJSON[]; followers_count: number; diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index bc111547a1..f57e07a7e5 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -599,7 +599,7 @@ class Status extends ImmutablePureComponent { let emojiReactionsBar = null; if (!this.props.withoutEmojiReactions && status.get('emoji_reactions')) { const emojiReactions = status.get('emoji_reactions'); - const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || status.get('emoji_reaction_available_server'); + const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || status.getIn(['account', 'emoji_reaction_available_server']); if (emojiReactions.size > 0 && enableEmojiReaction && emojiReactionAvailableServer) { emojiReactionsBar = ; } diff --git a/app/javascript/mastodon/components/status_action_bar.jsx b/app/javascript/mastodon/components/status_action_bar.jsx index 1f121d4e04..c60c279747 100644 --- a/app/javascript/mastodon/components/status_action_bar.jsx +++ b/app/javascript/mastodon/components/status_action_bar.jsx @@ -461,7 +461,7 @@ class StatusActionBar extends ImmutablePureComponent { ); - const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || status.get('emoji_reaction_available_server'); + const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || account.get('emoji_reaction_available_server'); const emojiReactionPolicy = account.getIn(['other_settings', 'emoji_reaction_policy']) || 'allow'; const following = emojiReactionPolicy !== 'following_only' || (relationship && relationship.get('following')); const followed = emojiReactionPolicy !== 'followers_only' || (relationship && relationship.get('followed_by')); diff --git a/app/javascript/mastodon/features/status/components/action_bar.jsx b/app/javascript/mastodon/features/status/components/action_bar.jsx index e73856dd1a..dc23201a0e 100644 --- a/app/javascript/mastodon/features/status/components/action_bar.jsx +++ b/app/javascript/mastodon/features/status/components/action_bar.jsx @@ -369,7 +369,7 @@ class ActionBar extends PureComponent { reblogIconComponent = RepeatDisabledIcon; } - const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || status.get('emoji_reaction_available_server'); + const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || account.get('emoji_reaction_available_server'); const emojiReactionPolicy = account.getIn(['other_settings', 'emoji_reaction_policy']) || 'allow'; const following = emojiReactionPolicy !== 'following_only' || (relationship && relationship.get('following')); const followed = emojiReactionPolicy !== 'followers_only' || (relationship && relationship.get('followed_by')); diff --git a/app/javascript/mastodon/features/status/components/detailed_status.jsx b/app/javascript/mastodon/features/status/components/detailed_status.jsx index c73b850539..3dd70d189b 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.jsx +++ b/app/javascript/mastodon/features/status/components/detailed_status.jsx @@ -232,7 +232,7 @@ class DetailedStatus extends ImmutablePureComponent { let emojiReactionsBar = null; if (status.get('emoji_reactions')) { const emojiReactions = status.get('emoji_reactions'); - const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || status.get('emoji_reaction_available_server'); + const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || status.getIn(['account', 'emoji_reaction_available_server']); if (emojiReactions.size > 0 && enableEmojiReaction && emojiReactionAvailableServer) { emojiReactionsBar = ; } diff --git a/app/javascript/mastodon/models/account.ts b/app/javascript/mastodon/models/account.ts index d9338d0d80..fa0ed9c966 100644 --- a/app/javascript/mastodon/models/account.ts +++ b/app/javascript/mastodon/models/account.ts @@ -88,6 +88,7 @@ export const accountDefaultValues: AccountShape = { indexable: false, display_name: '', display_name_html: '', + emoji_reaction_available_server: false, emojis: List(), fields: List(), group: false, diff --git a/app/serializers/rest/account_serializer.rb b/app/serializers/rest/account_serializer.rb index e8ed7ff5f6..1cf43eaf46 100644 --- a/app/serializers/rest/account_serializer.rb +++ b/app/serializers/rest/account_serializer.rb @@ -7,7 +7,7 @@ class REST::AccountSerializer < ActiveModel::Serializer # Please update `app/javascript/mastodon/api_types/accounts.ts` when making changes to the attributes attributes :id, :username, :acct, :display_name, :locked, :bot, :discoverable, :indexable, :group, :created_at, - :note, :url, :uri, :avatar, :avatar_static, :header, :header_static, :subscribable, + :note, :url, :uri, :avatar, :avatar_static, :header, :header_static, :subscribable, :emoji_reaction_available_server, :followers_count, :following_count, :statuses_count, :last_status_at, :hide_collections, :other_settings, :noindex has_one :moved_to_account, key: :moved, serializer: REST::AccountSerializer, if: :moved_and_not_nested? @@ -119,6 +119,12 @@ class REST::AccountSerializer < ActiveModel::Serializer object.unavailable? ? false : object.indexable end + def emoji_reaction_available_server + return Setting.enable_emoji_reaction if object.local? + + InstanceInfo.emoji_reaction_available?(object.domain) + end + def moved_to_account object.unavailable? ? nil : AccountDecorator.new(object.moved_to_account) end diff --git a/app/serializers/rest/status_serializer.rb b/app/serializers/rest/status_serializer.rb index 71e3bb719d..9dc643c01d 100644 --- a/app/serializers/rest/status_serializer.rb +++ b/app/serializers/rest/status_serializer.rb @@ -6,7 +6,7 @@ class REST::StatusSerializer < ActiveModel::Serializer attributes :id, :created_at, :in_reply_to_id, :in_reply_to_account_id, :sensitive, :spoiler_text, :visibility, :visibility_ex, :limited_scope, :language, :uri, :url, :replies_count, :reblogs_count, :searchability, :markdown, - :status_reference_ids, :status_references_count, :status_referred_by_count, :emoji_reaction_available_server, + :status_reference_ids, :status_references_count, :status_referred_by_count, :favourites_count, :emoji_reactions, :emoji_reactions_count, :reactions, :edited_at attribute :favourited, if: :current_user? @@ -164,12 +164,6 @@ class REST::StatusSerializer < ActiveModel::Serializer end end - def emoji_reaction_available_server - return Setting.enable_emoji_reaction if object.local? - - InstanceInfo.emoji_reaction_available?(object.account.domain) - end - def reactions emoji_reactions.tap do |rs| rs.each do |emoji_reaction|