feat: move and delete

Signed-off-by: Sebastian <krupinski01@gmail.com>
This commit is contained in:
2026-04-16 20:36:25 -04:00
parent 509fbc2480
commit 31a9ab419c
5 changed files with 274 additions and 285 deletions

View File

@@ -5,6 +5,7 @@ import { useDisplay } from 'vuetify'
import { useModuleStore } from '@KTXC'
import { useMailStore } from '@/stores/mailStore'
import type { CollectionObject, EntityObject } from '@MailManager/models'
import type { EntityIdentifier } from '@MailManager/types/common'
import FolderTree from '@/components/FolderTree.vue'
import MessageList from '@/components/MessageList.vue'
import MessageReader from '@/components/MessageReader.vue'
@@ -32,19 +33,23 @@ const {
loading,
selectedFolder,
selectedMessage,
selectedMessageIds,
selectionModeActive,
selectionList,
selectionMode,
composeMode,
composeReplyTo,
currentMessages,
moveDialogVisible,
selectionCount,
hasSelection,
allCurrentMessagesSelected,
moveDialogCandidates,
} = storeToRefs(mailStore)
// Complex store/composable objects accessed directly (not simple refs)
const { mailSync, entitiesStore } = mailStore
const lastSyncLabel = computed(() => {
if (!mailSync.lastSync.value) return ''
return `(Last: ${new Date(mailSync.lastSync.value).toLocaleTimeString()})`
})
// Initialize
onMounted(async () => {
if (!isMailManagerAvailable.value) return
@@ -71,23 +76,24 @@ const handleSelectAllToggle = (value: boolean) => {
const handleSelectionClear = () => mailStore.deactivateSelectionMode()
const handleSelectionMove = () => mailStore.openMoveDialogForSelection()
const handleSelectionMove = () => mailStore.openMoveDialog()
const handleCompose = (replyTo?: EntityObject) => mailStore.openCompose(replyTo)
const handleSelectionDelete = () => mailStore.deleteMessages([...selectionList.value])
const handleCompose = (message?: EntityObject) => mailStore.openCompose(message)
const handleComposeClose = () => mailStore.closeCompose()
const handleComposeSent = () => mailStore.afterSent()
const handleReply = (message: EntityObject) => mailStore.openCompose(message)
const handleDelete = (message: EntityObject) => mailStore.deleteMessage(message)
const handleDelete = (message: EntityObject) => {
const id = `${message.provider}:${String(message.service)}:${String(message.collection)}:${String(message.identifier)}` as EntityIdentifier
mailStore.deleteMessages([id])
}
const handleMove = (message: EntityObject) => mailStore.openMoveDialog(message)
const handleMoveConfirm = async (folder: CollectionObject) => {
await mailStore.moveMessages(folder)
}
const handleMoveConfirm = async (target: CollectionObject) => { await mailStore.moveMessages(target, moveDialogCandidates.value ?? []) }
const handleMoveCancel = () => mailStore.closeMoveDialog()
@@ -150,7 +156,7 @@ const handleFolderCreated = (folder: CollectionObject) => mailStore.notify(`Fold
>
<v-icon>mdi-refresh</v-icon>
<v-tooltip activator="parent" location="bottom">
Refresh {{ mailSync.lastSync ? `(Last: ${new Date(mailSync.lastSync).toLocaleTimeString()})` : '' }}
Refresh {{ lastSyncLabel }}
</v-tooltip>
</v-btn>
@@ -201,13 +207,10 @@ const handleFolderCreated = (folder: CollectionObject) => mailStore.notify(`Fold
<div class="mail-list-panel">
<MessageList
:messages="currentMessages"
:selected-message="selectedMessage"
:selected-message-ids="selectedMessageIds"
:selection-mode-active="selectionModeActive"
:selection-count="selectionCount"
:has-selection="hasSelection"
:all-current-messages-selected="allCurrentMessagesSelected"
:selected-collection="selectedFolder"
:selected-message="selectedMessage"
:selection-list="selectionList"
:selection-mode="selectionMode"
:loading="loading"
@open="handleMessageOpen"
@toggle-selection="handleMessageSelectionToggle"
@@ -215,6 +218,7 @@ const handleFolderCreated = (folder: CollectionObject) => mailStore.notify(`Fold
@toggle-select-all="handleSelectAllToggle"
@clear-selection="handleSelectionClear"
@move-selection="handleSelectionMove"
@delete-selection="handleSelectionDelete"
/>
</div>
@@ -235,7 +239,6 @@ const handleFolderCreated = (folder: CollectionObject) => mailStore.notify(`Fold
@reply="handleCompose"
@move="handleMove"
@delete="handleDelete"
@compose="handleCompose()"
/>
</div>
</div>