refactor: add navigaton panel component
Signed-off-by: Sebastian <krupinski01@gmail.com>
This commit is contained in:
@@ -0,0 +1,75 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { computed } from 'vue'
|
||||||
|
import { storeToRefs } from 'pinia'
|
||||||
|
import { useDisplay } from 'vuetify'
|
||||||
|
import { useMailUiStore } from '@/stores/mailUiStore'
|
||||||
|
import FolderView from '@/components/FolderView.vue'
|
||||||
|
import type { CollectionObject } from '@MailManager/models/collection'
|
||||||
|
|
||||||
|
const display = useDisplay()
|
||||||
|
const isMobile = computed(() => display.mdAndDown.value)
|
||||||
|
|
||||||
|
const mailUiStore = useMailUiStore()
|
||||||
|
const { sidebarVisible, selectedFolder } = storeToRefs(mailUiStore)
|
||||||
|
|
||||||
|
const handleCompose = () => mailUiStore.openComposer()
|
||||||
|
|
||||||
|
const handleFolderSelect = (folder: CollectionObject) => mailUiStore.selectFolder(folder)
|
||||||
|
|
||||||
|
const handleSettingsOpen = () => mailUiStore.settingsOpen()
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<v-navigation-drawer
|
||||||
|
v-model="sidebarVisible"
|
||||||
|
contained
|
||||||
|
:permanent="sidebarVisible && !isMobile"
|
||||||
|
:temporary="isMobile"
|
||||||
|
width="280"
|
||||||
|
class="mail-sidebar"
|
||||||
|
>
|
||||||
|
<div class="pa-3 pb-0">
|
||||||
|
<!-- Primary action -->
|
||||||
|
<v-btn
|
||||||
|
block
|
||||||
|
color="primary"
|
||||||
|
variant="tonal"
|
||||||
|
prepend-icon="mdi-pencil"
|
||||||
|
class="justify-start"
|
||||||
|
@click="handleCompose"
|
||||||
|
>
|
||||||
|
Compose
|
||||||
|
</v-btn>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Folders -->
|
||||||
|
<FolderView
|
||||||
|
:selected-folder="selectedFolder"
|
||||||
|
@select="handleFolderSelect"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- Pinned utility footer -->
|
||||||
|
<template #append>
|
||||||
|
<v-divider />
|
||||||
|
<div class="pa-2">
|
||||||
|
<v-btn
|
||||||
|
block
|
||||||
|
variant="text"
|
||||||
|
size="small"
|
||||||
|
prepend-icon="mdi-cog"
|
||||||
|
class="justify-start text-medium-emphasis"
|
||||||
|
@click="handleSettingsOpen"
|
||||||
|
>
|
||||||
|
Settings
|
||||||
|
</v-btn>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</v-navigation-drawer>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.mail-sidebar {
|
||||||
|
border-right: 1px solid rgb(var(--v-border-color));
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
+2
-36
@@ -17,7 +17,7 @@ import DeleteFolderDialog from '@/components/DeleteFolderDialog.vue'
|
|||||||
import FolderSelectionDialog from '@/components/FolderSelectionDialog.vue'
|
import FolderSelectionDialog from '@/components/FolderSelectionDialog.vue'
|
||||||
import RenameFolderDialog from '@/components/RenameFolderDialog.vue'
|
import RenameFolderDialog from '@/components/RenameFolderDialog.vue'
|
||||||
import SettingsDialog from '@/components/settings/SettingsDialog.vue'
|
import SettingsDialog from '@/components/settings/SettingsDialog.vue'
|
||||||
import FolderView from '@/components/FolderView.vue'
|
import Sidebar from '@/components/Sidebar.vue'
|
||||||
|
|
||||||
// Vuetify display for responsive behavior
|
// Vuetify display for responsive behavior
|
||||||
const display = useDisplay()
|
const display = useDisplay()
|
||||||
@@ -44,7 +44,6 @@ const {
|
|||||||
} = storeToRefs(mailOperationsStore)
|
} = storeToRefs(mailOperationsStore)
|
||||||
|
|
||||||
const {
|
const {
|
||||||
sidebarVisible,
|
|
||||||
settingsDialogVisible,
|
settingsDialogVisible,
|
||||||
selectedFolder,
|
selectedFolder,
|
||||||
composerMode,
|
composerMode,
|
||||||
@@ -111,8 +110,6 @@ const {
|
|||||||
|
|
||||||
const sidebarToggle = () => mailUiStore.sidebarToggle()
|
const sidebarToggle = () => mailUiStore.sidebarToggle()
|
||||||
|
|
||||||
const handleSettingsOpen = () => mailUiStore.settingsOpen()
|
|
||||||
|
|
||||||
const handleFolderSelect = (folder: CollectionObject) => mailUiStore.selectFolder(folder)
|
const handleFolderSelect = (folder: CollectionObject) => mailUiStore.selectFolder(folder)
|
||||||
|
|
||||||
const handleFolderCreateConfirm = async (folderName: string) => {
|
const handleFolderCreateConfirm = async (folderName: string) => {
|
||||||
@@ -294,33 +291,7 @@ const handleMessageSelectionDelete = () => mailUiStore.deleteSelectedMessages()
|
|||||||
<!-- Main content area -->
|
<!-- Main content area -->
|
||||||
<div class="mail-content">
|
<div class="mail-content">
|
||||||
<!-- Folder tree sidebar -->
|
<!-- Folder tree sidebar -->
|
||||||
<v-navigation-drawer
|
<Sidebar />
|
||||||
v-model="sidebarVisible"
|
|
||||||
contained
|
|
||||||
:permanent="sidebarVisible && !isMobile"
|
|
||||||
:temporary="isMobile"
|
|
||||||
width="280"
|
|
||||||
class="mail-sidebar"
|
|
||||||
>
|
|
||||||
|
|
||||||
<FolderView
|
|
||||||
:selected-folder="selectedFolder"
|
|
||||||
@select="handleFolderSelect"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<template #append>
|
|
||||||
<div class="pa-2">
|
|
||||||
<v-btn
|
|
||||||
block
|
|
||||||
variant="text"
|
|
||||||
prepend-icon="mdi-cog"
|
|
||||||
@click="handleSettingsOpen"
|
|
||||||
>
|
|
||||||
Settings
|
|
||||||
</v-btn>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</v-navigation-drawer>
|
|
||||||
|
|
||||||
<!-- Main area with message list and reader -->
|
<!-- Main area with message list and reader -->
|
||||||
<div class="mail-main">
|
<div class="mail-main">
|
||||||
@@ -490,11 +461,6 @@ const handleMessageSelectionDelete = () => mailUiStore.deleteSelectedMessages()
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mail-sidebar {
|
|
||||||
border-right: 1px solid rgb(var(--v-border-color));
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mail-main {
|
.mail-main {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user