"use client"; import React, { useState } from "react"; import { Search, Plus, Minus, GitBranch } from "lucide-react"; import { Input } from "./ui/Input"; import { appsMetadata as apps } from "../constants/appsMetadata"; const tools = [ // { id: "t1", name: "HTTP Request", icon: "H", iconBg: "bg-slate-700" }, // { id: "t2", name: "Code", icon: "<>", iconBg: "bg-emerald-600" }, { id: "t3", name: "Webhook", icon: "W", iconBg: "bg-violet-600" }, // { id: "t4", name: "Schedule", icon: "S", iconBg: "bg-amber-500" }, // { id: "t5", name: "Filter", icon: "F", iconBg: "bg-cyan-600" }, // { id: "t6", name: "Merge", icon: "M", iconBg: "bg-pink-500" }, // { id: "t7", name: "Split", icon: "Sp", iconBg: "bg-teal-500" }, // { id: "t8", name: "Wait", icon: "W", iconBg: "bg-gray-500" }, ]; export function Sidebar({ onZoomIn, onZoomOut, onAddRouter, onAddNode }) { const [search, setSearch] = useState(""); const [activeTab, setActiveTab] = useState("apps"); const [draggedItem, setDraggedItem] = useState(null); const items = activeTab === "apps" ? apps : tools; const filteredItems = items.filter((item) => item.name.toLowerCase().includes(search.toLowerCase()) ); const handleDragStart = (e, app) => { setDraggedItem(app.id); e.dataTransfer.setData("application/json", JSON.stringify(app)); e.dataTransfer.effectAllowed = "copy"; }; const handleDragEnd = () => { setDraggedItem(null); }; return (
setSearch(e.target.value)} className="pl-9 bg-input border-border" />
handleDragStart(e, { id: "router", name: "Router", type: "router" })} onDragEnd={handleDragEnd} className={`w-full flex items-center gap-3 px-3 py-2.5 hover:bg-sidebar-accent transition-colors text-left border-b border-sidebar-border cursor-grab active:cursor-grabbing ${ draggedItem === "router" ? "opacity-50" : "" }`} >
Add Router
{filteredItems.map((item) => (
onAddNode(item)} draggable onDragStart={(e) => handleDragStart(e, item)} onDragEnd={handleDragEnd} className={`w-full flex items-center gap-3 px-3 py-2.5 hover:bg-sidebar-accent transition-colors text-left cursor-grab active:cursor-grabbing ${ draggedItem === item.id ? "opacity-50" : "" }`} >
{item.icon}
{item.name}
))}
); } export default Sidebar;