| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- import { createContext, FC, useContext, useMemo } from 'react'
- import useProjectWideSettings from '../hooks/use-project-wide-settings'
- import useUserWideSettings from '../hooks/use-user-wide-settings'
- import useProjectWideSettingsSocketListener from '../hooks/use-project-wide-settings-socket-listener'
- import type { ProjectSettings } from '../utils/api'
- import { UserSettings } from '../../../../../types/user-settings'
- type ProjectSettingsSetterContextValue = {
- setCompiler: (compiler: ProjectSettings['compiler']) => Promise<void>
- setImageName: (imageName: ProjectSettings['imageName']) => Promise<void>
- setRootDocId: (rootDocId: ProjectSettings['rootDocId']) => void
- setSpellCheckLanguage: (
- spellCheckLanguage: ProjectSettings['spellCheckLanguage']
- ) => void
- setAutoComplete: (autoComplete: UserSettings['autoComplete']) => void
- setAutoPairDelimiters: (
- autoPairDelimiters: UserSettings['autoPairDelimiters']
- ) => void
- setSyntaxValidation: (
- syntaxValidation: UserSettings['syntaxValidation']
- ) => void
- setPreviewTabs: (previewTabs: UserSettings['previewTabs']) => void
- setMode: (mode: UserSettings['mode']) => void
- setEditorTheme: (editorTheme: UserSettings['editorTheme']) => void
- setEditorLightTheme: (
- editorLightTheme: UserSettings['editorLightTheme']
- ) => void
- setEditorDarkTheme: (editorDarkTheme: UserSettings['editorDarkTheme']) => void
- setOverallTheme: (overallTheme: UserSettings['overallTheme']) => void
- setFontSize: (fontSize: UserSettings['fontSize']) => void
- setFontFamily: (fontFamily: UserSettings['fontFamily']) => void
- setLineHeight: (lineHeight: UserSettings['lineHeight']) => void
- setPdfViewer: (pdfViewer: UserSettings['pdfViewer']) => void
- setMathPreview: (mathPreview: UserSettings['mathPreview']) => void
- setBreadcrumbs: (breadcrumbs: UserSettings['breadcrumbs']) => void
- setEditorTabs: (editorTabs: UserSettings['editorTabs']) => void
- setNonBlinkingCursor: (
- nonBlinkingCursor: UserSettings['nonBlinkingCursor']
- ) => void
- setDarkModePdf: (darkModePdf: UserSettings['darkModePdf']) => void
- setFloatingMenu: (floatingMenu: UserSettings['floatingMenu']) => void
- setZotero: (zotero: UserSettings['zotero']) => void
- setMendeley: (mendeley: UserSettings['mendeley']) => void
- setPapers: (papers: UserSettings['papers']) => void
- }
- type ProjectSettingsContextValue = Partial<ProjectSettings> &
- Partial<UserSettings> &
- ProjectSettingsSetterContextValue
- export const ProjectSettingsContext = createContext<
- ProjectSettingsContextValue | undefined
- >(undefined)
- export const ProjectSettingsProvider: FC<React.PropsWithChildren> = ({
- children,
- }) => {
- const {
- compiler,
- setCompiler,
- imageName,
- setImageName,
- rootDocId,
- setRootDocId,
- spellCheckLanguage,
- setSpellCheckLanguage,
- } = useProjectWideSettings()
- const {
- autoComplete,
- setAutoComplete,
- autoPairDelimiters,
- setAutoPairDelimiters,
- syntaxValidation,
- setSyntaxValidation,
- previewTabs,
- setPreviewTabs,
- editorTheme,
- setEditorTheme,
- editorLightTheme,
- setEditorLightTheme,
- editorDarkTheme,
- setEditorDarkTheme,
- overallTheme,
- setOverallTheme,
- mode,
- setMode,
- fontSize,
- setFontSize,
- fontFamily,
- setFontFamily,
- lineHeight,
- setLineHeight,
- pdfViewer,
- setPdfViewer,
- mathPreview,
- setMathPreview,
- breadcrumbs,
- setBreadcrumbs,
- editorTabs,
- setEditorTabs,
- nonBlinkingCursor,
- setNonBlinkingCursor,
- darkModePdf,
- setDarkModePdf,
- floatingMenu,
- setFloatingMenu,
- zotero,
- setZotero,
- mendeley,
- setMendeley,
- papers,
- setPapers,
- } = useUserWideSettings()
- useProjectWideSettingsSocketListener()
- const value: ProjectSettingsContextValue = useMemo(
- () => ({
- compiler,
- setCompiler,
- imageName,
- setImageName,
- rootDocId,
- setRootDocId,
- spellCheckLanguage,
- setSpellCheckLanguage,
- autoComplete,
- setAutoComplete,
- autoPairDelimiters,
- setAutoPairDelimiters,
- syntaxValidation,
- setSyntaxValidation,
- previewTabs,
- setPreviewTabs,
- editorTheme,
- setEditorTheme,
- editorLightTheme,
- setEditorLightTheme,
- editorDarkTheme,
- setEditorDarkTheme,
- overallTheme,
- setOverallTheme,
- mode,
- setMode,
- fontSize,
- setFontSize,
- fontFamily,
- setFontFamily,
- lineHeight,
- setLineHeight,
- pdfViewer,
- setPdfViewer,
- mathPreview,
- setMathPreview,
- breadcrumbs,
- setBreadcrumbs,
- editorTabs,
- setEditorTabs,
- nonBlinkingCursor,
- setNonBlinkingCursor,
- darkModePdf,
- setDarkModePdf,
- floatingMenu,
- setFloatingMenu,
- zotero,
- setZotero,
- mendeley,
- setMendeley,
- papers,
- setPapers,
- }),
- [
- compiler,
- setCompiler,
- imageName,
- setImageName,
- rootDocId,
- setRootDocId,
- spellCheckLanguage,
- setSpellCheckLanguage,
- autoComplete,
- setAutoComplete,
- autoPairDelimiters,
- setAutoPairDelimiters,
- syntaxValidation,
- setSyntaxValidation,
- previewTabs,
- setPreviewTabs,
- editorTheme,
- setEditorTheme,
- editorLightTheme,
- setEditorLightTheme,
- editorDarkTheme,
- setEditorDarkTheme,
- overallTheme,
- setOverallTheme,
- mode,
- setMode,
- fontSize,
- setFontSize,
- fontFamily,
- setFontFamily,
- lineHeight,
- setLineHeight,
- pdfViewer,
- setPdfViewer,
- mathPreview,
- setMathPreview,
- breadcrumbs,
- setBreadcrumbs,
- editorTabs,
- setEditorTabs,
- nonBlinkingCursor,
- setNonBlinkingCursor,
- darkModePdf,
- setDarkModePdf,
- floatingMenu,
- setFloatingMenu,
- zotero,
- setZotero,
- mendeley,
- setMendeley,
- papers,
- setPapers,
- ]
- )
- return (
- <ProjectSettingsContext.Provider value={value}>
- {children}
- </ProjectSettingsContext.Provider>
- )
- }
- export function useProjectSettingsContext() {
- const context = useContext(ProjectSettingsContext)
- if (!context) {
- throw new Error(
- 'useProjectSettingsContext is only available inside ProjectSettingsProvider'
- )
- }
- return context
- }
|