import React, { useState, useEffect } from "react"; import { DBService, PRE_POPULATED_PLATFORMS } from "../lib/db"; import { CloudPlatform } from "../types"; import { Terminal, Search, Star, ExternalLink, Compass, Code, Database, Network, HelpCircle, LayoutGrid, Sparkles, Activity, Mail } from "lucide-react"; export default function StudioTab({ triggerHaptic }: { triggerHaptic: () => void }) { const [platforms, setPlatforms] = useState([]); const [selectedCategory, setSelectedCategory] = useState("all"); const [searchQuery, setSearchQuery] = useState(""); const [favorites, setFavorites] = useState>({}); useEffect(() => { loadPlatforms(); }, []); const loadPlatforms = async () => { // Attempt load platforms or load from seed const list = await DBService.getAll("platforms"); if (list.length === 0) { for (const p of PRE_POPULATED_PLATFORMS) { await DBService.put("platforms", p); } setPlatforms(PRE_POPULATED_PLATFORMS); } else { setPlatforms(list); } // Try loads favorite flags const favs = await DBService.getSetting>("favorite_platforms"); if (favs) { setFavorites(favs); } }; const toggleFavorite = async (id: string, e: React.MouseEvent) => { e.stopPropagation(); triggerHaptic(); const updated = { ...favorites, [id]: !favorites[id] }; setFavorites(updated); await DBService.putSetting("favorite_platforms", updated); }; const getCategoryIcon = (cat: string) => { switch (cat) { case "ai": return ; case "ide": return ; case "database": return ; case "deployment": return ; case "workflows": return ; case "monitoring": return ; case "email": return ; default: return ; } }; const getCategoryLabel = (cat: string) => { switch (cat) { case "ai": return "ذكاء اصطناعي وتوليد"; case "ide": return "بيئات تطوير سحابية"; case "database": return "قواعد بيانات سحابية"; case "deployment": return "منصات نشر واستضافة"; case "workflows": return "أتمتة وسير العمل"; case "monitoring": return "مراقبة الأداء والتحليل"; case "email": return "مزودي البريد الإلكتروني"; default: return cat; } }; // filter let displayList = platforms.filter((item) => { const matchSearch = item.name.toLowerCase().includes(searchQuery.toLowerCase()) || item.description.includes(searchQuery) || item.freeLimit.includes(searchQuery); if (selectedCategory === "all") return matchSearch; if (selectedCategory === "favorites") return matchSearch && favorites[item.id]; return matchSearch && item.category === selectedCategory; }); return (
{/* Search tool & category selectors */}
{/* Search Input */}
setSearchQuery(e.target.value)} />
{/* Categories filters scrollable */}
{/* Bento Grid layout */}
{displayList.map((platform) => (
{/* Background absolute ambient glow on active/hover */}
{/* Header category indicator & Star favorite */}
{getCategoryIcon(platform.category)} {getCategoryLabel(platform.category)}
{/* Title & Description of platform */}

{platform.name}

{platform.description}

{/* Bottom details / link and free tier limit statement */}
))}
{displayList.length === 0 && (
لا توجد منصات ضمن هذا الفهرس تطابق تفاصيل البحث.
)}
); }