File size: 1,654 Bytes
7cc7aef
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a78483d
7cc7aef
a78483d
 
 
7cc7aef
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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>
  );
}