@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user