hgh_admin/resources/js/@layouts/stores/config.js
2024-05-29 22:34:28 +05:00

116 lines
4.0 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { AppContentLayoutNav, NavbarType } from '@layouts/enums'
import { injectionKeyIsVerticalNavHovered } from '@layouts/symbols'
import { _setDirAttr } from '@layouts/utils'
// We should not import themeConfig here but in urgency we are doing it for now
import { layoutConfig } from '@themeConfig'
export const namespaceConfig = str => `${layoutConfig.app.title}-${str}`
export const cookieRef = (key, defaultValue) => {
return useCookie(namespaceConfig(key), { default: () => defaultValue })
}
export const useLayoutConfigStore = defineStore('layoutConfig', () => {
const route = useRoute()
// 👉 Navbar Type
const navbarType = ref(layoutConfig.navbar.type)
// 👉 Navbar Type
const isNavbarBlurEnabled = cookieRef('isNavbarBlurEnabled', layoutConfig.navbar.navbarBlur)
// 👉 Vertical Nav Collapsed
const isVerticalNavCollapsed = cookieRef('isVerticalNavCollapsed', layoutConfig.verticalNav.isVerticalNavCollapsed)
// 👉 App Content Width
const appContentWidth = cookieRef('appContentWidth', layoutConfig.app.contentWidth)
// 👉 App Content Layout Nav
const appContentLayoutNav = ref(layoutConfig.app.contentLayoutNav)
watch(appContentLayoutNav, val => {
// If Navbar type is hidden while switching to horizontal nav => Reset it to sticky
if (val === AppContentLayoutNav.Horizontal) {
if (navbarType.value === NavbarType.Hidden)
navbarType.value = NavbarType.Sticky
isVerticalNavCollapsed.value = false
}
})
// 👉 Horizontal Nav Type
const horizontalNavType = ref(layoutConfig.horizontalNav.type)
// 👉 Horizontal Nav Popover Offset
const horizontalNavPopoverOffset = ref(layoutConfig.horizontalNav.popoverOffset)
// 👉 Footer Type
const footerType = ref(layoutConfig.footer.type)
// 👉 Misc
const isLessThanOverlayNavBreakpoint = computed(() => useMediaQuery(`(max-width: ${layoutConfig.app.overlayNavFromBreakpoint}px)`).value)
// 👉 Layout Classes
const _layoutClasses = computed(() => {
const { y: windowScrollY } = useWindowScroll()
return [
`layout-nav-type-${appContentLayoutNav.value}`,
`layout-navbar-${navbarType.value}`,
`layout-footer-${footerType.value}`,
{
'layout-vertical-nav-collapsed': isVerticalNavCollapsed.value
&& appContentLayoutNav.value === 'vertical'
&& !isLessThanOverlayNavBreakpoint.value,
},
{ [`horizontal-nav-${horizontalNavType.value}`]: appContentLayoutNav.value === 'horizontal' },
`layout-content-width-${appContentWidth.value}`,
{ 'layout-overlay-nav': isLessThanOverlayNavBreakpoint.value },
{ 'window-scrolled': unref(windowScrollY) },
route.meta.layoutWrapperClasses ? route.meta.layoutWrapperClasses : null,
]
})
// 👉 RTL
// const isAppRTL = ref(layoutConfig.app.isRTL)
const isAppRTL = ref(false)
watch(isAppRTL, val => {
_setDirAttr(val ? 'rtl' : 'ltr')
})
// 👉 Is Vertical Nav Mini
/*
This function will return true if current state is mini. Mini state means vertical nav is:
- Collapsed
- Isn't hovered by mouse
- nav is not less than overlay breakpoint (hence, isn't overlay menu)
We are getting `isVerticalNavHovered` as param instead of via `inject` because
we are using this in `VerticalNav.vue` component which provide it and I guess because
same component is providing & injecting we are getting undefined error
*/
const isVerticalNavMini = (isVerticalNavHovered = null) => {
const isVerticalNavHoveredLocal = isVerticalNavHovered || inject(injectionKeyIsVerticalNavHovered) || ref(false)
return computed(() => isVerticalNavCollapsed.value && !isVerticalNavHoveredLocal.value && !isLessThanOverlayNavBreakpoint.value)
}
return {
appContentWidth,
appContentLayoutNav,
navbarType,
isNavbarBlurEnabled,
isVerticalNavCollapsed,
horizontalNavType,
horizontalNavPopoverOffset,
footerType,
isLessThanOverlayNavBreakpoint,
isAppRTL,
_layoutClasses,
isVerticalNavMini,
}
})