editor-and-sidebar.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import React, { useCallback, useState } from 'react'
  2. import TwoColumnMainContent from '@/features/ide-react/components/layout/two-column-main-content'
  3. import Editor from '@/features/ide-react/components/editor/editor'
  4. import EditorSidebar from '@/features/ide-react/components/editor-sidebar'
  5. import customLocalStorage from '@/infrastructure/local-storage'
  6. import { useProjectContext } from '@/shared/context/project-context'
  7. import { FileTreeFindResult } from '@/features/ide-react/types/file-tree'
  8. type EditorAndSidebarProps = {
  9. shouldPersistLayout: boolean
  10. leftColumnDefaultSize: number
  11. setLeftColumnDefaultSize: React.Dispatch<React.SetStateAction<number>>
  12. }
  13. export function EditorAndSidebar({
  14. shouldPersistLayout,
  15. leftColumnDefaultSize,
  16. setLeftColumnDefaultSize,
  17. }: EditorAndSidebarProps) {
  18. const [leftColumnIsOpen, setLeftColumnIsOpen] = useState(true)
  19. const { rootDocId, _id: projectId } = useProjectContext()
  20. const [openDocId, setOpenDocId] = useState(
  21. () => customLocalStorage.getItem(`doc.open_id.${projectId}`) || rootDocId
  22. )
  23. const [fileTreeReady, setFileTreeReady] = useState(false)
  24. const handleFileTreeInit = useCallback(() => {
  25. setFileTreeReady(true)
  26. }, [])
  27. const handleFileTreeSelect = useCallback(
  28. (selectedEntities: FileTreeFindResult[]) => {
  29. const firstDocId =
  30. selectedEntities.find(result => result.type === 'doc')?.entity._id ||
  31. null
  32. setOpenDocId(firstDocId)
  33. },
  34. []
  35. )
  36. const leftColumnContent = (
  37. <EditorSidebar
  38. shouldPersistLayout={shouldPersistLayout}
  39. onFileTreeInit={handleFileTreeInit}
  40. onFileTreeSelect={handleFileTreeSelect}
  41. />
  42. )
  43. const rightColumnContent = (
  44. <Editor
  45. shouldPersistLayout={shouldPersistLayout}
  46. openDocId={openDocId}
  47. fileTreeReady={fileTreeReady}
  48. />
  49. )
  50. return (
  51. <TwoColumnMainContent
  52. leftColumnId="editor-left-column"
  53. leftColumnContent={leftColumnContent}
  54. leftColumnDefaultSize={leftColumnDefaultSize}
  55. setLeftColumnDefaultSize={setLeftColumnDefaultSize}
  56. rightColumnContent={rightColumnContent}
  57. leftColumnIsOpen={leftColumnIsOpen}
  58. setLeftColumnIsOpen={setLeftColumnIsOpen}
  59. shouldPersistLayout={shouldPersistLayout}
  60. />
  61. )
  62. }