| import { useEffect, useState } from 'react'; | |
| import { databases, Query, CONFIG } from '../appwrite'; | |
| import SectionList from './SectionList'; | |
| export default function ModulePage({ moduleCode }) { | |
| const [module, setModule] = useState(null); | |
| const [sections, setSections] = useState([]); | |
| const [loading, setLoading] = useState(true); | |
| const fetchModuleAndSections = async () => { | |
| try { | |
| const modulesRes = await databases.listDocuments( | |
| CONFIG.databaseId, | |
| CONFIG.modulesCollectionId, | |
| [Query.equal('code', moduleCode)] | |
| ); | |
| if (modulesRes.total === 0) { | |
| setLoading(false); | |
| return; | |
| } | |
| const mod = modulesRes.documents[0]; | |
| setModule(mod); | |
| const sectionsRes = await databases.listDocuments( | |
| CONFIG.databaseId, | |
| CONFIG.sectionsCollectionId, | |
| [Query.equal('moduleId', mod.$id), Query.orderAsc('order')] | |
| ); | |
| setSections(sectionsRes.documents); | |
| } catch (err) { | |
| console.error('Erreur fetchModuleAndSections:', err); | |
| } finally { | |
| setLoading(false); | |
| } | |
| }; | |
| useEffect(() => { | |
| fetchModuleAndSections(); | |
| }, [moduleCode]); | |
| if (loading) return <div className="loading">Chargement...</div>; | |
| if (!module) return <div className="error">Module introuvable.</div>; | |
| return ( | |
| <div className="module-page"> | |
| <section className="hero-section"> | |
| <h1>{module.title}</h1> | |
| <p className="hero-meta">{module.year}A - {module.semester}</p> | |
| <p className="hero-description">{module.description}</p> | |
| </section> | |
| <SectionList module={module} sections={sections} /> | |
| </div> | |
| ); | |
| } |