From a78546f14537801f496a1e3b6d59f4e6b2bbf560 Mon Sep 17 00:00:00 2001
From: ThatOneCalculator <kainoa@t1c.dev>
Date: Tue, 25 Oct 2022 20:20:41 -0700
Subject: [PATCH] feat: :sparkles: Star button

---
 CALCKEY.md                                    |  2 +-
 package.json                                  |  2 +-
 packages/client/src/components/MkNote.vue     |  3 ++
 .../client/src/components/MkNoteDetailed.vue  |  3 ++
 .../client/src/components/MkStarButton.vue    | 32 +++++++++++++++++++
 5 files changed, 40 insertions(+), 2 deletions(-)
 create mode 100644 packages/client/src/components/MkStarButton.vue

diff --git a/CALCKEY.md b/CALCKEY.md
index 99bf045a6..1bb016dbf 100644
--- a/CALCKEY.md
+++ b/CALCKEY.md
@@ -4,7 +4,6 @@
 
 - MFM button
 - Classic mode make instance icon bring up new context menu
-- Like/star button
 - Backfill remote users
 - User "choices" (recommended users) like Mastodon and Soapbox
 - Option to publicize instance blocks
@@ -46,6 +45,7 @@
   - Redesigned mobile bottom nav bar
   - Post button on TL
 - Star as default reaction
+- Like/star button
 - Rosé Pine by default (+ non-themable elements made Rosé Pine)
 - Better sidebar/navbar
 - Add back groups
diff --git a/package.json b/package.json
index 8e8271b25..857b2a76a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
 	"name": "calckey",
-	"version": "12.119.0-calc.3",
+	"version": "12.119.0-calc.4",
 	"codename": "aqua",
 	"repository": {
 		"type": "git",
diff --git a/packages/client/src/components/MkNote.vue b/packages/client/src/components/MkNote.vue
index 908f6cb80..75546c90a 100644
--- a/packages/client/src/components/MkNote.vue
+++ b/packages/client/src/components/MkNote.vue
@@ -71,6 +71,7 @@
 			</div>
 			<footer class="footer">
 				<XReactionsViewer ref="reactionsViewer" :note="appearNote"/>
+				<XStarButton v-if="appearNote.myReaction == null" ref="starButton" class="button" :note="appearNote"/>
 				<button v-if="appearNote.myReaction == null" ref="reactButton" class="button _button" @click="react()">
 					<i class="fas fa-face-laugh"></i>
 				</button>
@@ -113,6 +114,7 @@ import XReactionsViewer from '@/components/MkReactionsViewer.vue';
 import XMediaList from '@/components/MkMediaList.vue';
 import XCwButton from '@/components/MkCwButton.vue';
 import XPoll from '@/components/MkPoll.vue';
+import XStarButton from '@/components/MkStarButton.vue';
 import XRenoteButton from '@/components/MkRenoteButton.vue';
 import XQuoteButton from '@/components/MkQuoteButton.vue';
 import MkUrlPreview from '@/components/MkUrlPreview.vue';
@@ -164,6 +166,7 @@ const isRenote = (
 
 const el = ref<HTMLElement>();
 const menuButton = ref<HTMLElement>();
+const starButton = ref<InstanceType<typeof XStarButton>>();
 const renoteButton = ref<InstanceType<typeof XRenoteButton>>();
 const renoteTime = ref<HTMLElement>();
 const reactButton = ref<HTMLElement>();
diff --git a/packages/client/src/components/MkNoteDetailed.vue b/packages/client/src/components/MkNoteDetailed.vue
index 66db8f79a..cbd9d9492 100644
--- a/packages/client/src/components/MkNoteDetailed.vue
+++ b/packages/client/src/components/MkNoteDetailed.vue
@@ -81,6 +81,7 @@
 					</MkA>
 				</div>
 				<XReactionsViewer ref="reactionsViewer" :note="appearNote"/>
+				<XStarButton v-if="appearNote.myReaction == null" ref="starButton" class="button" :note="appearNote"/>
 				<button v-if="appearNote.myReaction == null" ref="reactButton" class="button _button" @click="react()">
 					<i class="fas fa-face-laugh"></i>
 				</button>
@@ -123,6 +124,7 @@ import XReactionsViewer from '@/components/MkReactionsViewer.vue';
 import XMediaList from '@/components/MkMediaList.vue';
 import XCwButton from '@/components/MkCwButton.vue';
 import XPoll from '@/components/MkPoll.vue';
+import XStarButton from '@/components/MkStarButton.vue';
 import XRenoteButton from '@/components/MkRenoteButton.vue';
 import XQuoteButton from '@/components/MkQuoteButton.vue';
 import MkUrlPreview from '@/components/MkUrlPreview.vue';
@@ -173,6 +175,7 @@ const isRenote = (
 
 const el = ref<HTMLElement>();
 const menuButton = ref<HTMLElement>();
+const starButton = ref<InstanceType<typeof XStarButton>>();
 const renoteButton = ref<InstanceType<typeof XRenoteButton>>();
 const renoteTime = ref<HTMLElement>();
 const reactButton = ref<HTMLElement>();
diff --git a/packages/client/src/components/MkStarButton.vue b/packages/client/src/components/MkStarButton.vue
new file mode 100644
index 000000000..f0a95ab42
--- /dev/null
+++ b/packages/client/src/components/MkStarButton.vue
@@ -0,0 +1,32 @@
+<template>
+<button class="skdfgljsdkf _button" @click="star()">
+	<i class="fas fa-star"></i>
+</button>
+</template>
+
+<script lang="ts" setup>
+import type { Note } from 'misskey-js/built/entities';
+import { pleaseLogin } from '@/scripts/please-login';
+import * as os from '@/os';
+
+const props = defineProps<{
+	note: Note;
+}>();
+
+function star(): void {
+	pleaseLogin();
+	os.api('notes/reactions/create', {
+		noteId: props.note.id,
+		reaction: '⭐',
+	});
+}
+</script>
+
+<style lang="scss" scoped>
+.skdfgljsdkf {
+	display: inline-block;
+	height: 32px;
+	margin: 2px;
+	padding: 0 6px;
+}
+</style>