refactor: standardize module tool bar
Signed-off-by: Sebastian <krupinski01@gmail.com>
This commit is contained in:
+49
-5
@@ -1,5 +1,5 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, onMounted, unref } from 'vue'
|
import { computed, onMounted, ref, unref } from 'vue'
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
import { useDisplay } from 'vuetify'
|
import { useDisplay } from 'vuetify'
|
||||||
import { useModuleStore } from '@KTXC'
|
import { useModuleStore } from '@KTXC'
|
||||||
@@ -75,6 +75,21 @@ const {
|
|||||||
// Complex store/composable objects accessed directly (not simple refs)
|
// Complex store/composable objects accessed directly (not simple refs)
|
||||||
const { mailSync, entitiesStore } = mailOperationsStore
|
const { mailSync, entitiesStore } = mailOperationsStore
|
||||||
|
|
||||||
|
// Message search (filters the current message list by subject/sender)
|
||||||
|
const searchQuery = ref('')
|
||||||
|
|
||||||
|
const filteredMessages = computed(() => {
|
||||||
|
const query = (searchQuery.value ?? '').trim().toLowerCase()
|
||||||
|
if (!query) return currentMessages.value
|
||||||
|
|
||||||
|
return currentMessages.value.filter((message: EntityObject) => {
|
||||||
|
const subject = (message.properties.subject || '').toLowerCase()
|
||||||
|
const fromLabel = (message.properties.from?.label || '').toLowerCase()
|
||||||
|
const fromAddress = (message.properties.from?.address || '').toLowerCase()
|
||||||
|
return subject.includes(query) || fromLabel.includes(query) || fromAddress.includes(query)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
const lastSyncLabel = computed(() => {
|
const lastSyncLabel = computed(() => {
|
||||||
const lastSync = unref(unref(mailSync.lastSync))
|
const lastSync = unref(unref(mailSync.lastSync))
|
||||||
|
|
||||||
@@ -216,17 +231,34 @@ const handleMessageSelectionDelete = () => mailUiStore.deleteSelectedMessages()
|
|||||||
<div v-else class="mail-container">
|
<div v-else class="mail-container">
|
||||||
<!-- Top toolbar -->
|
<!-- Top toolbar -->
|
||||||
<v-toolbar class="mail-toolbar" elevation="0" density="compact">
|
<v-toolbar class="mail-toolbar" elevation="0" density="compact">
|
||||||
|
<template #prepend>
|
||||||
<v-btn
|
<v-btn
|
||||||
v-if="isMobile"
|
|
||||||
icon="mdi-menu"
|
icon="mdi-menu"
|
||||||
variant="text"
|
variant="text"
|
||||||
@click="sidebarToggle"
|
@click="sidebarToggle"
|
||||||
/>
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
<v-toolbar-title>Mail</v-toolbar-title>
|
<v-toolbar-title class="d-flex align-center">
|
||||||
|
<v-icon size="24" color="primary" class="mr-2">mdi-email</v-icon>
|
||||||
|
<span class="text-subtitle-1 font-weight-bold">Mail</span>
|
||||||
|
</v-toolbar-title>
|
||||||
|
|
||||||
<v-spacer />
|
<v-spacer />
|
||||||
|
|
||||||
|
<!-- Search -->
|
||||||
|
<v-text-field
|
||||||
|
v-model="searchQuery"
|
||||||
|
density="compact"
|
||||||
|
variant="outlined"
|
||||||
|
placeholder="Search messages..."
|
||||||
|
prepend-inner-icon="mdi-magnify"
|
||||||
|
hide-details
|
||||||
|
single-line
|
||||||
|
clearable
|
||||||
|
class="mail-toolbar-search mx-4"
|
||||||
|
/>
|
||||||
|
|
||||||
<v-btn
|
<v-btn
|
||||||
icon="mdi-pencil"
|
icon="mdi-pencil"
|
||||||
@click="handleMessageComposeFresh()"
|
@click="handleMessageComposeFresh()"
|
||||||
@@ -265,7 +297,7 @@ const handleMessageSelectionDelete = () => mailUiStore.deleteSelectedMessages()
|
|||||||
<v-navigation-drawer
|
<v-navigation-drawer
|
||||||
v-model="sidebarVisible"
|
v-model="sidebarVisible"
|
||||||
contained
|
contained
|
||||||
:permanent="!isMobile"
|
:permanent="sidebarVisible && !isMobile"
|
||||||
:temporary="isMobile"
|
:temporary="isMobile"
|
||||||
width="280"
|
width="280"
|
||||||
class="mail-sidebar"
|
class="mail-sidebar"
|
||||||
@@ -299,7 +331,7 @@ const handleMessageSelectionDelete = () => mailUiStore.deleteSelectedMessages()
|
|||||||
:style="{ '--mail-list-width': messageListWidth + '%' }"
|
:style="{ '--mail-list-width': messageListWidth + '%' }"
|
||||||
>
|
>
|
||||||
<MessageList
|
<MessageList
|
||||||
:messages="currentMessages"
|
:messages="filteredMessages"
|
||||||
:selected-collection="selectedFolder"
|
:selected-collection="selectedFolder"
|
||||||
:selected-message="selectedMessage"
|
:selected-message="selectedMessage"
|
||||||
:selection-list="selectionList"
|
:selection-list="selectionList"
|
||||||
@@ -436,6 +468,18 @@ const handleMessageSelectionDelete = () => mailUiStore.deleteSelectedMessages()
|
|||||||
|
|
||||||
.mail-toolbar {
|
.mail-toolbar {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
|
border-bottom: 1px solid rgb(var(--v-border-color)) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mail-toolbar-search {
|
||||||
|
max-width: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 960px) {
|
||||||
|
.mail-toolbar-search {
|
||||||
|
max-width: 180px;
|
||||||
|
margin-inline: 8px !important;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.mail-content {
|
.mail-content {
|
||||||
|
|||||||
Reference in New Issue
Block a user