Layout composable changes
This commit is contained in:
@@ -5,7 +5,7 @@ import Aura from '@primevue/themes/aura';
|
|||||||
import Lara from '@primevue/themes/lara';
|
import Lara from '@primevue/themes/lara';
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
|
|
||||||
const { layoutConfig, setPrimary, setSurface, setPreset, isDarkTheme, setMenuMode } = useLayout();
|
const { layoutConfig, isDarkTheme } = useLayout();
|
||||||
|
|
||||||
const presets = {
|
const presets = {
|
||||||
Aura,
|
Aura,
|
||||||
@@ -167,9 +167,9 @@ function getPresetExt() {
|
|||||||
|
|
||||||
function updateColors(type, color) {
|
function updateColors(type, color) {
|
||||||
if (type === 'primary') {
|
if (type === 'primary') {
|
||||||
setPrimary(color.name);
|
layoutConfig.primary = color.name;
|
||||||
} else if (type === 'surface') {
|
} else if (type === 'surface') {
|
||||||
setSurface(color.name);
|
layoutConfig.surface = color.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
applyTheme(type, color);
|
applyTheme(type, color);
|
||||||
@@ -184,7 +184,7 @@ function applyTheme(type, color) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function onPresetChange() {
|
function onPresetChange() {
|
||||||
setPreset(preset.value);
|
layoutConfig.preset = preset.value;
|
||||||
const presetValue = presets[preset.value];
|
const presetValue = presets[preset.value];
|
||||||
const surfacePalette = surfaces.value.find((s) => s.name === layoutConfig.surface)?.palette;
|
const surfacePalette = surfaces.value.find((s) => s.name === layoutConfig.surface)?.palette;
|
||||||
|
|
||||||
@@ -192,7 +192,7 @@ function onPresetChange() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function onMenuModeChange() {
|
function onMenuModeChange() {
|
||||||
setMenuMode(menuMode.value);
|
layoutConfig.menuMode = menuMode.value;
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import AppFooter from './AppFooter.vue';
|
|||||||
import AppSidebar from './AppSidebar.vue';
|
import AppSidebar from './AppSidebar.vue';
|
||||||
import AppTopbar from './AppTopbar.vue';
|
import AppTopbar from './AppTopbar.vue';
|
||||||
|
|
||||||
const { layoutConfig, layoutState, isSidebarActive, resetMenu } = useLayout();
|
const { layoutConfig, layoutState, isSidebarActive } = useLayout();
|
||||||
|
|
||||||
const outsideClickListener = ref(null);
|
const outsideClickListener = ref(null);
|
||||||
|
|
||||||
@@ -31,7 +31,9 @@ function bindOutsideClickListener() {
|
|||||||
if (!outsideClickListener.value) {
|
if (!outsideClickListener.value) {
|
||||||
outsideClickListener.value = (event) => {
|
outsideClickListener.value = (event) => {
|
||||||
if (isOutsideClicked(event)) {
|
if (isOutsideClicked(event)) {
|
||||||
resetMenu();
|
layoutState.overlayMenuActive = false;
|
||||||
|
layoutState.staticMenuMobileActive = false;
|
||||||
|
layoutState.menuHoverActive = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
document.addEventListener('click', outsideClickListener.value);
|
document.addEventListener('click', outsideClickListener.value);
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { useRoute } from 'vue-router';
|
|||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
|
||||||
const { layoutState, setActiveMenuItem, onMenuToggle } = useLayout();
|
const { layoutState, setActiveMenuItem, toggleMenu } = useLayout();
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
item: {
|
item: {
|
||||||
@@ -51,7 +51,7 @@ function itemClick(event, item) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((item.to || item.url) && (layoutState.staticMenuMobileActive || layoutState.overlayMenuActive)) {
|
if ((item.to || item.url) && (layoutState.staticMenuMobileActive || layoutState.overlayMenuActive)) {
|
||||||
onMenuToggle();
|
toggleMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.command) {
|
if (item.command) {
|
||||||
|
|||||||
@@ -2,13 +2,13 @@
|
|||||||
import { useLayout } from '@/layout/composables/layout';
|
import { useLayout } from '@/layout/composables/layout';
|
||||||
import AppConfigurator from './AppConfigurator.vue';
|
import AppConfigurator from './AppConfigurator.vue';
|
||||||
|
|
||||||
const { onMenuToggle, toggleDarkMode, isDarkTheme } = useLayout();
|
const { toggleMenu, toggleDarkMode, isDarkTheme } = useLayout();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="layout-topbar">
|
<div class="layout-topbar">
|
||||||
<div class="layout-topbar-logo-container">
|
<div class="layout-topbar-logo-container">
|
||||||
<button class="layout-menu-button layout-topbar-action" @click="onMenuToggle">
|
<button class="layout-menu-button layout-topbar-action" @click="toggleMenu">
|
||||||
<i class="pi pi-bars"></i>
|
<i class="pi pi-bars"></i>
|
||||||
</button>
|
</button>
|
||||||
<router-link to="/" class="layout-topbar-logo">
|
<router-link to="/" class="layout-topbar-logo">
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { computed, reactive, readonly } from 'vue';
|
import { computed, reactive } from 'vue';
|
||||||
|
|
||||||
const layoutConfig = reactive({
|
const layoutConfig = reactive({
|
||||||
preset: 'Aura',
|
preset: 'Aura',
|
||||||
@@ -19,26 +19,10 @@ const layoutState = reactive({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export function useLayout() {
|
export function useLayout() {
|
||||||
const setPrimary = (value) => {
|
|
||||||
layoutConfig.primary = value;
|
|
||||||
};
|
|
||||||
|
|
||||||
const setSurface = (value) => {
|
|
||||||
layoutConfig.surface = value;
|
|
||||||
};
|
|
||||||
|
|
||||||
const setPreset = (value) => {
|
|
||||||
layoutConfig.preset = value;
|
|
||||||
};
|
|
||||||
|
|
||||||
const setActiveMenuItem = (item) => {
|
const setActiveMenuItem = (item) => {
|
||||||
layoutState.activeMenuItem = item.value || item;
|
layoutState.activeMenuItem = item.value || item;
|
||||||
};
|
};
|
||||||
|
|
||||||
const setMenuMode = (mode) => {
|
|
||||||
layoutConfig.menuMode = mode;
|
|
||||||
};
|
|
||||||
|
|
||||||
const toggleDarkMode = () => {
|
const toggleDarkMode = () => {
|
||||||
if (!document.startViewTransition) {
|
if (!document.startViewTransition) {
|
||||||
executeDarkModeToggle();
|
executeDarkModeToggle();
|
||||||
@@ -54,7 +38,7 @@ export function useLayout() {
|
|||||||
document.documentElement.classList.toggle('app-dark');
|
document.documentElement.classList.toggle('app-dark');
|
||||||
};
|
};
|
||||||
|
|
||||||
const onMenuToggle = () => {
|
const toggleMenu = () => {
|
||||||
if (layoutConfig.menuMode === 'overlay') {
|
if (layoutConfig.menuMode === 'overlay') {
|
||||||
layoutState.overlayMenuActive = !layoutState.overlayMenuActive;
|
layoutState.overlayMenuActive = !layoutState.overlayMenuActive;
|
||||||
}
|
}
|
||||||
@@ -66,12 +50,6 @@ export function useLayout() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const resetMenu = () => {
|
|
||||||
layoutState.overlayMenuActive = false;
|
|
||||||
layoutState.staticMenuMobileActive = false;
|
|
||||||
layoutState.menuHoverActive = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
const isSidebarActive = computed(() => layoutState.overlayMenuActive || layoutState.staticMenuMobileActive);
|
const isSidebarActive = computed(() => layoutState.overlayMenuActive || layoutState.staticMenuMobileActive);
|
||||||
|
|
||||||
const isDarkTheme = computed(() => layoutConfig.darkTheme);
|
const isDarkTheme = computed(() => layoutConfig.darkTheme);
|
||||||
@@ -80,5 +58,15 @@ export function useLayout() {
|
|||||||
|
|
||||||
const getSurface = computed(() => layoutConfig.surface);
|
const getSurface = computed(() => layoutConfig.surface);
|
||||||
|
|
||||||
return { layoutConfig: readonly(layoutConfig), layoutState: readonly(layoutState), onMenuToggle, isSidebarActive, isDarkTheme, getPrimary, getSurface, setActiveMenuItem, toggleDarkMode, setPrimary, setSurface, setPreset, resetMenu, setMenuMode };
|
return {
|
||||||
|
layoutConfig,
|
||||||
|
layoutState,
|
||||||
|
toggleMenu,
|
||||||
|
isSidebarActive,
|
||||||
|
isDarkTheme,
|
||||||
|
getPrimary,
|
||||||
|
getSurface,
|
||||||
|
setActiveMenuItem,
|
||||||
|
toggleDarkMode
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user