summaryrefslogtreecommitdiff
path: root/packages/frontend/src/pages
diff options
context:
space:
mode:
authorsyuilo <4439005+syuilo@users.noreply.github.com>2025-07-06 09:54:49 +0900
committersyuilo <4439005+syuilo@users.noreply.github.com>2025-07-06 09:54:49 +0900
commite6ec15e397e150a12486d097d4b789a98b7ae639 (patch)
treea113d1a6353eed0488bae17f2ee490974c50351e /packages/frontend/src/pages
parentclean up (diff)
downloadmisskey-e6ec15e397e150a12486d097d4b789a98b7ae639.tar.gz
misskey-e6ec15e397e150a12486d097d4b789a98b7ae639.tar.bz2
misskey-e6ec15e397e150a12486d097d4b789a98b7ae639.zip
feat: 特定のドライブファイルを添付しているチャットメッセージを一覧できるように
Diffstat (limited to 'packages/frontend/src/pages')
-rw-r--r--packages/frontend/src/pages/admin-file.chat.vue38
-rw-r--r--packages/frontend/src/pages/admin-file.vue24
2 files changed, 57 insertions, 5 deletions
diff --git a/packages/frontend/src/pages/admin-file.chat.vue b/packages/frontend/src/pages/admin-file.chat.vue
new file mode 100644
index 0000000000..e451da51a3
--- /dev/null
+++ b/packages/frontend/src/pages/admin-file.chat.vue
@@ -0,0 +1,38 @@
+<!--
+SPDX-FileCopyrightText: syuilo and misskey-project
+SPDX-License-Identifier: AGPL-3.0-only
+-->
+
+<template>
+<div class="_gaps">
+ <MkInfo>{{ i18n.ts._fileViewer.thisPageCanBeSeenFromTheAuthor }}</MkInfo>
+
+ <MkPagination :paginator="paginator">
+ <template #default="{ items }">
+ <XMessage v-for="item in items" :key="item.id" :message="item" :isSearchResult="true"/>
+ </template>
+ </MkPagination>
+</div>
+</template>
+
+<script lang="ts" setup>
+import { ref, computed, markRaw } from 'vue';
+import XMessage from './chat/XMessage.vue';
+import { i18n } from '@/i18n.js';
+import MkInfo from '@/components/MkInfo.vue';
+import { Paginator } from '@/utility/paginator.js';
+import MkPagination from '@/components/MkPagination.vue';
+
+const props = defineProps<{
+ fileId: string;
+}>();
+
+const realFileId = computed(() => props.fileId);
+
+const paginator = markRaw(new Paginator('drive/files/attached-chat-messages', {
+ limit: 10,
+ params: {
+ fileId: realFileId.value,
+ },
+}));
+</script>
diff --git a/packages/frontend/src/pages/admin-file.vue b/packages/frontend/src/pages/admin-file.vue
index 8495642a8c..7a49ba542f 100644
--- a/packages/frontend/src/pages/admin-file.vue
+++ b/packages/frontend/src/pages/admin-file.vue
@@ -44,8 +44,19 @@ SPDX-License-Identifier: AGPL-3.0-only
<MkButton danger @click="del"><i class="ti ti-trash"></i> {{ i18n.ts.delete }}</MkButton>
</div>
</div>
- <div v-else-if="tab === 'notes' && info" class="_gaps_m">
- <XNotes :fileId="fileId"/>
+ <div v-else-if="tab === 'usage' && info" class="_gaps_m">
+ <MkTabs
+ v-model:tab="usageTab"
+ :tabs="[{
+ key: 'note',
+ title: 'Note',
+ }, {
+ key: 'chat',
+ title: 'Chat',
+ }]"
+ />
+ <XNotes v-if="usageTab === 'note'" :fileId="fileId"/>
+ <XChat v-else-if="usageTab === 'chat'" :fileId="fileId"/>
</div>
<div v-else-if="tab === 'ip' && info" class="_gaps_m">
<MkInfo v-if="!iAmAdmin" warn>{{ i18n.ts.requireAdminForView }}</MkInfo>
@@ -86,12 +97,15 @@ import { misskeyApi } from '@/utility/misskey-api.js';
import { i18n } from '@/i18n.js';
import { definePage } from '@/page.js';
import { iAmAdmin, iAmModerator } from '@/i.js';
+import MkTabs from '@/components/MkTabs.vue';
const tab = ref('overview');
const file = ref<Misskey.entities.DriveFile | null>(null);
const info = ref<Misskey.entities.AdminDriveShowFileResponse | null>(null);
const isSensitive = ref<boolean>(false);
+const usageTab = ref<'note' | 'chat'>('note');
const XNotes = defineAsyncComponent(() => import('./drive.file.notes.vue'));
+const XChat = defineAsyncComponent(() => import('./admin-file.chat.vue'));
const props = defineProps<{
fileId: string,
@@ -147,9 +161,9 @@ const headerTabs = computed(() => [{
title: i18n.ts.overview,
icon: 'ti ti-info-circle',
}, iAmModerator ? {
- key: 'notes',
- title: i18n.ts._fileViewer.attachedNotes,
- icon: 'ti ti-pencil',
+ key: 'usage',
+ title: i18n.ts._fileViewer.usage,
+ icon: 'ti ti-plus',
} : null, iAmModerator ? {
key: 'ip',
title: 'IP',