refactor: improvemets

Signed-off-by: Sebastian <krupinski01@gmail.com>
This commit is contained in:
2026-03-24 19:11:29 -04:00
parent ab508a5361
commit 18d07d84cb
11 changed files with 499 additions and 270 deletions

View File

@@ -11,6 +11,7 @@ import MessageComposer from '@/components/MessageComposer.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()
@@ -22,7 +23,7 @@ const isMailManagerAvailable = computed(() => {
return moduleStore.has('mail_manager') || moduleStore.has('MailManager')
})
// Mail store — single source of truth for all mail UI state
// Mail module store
const mailStore = useMailStore()
// storeToRefs preserves reactivity for state and computed properties
@@ -34,9 +35,6 @@ const {
selectedMessage,
composeMode,
composeReplyTo,
snackbarVisible,
snackbarMessage,
snackbarColor,
currentMessages,
} = storeToRefs(mailStore)
@@ -50,31 +48,25 @@ onMounted(async () => {
})
// Handlers — thin wrappers that delegate to the store
const handleFolderSelect = (folder: Parameters<typeof mailStore.selectFolder>[0]) =>
mailStore.selectFolder(folder)
const handleFolderSelect = (folder: CollectionObject) => mailStore.selectFolder(folder)
const handleMessageSelect = (message: EntityInterface<MessageInterface>) =>
mailStore.selectMessage(message, isMobile.value)
const handleMessageSelect = (message: EntityInterface<MessageInterface>) => mailStore.selectMessage(message, isMobile.value)
const handleCompose = (replyTo?: EntityInterface<MessageInterface>) =>
mailStore.openCompose(replyTo)
const handleCompose = (replyTo?: EntityInterface<MessageInterface>) => mailStore.openCompose(replyTo)
const handleComposeClose = () => mailStore.closeCompose()
const handleComposeSent = () => mailStore.afterSent()
const handleReply = (message: EntityInterface<MessageInterface>) =>
mailStore.openCompose(message)
const handleReply = (message: EntityInterface<MessageInterface>) => mailStore.openCompose(message)
const handleDelete = (message: EntityInterface<MessageInterface>) =>
mailStore.deleteMessage(message)
const handleDelete = (message: EntityInterface<MessageInterface>) => mailStore.deleteMessage(message)
const toggleSidebar = () => mailStore.toggleSidebar()
const handleSettingsOpen = () => mailStore.openSettings()
const handleFolderCreated = (folder: Parameters<typeof mailStore.onFolderCreated>[0]) =>
mailStore.onFolderCreated(folder)
const handleFolderCreated = (folder: CollectionObject) => mailStore.notify(`Folder "${folder.properties.label}" created`, 'success')
</script>
<template>
@@ -124,17 +116,17 @@ const handleFolderCreated = (folder: Parameters<typeof mailStore.onFolderCreated
<v-btn
icon="mdi-refresh"
@click="mailSync.sync()"
:loading="mailSync.isRunning.value && entitiesStore.transceiving"
:loading="mailSync.isRunning && entitiesStore.transceiving"
variant="text"
>
<v-icon>mdi-refresh</v-icon>
<v-tooltip activator="parent" location="bottom">
Refresh {{ mailSync.lastSync.value ? `(Last: ${new Date(mailSync.lastSync.value).toLocaleTimeString()})` : '' }}
Refresh {{ mailSync.lastSync ? `(Last: ${new Date(mailSync.lastSync).toLocaleTimeString()})` : '' }}
</v-tooltip>
</v-btn>
<v-icon
v-if="mailSync.isRunning.value"
v-if="mailSync.isRunning"
color="success"
size="small"
class="ml-2"
@@ -211,24 +203,6 @@ const handleFolderCreated = (folder: Parameters<typeof mailStore.onFolderCreated
<!-- Settings Dialog -->
<SettingsDialog v-model="settingsDialogVisible" />
<!-- Success Snackbar -->
<v-snackbar
v-model="snackbarVisible"
:color="snackbarColor"
:timeout="3000"
location="bottom right"
>
{{ snackbarMessage }}
<template v-slot:actions>
<v-btn
variant="text"
@click="snackbarVisible = false"
>
Close
</v-btn>
</template>
</v-snackbar>
</div>
</template>