incognitolm's picture
Fix project editor crashes: safe framework lookup, null guards, missing deps
1d8d961
Raw
History Blame Contribute Delete
1.81 kB
import { FrameworkType } from '../../types';
import { FRAMEWORKS } from '../../types/project';
import { ArrowLeft, Save, Cloud, Download, Globe, Monitor, Smartphone, Server } from 'lucide-react';
interface ToolbarProps {
projectName: string;
framework: FrameworkType;
onBack: () => void;
onSave: () => void;
saving: boolean;
leftContent?: React.ReactNode;
rightContent?: React.ReactNode;
}
export default function Toolbar({
projectName,
framework,
onBack,
onSave,
saving,
leftContent,
rightContent,
}: ToolbarProps) {
const fw = FRAMEWORKS[framework] || FRAMEWORKS.web;
const getIcon = () => {
switch (framework) {
case 'web': return Globe;
case 'electron': return Monitor;
case 'maui': return Smartphone;
case 'nodejs': return Server;
default: return Globe;
}
};
const Icon = getIcon();
return (
<div className="h-12 glass border-b border-surface-700 flex items-center justify-between px-3 gap-3">
{/* Left Section */}
<div className="flex items-center gap-3 flex-1">
<button onClick={onBack} className="btn-ghost p-1.5" title="Back to Dashboard">
<ArrowLeft className="w-4 h-4" />
</button>
<div className="flex items-center gap-2">
<div className={`w-7 h-7 rounded-md bg-gradient-to-br ${fw.gradient} flex items-center justify-center`}>
<Icon className="w-4 h-4 text-white" />
</div>
<h2 className="text-sm font-semibold text-white truncate max-w-[200px]">
{projectName}
</h2>
<span className={fw.badgeClass}>{fw.name}</span>
</div>
{leftContent}
</div>
{/* Right Section */}
<div className="flex items-center gap-2">
{rightContent}
</div>
</div>
);
}