editor-sidebar.tsx 1.3 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 {
  6. FileTreeDeleteHandler,
  7. FileTreeSelectHandler,
  8. } from '@/features/ide-react/types/file-tree'
  9. import classNames from 'classnames'
  10. type EditorSidebarProps = {
  11. shouldShow?: boolean
  12. onFileTreeInit: () => void
  13. onFileTreeSelect: FileTreeSelectHandler
  14. onFileTreeDelete: FileTreeDeleteHandler
  15. }
  16. export default function EditorSidebar({
  17. shouldShow = false,
  18. onFileTreeInit,
  19. onFileTreeSelect,
  20. onFileTreeDelete,
  21. }: EditorSidebarProps) {
  22. return (
  23. <aside
  24. className={classNames('ide-react-editor-sidebar', {
  25. hidden: !shouldShow,
  26. })}
  27. >
  28. <PanelGroup
  29. autoSaveId="ide-react-editor-sidebar-layout"
  30. direction="vertical"
  31. >
  32. <Panel defaultSize={75} className="ide-react-file-tree-panel">
  33. <FileTree
  34. onInit={onFileTreeInit}
  35. onSelect={onFileTreeSelect}
  36. onDelete={onFileTreeDelete}
  37. />
  38. </Panel>
  39. <VerticalResizeHandle />
  40. <Panel defaultSize={25}>
  41. <div className="outline-container" />
  42. </Panel>
  43. </PanelGroup>
  44. </aside>
  45. )
  46. }