editor-sidebar.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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 autoSaveId="ide-editor-sidebar-layout" direction="vertical">
  29. <Panel
  30. defaultSizePercentage={75}
  31. className="ide-react-file-tree-panel"
  32. id="panel-file-tree"
  33. >
  34. <FileTree
  35. onInit={onFileTreeInit}
  36. onSelect={onFileTreeSelect}
  37. onDelete={onFileTreeDelete}
  38. />
  39. </Panel>
  40. <VerticalResizeHandle />
  41. <Panel defaultSizePercentage={25} id="panel-outline">
  42. <div className="outline-container" />
  43. </Panel>
  44. </PanelGroup>
  45. </aside>
  46. )
  47. }