Workspace.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import React, { useState } from "react";
  2. import { Tab, Tabs } from "@nextui-org/react";
  3. import Terminal from "./Terminal";
  4. import Planner from "./Planner";
  5. import CodeEditor from "./CodeEditor";
  6. import Browser from "./Browser";
  7. import { TabType, TabOption, AllTabs } from "../types/TabOption";
  8. import CmdLine from "../assets/cmd-line";
  9. import Calendar from "../assets/calendar";
  10. import Earth from "../assets/earth";
  11. import Pencil from "../assets/pencil";
  12. const tabData = {
  13. [TabOption.TERMINAL]: {
  14. name: "Terminal",
  15. icon: <CmdLine />,
  16. component: <Terminal key="terminal" />,
  17. },
  18. [TabOption.PLANNER]: {
  19. name: "Planner",
  20. icon: <Calendar />,
  21. component: <Planner key="planner" />,
  22. },
  23. [TabOption.CODE]: {
  24. name: "Code Editor",
  25. icon: <Pencil />,
  26. component: <CodeEditor key="code" />,
  27. },
  28. [TabOption.BROWSER]: {
  29. name: "Browser",
  30. icon: <Earth />,
  31. component: <Browser key="browser" />,
  32. },
  33. };
  34. function Workspace() {
  35. const [activeTab, setActiveTab] = useState<TabType>(TabOption.TERMINAL);
  36. return (
  37. <>
  38. <div className="w-full p-4 text-2xl font-bold select-none">
  39. OpenDevin Workspace
  40. </div>
  41. <div role="tablist" className="tabs tabs-bordered tabs-lg ">
  42. <Tabs
  43. variant="underlined"
  44. size="lg"
  45. onSelectionChange={(v) => {
  46. setActiveTab(v as TabType);
  47. }}
  48. >
  49. {AllTabs.map((tab) => (
  50. <Tab
  51. key={tab}
  52. title={
  53. <div className="flex items-center space-x-2">
  54. {tabData[tab].icon}
  55. <span>{tabData[tab].name}</span>
  56. </div>
  57. }
  58. />
  59. ))}
  60. </Tabs>
  61. </div>
  62. {Object.keys(tabData).map((tab) => (
  63. <div
  64. className="h-full w-full p-4 bg-bg-workspace"
  65. key={tab}
  66. hidden={activeTab !== tab}
  67. >
  68. {tabData[tab as TabType].component}
  69. </div>
  70. ))}
  71. </>
  72. );
  73. }
  74. export default Workspace;