| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import { LoadingPane } from '@/features/ide-react/components/editor/loading-pane'
- import {
- EditorScopeValue,
- useEditorManagerContext,
- } from '@/features/ide-react/context/editor-manager-context'
- import { useFileTreeOpenContext } from '@/features/ide-react/context/file-tree-open-context'
- import useScopeValue from '@/shared/hooks/use-scope-value'
- import classNames from 'classnames'
- import SourceEditor from '@/features/source-editor/components/source-editor'
- import { useProjectContext } from '@/shared/context/project-context'
- import { useFileTreeData } from '@/shared/context/file-tree-data-context'
- import { useEffect, useRef } from 'react'
- import { findInTree } from '@/features/file-tree/util/find-in-tree'
- // FIXME: This is only needed until we have a working file tree. This hook does
- // the minimal amount of work to load the initial document.
- const useWorkaroundForOpeningInitialDocument = () => {
- const { _id: projectId } = useProjectContext()
- const { fileTreeData, setSelectedEntities } = useFileTreeData()
- const isReady = Boolean(projectId && fileTreeData)
- const { handleFileTreeInit, handleFileTreeSelect } = useFileTreeOpenContext()
- const { currentDocumentId } = useEditorManagerContext()
- useEffect(() => {
- if (isReady) handleFileTreeInit()
- }, [isReady, handleFileTreeInit])
- const alreadyOpenedFile = useRef(false)
- useEffect(() => {
- if (isReady && currentDocumentId && !alreadyOpenedFile.current) {
- alreadyOpenedFile.current = true
- const doc = findInTree(fileTreeData, currentDocumentId)
- if (doc) {
- handleFileTreeSelect([doc])
- setSelectedEntities([doc])
- }
- }
- }, [
- isReady,
- currentDocumentId,
- fileTreeData,
- handleFileTreeSelect,
- setSelectedEntities,
- ])
- }
- export const Editor = () => {
- const [editor] = useScopeValue<EditorScopeValue>('editor')
- useWorkaroundForOpeningInitialDocument()
- const { selectedEntityCount, openEntity } = useFileTreeOpenContext()
- const { currentDocumentId } = useEditorManagerContext()
- if (!currentDocumentId) {
- return null
- }
- const isLoading = Boolean(
- (!editor.sharejs_doc || editor.opening) &&
- !editor.error_state &&
- editor.open_doc_id
- )
- return (
- <div
- className={classNames('ide-redesign-editor-content', {
- hidden: openEntity?.type !== 'doc' || selectedEntityCount !== 1,
- })}
- >
- <SourceEditor />
- {isLoading && <LoadingPane />}
- </div>
- )
- }
|