53 lines
1.4 KiB
JavaScript
53 lines
1.4 KiB
JavaScript
import { useState, useEffect } from 'react'
|
|
import { getModelByName } from '../../../database/ObjectModels'
|
|
|
|
const useColumnVisibility = (type, customColumns) => {
|
|
const getInitialVisibility = () => {
|
|
const storageKey = `${type}_columnVisibility`
|
|
const stored = sessionStorage.getItem(storageKey)
|
|
if (stored) {
|
|
return JSON.parse(stored)
|
|
}
|
|
// Default visibility - all columns visible
|
|
if (customColumns && Array.isArray(customColumns)) {
|
|
return customColumns.reduce((acc, col) => {
|
|
if (col.key) {
|
|
acc[col.key] = true
|
|
}
|
|
return acc
|
|
}, {})
|
|
}
|
|
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
|