From 171632365d59dda2e19e16a75667754ed878fad2 Mon Sep 17 00:00:00 2001
From: syuilo <4439005+syuilo@users.noreply.github.com>
Date: Fri, 6 Jun 2025 17:48:27 +0900
Subject: [PATCH] wip
---
locales/index.d.ts | 4 +
locales/ja-JP.yml | 1 +
.../frontend/src/components/MkPostForm.vue | 20 +++
.../src/components/MkPostFormDialog.vue | 15 ++-
.../src/components/MkUploaderDialog.vue | 4 +-
.../src/components/MkUploaderItems.vue | 6 +-
.../frontend/src/composables/use-uploader.ts | 126 +++++++++++-------
7 files changed, 118 insertions(+), 58 deletions(-)
diff --git a/locales/index.d.ts b/locales/index.d.ts
index a4671aa812..31ab795552 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -9584,6 +9584,10 @@ export interface Locale extends ILocale {
"disableFederationDescription": string;
};
"_postForm": {
+ /**
+ * アップロードされていないファイルがありますが、破棄してフォームを閉じますか?
+ */
+ "quitInspiteOfThereAreUnuploadedFilesConfirm": string;
/**
* このノートに返信...
*/
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 4988bfc259..e5c0481945 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -2522,6 +2522,7 @@ _visibility:
disableFederationDescription: "他サーバーへの配信を行いません"
_postForm:
+ quitInspiteOfThereAreUnuploadedFilesConfirm: "アップロードされていないファイルがありますが、破棄してフォームを閉じますか?"
replyPlaceholder: "このノートに返信..."
quotePlaceholder: "このノートを引用..."
channelPlaceholder: "チャンネルに投稿..."
diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue
index 525c780602..a7755a26cd 100644
--- a/packages/frontend/src/components/MkPostForm.vue
+++ b/packages/frontend/src/components/MkPostForm.vue
@@ -214,6 +214,11 @@ const uploader = useUploader({
features: props.features,
});
+uploader.events.on('itemUploaded', ctx => {
+ files.value.push(ctx.item.uploaded!);
+ uploader.removeItem(ctx.item);
+});
+
const draftKey = computed((): string => {
let key = props.channel ? `channel:${props.channel.id}` : '';
@@ -1151,8 +1156,23 @@ onMounted(() => {
});
});
+async function canClose() {
+ if (!uploader.allItemsUploaded.value) {
+ const { canceled } = await os.confirm({
+ type: 'question',
+ text: i18n.ts._postForm.quitInspiteOfThereAreUnuploadedFilesConfirm,
+ okText: i18n.ts.yes,
+ cancelText: i18n.ts.no,
+ });
+ if (canceled) return false;
+ }
+
+ return true;
+}
+
defineExpose({
clear,
+ canClose,
});
diff --git a/packages/frontend/src/components/MkPostFormDialog.vue b/packages/frontend/src/components/MkPostFormDialog.vue
index c467e29df6..0a655bab99 100644
--- a/packages/frontend/src/components/MkPostFormDialog.vue
+++ b/packages/frontend/src/components/MkPostFormDialog.vue
@@ -7,9 +7,9 @@ SPDX-License-Identifier: AGPL-3.0-only