E2E-Frontend-Data-Eyond / src /app /components /NewChatOnboarding.tsx
ishaq101's picture
feat:interview (#1)
fe828ac
Raw
History Blame Contribute Delete
5.77 kB
import { useState } from "react";
import { BrainCircuit, BarChart2, ArrowRight, Mic, FileText, Loader2, ChevronRight } from "lucide-react";
interface NewChatOnboardingProps {
onStart: () => Promise<void>;
}
export default function NewChatOnboarding({ onStart }: NewChatOnboardingProps) {
const [isStarting, setIsStarting] = useState(false);
const handleStart = async () => {
setIsStarting(true);
try {
await onStart();
} finally {
setIsStarting(false);
}
};
return (
<div className="flex-1 flex flex-col items-center justify-center px-6 py-10 overflow-y-auto">
<div className="w-full max-w-2xl flex flex-col items-center gap-8">
{/* Header */}
<div className="text-center">
<p className="text-xs font-semibold uppercase tracking-widest text-emerald-600 mb-2">
AI Data Agent
</p>
<h2 className="text-2xl font-semibold text-slate-800 mb-2">
Selamat datang di Data Eyond
</h2>
<p className="text-sm text-slate-500 max-w-md">
Ikuti alur dua fase berikut untuk mendapatkan hasil analisis data yang akurat dan terstruktur
</p>
</div>
{/* Flow cards */}
<div className="w-full flex flex-col sm:flex-row items-stretch gap-3">
{/* Card 1 — Interview */}
<div className="flex-1 bg-white border border-emerald-100 rounded-2xl p-5 shadow-sm flex flex-col gap-3 relative">
{/* Step badge */}
<span className="absolute -top-2.5 left-4 bg-emerald-600 text-white text-[10px] font-semibold px-2.5 py-0.5 rounded-full">
Fase 1
</span>
<div className="flex items-center gap-2.5 mt-1">
<div className="w-9 h-9 rounded-xl bg-emerald-50 flex items-center justify-center flex-shrink-0">
<BrainCircuit className="w-5 h-5 text-emerald-600" />
</div>
<div>
<h3 className="text-sm font-semibold text-slate-800">Interview</h3>
<p className="text-xs text-emerald-600">Business Understanding</p>
</div>
</div>
<p className="text-xs text-slate-500 leading-relaxed">
AI agent akan menggali pemahaman tentang konteks bisnis, problem statement, dan success metrics sebelum memulai analisis.
</p>
<ul className="space-y-1.5">
{[
{ icon: <BrainCircuit className="w-3 h-3" />, text: "Framework CRISP-DM" },
{ icon: <FileText className="w-3 h-3" />, text: "Mode teks" },
{ icon: <Mic className="w-3 h-3" />, text: "Mode audio (voice)" },
].map((item, i) => (
<li key={i} className="flex items-center gap-2 text-xs text-slate-500">
<span className="text-emerald-500">{item.icon}</span>
{item.text}
</li>
))}
</ul>
</div>
{/* Arrow */}
<div className="flex items-center justify-center flex-shrink-0 text-slate-300 rotate-90 sm:rotate-0">
<ArrowRight className="w-5 h-5" />
</div>
{/* Card 2 — Analytics */}
<div className="flex-1 bg-white border border-blue-100 rounded-2xl p-5 shadow-sm flex flex-col gap-3 relative">
<span className="absolute -top-2.5 left-4 bg-blue-600 text-white text-[10px] font-semibold px-2.5 py-0.5 rounded-full">
Fase 2
</span>
<div className="flex items-center gap-2.5 mt-1">
<div className="w-9 h-9 rounded-xl bg-blue-50 flex items-center justify-center flex-shrink-0">
<BarChart2 className="w-5 h-5 text-blue-600" />
</div>
<div>
<h3 className="text-sm font-semibold text-slate-800">Analytics</h3>
<p className="text-xs text-blue-600">Deep Research & Report</p>
</div>
</div>
<p className="text-xs text-slate-500 leading-relaxed">
Tanya jawab interaktif dengan AI agent. Secara paralel, agent menyusun draft report analisis yang dapat diekspor sebagai PDF.
</p>
<ul className="space-y-1.5">
{[
{ text: "Tanya jawab berbasis konteks interview" },
{ text: "Agent menyusun report secara paralel" },
{ text: "Export report sebagai PDF" },
].map((item, i) => (
<li key={i} className="flex items-center gap-2 text-xs text-slate-500">
<span className="w-1.5 h-1.5 rounded-full bg-blue-400 flex-shrink-0" />
{item.text}
</li>
))}
</ul>
</div>
</div>
{/* CTA */}
<div className="flex flex-col items-center gap-2">
<button
onClick={handleStart}
disabled={isStarting}
className="flex items-center gap-2 bg-emerald-600 hover:bg-emerald-700 disabled:bg-emerald-400 text-white px-6 py-3 rounded-xl font-medium text-sm transition-all duration-200 hover:scale-105 disabled:scale-100 shadow-md shadow-emerald-200"
>
{isStarting ? (
<>
<Loader2 className="w-4 h-4 animate-spin" />
Memulai sesi…
</>
) : (
<>
Mulai Sesi Baru
<ChevronRight className="w-4 h-4" />
</>
)}
</button>
<p className="text-[11px] text-slate-400">
Anda bisa melewati fase interview kapan saja lewat toggle di atas
</p>
</div>
</div>
</div>
);
}