Files
overleaf-cep/services/web/frontend/js/features/review-panel-new/hooks/use-overview-file-collapsed.ts
T
Tim Down 132ccbc4cc Merge pull request #26583 from overleaf/td-editor-scope-values-to-context
Move scope values starting with `editor.` to contexts

GitOrigin-RevId: 7ca349ceff002228cf4e931c644c8c386eb6c597
2025-07-09 08:05:15 +00:00

52 lines
1.3 KiB
TypeScript

import { useCallback } from 'react'
import { DocId } from '../../../../../types/project-settings'
import { useProjectContext } from '../../../shared/context/project-context'
import usePersistedState from '../../../shared/hooks/use-persisted-state'
import { debugConsole } from '@/utils/debugging'
const safeStringify = (value: unknown) => {
try {
return JSON.stringify(value)
} catch (e) {
debugConsole.error('double stringify exception', e)
return ''
}
}
const safeParse = (value: string) => {
try {
return JSON.parse(value)
} catch (e) {
debugConsole.error('double parse exception', e)
return null
}
}
export default function useOverviewFileCollapsed(docId: DocId) {
const { _id: projectId } = useProjectContext()
const [collapsedDocs, setCollapsedDocs] = usePersistedState<
Record<DocId, boolean>,
string
>(
`docs_collapsed_state:${projectId}`,
{},
{
converter: {
fromPersisted: safeParse,
toPersisted: safeStringify,
},
}
)
const toggleCollapsed = useCallback(() => {
setCollapsedDocs((collapsedDocs: Record<DocId, boolean>) => {
return {
...collapsedDocs,
[docId]: !collapsedDocs[docId],
}
})
}, [docId, setCollapsedDocs])
return { collapsed: collapsedDocs[docId], toggleCollapsed }
}