Manara / src /components /Library.tsx
Kebe77's picture
Create src/components/Library.tsx
a648fd4 verified
Raw
History Blame Contribute Delete
4.01 kB
import React, { useState } from 'react';
import { Book, Search, Filter, Plus, Info, CheckCircle2 } from 'lucide-react';
export const Library = ({ sources, onAddToProject, activeProjectId, projects, t }) => {
const [searchTerm, setSearchTerm] = useState('');
const [filter, setFilter] = useState('all');
const filteredSources = sources.filter(source => {
const matchesSearch = source.title.toLowerCase().includes(searchTerm.toLowerCase()) ||
source.author.toLowerCase().includes(searchTerm.toLowerCase());
const matchesFilter = filter === 'all' || source.category === filter;
return matchesSearch && matchesFilter;
});
return (
<div className="space-y-8">
{/* Header & Search */}
<div className="flex flex-col md:flex-row md:items-center justify-between gap-4 bg-white p-6 rounded-2xl shadow-sm border border-slate-100">
<div>
<h2 className="text-2xl font-bold text-slate-900">{t.navLibrary}</h2>
<p className="text-slate-500 text-sm">تصفح المصادر والمراجع المتاحة في المكتبة</p>
</div>
<div className="flex gap-3">
<div className="relative">
<Search className="w-4 h-4 absolute left-3 top-1/2 -translate-y-1/2 text-slate-400" />
<input
type="text"
placeholder="بحث في الكتب..."
className="pl-10 pr-4 py-2 bg-slate-50 border border-slate-200 rounded-xl text-sm focus:ring-2 focus:ring-emerald-500 outline-none w-64"
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
/>
</div>
<select
className="bg-slate-50 border border-slate-200 rounded-xl px-4 py-2 text-sm focus:ring-2 focus:ring-emerald-500 outline-none"
value={filter}
onChange={(e) => setFilter(e.target.value)}
>
<option value="all">كل التصنيفات</option>
<option value="khidma">الخدمة والآداب</option>
<option value="tawhid">التوحيد</option>
<option value="tasawwuf">التصوف العرفاني</option>
</select>
</div>
</div>
{/* Grid of Books */}
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
{filteredSources.map((source) => (
<div key={source.id} className="bg-white p-6 rounded-2xl border border-slate-200 hover:border-emerald-500 transition-all group shadow-sm">
<div className="flex justify-between items-start mb-4">
<div className="p-3 bg-emerald-50 rounded-lg group-hover:bg-emerald-600 transition-colors">
<Book className="w-6 h-6 text-emerald-700 group-hover:text-white" />
</div>
<span className="text-[10px] font-bold uppercase tracking-wider bg-slate-100 px-2 py-1 rounded text-slate-500">
{source.category}
</span>
</div>
<h3 className="text-lg font-bold text-slate-900 mb-1">{source.title}</h3>
<p className="text-emerald-700 text-sm font-medium mb-4">{source.author}</p>
<div className="flex items-center justify-between pt-4 border-t border-slate-50">
<button className="flex items-center gap-1 text-slate-400 hover:text-emerald-600 transition">
<Info className="w-4 h-4" />
<span className="text-xs">التفاصيل</span>
</button>
<button
onClick={() => onAddToProject(source.id)}
className="flex items-center gap-2 bg-slate-900 text-white px-4 py-2 rounded-lg text-xs hover:bg-emerald-700 transition"
>
<Plus className="w-3 h-3" />
إضافة للمشروع
</button>
</div>
</div>
))}
</div>
</div>
);
};