From 0cb7289eb8339f801fdf044580462570017d812e Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Tue, 13 May 2025 16:58:11 +0900 Subject: [PATCH] wiop --- locales/index.d.ts | 4 +++ locales/ja-JP.yml | 1 + .../src/components/MkUploaderDialog.vue | 35 ++++++++++++++++++- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/locales/index.d.ts b/locales/index.d.ts index 86987da735..7a3bec67dd 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -11915,6 +11915,10 @@ export interface Locale extends ILocale { * アップロードされていないファイルがありますが、中止しますか? */ "abortConfirm": string; + /** + * アップロードされていないファイルがありますが、完了しますか? + */ + "doneConfirm": string; }; } declare const locales: { diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 58d7367856..a9497db4e7 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -3187,3 +3187,4 @@ _uploader: compressedToX: "{x}に圧縮" savedXPercent: "{x}%節約" abortConfirm: "アップロードされていないファイルがありますが、中止しますか?" + doneConfirm: "アップロードされていないファイルがありますが、完了しますか?" diff --git a/packages/frontend/src/components/MkUploaderDialog.vue b/packages/frontend/src/components/MkUploaderDialog.vue index e942a8300a..60f4364592 100644 --- a/packages/frontend/src/components/MkUploaderDialog.vue +++ b/packages/frontend/src/components/MkUploaderDialog.vue @@ -65,7 +65,9 @@ SPDX-License-Identifier: AGPL-3.0-only
@@ -79,6 +81,7 @@ import { readAndCompressImage } from '@misskey-dev/browser-image-resizer'; import { apiUrl } from '@@/js/config.js'; import isAnimated from 'is-file-animated'; import type { BrowserImageResizerConfigWithConvertedOutput } from '@misskey-dev/browser-image-resizer'; +import type { MenuItem } from '@/types/menu.js'; import MkModalWindow from '@/components/MkModalWindow.vue'; import { i18n } from '@/i18n.js'; import { prefer } from '@/preferences.js'; @@ -116,6 +119,7 @@ const props = withDefaults(defineProps<{ const emit = defineEmits<{ (ev: 'done', driveFiles: Misskey.entities.DriveFile[]): void; + (ev: 'canceled'): void; (ev: 'closed'): void; }>(); @@ -139,6 +143,7 @@ const dialog = useTemplateRef('dialog'); const firstUploadAttempted = ref(false); const isUploading = computed(() => items.value.some(item => item.uploading)); const canRetry = computed(() => firstUploadAttempted.value && !items.value.some(item => item.uploading || item.waiting) && items.value.some(item => item.uploaded == null)); +const canDone = computed(() => items.value.some(item => item.uploaded != null)); const compressionLevel = ref<0 | 1 | 2 | 3>(2); const compressionSettings = computed(() => { @@ -164,6 +169,7 @@ const compressionSettings = computed(() => { watch(items, () => { if (items.value.length === 0) { + emit('canceled'); dialog.value?.close(); return; } @@ -183,12 +189,39 @@ async function cancel() { }); if (canceled) return; + emit('canceled'); + dialog.value?.close(); +} + +async function done() { + if (items.value.some(item => item.uploaded == null)) { + const { canceled } = await os.confirm({ + type: 'question', + text: i18n.ts._uploader.doneConfirm, + okText: i18n.ts.yes, + cancelText: i18n.ts.no, + }); + if (canceled) return; + } + emit('done', items.value.filter(item => item.uploaded != null).map(item => item.uploaded!)); dialog.value?.close(); } function showMenu(ev: MouseEvent, item: typeof items.value[0]) { + const menu: MenuItem[] = []; + if (!item.waiting && !item.uploading && !item.uploaded) { + menu.push({ + icon: 'ti ti-x', + text: i18n.ts.remove, + action: () => { + items.value.splice(items.value.indexOf(item), 1); + }, + }); + } + + os.popupMenu(menu, ev.currentTarget ?? ev.target); } async function upload() { // エラーハンドリングなどを考慮してシーケンシャルにやる