mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2025-07-29 14:00:05 +02:00

* Refactor project context to not use scope store * Fix Cypress tests for project context changes * Fix frontend React Testing Library tests for project context changes * Remove redundant code * Fix some project types in tests * Remove unused import and fix a type * Throw an error if updating the project in the project context before joining the project * Fix some review panel tests * Remove unused imports GitOrigin-RevId: 2f0c928b651f387aa980c29aef7d1ba0649790a7
51 lines
1.3 KiB
TypeScript
51 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 { 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 }
|
|
}
|