math-relationship-analyzer / src /components /CompatibilityAnalyzer.jsx
Moaaz2os's picture
Update src/components/CompatibilityAnalyzer.jsx
66b01a6 verified
import { useState, useEffect } from "react";
import useAnalyzer from "../hooks/useAnalyzer";
import { FIELDS } from "../data/responses";
export default function CompatibilityAnalyzer() {
const [fieldA, setFieldA] = useState(FIELDS[0].id);
const [fieldB, setFieldB] = useState(FIELDS[1].id);
const { isAnalyzing, compatResult, analyzeCompat } = useAnalyzer();
const [celebrate, setCelebrate] = useState(false);
useEffect(() => {
if (compatResult && compatResult.score >= 90 && !isAnalyzing) {
setCelebrate(true);
const timer = setTimeout(() => setCelebrate(false), 4000);
return () => clearTimeout(timer);
}
}, [compatResult, isAnalyzing]);
return (
<div className="w-full relative" style={{ animation: "fadeUp 0.4s ease both" }}>
{celebrate && (
<div className="absolute inset-0 pointer-events-none overflow-hidden z-50">
{[...Array(20)].map((_, i) => {
const randomX = Math.random() * 100;
const randomDelay = Math.random() * 2;
const randomColor = compatResult.color || '#22c55e';
return (
<div
key={i}
className="absolute w-2 h-4 rounded-sm opacity-80 animate-confetti-fall"
style={{
left: `${randomX}%`,
top: `-20px`,
backgroundColor: i % 2 === 0 ? randomColor : '#ffffff',
animationDelay: `${randomDelay}s`,
transform: `rotate(${Math.random() * 360}deg)`
}}
/>
);
})}
</div>
)}
<div className="glass-card mb-6">
<label className="block text-[11px] font-mono text-neutral-500 uppercase tracking-widest mb-4">
[02] نظام فحص التوافق الثنائي
</label>
<div className="flex flex-col sm:flex-row gap-4 items-center mb-6">
<div className="w-full relative">
<select
value={fieldA}
onChange={(e) => setFieldA(e.target.value)}
className="w-full p-3 bg-white/[0.02] text-white border border-white/10 rounded-xl font-medium text-sm outline-none appearance-none focus:border-white/20 transition-colors text-center sm:text-right"
>
{FIELDS.map(f => <option key={f.id} value={f.id} className="bg-neutral-900">{f.label}</option>)}
</select>
</div>
{/* القلب النابض الاحترافي بين التخصصين */}
<div className="flex items-center justify-center px-2">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="currentColor"
className="w-6 h-6 text-rose-500/80 drop-shadow-[0_0_10px_rgba(244,63,94,0.5)] animate-real-beat"
>
<path d="M11.645 20.91l-.007-.003-.022-.012a15.247 15.247 0 01-.383-.218 25.18 25.18 0 01-4.244-3.17C4.688 15.36 2.25 12.174 2.25 8.25 2.25 5.322 4.714 3 7.688 3A5.5 5.5 0 0112 5.052 5.5 5.5 0 0116.313 3c2.973 0 5.437 2.322 5.437 5.25 0 3.925-2.438 7.111-4.739 9.256a25.175 25.175 0 01-4.244 3.17 15.247 15.247 0 01-.383.219l-.022.012-.007.004-.003.001a.752.752 0 01-.704 0l-.003-.001z" />
</svg>
</div>
<div className="w-full relative">
<select
value={fieldB}
onChange={(e) => setFieldB(e.target.value)}
className="w-full p-3 bg-white/[0.02] text-white border border-white/10 rounded-xl font-medium text-sm outline-none appearance-none focus:border-white/20 transition-colors text-center sm:text-right"
>
{FIELDS.map(f => <option key={f.id} value={f.id} className="bg-neutral-900">{f.label}</option>)}
</select>
</div>
</div>
<button
className="w-full py-3.5 bg-white text-black font-bold rounded-xl text-sm transition-all hover:bg-neutral-200 active:scale-[0.99] disabled:opacity-40"
onClick={() => analyzeCompat(fieldA, fieldB)}
disabled={isAnalyzing}
>
{isAnalyzing ? "جاري احتساب النِسَب..." : "تحليل مؤشر التوافق"}
</button>
</div>
{compatResult && !isAnalyzing && (
<div
className={`glass-card text-center overflow-hidden transition-all duration-500 ${
compatResult.score >= 90 ? "animate-heart-pulse border-emerald-500/30" : ""
}`}
style={{ animation: "fadeUp 0.5s ease both" }}
>
<div
className={`absolute -top-24 left-1/2 -translate-x-1/2 w-42 h-42 rounded-full blur-[60px] pointer-events-none transition-all duration-1000 ${
compatResult.score >= 90 ? "opacity-40 scale-125 animate-glow-pulse" : "opacity-25"
}`}
style={{ background: compatResult.color || '#ffffff' }}
/>
<div className="relative z-10">
<div className="text-6xl font-extrabold tracking-tight mb-1 font-mono" style={{ color: compatResult.color || '#fff' }}>
{compatResult.score}%
</div>
{/* التعديل هنا: تغيير النص إلى نسبة التوافق */}
<div className="text-xs font-bold text-neutral-400 mb-6 font-arabic">
نسبة التوافق
</div>
<p className="text-base font-medium text-neutral-200 mb-6 px-4 leading-relaxed">
"{compatResult.joke}"
</p>
<div className="inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-white/[0.03] border border-white/5 text-xs text-neutral-300">
<span
className={`w-1.5 h-1.5 rounded-full ${compatResult.score >= 90 ? "animate-ping" : ""}`}
style={{ background: compatResult.color || '#fff' }}
/>
<span>{compatResult.verdict}</span>
</div>
</div>
</div>
)}
</div>
);
}