diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue index b69ec80d5..27fa01fc6 100644 --- a/packages/frontend/src/components/MkNote.vue +++ b/packages/frontend/src/components/MkNote.vue @@ -100,7 +100,8 @@ SPDX-License-Identifier: AGPL-3.0-only ref="renoteButton" :class="$style.footerButton" class="_button" - @mousedown="renote()" + :style="renoted ? 'color: var(--accent) !important;' : ''" + @mousedown="renoted ? undoRenote() : renote()" >

{{ appearNote.renoteCount }}

@@ -226,6 +227,7 @@ const urls = appearNote.text ? extractUrlFromMfm(mfm.parse(appearNote.text)).fil const isLong = shouldCollapsed(appearNote); const collapsed = ref(appearNote.cw == null && isLong); const isDeleted = ref(false); +const renoted = ref(false); const muted = ref($i ? checkWordMute(appearNote, $i, $i.mutedWords) : false); const translation = ref(null); const translating = ref(false); @@ -268,6 +270,16 @@ useTooltip(renoteButton, async (showing) => { }, {}, 'closed'); }); +if ($i) { + os.api("notes/renotes", { + noteId: appearNote.id, + userId: $i.id, + limit: 1, + }).then((res) => { + renoted.value = res.length > 0; + }); +} + type Visibility = 'public' | 'home' | 'followers' | 'specified'; // defaultStore.state.visibilityがstringなためstringも受け付けている @@ -288,7 +300,7 @@ function renote(viaKeyboard = false) { if (appearNote.channel) { items = items.concat([{ text: i18n.ts.inChannelRenote, - icon: 'ph-repeat ph-bold ph-lg', + icon: 'ph-rocket-launch ph-bold ph-lg', action: () => { const el = renoteButton.value as HTMLElement | null | undefined; if (el) { @@ -303,6 +315,7 @@ function renote(viaKeyboard = false) { channelId: appearNote.channelId, }).then(() => { os.toast(i18n.ts.renoted); + renoted.value = true; }); }, }, { @@ -319,7 +332,7 @@ function renote(viaKeyboard = false) { items = items.concat([{ text: i18n.ts.renote, - icon: 'ph-repeat ph-bold ph-lg', + icon: 'ph-rocket-launch ph-bold ph-lg', action: () => { const el = renoteButton.value as HTMLElement | null | undefined; if (el) { @@ -344,6 +357,7 @@ function renote(viaKeyboard = false) { renoteId: appearNote.id, }).then(() => { os.toast(i18n.ts.renoted); + renoted.value = true; }); }, }, { @@ -427,6 +441,14 @@ function undoReact(note): void { }); } +function undoRenote() : void { + if (!renoted) return; + os.api("notes/unrenote", { + noteId: appearNote.id, + }); + renoted.value = false; +} + function onContextmenu(ev: MouseEvent): void { const isLink = (el: HTMLElement) => { if (el.tagName === 'A') return true; diff --git a/packages/frontend/src/components/MkNoteSub.vue b/packages/frontend/src/components/MkNoteSub.vue index 57604cc94..eef06d15e 100644 --- a/packages/frontend/src/components/MkNoteSub.vue +++ b/packages/frontend/src/components/MkNoteSub.vue @@ -26,13 +26,14 @@ SPDX-License-Identifier: AGPL-3.0-only

{{ note.repliesCount }}