import { acceptHMRUpdate, defineStore } from 'pinia' import { MAX_WIDTH_FOR_MOBILE_MODE, INITIAL_LEFT_SIDEBAR_WIDTH } from '~/lib/constants' export const useSidebarStore = defineStore('sidebarStore', () => { const { width } = useWindowSize() const isViewPortMobile = () => { return width.value < MAX_WIDTH_FOR_MOBILE_MODE } const { isMobileMode, leftSidebarSize: _leftSidebarSize, setLeftSidebarSize } = useGlobal() const tablesStore = useTablesStore() const _isLeftSidebarOpen = ref(!isViewPortMobile()) const isLeftSidebarOpen = computed({ get() { return (isMobileMode.value && !tablesStore.activeTableId) || _isLeftSidebarOpen.value }, set(value) { _isLeftSidebarOpen.value = value }, }) const isRightSidebarOpen = ref(true) const leftSideBarSize = ref({ old: _leftSidebarSize.value ?? INITIAL_LEFT_SIDEBAR_WIDTH, current: isViewPortMobile() ? 0 : _leftSidebarSize.value ?? INITIAL_LEFT_SIDEBAR_WIDTH, }) const leftSidebarWidthPercent = ref((leftSideBarSize.value.current / width.value) * 100) const leftSidebarState = ref< 'openStart' | 'openEnd' | 'hiddenStart' | 'hiddenEnd' | 'peekOpenStart' | 'peekOpenEnd' | 'peekCloseOpen' | 'peekCloseEnd' >(isLeftSidebarOpen.value ? 'openEnd' : 'hiddenEnd') const mobileNormalizedSidebarSize = computed(() => { if (isMobileMode.value) { return isLeftSidebarOpen.value ? 100 : 0 } return leftSidebarWidthPercent.value }) const leftSidebarWidth = computed(() => { if (isMobileMode.value) { return isLeftSidebarOpen.value ? width.value : 0 } return leftSideBarSize.value.current }) const nonHiddenMobileSidebarSize = computed(() => { if (isMobileMode.value) { return 100 } return leftSideBarSize.value.current ?? leftSideBarSize.value.old }) const nonHiddenLeftSidebarWidth = computed(() => { if (isMobileMode.value) { return width.value } return nonHiddenMobileSidebarSize.value }) const formRightSidebarState = ref({ minWidth: 384, maxWidth: 600, width: 384, }) const formRightSidebarWidthPercent = computed(() => { return (formRightSidebarState.value.width / (width.value - leftSidebarWidth.value)) * 100 }) return { isLeftSidebarOpen, isRightSidebarOpen, leftSidebarWidthPercent, leftSideBarSize, leftSidebarState, leftSidebarWidth, mobileNormalizedSidebarSize, nonHiddenLeftSidebarWidth, windowSize: width, formRightSidebarState, formRightSidebarWidthPercent, } }) if (import.meta.hot) { import.meta.hot.accept(acceptHMRUpdate(useSidebarStore as any, import.meta.hot)) }