editor-sidebar.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import React from 'react'
  2. import { Panel, PanelGroup } from 'react-resizable-panels'
  3. import { VerticalResizeHandle } from '@/features/ide-react/components/resize/vertical-resize-handle'
  4. import { FileTree } from '@/features/ide-react/components/file-tree'
  5. import { useLayoutContext } from '@/shared/context/layout-context'
  6. import classnames from 'classnames'
  7. import { FileTreeSelectHandler } from '@/features/ide-react/types/file-tree'
  8. type EditorSidebarProps = {
  9. shouldPersistLayout: boolean
  10. onFileTreeInit: () => void
  11. onFileTreeSelect: FileTreeSelectHandler
  12. }
  13. export default function EditorSidebar({
  14. shouldPersistLayout,
  15. onFileTreeInit,
  16. onFileTreeSelect,
  17. }: EditorSidebarProps) {
  18. const { view } = useLayoutContext()
  19. const historyIsOpen = view === 'history'
  20. return (
  21. <>
  22. <aside
  23. className={classnames('ide-react-placeholder-editor-sidebar', {
  24. hide: historyIsOpen,
  25. })}
  26. >
  27. <PanelGroup
  28. autoSaveId={
  29. shouldPersistLayout ? 'ide-react-editor-sidebar-layout' : undefined
  30. }
  31. direction="vertical"
  32. >
  33. <Panel defaultSize={75} className="ide-react-file-tree-panel">
  34. <FileTree onInit={onFileTreeInit} onSelect={onFileTreeSelect} />
  35. </Panel>
  36. <VerticalResizeHandle />
  37. <Panel defaultSize={25}>
  38. <div className="outline-container" />
  39. </Panel>
  40. </PanelGroup>
  41. </aside>
  42. <aside className="ide-react-placeholder-editor-sidebar history-file-tree" />
  43. </>
  44. )
  45. }