EDU_Recommender / client /src /components /ContentBrowser.jsx
Omarrran's picture
Add EduRecommender HuggingFace Spaces app
5bd3663
/**
* Expandable content browser — shows all 10 educational items.
*/
import React, { useState } from "react";
import styles from "./ContentBrowser.module.css";
const FORMAT_ICONS = { video: "\uD83C\uDFAC", slides: "\uD83D\uDCCA", lecture: "\uD83C\uDFA4" };
const DIFF_COLORS = { Beginner: "#34d399", Intermediate: "#fbbf24", Advanced: "#f87171" };
export default function ContentBrowser({ items }) {
const [open, setOpen] = useState(false);
if (!items.length) return null;
return (
<section className={styles.section}>
<button className={styles.toggle} onClick={() => setOpen((o) => !o)}>
<span>{open ? "\u25BC" : "\u25B6"}</span>
<span>Browse all available content ({items.length})</span>
</button>
{open && (
<div className={styles.list}>
{items.map((item) => (
<article key={item.id} className={styles.item}>
<h4 className={styles.itemTitle}>
{item.id}. {item.title}
</h4>
<div className={styles.pills}>
<span className={styles.pill}>
{FORMAT_ICONS[item.format] || "\uD83D\uDCC4"} {item.format}
</span>
<span
className={styles.pill}
style={{ borderLeft: `3px solid ${DIFF_COLORS[item.difficulty] || "#888"}` }}
>
{item.difficulty}
</span>
<span className={styles.pill}>{item.duration_minutes} min</span>
</div>
<p className={styles.desc}>{item.description}</p>
<div className={styles.tags}>
{item.tags.map((t) => (
<span key={t} className={styles.tag}>
{t}
</span>
))}
</div>
</article>
))}
</div>
)}
</section>
);
}