| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505 |
- import { createContext, FC, useContext, useMemo } from 'react'
- import { CompileContext, useLocalCompileContext } from './local-compile-context'
- import useDetachStateWatcher from '../hooks/use-detach-state-watcher'
- import useDetachAction from '../hooks/use-detach-action'
- import useCompileTriggers from '../../features/pdf-preview/hooks/use-compile-triggers'
- import { useLogEvents } from '@/features/pdf-preview/hooks/use-log-events'
- export const DetachCompileContext = createContext<CompileContext | undefined>(
- undefined
- )
- export const DetachCompileProvider: FC<React.PropsWithChildren> = ({
- children,
- }) => {
- const localCompileContext = useLocalCompileContext()
- if (!localCompileContext) {
- throw new Error(
- 'DetachCompileProvider is only available inside LocalCompileProvider'
- )
- }
- const {
- animateCompileDropdownArrow: _animateCompileDropdownArrow,
- autoCompile: _autoCompile,
- clearingCache: _clearingCache,
- clsiServerId: _clsiServerId,
- codeCheckFailed: _codeCheckFailed,
- compiling: _compiling,
- deliveryLatencies: _deliveryLatencies,
- draft: _draft,
- editedSinceCompileStarted: _editedSinceCompileStarted,
- error: _error,
- fileList: _fileList,
- hasChanges: _hasChanges,
- hasShortCompileTimeout: _hasShortCompileTimeout,
- highlights: _highlights,
- isProjectOwner: _isProjectOwner,
- lastCompileOptions: _lastCompileOptions,
- logEntries: _logEntries,
- logEntryAnnotations: _logEntryAnnotations,
- pdfFile: _pdfFile,
- pdfViewer: _pdfViewer,
- position: _position,
- rawLog: _rawLog,
- setAnimateCompileDropdownArrow: _setAnimateCompileDropdownArrow,
- setAutoCompile: _setAutoCompile,
- setDraft: _setDraft,
- setError: _setError,
- setHasLintingError: _setHasLintingError,
- setHighlights: _setHighlights,
- setPosition: _setPosition,
- setShowCompileTimeWarning: _setShowCompileTimeWarning,
- setShowLogs: _setShowLogs,
- toggleLogs: _toggleLogs,
- setStopOnFirstError: _setStopOnFirstError,
- setStopOnValidationError: _setStopOnValidationError,
- showLogs: _showLogs,
- showCompileTimeWarning: _showCompileTimeWarning,
- stopOnFirstError: _stopOnFirstError,
- stopOnValidationError: _stopOnValidationError,
- stoppedOnFirstError: _stoppedOnFirstError,
- uncompiled: _uncompiled,
- validationIssues: _validationIssues,
- firstRenderDone: _firstRenderDone,
- cleanupCompileResult: _cleanupCompileResult,
- recompileFromScratch: _recompileFromScratch,
- setCompiling: _setCompiling,
- startCompile: _startCompile,
- stopCompile: _stopCompile,
- setChangedAt: _setChangedAt,
- clearCache: _clearCache,
- syncToEntry: _syncToEntry,
- recordAction: _recordAction,
- } = localCompileContext
- const [animateCompileDropdownArrow] = useDetachStateWatcher(
- 'animateCompileDropdownArrow',
- _animateCompileDropdownArrow,
- 'detacher',
- 'detached'
- )
- const [autoCompile] = useDetachStateWatcher(
- 'autoCompile',
- _autoCompile,
- 'detacher',
- 'detached'
- )
- const [clearingCache] = useDetachStateWatcher(
- 'clearingCache',
- _clearingCache,
- 'detacher',
- 'detached'
- )
- const [clsiServerId] = useDetachStateWatcher(
- 'clsiServerId',
- _clsiServerId,
- 'detacher',
- 'detached'
- )
- const [codeCheckFailed] = useDetachStateWatcher(
- 'codeCheckFailed',
- _codeCheckFailed,
- 'detacher',
- 'detached'
- )
- const [compiling] = useDetachStateWatcher(
- 'compiling',
- _compiling,
- 'detacher',
- 'detached'
- )
- const [deliveryLatencies] = useDetachStateWatcher(
- 'deliveryLatencies',
- _deliveryLatencies,
- 'detacher',
- 'detached'
- )
- const [draft] = useDetachStateWatcher('draft', _draft, 'detacher', 'detached')
- const [error] = useDetachStateWatcher('error', _error, 'detacher', 'detached')
- const [fileList] = useDetachStateWatcher(
- 'fileList',
- _fileList,
- 'detacher',
- 'detached'
- )
- const [hasChanges] = useDetachStateWatcher(
- 'hasChanges',
- _hasChanges,
- 'detacher',
- 'detached'
- )
- const [hasShortCompileTimeout] = useDetachStateWatcher(
- 'hasShortCompileTimeout',
- _hasShortCompileTimeout,
- 'detacher',
- 'detached'
- )
- const [highlights] = useDetachStateWatcher(
- 'highlights',
- _highlights,
- 'detacher',
- 'detached'
- )
- const [isProjectOwner] = useDetachStateWatcher(
- 'isProjectOwner',
- _isProjectOwner,
- 'detacher',
- 'detached'
- )
- const [lastCompileOptions] = useDetachStateWatcher(
- 'lastCompileOptions',
- _lastCompileOptions,
- 'detacher',
- 'detached'
- )
- const [logEntries] = useDetachStateWatcher(
- 'logEntries',
- _logEntries,
- 'detacher',
- 'detached'
- )
- const [logEntryAnnotations] = useDetachStateWatcher(
- 'logEntryAnnotations',
- _logEntryAnnotations,
- 'detacher',
- 'detached'
- )
- const [pdfFile] = useDetachStateWatcher(
- 'pdfFile',
- _pdfFile,
- 'detacher',
- 'detached'
- )
- const [pdfViewer] = useDetachStateWatcher(
- 'pdfViewer',
- _pdfViewer,
- 'detacher',
- 'detached'
- )
- const [position] = useDetachStateWatcher(
- 'position',
- _position,
- 'detacher',
- 'detached'
- )
- const [rawLog] = useDetachStateWatcher(
- 'rawLog',
- _rawLog,
- 'detacher',
- 'detached'
- )
- const [showCompileTimeWarning] = useDetachStateWatcher(
- 'showCompileTimeWarning',
- _showCompileTimeWarning,
- 'detacher',
- 'detached'
- )
- const [showLogs] = useDetachStateWatcher(
- 'showLogs',
- _showLogs,
- 'detacher',
- 'detached'
- )
- const [stopOnFirstError] = useDetachStateWatcher(
- 'stopOnFirstError',
- _stopOnFirstError,
- 'detacher',
- 'detached'
- )
- const [stopOnValidationError] = useDetachStateWatcher(
- 'stopOnValidationError',
- _stopOnValidationError,
- 'detacher',
- 'detached'
- )
- const [stoppedOnFirstError] = useDetachStateWatcher(
- 'stoppedOnFirstError',
- _stoppedOnFirstError,
- 'detacher',
- 'detached'
- )
- const [uncompiled] = useDetachStateWatcher(
- 'uncompiled',
- _uncompiled,
- 'detacher',
- 'detached'
- )
- const [editedSinceCompileStarted] = useDetachStateWatcher(
- 'editedSinceCompileStarted',
- _editedSinceCompileStarted,
- 'detacher',
- 'detached'
- )
- const [validationIssues] = useDetachStateWatcher(
- 'validationIssues',
- _validationIssues,
- 'detacher',
- 'detached'
- )
- const setAnimateCompileDropdownArrow = useDetachAction(
- 'setAnimateCompileDropdownArrow',
- _setAnimateCompileDropdownArrow,
- 'detached',
- 'detacher'
- )
- const setAutoCompile = useDetachAction(
- 'setAutoCompile',
- _setAutoCompile,
- 'detached',
- 'detacher'
- )
- const setDraft = useDetachAction(
- 'setDraft',
- _setDraft,
- 'detached',
- 'detacher'
- )
- const setError = useDetachAction(
- 'setError',
- _setError,
- 'detacher',
- 'detached'
- )
- const setPosition = useDetachAction(
- 'setPosition',
- _setPosition,
- 'detached',
- 'detacher'
- )
- const firstRenderDone = useDetachAction(
- 'firstRenderDone',
- _firstRenderDone,
- 'detached',
- 'detacher'
- )
- const setHasLintingError = useDetachAction(
- 'setHasLintingError',
- _setHasLintingError,
- 'detacher',
- 'detached'
- )
- const setHighlights = useDetachAction(
- 'setHighlights',
- _setHighlights,
- 'detacher',
- 'detached'
- )
- const setShowCompileTimeWarning = useDetachAction(
- 'setShowCompileTimeWarning',
- _setShowCompileTimeWarning,
- 'detached',
- 'detacher'
- )
- const setShowLogs = useDetachAction(
- 'setShowLogs',
- _setShowLogs,
- 'detached',
- 'detacher'
- )
- const toggleLogs = useDetachAction(
- 'toggleLogs',
- _toggleLogs,
- 'detached',
- 'detacher'
- )
- const setStopOnFirstError = useDetachAction(
- 'setStopOnFirstError',
- _setStopOnFirstError,
- 'detached',
- 'detacher'
- )
- const setStopOnValidationError = useDetachAction(
- 'setStopOnValidationError',
- _setStopOnValidationError,
- 'detached',
- 'detacher'
- )
- const cleanupCompileResult = useDetachAction(
- 'cleanupCompileResult',
- _cleanupCompileResult,
- 'detached',
- 'detacher'
- )
- const recompileFromScratch = useDetachAction(
- 'recompileFromScratch',
- _recompileFromScratch,
- 'detached',
- 'detacher'
- )
- const setCompiling = useDetachAction(
- 'setCompiling',
- _setCompiling,
- 'detacher',
- 'detached'
- )
- const startCompile = useDetachAction(
- 'startCompile',
- _startCompile,
- 'detached',
- 'detacher'
- )
- const stopCompile = useDetachAction(
- 'stopCompile',
- _stopCompile,
- 'detached',
- 'detacher'
- )
- const setChangedAt = useDetachAction(
- 'setChangedAt',
- _setChangedAt,
- 'detached',
- 'detacher'
- )
- const clearCache = useDetachAction(
- 'clearCache',
- _clearCache,
- 'detached',
- 'detacher'
- )
- const syncToEntry = useDetachAction(
- 'sync-to-entry',
- _syncToEntry,
- 'detached',
- 'detacher'
- )
- const recordAction = useDetachAction(
- 'record-action',
- _recordAction,
- 'detached',
- 'detacher'
- )
- useCompileTriggers(startCompile, setChangedAt)
- useLogEvents(setShowLogs)
- const value = useMemo(
- () => ({
- animateCompileDropdownArrow,
- autoCompile,
- clearCache,
- clearingCache,
- clsiServerId,
- codeCheckFailed,
- compiling,
- deliveryLatencies,
- draft,
- editedSinceCompileStarted,
- error,
- fileList,
- hasChanges,
- hasShortCompileTimeout,
- highlights,
- isProjectOwner,
- lastCompileOptions,
- logEntryAnnotations,
- logEntries,
- pdfDownloadUrl: pdfFile?.pdfDownloadUrl,
- pdfFile,
- pdfUrl: pdfFile?.pdfUrl,
- pdfViewer,
- position,
- rawLog,
- recompileFromScratch,
- setAnimateCompileDropdownArrow,
- setAutoCompile,
- setCompiling,
- setDraft,
- setError,
- setHasLintingError,
- setHighlights,
- setPosition,
- setShowCompileTimeWarning,
- setShowLogs,
- toggleLogs,
- setStopOnFirstError,
- setStopOnValidationError,
- showLogs,
- showCompileTimeWarning,
- startCompile,
- stopCompile,
- stopOnFirstError,
- stopOnValidationError,
- stoppedOnFirstError,
- uncompiled,
- validationIssues,
- firstRenderDone,
- setChangedAt,
- cleanupCompileResult,
- syncToEntry,
- recordAction,
- }),
- [
- animateCompileDropdownArrow,
- autoCompile,
- clearCache,
- clearingCache,
- clsiServerId,
- codeCheckFailed,
- compiling,
- deliveryLatencies,
- draft,
- editedSinceCompileStarted,
- error,
- fileList,
- hasChanges,
- hasShortCompileTimeout,
- highlights,
- isProjectOwner,
- lastCompileOptions,
- logEntryAnnotations,
- logEntries,
- pdfFile,
- pdfViewer,
- position,
- rawLog,
- recompileFromScratch,
- setAnimateCompileDropdownArrow,
- setAutoCompile,
- setCompiling,
- setDraft,
- setError,
- setHasLintingError,
- setHighlights,
- setPosition,
- setShowCompileTimeWarning,
- setShowLogs,
- toggleLogs,
- setStopOnFirstError,
- setStopOnValidationError,
- showCompileTimeWarning,
- showLogs,
- startCompile,
- stopCompile,
- stopOnFirstError,
- stopOnValidationError,
- stoppedOnFirstError,
- uncompiled,
- validationIssues,
- firstRenderDone,
- setChangedAt,
- cleanupCompileResult,
- syncToEntry,
- recordAction,
- ]
- )
- return (
- <DetachCompileContext.Provider value={value}>
- {children}
- </DetachCompileContext.Provider>
- )
- }
- export function useDetachCompileContext() {
- const context = useContext(DetachCompileContext)
- if (!context) {
- throw new Error(
- 'useDetachCompileContext is ony available inside DetachCompileProvider'
- )
- }
- return context
- }
|