44 lines
1.1 KiB
JavaScript
44 lines
1.1 KiB
JavaScript
import { useState, useEffect } from 'react'
|
|
import { getModelByName } from '../../../database/ObjectModels'
|
|
|
|
const useColumnVisibility = (type) => {
|
|
const getInitialVisibility = () => {
|
|
const stored = sessionStorage.getItem(`${type}_columnVisibility`)
|
|
if (stored) {
|
|
return JSON.parse(stored)
|
|
}
|
|
// Default visibility - all columns visible
|
|
const model = getModelByName(type)
|
|
const columns = model.columns || []
|
|
return columns.reduce((acc, columnName) => {
|
|
const property = model.properties?.find(
|
|
(prop) => prop.name === columnName
|
|
)
|
|
if (property) {
|
|
acc[property.name] = true
|
|
}
|
|
return acc
|
|
}, {})
|
|
}
|
|
|
|
const [columnVisibility, setColumnVisibility] = useState(getInitialVisibility)
|
|
|
|
useEffect(() => {
|
|
sessionStorage.setItem(
|
|
`${type}_columnVisibility`,
|
|
JSON.stringify(columnVisibility)
|
|
)
|
|
}, [columnVisibility, type])
|
|
|
|
const updateColumnVisibility = (key, value) => {
|
|
setColumnVisibility((prev) => ({
|
|
...prev,
|
|
[key]: value
|
|
}))
|
|
}
|
|
|
|
return [columnVisibility, updateColumnVisibility]
|
|
}
|
|
|
|
export default useColumnVisibility
|