From 1cf9bb24d7fb891fa1484c322c4fb1e4b5bb56ac Mon Sep 17 00:00:00 2001 From: KMY Date: Fri, 26 May 2023 18:01:09 +0900 Subject: [PATCH] Improve reaction_deck api --- .../api/v1/reaction_deck_controller.rb | 34 ++++++++----------- .../emoji_picker_dropdown_container.js | 2 +- .../components/reaction_emoji.jsx | 2 +- 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/app/controllers/api/v1/reaction_deck_controller.rb b/app/controllers/api/v1/reaction_deck_controller.rb index 12716d3f99..d8592bb5fc 100644 --- a/app/controllers/api/v1/reaction_deck_controller.rb +++ b/app/controllers/api/v1/reaction_deck_controller.rb @@ -25,28 +25,22 @@ class Api::V1::ReactionDeckController < Api::BaseController shortcode = data['emoji'].delete(':') custom_emoji = CustomEmoji.find_by(shortcode: shortcode, domain: nil) - custom_emoji_id = custom_emoji&.id - emoji_data = if custom_emoji - { - 'shortcode' => custom_emoji.shortcode, - 'url' => full_asset_url(custom_emoji.image.url), - 'static_url' => full_asset_url(custom_emoji.image.url(:static)), - 'width' => custom_emoji.image_width, - 'height' => custom_emoji.image_height, - } - else - { - 'shortcode' => shortcode, - } - end - exists = deck.find { |dd| dd['id'] == data['id'] } - if exists - exists['custom_emoji_id'] = custom_emoji_id - exists['emoji'] = emoji_data + old = deck.find { |dd| dd['id'] == data['id'] } + emoji_data = old || { 'id' => data['id'] } + + if custom_emoji + emoji_data['name'] = custom_emoji.shortcode + emoji_data['url'] = full_asset_url(custom_emoji.image.url) + emoji_data['static_url'] = full_asset_url(custom_emoji.image.url(:static)) + emoji_data['width'] = custom_emoji.image_width + emoji_data['height'] = custom_emoji.image_height + emoji_data['custom_emoji_id'] = custom_emoji.id else - deck << { 'id' => data['id'], 'custom_emoji_id' => custom_emoji_id, 'emoji' => emoji_data } + emoji_data['name'] = shortcode end + + deck << emoji_data if old.nil? end deck = deck.sort_by { |a| a['id'].to_i } @@ -66,7 +60,7 @@ class Api::V1::ReactionDeckController < Api::BaseController def remove_unused_custom_emojis(deck) custom_ids = [] deck.each do |item| - custom_ids << item['custom_emoji_id'].to_i unless item['custom_emoji_id'].nil? + custom_ids << item['custom_emoji_id'].to_i if item.key?('custom_emoji_id') end custom_emojis = CustomEmoji.where(id: custom_ids) diff --git a/app/javascript/mastodon/features/compose/containers/emoji_picker_dropdown_container.js b/app/javascript/mastodon/features/compose/containers/emoji_picker_dropdown_container.js index e0ffe095d3..2758e9009f 100644 --- a/app/javascript/mastodon/features/compose/containers/emoji_picker_dropdown_container.js +++ b/app/javascript/mastodon/features/compose/containers/emoji_picker_dropdown_container.js @@ -45,7 +45,7 @@ const getFrequentlyUsedEmojis = createSelector([ const { emojiCounters, reactionDeck } = data; let deckEmojis = reactionDeck .toArray() - .map((e) => e.getIn(['emoji', 'shortcode'])) + .map((e) => e.get('name')) .filter((e) => e) .map((e) => shortCodes[e] || e); deckEmojis = [...new Set(deckEmojis)]; diff --git a/app/javascript/mastodon/features/reaction_deck/components/reaction_emoji.jsx b/app/javascript/mastodon/features/reaction_deck/components/reaction_emoji.jsx index 0d7756e418..ac17e56876 100644 --- a/app/javascript/mastodon/features/reaction_deck/components/reaction_emoji.jsx +++ b/app/javascript/mastodon/features/reaction_deck/components/reaction_emoji.jsx @@ -13,7 +13,7 @@ import emojify from 'mastodon/features/emoji/emoji'; import { autoPlayGif } from 'mastodon/initial_state'; const MapStateToProps = (state, { emojiId, emojiMap }) => ({ - emoji: (state.get('reaction_deck', ImmutableList()).toArray().find(em => em.get('id') === emojiId) || ImmutableMap({ emoji: { shortcode: '' } })).getIn(['emoji', 'shortcode']), + emoji: (state.get('reaction_deck', ImmutableList()).toArray().find(em => em.get('id') === emojiId) || ImmutableMap({ emoji: { shortcode: '' } })).get('name'), emojiMap, });