summaryrefslogtreecommitdiff
path: root/packages/frontend/src/components/MkReactionsViewer.vue
diff options
context:
space:
mode:
Diffstat (limited to 'packages/frontend/src/components/MkReactionsViewer.vue')
-rw-r--r--packages/frontend/src/components/MkReactionsViewer.vue19
1 files changed, 18 insertions, 1 deletions
diff --git a/packages/frontend/src/components/MkReactionsViewer.vue b/packages/frontend/src/components/MkReactionsViewer.vue
index 725978179e..bd9ef50157 100644
--- a/packages/frontend/src/components/MkReactionsViewer.vue
+++ b/packages/frontend/src/components/MkReactionsViewer.vue
@@ -33,7 +33,10 @@ import * as Misskey from 'misskey-js';
import { inject, watch, ref } from 'vue';
import { TransitionGroup } from 'vue';
import XReaction from '@/components/MkReactionsViewer.reaction.vue';
+import { $i } from '@/i.js';
import { prefer } from '@/preferences.js';
+import { customEmojisMap } from '@/custom-emojis.js';
+import { isSupportedEmoji } from '@@/js/emojilist.js';
import { DI } from '@/di.js';
const props = withDefaults(defineProps<{
@@ -70,6 +73,12 @@ function onMockToggleReaction(emoji: string, count: number) {
emit('mockUpdateMyReaction', emoji, (count - _reactions.value[i][1]));
}
+function canReact(reaction: string) {
+ if (!$i) return false;
+ // TODO: CheckPermissions
+ return !reaction.match(/@\w/) && (customEmojisMap.has(reaction) || isSupportedEmoji(reaction));
+}
+
watch([() => props.reactions, () => props.maxNumber], ([newSource, maxNumber]) => {
let newReactions: [string, number][] = [];
hasMoreReactions.value = Object.keys(newSource).length > maxNumber;
@@ -86,7 +95,15 @@ watch([() => props.reactions, () => props.maxNumber], ([newSource, maxNumber]) =
newReactions = [
...newReactions,
...Object.entries(newSource)
- .sort(([, a], [, b]) => b - a)
+ .sort(([emojiA, countA], [emojiB, countB]) => {
+ if (prefer.s.showAvailableReactionsFirstInNote) {
+ if (!canReact(emojiA) && canReact(emojiB)) return 1;
+ if (canReact(emojiA) && !canReact(emojiB)) return -1;
+ return countB - countA;
+ } else {
+ return countB - countA;
+ }
+ })
.filter(([y], i) => i < maxNumber && !newReactionsNames.includes(y)),
];