import { useState, useMemo } from "react"; import { useLang } from "@/contexts/LanguageContext"; import SEOHead, { breadcrumbSchema } from "@/components/SEOHead"; import { Button } from "@/components/ui/button"; import { motion, AnimatePresence } from "framer-motion"; import { Link } from "wouter"; import { Search, MapPin, BookOpen, Clock, Filter, GraduationCap, ArrowLeft, ArrowRight, X, ExternalLink, Eye, FlaskConical, Globe, Calendar, Award, Microscope } from "lucide-react"; import { scholarships as scholarshipData, getScholarshipStatus, getStatusLabelAr, getStatusLabelEn, getStatusColor } from "@/data/scholarshipData"; import { conferences, type Conference } from "@/data/conferenceData"; const fadeUp = { hidden: { opacity: 0, y: 30 }, visible: (i: number) => ({ opacity: 1, y: 0, transition: { delay: i * 0.08, duration: 0.5, ease: [0, 0, 0.2, 1] as const } }), }; const countries = ["all", "🇹🇷", "🇬🇧", "🇩🇪", "🇺🇸", "🇲🇾", "🇸🇦", "🇪🇬", "🇭🇺", "🇯🇵", "🇰🇷", "🇶🇦"]; const levels = ["all", "bachelor", "master", "phd"]; const fundings = ["all", "full", "partial"]; type ActiveTab = "scholarships" | "conferences"; type ConferenceType = "all" | "conference" | "grant" | "fellowship"; export default function Scholarships() { const { t, lang } = useLang(); const Arrow = lang === "ar" ? ArrowLeft : ArrowRight; const [activeTab, setActiveTab] = useState("scholarships"); const [searchQuery, setSearchQuery] = useState(""); const [countryFilter, setCountryFilter] = useState("all"); const [levelFilter, setLevelFilter] = useState("all"); const [fundingFilter, setFundingFilter] = useState("all"); const [statusFilter, setStatusFilter] = useState<"all" | "closing" | "rolling">("all"); const [showFilters, setShowFilters] = useState(false); const [confTypeFilter, setConfTypeFilter] = useState("all"); // Compute dynamic status for each scholarship const scholarshipsWithStatus = useMemo(() => { return scholarshipData.map(s => ({ ...s, computedStatus: getScholarshipStatus(s.deadline), })); }, []); const filteredScholarships = useMemo(() => { return scholarshipsWithStatus .filter((s) => { const title = lang === "ar" ? s.titleAr : s.titleEn; if (searchQuery && !title.toLowerCase().includes(searchQuery.toLowerCase())) return false; if (countryFilter !== "all" && s.flag !== countryFilter) return false; if (levelFilter !== "all") { const lvl = (lang === "ar" ? s.levelAr : s.levelEn).toLowerCase(); if (levelFilter === "bachelor" && !lvl.includes("bachelor") && !lvl.includes("بكالوريوس")) return false; if (levelFilter === "master" && !lvl.includes("master") && !lvl.includes("ماجستير")) return false; if (levelFilter === "phd" && !lvl.includes("phd") && !lvl.includes("دكتوراه")) return false; } if (fundingFilter !== "all") { const fund = (lang === "ar" ? s.fundingAr : s.fundingEn).toLowerCase(); if (fundingFilter === "full" && !fund.includes("fully") && !fund.includes("بالكامل")) return false; if (fundingFilter === "partial" && !fund.includes("partial") && !fund.includes("جزئي")) return false; } if (statusFilter === "closing" && s.computedStatus !== "closing") return false; if (statusFilter === "rolling" && s.deadline !== "rolling") return false; return true; }) .sort((a, b) => { const order = { closing: 0, open: 1, upcoming: 2, closed: 3 }; return (order[a.computedStatus] ?? 3) - (order[b.computedStatus] ?? 3); }); }, [searchQuery, countryFilter, levelFilter, fundingFilter, statusFilter, lang, scholarshipsWithStatus]); const filteredConferences = useMemo(() => { return conferences.filter((c) => { const title = lang === "ar" ? c.titleAr : c.titleEn; if (searchQuery && !title.toLowerCase().includes(searchQuery.toLowerCase())) return false; if (confTypeFilter !== "all" && c.type !== confTypeFilter) return false; return true; }); }, [searchQuery, confTypeFilter, lang]); const statusColor = (status: string) => getStatusColor(status as any); const statusLabel = (status: string) => lang === "ar" ? getStatusLabelAr(status as any) : getStatusLabelEn(status as any); const confTypeLabel = (type: string) => { if (type === "conference") return t("مؤتمر", "Conference"); if (type === "grant") return t("منحة بحثية", "Research Grant"); return t("زمالة", "Fellowship"); }; const confTypeIcon = (type: string) => { if (type === "conference") return ; if (type === "grant") return ; return ; }; const confTypeBg = (type: string) => { if (type === "conference") return "bg-purple-50 text-purple-700"; if (type === "grant") return "bg-emerald-50 text-emerald-700"; return "bg-amber-50 text-amber-700"; }; const hasActiveFilters = countryFilter !== "all" || levelFilter !== "all" || fundingFilter !== "all" || statusFilter !== "all"; const closingCount = scholarshipsWithStatus.filter((s) => s.computedStatus === "closing").length; const rollingCount = scholarshipsWithStatus.filter((s) => s.deadline === "rolling").length; return (
{/* Header */}
{t("قاعدة بيانات المنح والمؤتمرات", "Scholarships & Conferences Database")} {t("المنح والفرص البحثية", "Scholarships & Research Opportunities")} {t( "تصفح أحدث المنح الدراسية والمؤتمرات العلمية والفرص البحثية المتاحة للطلاب والباحثين", "Browse the latest scholarships, scientific conferences, and research opportunities for students and researchers." )} {/* Tab Switcher */}
{/* Search & Filters */}
setSearchQuery(e.target.value)} placeholder={activeTab === "scholarships" ? t("ابحث عن منحة...", "Search scholarships...") : t("ابحث عن مؤتمر أو فرصة بحثية...", "Search conferences & research...")} className="w-full ps-12 pe-4 py-3 rounded-xl border border-border bg-white text-sm focus:outline-none focus:ring-2 focus:ring-gold/50 focus:border-gold" />
{activeTab === "scholarships" && ( )} {activeTab === "conferences" && (
{(["all", "conference", "grant", "fellowship"] as ConferenceType[]).map((type) => ( ))}
)}
{activeTab === "scholarships" && (
{statusFilter !== "all" && ( )}
)} {showFilters && activeTab === "scholarships" && (
{hasActiveFilters && (
)}
)}
{/* Results */}
{activeTab === "scholarships" ? (
{t(`عرض ${filteredScholarships.length} منحة`, `Showing ${filteredScholarships.length} scholarships`)}
{filteredScholarships.length === 0 ? (

{t("لا توجد نتائج", "No Results")}

{t("جرب تغيير معايير البحث", "Try changing your search criteria")}

) : (
{filteredScholarships.map((s, i) => (
{statusLabel(s.computedStatus)} {lang === "ar" ? s.fundingAr : s.fundingEn}
{s.flag}
{s.source === "ministry" && (
📢 {t("إعلان وزارة التعليم العالي", "Ministry of Higher Education")}
)}

{lang === "ar" ? s.titleAr : s.titleEn}

{lang === "ar" ? s.descAr : s.descEn}

{lang === "ar" ? s.countryAr : s.countryEn}
{lang === "ar" ? s.levelAr : s.levelEn}
{lang === "ar" ? s.fieldAr : s.fieldEn}
{s.deadline === "rolling" ? t("التقديم متدرج", "Rolling basis") : s.deadline}
))}
)}
) : (
{t(`عرض ${filteredConferences.length} فرصة`, `Showing ${filteredConferences.length} opportunities`)}
{filteredConferences.length === 0 ? (

{t("لا توجد نتائج", "No Results")}

{t("جرب تغيير معايير البحث", "Try changing your search criteria")}

) : (
{filteredConferences.map((c, i) => (
{/* Conference Image */}
{lang
{confTypeIcon(c.type)} {confTypeLabel(c.type)} {statusLabel(c.status)}

{lang === "ar" ? c.titleAr : c.titleEn}

{lang === "ar" ? c.descAr : c.descEn}

{c.flag} {lang === "ar" ? c.locationAr : c.locationEn}
{lang === "ar" ? c.dateAr : c.dateEn}
{lang === "ar" ? c.fieldAr : c.fieldEn}
{lang === "ar" ? c.fundingAr : c.fundingEn}
{t("آخر موعد:", "Deadline:")} {c.deadline}
))}
)} {/* Info Banner */}

{t("هل لديك مؤتمر أو فرصة بحثية؟", "Have a conference or research opportunity?")}

{t( "إذا كنت تعرف مؤتمراً علمياً أو فرصة بحثية متاحة، تواصل معنا لإضافتها إلى القائمة", "If you know of a scientific conference or research opportunity, contact us to add it to the list" )}

)}
{/* Internal Links Section */}

{t("صفحات مفيدة", "Useful Pages")}

{t("المدونة", "Blog")}
{t("خدماتنا", "Our Services")}
{t("تحليل التخصص", "Major Analysis")}
{t("أسئلة شائعة", "FAQ")}
); }