feat: entity move

Signed-off-by: Sebastian <krupinski01@gmail.com>
This commit is contained in:
2026-03-27 20:36:56 -04:00
parent cc78926379
commit 78fff8d0ad
6 changed files with 628 additions and 22 deletions

View File

@@ -4,14 +4,13 @@ import { storeToRefs } from 'pinia'
import { useDisplay } from 'vuetify'
import { useModuleStore } from '@KTXC'
import { useMailStore } from '@/stores/mailStore'
import type { CollectionObject, EntityObject } from '@MailManager/models'
import FolderTree from '@/components/FolderTree.vue'
import MessageList from '@/components/MessageList.vue'
import MessageReader from '@/components/MessageReader.vue'
import MessageComposer from '@/components/MessageComposer.vue'
import FolderSelectionDialog from '@/components/FolderSelectionDialog.vue'
import SettingsDialog from '@/components/settings/SettingsDialog.vue'
import type { EntityInterface } from '@MailManager/types/entity'
import type { MessageInterface } from '@MailManager/types/message'
import type { CollectionObject } from '@MailManager/models'
// Vuetify display for responsive behavior
const display = useDisplay()
@@ -36,6 +35,7 @@ const {
composeMode,
composeReplyTo,
currentMessages,
moveDialogVisible,
} = storeToRefs(mailStore)
// Complex store/composable objects accessed directly (not simple refs)
@@ -50,17 +50,25 @@ onMounted(async () => {
// Handlers — thin wrappers that delegate to the store
const handleFolderSelect = (folder: CollectionObject) => mailStore.selectFolder(folder)
const handleMessageSelect = (message: EntityInterface<MessageInterface>) => mailStore.selectMessage(message, isMobile.value)
const handleMessageSelect = (message: EntityObject) => mailStore.selectMessage(message, isMobile.value)
const handleCompose = (replyTo?: EntityInterface<MessageInterface>) => mailStore.openCompose(replyTo)
const handleCompose = (replyTo?: EntityObject) => mailStore.openCompose(replyTo)
const handleComposeClose = () => mailStore.closeCompose()
const handleComposeSent = () => mailStore.afterSent()
const handleReply = (message: EntityInterface<MessageInterface>) => mailStore.openCompose(message)
const handleReply = (message: EntityObject) => mailStore.openCompose(message)
const handleDelete = (message: EntityInterface<MessageInterface>) => mailStore.deleteMessage(message)
const handleDelete = (message: EntityObject) => mailStore.deleteMessage(message)
const handleMove = (message: EntityObject) => mailStore.openMoveDialog(message)
const handleMoveConfirm = async (folder: CollectionObject) => {
await mailStore.moveMessage(folder)
}
const handleMoveCancel = () => mailStore.closeMoveDialog()
const toggleSidebar = () => mailStore.toggleSidebar()
@@ -193,6 +201,7 @@ const handleFolderCreated = (folder: CollectionObject) => mailStore.notify(`Fold
v-else
:message="selectedMessage"
@reply="handleReply"
@move="handleMove"
@delete="handleDelete"
@compose="handleCompose()"
/>
@@ -203,6 +212,16 @@ const handleFolderCreated = (folder: CollectionObject) => mailStore.notify(`Fold
<!-- Settings Dialog -->
<SettingsDialog v-model="settingsDialogVisible" />
<FolderSelectionDialog
v-model="moveDialogVisible"
:loading="loading"
title="Move To"
confirm-text="Move"
empty-text="No other folders are available in this account."
@select="handleMoveConfirm"
@cancel="handleMoveCancel"
/>
</div>
</template>