editor-sidebar.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. shouldPersistLayout: boolean
  13. onFileTreeInit: () => void
  14. onFileTreeSelect: FileTreeSelectHandler
  15. onFileTreeDelete: FileTreeDeleteHandler
  16. }
  17. export default function EditorSidebar({
  18. shouldShow,
  19. shouldPersistLayout,
  20. onFileTreeInit,
  21. onFileTreeSelect,
  22. onFileTreeDelete,
  23. }: EditorSidebarProps) {
  24. return (
  25. <>
  26. <aside
  27. className={classNames('ide-react-editor-sidebar', {
  28. hidden: !shouldShow,
  29. })}
  30. >
  31. <PanelGroup
  32. autoSaveId={
  33. shouldPersistLayout ? 'ide-react-editor-sidebar-layout' : undefined
  34. }
  35. direction="vertical"
  36. >
  37. <Panel defaultSize={75} className="ide-react-file-tree-panel">
  38. <FileTree
  39. onInit={onFileTreeInit}
  40. onSelect={onFileTreeSelect}
  41. onDelete={onFileTreeDelete}
  42. />
  43. </Panel>
  44. <VerticalResizeHandle />
  45. <Panel defaultSize={25}>
  46. <div className="outline-container" />
  47. </Panel>
  48. </PanelGroup>
  49. </aside>
  50. </>
  51. )
  52. }