|
1 | 1 | import React, { useState, useEffect } from "react"; |
2 | 2 | import { getConfig } from "@edx/frontend-platform"; |
3 | 3 | import { getAuthenticatedHttpClient } from "@edx/frontend-platform/auth"; |
| 4 | +import { Card, Container, Row, Col, Badge, Collapsible } from "@openedx/paragon"; |
4 | 5 |
|
5 | 6 | const CourseList = ({ courseListData }) => { |
6 | 7 | const [archivedCourses, setArchivedCourses] = useState(new Set()); |
7 | 8 |
|
| 9 | + // Safety check for courseListData |
| 10 | + if (!courseListData || !courseListData.visibleList) { |
| 11 | + console.log("DEBUG: courseListData not available yet"); |
| 12 | + return <div>Loading courses...</div>; |
| 13 | + } |
| 14 | + |
8 | 15 | // Extract the "visibleList" |
9 | 16 | const courses = courseListData.visibleList; |
10 | 17 |
|
@@ -82,29 +89,50 @@ const CourseList = ({ courseListData }) => { |
82 | 89 | console.log("DEBUG: Active courses count:", activeCourses.length); |
83 | 90 | console.log("DEBUG: Archived courses count:", archivedCoursesList.length); |
84 | 91 |
|
85 | | - const renderCourse = (courseData) => ( |
86 | | - <div key={courseData.cardId}> |
87 | | - <h2> |
88 | | - {courseData.course.courseName} |
89 | | - <img |
| 92 | + const renderCourse = (courseData, isArchived = false) => ( |
| 93 | + <Col key={courseData.cardId} xs={12} sm={6} md={4} lg={3} className="mb-4"> |
| 94 | + <Card> |
| 95 | + <Card.ImageCap |
90 | 96 | src={getConfig().LMS_BASE_URL + courseData.course.bannerImgSrc} |
91 | 97 | alt={courseData.course.courseName} |
92 | | - ></img> |
93 | | - </h2> |
94 | | - </div> |
| 98 | + /> |
| 99 | + <Card.Header |
| 100 | + title={courseData.course.courseName} |
| 101 | + subtitle={courseData.course.courseNumber} |
| 102 | + actions={isArchived && <Badge variant="secondary">Archived</Badge>} |
| 103 | + /> |
| 104 | + <Card.Section> |
| 105 | + {courseData.course.shortDescription && ( |
| 106 | + <p className="text-muted small"> |
| 107 | + {courseData.course.shortDescription} |
| 108 | + </p> |
| 109 | + )} |
| 110 | + </Card.Section> |
| 111 | + </Card> |
| 112 | + </Col> |
95 | 113 | ); |
96 | 114 |
|
97 | 115 | return ( |
98 | | - <div> |
99 | | - {activeCourses.map(renderCourse)} |
| 116 | + <Container fluid> |
| 117 | + <Row> |
| 118 | + {activeCourses.map((courseData) => renderCourse(courseData, false))} |
| 119 | + </Row> |
100 | 120 |
|
101 | 121 | {archivedCoursesList.length > 0 && ( |
102 | | - <div> |
103 | | - <h2>Archived Courses</h2> |
104 | | - {archivedCoursesList.map(renderCourse)} |
| 122 | + <div className="mt-5"> |
| 123 | + <Collapsible |
| 124 | + title={`Archived Courses (${archivedCoursesList.length})`} |
| 125 | + defaultOpen={false} |
| 126 | + > |
| 127 | + <Row> |
| 128 | + {archivedCoursesList.map((courseData) => |
| 129 | + renderCourse(courseData, true), |
| 130 | + )} |
| 131 | + </Row> |
| 132 | + </Collapsible> |
105 | 133 | </div> |
106 | 134 | )} |
107 | | - </div> |
| 135 | + </Container> |
108 | 136 | ); |
109 | 137 | }; |
110 | 138 |
|
|
0 commit comments