summaryrefslogtreecommitdiff
path: root/packages/frontend/src/components/MkNoteSimple.vue
diff options
context:
space:
mode:
authorNoriDev <m1nthing2322@gmail.com>2024-10-31 13:52:01 +0900
committerMarie <github@yuugi.dev>2024-12-09 05:31:03 +0100
commit2528508cff9d8c90abd33e46b15220a49a00e2e2 (patch)
tree1a7aa5717656fc29e67eed0f86feb5fec33d8f1e /packages/frontend/src/components/MkNoteSimple.vue
parentmerge: Implement new SkRateLimiterServer with Leaky Bucket rate limits (resol... (diff)
downloadsharkey-2528508cff9d8c90abd33e46b15220a49a00e2e2.tar.gz
sharkey-2528508cff9d8c90abd33e46b15220a49a00e2e2.tar.bz2
sharkey-2528508cff9d8c90abd33e46b15220a49a00e2e2.zip
feat: 노트 게시를 예약할 수 있음 (yojo-art/cherrypick#483, [Type4ny-Project/Type4ny@271c872c](https://github.com/Type4ny-Project/Type4ny/commit/271c872c97f215ef5d8e0be62251dd422a52e5b1))
Diffstat (limited to 'packages/frontend/src/components/MkNoteSimple.vue')
-rw-r--r--packages/frontend/src/components/MkNoteSimple.vue55
1 files changed, 53 insertions, 2 deletions
diff --git a/packages/frontend/src/components/MkNoteSimple.vue b/packages/frontend/src/components/MkNoteSimple.vue
index 542e3e79ea..7d2bbb31d3 100644
--- a/packages/frontend/src/components/MkNoteSimple.vue
+++ b/packages/frontend/src/components/MkNoteSimple.vue
@@ -4,7 +4,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-->
<template>
-<div :class="$style.root">
+<div v-show="!isDeleted" :class="$style.root" :tabindex="!isDeleted ? '-1' : undefined">
<MkAvatar :class="$style.avatar" :user="note.user" link preview/>
<div :class="$style.main">
<MkNoteHeader :class="$style.header" :note="note" :mini="true"/>
@@ -15,6 +15,10 @@ SPDX-License-Identifier: AGPL-3.0-only
</p>
<div v-show="note.cw == null || showContent">
<MkSubNoteContent :hideFiles="hideFiles" :class="$style.text" :note="note" :expandAllCws="props.expandAllCws"/>
+ <div v-if="note.isSchedule" style="margin-top: 10px;">
+ <MkButton :class="$style.button" inline @click.stop.prevent="editScheduleNote()"><i class="ti ti-eraser"></i> {{ i18n.ts.deleteAndEdit }}</MkButton>
+ <MkButton :class="$style.button" inline danger @click.stop.prevent="deleteScheduleNote()"><i class="ti ti-trash"></i> {{ i18n.ts.delete }}</MkButton>
+ </div>
</div>
</div>
</div>
@@ -24,18 +28,60 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { ref, watch } from 'vue';
import * as Misskey from 'misskey-js';
+import * as os from '@/os.js';
import MkNoteHeader from '@/components/MkNoteHeader.vue';
import MkSubNoteContent from '@/components/MkSubNoteContent.vue';
import MkCwButton from '@/components/MkCwButton.vue';
import { defaultStore } from '@/store.js';
const props = defineProps<{
- note: Misskey.entities.Note;
+ note: Misskey.entities.Note & {
+ isSchedule? : boolean,
+ scheduledNoteId?: string
+ };
expandAllCws?: boolean;
hideFiles?: boolean;
}>();
let showContent = ref(defaultStore.state.uncollapseCW);
+const isDeleted = ref(false);
+
+const emit = defineEmits<{
+ (ev: 'editScheduleNote'): void;
+}>();
+
+async function deleteScheduleNote() {
+ const { canceled } = await os.confirm({
+ type: 'warning',
+ text: i18n.ts.deleteConfirm,
+ okText: i18n.ts.delete,
+ cancelText: i18n.ts.cancel,
+ });
+ if (canceled) return;
+ await os.apiWithDialog('notes/schedule/delete', { noteId: props.note.id })
+ .then(() => {
+ isDeleted.value = true;
+ });
+}
+
+async function editScheduleNote() {
+ try {
+ await misskeyApi('notes/schedule/delete', { noteId: props.note.id })
+ .then(() => {
+ isDeleted.value = true;
+ });
+ } catch (err) {
+ console.error(err);
+ }
+
+ await os.post({
+ initialNote: props.note,
+ renote: props.note.renote,
+ reply: props.note.reply,
+ channel: props.note.channel,
+ });
+ emit('editScheduleNote');
+}
watch(() => props.expandAllCws, (expandAllCws) => {
if (expandAllCws !== showContent.value) showContent.value = expandAllCws;
@@ -50,6 +96,11 @@ watch(() => props.expandAllCws, (expandAllCws) => {
font-size: 0.95em;
}
+.button{
+ margin-right: var(--margin);
+ margin-bottom: var(--margin);
+}
+
.avatar {
flex-shrink: 0;
display: block;