多维表格
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

93 lines
2.6 KiB

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))
}