@openedx/plugin-sample 3.0.1 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -21
- package/dist/plugin.js +51 -155
- package/dist/plugin.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -90,33 +90,35 @@ const courses = courseListData.visibleList;
|
|
|
90
90
|
|
|
91
91
|
**Slot Props**: Each slot provides specific data. For CourseListSlot, see the [slot documentation](https://github.com/openedx/frontend-app-learner-dashboard/tree/master/src/plugin-slots/CourseListSlot#plugin-props).
|
|
92
92
|
|
|
93
|
-
#### 2. Backend
|
|
93
|
+
#### 2. Backend Data via the Filter Pipeline
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const response = await client.get(
|
|
102
|
-
`${lmsBaseUrl}/sample-plugin/api/v1/course-archive-status/`,
|
|
103
|
-
{ params: { is_archived: true } }
|
|
104
|
-
);
|
|
105
|
-
|
|
106
|
-
const archivedCourseIds = new Set(
|
|
107
|
-
response.data.results.map((item) => item.course_id)
|
|
108
|
-
);
|
|
109
|
-
setArchivedCourses(archivedCourseIds);
|
|
110
|
-
};
|
|
95
|
+
Rather than firing an extra GET to `course-archive-status/` on every dashboard
|
|
96
|
+
load, the initial archive state is read directly off the slot props. The backend
|
|
97
|
+
plugin uses an Open edX filter (see [`pipeline.py`](../backend-plugin-sample/src/openedx_plugin_sample/pipeline.py))
|
|
98
|
+
to inject `isArchivedByLearner` into each courseRun in the Learner Home `/init`
|
|
99
|
+
API response, so it arrives alongside the rest of the course data:
|
|
111
100
|
|
|
112
|
-
|
|
113
|
-
|
|
101
|
+
```jsx
|
|
102
|
+
const [archivedCourses, setArchivedCourses] = useState(() => {
|
|
103
|
+
const initial = new Set();
|
|
104
|
+
(courseListData?.visibleList || []).forEach((courseData) => {
|
|
105
|
+
if (courseData.courseRun?.isArchivedByLearner) {
|
|
106
|
+
initial.add(courseData.courseRun.courseId);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
return initial;
|
|
110
|
+
});
|
|
114
111
|
```
|
|
115
112
|
|
|
113
|
+
**Why this pattern**: One fewer round-trip per dashboard load, and the archive
|
|
114
|
+
state is consistent with the rest of the course data from the same response.
|
|
115
|
+
The REST API is still used for writes (archive/unarchive) — see the toggle
|
|
116
|
+
handler below.
|
|
117
|
+
|
|
116
118
|
**Key Patterns:**
|
|
117
|
-
- **
|
|
119
|
+
- **Filter-injected data**: Read `courseRun.isArchivedByLearner` straight from slot props
|
|
120
|
+
- **Authentication** (for writes): `getAuthenticatedHttpClient()` handles Open edX auth
|
|
118
121
|
- **Configuration**: `getConfig().LMS_BASE_URL` gets platform URLs
|
|
119
|
-
- **Error Handling**: Try/catch blocks for API failures
|
|
120
122
|
|
|
121
123
|
#### 3. Open edX UI Components
|
|
122
124
|
|
package/dist/plugin.js
CHANGED
|
@@ -11,7 +11,7 @@ var _auth = require("@edx/frontend-platform/auth");
|
|
|
11
11
|
var _paragon = require("@openedx/paragon");
|
|
12
12
|
var _icons = require("@openedx/paragon/icons");
|
|
13
13
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
14
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var
|
|
14
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
|
|
15
15
|
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
16
16
|
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
17
17
|
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
@@ -24,7 +24,21 @@ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" !=
|
|
|
24
24
|
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
25
25
|
var CourseList = function CourseList(_ref) {
|
|
26
26
|
var courseListData = _ref.courseListData;
|
|
27
|
-
|
|
27
|
+
// Seed the archived-course set from `courseRun.isArchivedByLearner`, which the
|
|
28
|
+
// backend plugin's filter pipeline injects into each courseRun in the Learner
|
|
29
|
+
// Home /init API response. This avoids a separate GET to course-archive-status
|
|
30
|
+
// on every dashboard load. Local toggles below keep this set in sync without
|
|
31
|
+
// a refetch.
|
|
32
|
+
var _useState = (0, _react.useState)(function () {
|
|
33
|
+
var initial = new Set();
|
|
34
|
+
((courseListData === null || courseListData === void 0 ? void 0 : courseListData.visibleList) || []).forEach(function (courseData) {
|
|
35
|
+
var _courseData$courseRun;
|
|
36
|
+
if ((_courseData$courseRun = courseData.courseRun) !== null && _courseData$courseRun !== void 0 && _courseData$courseRun.isArchivedByLearner) {
|
|
37
|
+
initial.add(courseData.courseRun.courseId);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return initial;
|
|
41
|
+
}),
|
|
28
42
|
_useState2 = _slicedToArray(_useState, 2),
|
|
29
43
|
archivedCourses = _useState2[0],
|
|
30
44
|
setArchivedCourses = _useState2[1];
|
|
@@ -32,208 +46,90 @@ var CourseList = function CourseList(_ref) {
|
|
|
32
46
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
33
47
|
loadingStates = _useState4[0],
|
|
34
48
|
setLoadingStates = _useState4[1];
|
|
35
|
-
|
|
36
|
-
// Safety check for courseListData
|
|
37
49
|
if (!courseListData || !courseListData.visibleList) {
|
|
38
|
-
console.log("DEBUG: courseListData not available yet");
|
|
39
50
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
40
51
|
children: "Loading courses..."
|
|
41
52
|
});
|
|
42
53
|
}
|
|
43
|
-
|
|
44
|
-
// Extract the "visibleList"
|
|
45
54
|
var courses = courseListData.visibleList;
|
|
46
|
-
|
|
47
|
-
// Log the full course data structure for debugging
|
|
48
|
-
console.log("DEBUG: Full courseListData structure:", courseListData);
|
|
49
|
-
console.log("DEBUG: First course data object:", courses === null || courses === void 0 ? void 0 : courses[0]);
|
|
50
|
-
(0, _react.useEffect)(function () {
|
|
51
|
-
var fetchArchivedCourses = /*#__PURE__*/function () {
|
|
52
|
-
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
53
|
-
var client, lmsBaseUrl, response, archivedCourseIds, _t;
|
|
54
|
-
return _regenerator().w(function (_context) {
|
|
55
|
-
while (1) switch (_context.p = _context.n) {
|
|
56
|
-
case 0:
|
|
57
|
-
_context.p = 0;
|
|
58
|
-
client = (0, _auth.getAuthenticatedHttpClient)();
|
|
59
|
-
lmsBaseUrl = (0, _frontendPlatform.getConfig)().LMS_BASE_URL;
|
|
60
|
-
console.log("DEBUG: Fetching archived courses from:", "".concat(lmsBaseUrl, "/sample-plugin/api/v1/course-archive-status/"));
|
|
61
|
-
_context.n = 1;
|
|
62
|
-
return client.get("".concat(lmsBaseUrl, "/sample-plugin/api/v1/course-archive-status/"), {
|
|
63
|
-
params: {
|
|
64
|
-
is_archived: true
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
case 1:
|
|
68
|
-
response = _context.v;
|
|
69
|
-
console.log("DEBUG: Archived courses API response:", response.data);
|
|
70
|
-
archivedCourseIds = new Set(response.data.results.map(function (item) {
|
|
71
|
-
return item.course_id;
|
|
72
|
-
}));
|
|
73
|
-
console.log("DEBUG: Archived course IDs from API:", Array.from(archivedCourseIds));
|
|
74
|
-
setArchivedCourses(archivedCourseIds);
|
|
75
|
-
_context.n = 3;
|
|
76
|
-
break;
|
|
77
|
-
case 2:
|
|
78
|
-
_context.p = 2;
|
|
79
|
-
_t = _context.v;
|
|
80
|
-
console.error("Failed to fetch archived courses:", _t);
|
|
81
|
-
case 3:
|
|
82
|
-
return _context.a(2);
|
|
83
|
-
}
|
|
84
|
-
}, _callee, null, [[0, 2]]);
|
|
85
|
-
}));
|
|
86
|
-
return function fetchArchivedCourses() {
|
|
87
|
-
return _ref2.apply(this, arguments);
|
|
88
|
-
};
|
|
89
|
-
}();
|
|
90
|
-
fetchArchivedCourses();
|
|
91
|
-
}, []);
|
|
92
|
-
|
|
93
|
-
// Log course IDs we're trying to match against
|
|
94
|
-
console.log("DEBUG: Course IDs from course data:");
|
|
95
|
-
courses.forEach(function (courseData, index) {
|
|
96
|
-
var _courseData$courseRun;
|
|
97
|
-
console.log("Course ".concat(index, ":"), {
|
|
98
|
-
cardId: courseData.cardId,
|
|
99
|
-
"courseRun.courseId": (_courseData$courseRun = courseData.courseRun) === null || _courseData$courseRun === void 0 ? void 0 : _courseData$courseRun.courseId,
|
|
100
|
-
"courseRun object keys": Object.keys(courseData.courseRun || {}),
|
|
101
|
-
"full courseRun object": courseData.courseRun
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
console.log("DEBUG: Archived course IDs to match:", Array.from(archivedCourses));
|
|
105
|
-
|
|
106
|
-
// Separate courses into active and archived
|
|
107
55
|
var activeCourses = courses.filter(function (courseData) {
|
|
108
|
-
var _courseData$courseRun2
|
|
109
|
-
|
|
110
|
-
var isArchived = archivedCourses.has(courseId);
|
|
111
|
-
console.log("DEBUG: Course \"".concat((_courseData$course = courseData.course) === null || _courseData$course === void 0 ? void 0 : _courseData$course.courseName, "\" (ID: ").concat(courseId, ") - archived: ").concat(isArchived));
|
|
112
|
-
return !isArchived;
|
|
56
|
+
var _courseData$courseRun2;
|
|
57
|
+
return !archivedCourses.has((_courseData$courseRun2 = courseData.courseRun) === null || _courseData$courseRun2 === void 0 ? void 0 : _courseData$courseRun2.courseId);
|
|
113
58
|
});
|
|
114
59
|
var archivedCoursesList = courses.filter(function (courseData) {
|
|
115
60
|
var _courseData$courseRun3;
|
|
116
|
-
|
|
117
|
-
return archivedCourses.has(courseId);
|
|
61
|
+
return archivedCourses.has((_courseData$courseRun3 = courseData.courseRun) === null || _courseData$courseRun3 === void 0 ? void 0 : _courseData$courseRun3.courseId);
|
|
118
62
|
});
|
|
119
|
-
console.log("DEBUG: Active courses count:", activeCourses.length);
|
|
120
|
-
console.log("DEBUG: Archived courses count:", archivedCoursesList.length);
|
|
121
63
|
var handleArchiveToggle = /*#__PURE__*/function () {
|
|
122
|
-
var
|
|
123
|
-
var client, lmsBaseUrl, url, listResponse, existingRecord,
|
|
124
|
-
return _regenerator().w(function (
|
|
125
|
-
while (1) switch (
|
|
64
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(courseId, isCurrentlyArchived) {
|
|
65
|
+
var client, lmsBaseUrl, url, listResponse, existingRecord, _t;
|
|
66
|
+
return _regenerator().w(function (_context) {
|
|
67
|
+
while (1) switch (_context.p = _context.n) {
|
|
126
68
|
case 0:
|
|
127
|
-
console.log("DEBUG: Toggling archive for course ".concat(courseId, ", currently archived: ").concat(isCurrentlyArchived));
|
|
128
69
|
setLoadingStates(function (prev) {
|
|
129
70
|
return new Map(prev).set(courseId, true);
|
|
130
71
|
});
|
|
131
|
-
|
|
72
|
+
_context.p = 1;
|
|
132
73
|
client = (0, _auth.getAuthenticatedHttpClient)();
|
|
133
74
|
lmsBaseUrl = (0, _frontendPlatform.getConfig)().LMS_BASE_URL;
|
|
134
75
|
url = "".concat(lmsBaseUrl, "/sample-plugin/api/v1/course-archive-status/");
|
|
135
|
-
|
|
136
|
-
_context2.n = 4;
|
|
137
|
-
break;
|
|
138
|
-
}
|
|
139
|
-
_context2.n = 2;
|
|
76
|
+
_context.n = 2;
|
|
140
77
|
return client.get(url, {
|
|
141
78
|
params: {
|
|
142
79
|
course_id: courseId
|
|
143
80
|
}
|
|
144
81
|
});
|
|
145
82
|
case 2:
|
|
146
|
-
listResponse =
|
|
83
|
+
listResponse = _context.v;
|
|
147
84
|
if (!(listResponse.data.results.length > 0)) {
|
|
148
|
-
|
|
85
|
+
_context.n = 4;
|
|
149
86
|
break;
|
|
150
87
|
}
|
|
151
88
|
existingRecord = listResponse.data.results[0];
|
|
152
|
-
|
|
89
|
+
_context.n = 3;
|
|
153
90
|
return client.patch("".concat(url).concat(existingRecord.id, "/"), {
|
|
154
|
-
|
|
155
|
-
is_archived: false
|
|
91
|
+
is_archived: !isCurrentlyArchived
|
|
156
92
|
});
|
|
157
93
|
case 3:
|
|
158
|
-
|
|
159
|
-
setArchivedCourses(function (prev) {
|
|
160
|
-
var newSet = new Set(prev);
|
|
161
|
-
newSet["delete"](courseId);
|
|
162
|
-
return newSet;
|
|
163
|
-
});
|
|
164
|
-
_context2.n = 10;
|
|
94
|
+
_context.n = 5;
|
|
165
95
|
break;
|
|
166
96
|
case 4:
|
|
167
|
-
|
|
168
|
-
return client.get(url, {
|
|
169
|
-
params: {
|
|
170
|
-
course_id: courseId
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
case 5:
|
|
174
|
-
_listResponse = _context2.v;
|
|
175
|
-
if (!(_listResponse.data.results.length > 0)) {
|
|
176
|
-
_context2.n = 7;
|
|
177
|
-
break;
|
|
178
|
-
}
|
|
179
|
-
// Update existing record
|
|
180
|
-
_existingRecord = _listResponse.data.results[0];
|
|
181
|
-
_context2.n = 6;
|
|
182
|
-
return client.patch("".concat(url).concat(_existingRecord.id, "/"), {
|
|
183
|
-
is_archived: true
|
|
184
|
-
});
|
|
185
|
-
case 6:
|
|
186
|
-
_context2.n = 9;
|
|
187
|
-
break;
|
|
188
|
-
case 7:
|
|
189
|
-
// Create new record
|
|
190
|
-
console.log("DEBUG: Creating new archive record for course ".concat(courseId));
|
|
191
|
-
_context2.n = 8;
|
|
97
|
+
_context.n = 5;
|
|
192
98
|
return client.post(url, {
|
|
193
99
|
course_id: courseId,
|
|
194
|
-
is_archived:
|
|
100
|
+
is_archived: !isCurrentlyArchived
|
|
195
101
|
});
|
|
196
|
-
case
|
|
197
|
-
createResponse = _context2.v;
|
|
198
|
-
console.log("DEBUG: Create response:", createResponse.data);
|
|
199
|
-
case 9:
|
|
200
|
-
// Update local state
|
|
201
|
-
console.log("DEBUG: Adding course ".concat(courseId, " to archived set"));
|
|
102
|
+
case 5:
|
|
202
103
|
setArchivedCourses(function (prev) {
|
|
203
|
-
var newSet = new Set(prev)
|
|
204
|
-
|
|
104
|
+
var newSet = new Set(prev);
|
|
105
|
+
if (isCurrentlyArchived) {
|
|
106
|
+
newSet["delete"](courseId);
|
|
107
|
+
} else {
|
|
108
|
+
newSet.add(courseId);
|
|
109
|
+
}
|
|
205
110
|
return newSet;
|
|
206
111
|
});
|
|
207
|
-
|
|
208
|
-
console.log("DEBUG: Successfully ".concat(isCurrentlyArchived ? "unarchived" : "archived", " course ").concat(courseId));
|
|
209
|
-
_context2.n = 12;
|
|
112
|
+
_context.n = 7;
|
|
210
113
|
break;
|
|
211
|
-
case
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
console.error("Failed to ".concat(isCurrentlyArchived ? "unarchive" : "archive", " course:"),
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
statusText: (_error$response2 = _t2.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.statusText,
|
|
218
|
-
data: (_error$response3 = _t2.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data,
|
|
219
|
-
message: _t2.message
|
|
220
|
-
});
|
|
221
|
-
// Could add toast notification here
|
|
222
|
-
case 12:
|
|
223
|
-
_context2.p = 12;
|
|
114
|
+
case 6:
|
|
115
|
+
_context.p = 6;
|
|
116
|
+
_t = _context.v;
|
|
117
|
+
console.error("Failed to ".concat(isCurrentlyArchived ? "unarchive" : "archive", " course:"), _t);
|
|
118
|
+
case 7:
|
|
119
|
+
_context.p = 7;
|
|
224
120
|
setLoadingStates(function (prev) {
|
|
225
121
|
var newMap = new Map(prev);
|
|
226
122
|
newMap["delete"](courseId);
|
|
227
123
|
return newMap;
|
|
228
124
|
});
|
|
229
|
-
return
|
|
230
|
-
case
|
|
231
|
-
return
|
|
125
|
+
return _context.f(7);
|
|
126
|
+
case 8:
|
|
127
|
+
return _context.a(2);
|
|
232
128
|
}
|
|
233
|
-
},
|
|
129
|
+
}, _callee, null, [[1, 6, 7, 8]]);
|
|
234
130
|
}));
|
|
235
131
|
return function handleArchiveToggle(_x, _x2) {
|
|
236
|
-
return
|
|
132
|
+
return _ref2.apply(this, arguments);
|
|
237
133
|
};
|
|
238
134
|
}();
|
|
239
135
|
var renderCourse = function renderCourse(courseData) {
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","names":["_react","_interopRequireWildcard","require","_frontendPlatform","_auth","_paragon","_icons","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t3","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_regenerator","Symbol","iterator","toStringTag","c","prototype","Generator","u","create","_regeneratorDefine2","p","y","G","v","a","d","bind","length","l","TypeError","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","displayName","w","m","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","next","push","isArray","CourseList","_ref","courseListData","_useState","useState","Set","_useState2","archivedCourses","setArchivedCourses","_useState3","Map","_useState4","loadingStates","setLoadingStates","visibleList","console","log","jsx","children","courses","useEffect","fetchArchivedCourses","_ref2","_callee","client","lmsBaseUrl","response","archivedCourseIds","_t","_context","getAuthenticatedHttpClient","getConfig","LMS_BASE_URL","concat","params","is_archived","data","results","map","item","course_id","error","forEach","courseData","index","_courseData$courseRun","cardId","courseRun","courseId","keys","activeCourses","filter","_courseData$courseRun2","_courseData$course","isArchived","course","courseName","archivedCoursesList","_courseData$courseRun3","handleArchiveToggle","_ref3","_callee2","isCurrentlyArchived","url","listResponse","existingRecord","_listResponse","_existingRecord","createResponse","_error$response","_error$response2","_error$response3","_t2","_context2","prev","patch","id","newSet","post","add","status","statusText","message","newMap","_x","_x2","renderCourse","_courseData$courseRun4","_courseData$courseRun5","_courseData$courseRun6","undefined","isLoading","Col","xs","sm","md","lg","className","jsxs","Card","href","homeUrl","ImageCap","src","bannerImgSrc","alt","Header","title","subtitle","courseNumber","actions","Fragment","Badge","variant","Dropdown","Toggle","as","IconButton","MoreVert","iconAs","Icon","Menu","socialShareUrl","Item","target","rel","Section","shortDescription","Footer","Button","size","disabled","onClick","iconBefore","Spinner","Unarchive","Archive","Container","fluid","Row","Collapsible","defaultOpen","_default","exports"],"sources":["../src/plugin.jsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport { getConfig } from \"@edx/frontend-platform\";\nimport { getAuthenticatedHttpClient } from \"@edx/frontend-platform/auth\";\nimport {\n Card,\n Container,\n Row,\n Col,\n Badge,\n Collapsible,\n Button,\n Spinner,\n Dropdown,\n IconButton,\n Icon,\n} from \"@openedx/paragon\";\nimport { Archive, Unarchive, MoreVert } from \"@openedx/paragon/icons\";\n\nconst CourseList = ({ courseListData }) => {\n const [archivedCourses, setArchivedCourses] = useState(new Set());\n const [loadingStates, setLoadingStates] = useState(new Map());\n\n // Safety check for courseListData\n if (!courseListData || !courseListData.visibleList) {\n console.log(\"DEBUG: courseListData not available yet\");\n return <div>Loading courses...</div>;\n }\n\n // Extract the \"visibleList\"\n const courses = courseListData.visibleList;\n\n // Log the full course data structure for debugging\n console.log(\"DEBUG: Full courseListData structure:\", courseListData);\n console.log(\"DEBUG: First course data object:\", courses?.[0]);\n\n useEffect(() => {\n const fetchArchivedCourses = async () => {\n try {\n const client = getAuthenticatedHttpClient();\n const lmsBaseUrl = getConfig().LMS_BASE_URL;\n console.log(\n \"DEBUG: Fetching archived courses from:\",\n `${lmsBaseUrl}/sample-plugin/api/v1/course-archive-status/`,\n );\n\n const response = await client.get(\n `${lmsBaseUrl}/sample-plugin/api/v1/course-archive-status/`,\n {\n params: { is_archived: true },\n },\n );\n\n console.log(\"DEBUG: Archived courses API response:\", response.data);\n\n const archivedCourseIds = new Set(\n response.data.results.map((item) => item.course_id),\n );\n\n console.log(\n \"DEBUG: Archived course IDs from API:\",\n Array.from(archivedCourseIds),\n );\n setArchivedCourses(archivedCourseIds);\n } catch (error) {\n console.error(\"Failed to fetch archived courses:\", error);\n }\n };\n\n fetchArchivedCourses();\n }, []);\n\n // Log course IDs we're trying to match against\n console.log(\"DEBUG: Course IDs from course data:\");\n courses.forEach((courseData, index) => {\n console.log(`Course ${index}:`, {\n cardId: courseData.cardId,\n \"courseRun.courseId\": courseData.courseRun?.courseId,\n \"courseRun object keys\": Object.keys(courseData.courseRun || {}),\n \"full courseRun object\": courseData.courseRun,\n });\n });\n\n console.log(\n \"DEBUG: Archived course IDs to match:\",\n Array.from(archivedCourses),\n );\n\n // Separate courses into active and archived\n const activeCourses = courses.filter((courseData) => {\n const courseId = courseData.courseRun?.courseId;\n const isArchived = archivedCourses.has(courseId);\n console.log(\n `DEBUG: Course \"${courseData.course?.courseName}\" (ID: ${courseId}) - archived: ${isArchived}`,\n );\n return !isArchived;\n });\n\n const archivedCoursesList = courses.filter((courseData) => {\n const courseId = courseData.courseRun?.courseId;\n return archivedCourses.has(courseId);\n });\n\n console.log(\"DEBUG: Active courses count:\", activeCourses.length);\n console.log(\"DEBUG: Archived courses count:\", archivedCoursesList.length);\n\n const handleArchiveToggle = async (courseId, isCurrentlyArchived) => {\n console.log(\n `DEBUG: Toggling archive for course ${courseId}, currently archived: ${isCurrentlyArchived}`,\n );\n\n setLoadingStates((prev) => new Map(prev).set(courseId, true));\n\n try {\n const client = getAuthenticatedHttpClient();\n const lmsBaseUrl = getConfig().LMS_BASE_URL;\n const url = `${lmsBaseUrl}/sample-plugin/api/v1/course-archive-status/`;\n\n if (isCurrentlyArchived) {\n // Unarchive: Find existing record and update it\n const listResponse = await client.get(url, {\n params: { course_id: courseId },\n });\n\n if (listResponse.data.results.length > 0) {\n const existingRecord = listResponse.data.results[0];\n await client.patch(`${url}${existingRecord.id}/`, {\n course_id: courseId,\n is_archived: false,\n });\n }\n\n // Update local state\n setArchivedCourses((prev) => {\n const newSet = new Set(prev);\n newSet.delete(courseId);\n return newSet;\n });\n } else {\n // Archive: Check if record exists first, then create or update\n const listResponse = await client.get(url, {\n params: { course_id: courseId },\n });\n\n if (listResponse.data.results.length > 0) {\n // Update existing record\n const existingRecord = listResponse.data.results[0];\n await client.patch(`${url}${existingRecord.id}/`, {\n is_archived: true,\n });\n } else {\n // Create new record\n console.log(\n `DEBUG: Creating new archive record for course ${courseId}`,\n );\n const createResponse = await client.post(url, {\n course_id: courseId,\n is_archived: true,\n });\n console.log(`DEBUG: Create response:`, createResponse.data);\n }\n\n // Update local state\n console.log(`DEBUG: Adding course ${courseId} to archived set`);\n setArchivedCourses((prev) => {\n const newSet = new Set(prev).add(courseId);\n console.log(`DEBUG: New archived courses set:`, Array.from(newSet));\n return newSet;\n });\n }\n\n console.log(\n `DEBUG: Successfully ${isCurrentlyArchived ? \"unarchived\" : \"archived\"} course ${courseId}`,\n );\n } catch (error) {\n console.error(\n `Failed to ${isCurrentlyArchived ? \"unarchive\" : \"archive\"} course:`,\n error,\n );\n console.error(\"Error details:\", {\n status: error.response?.status,\n statusText: error.response?.statusText,\n data: error.response?.data,\n message: error.message,\n });\n // Could add toast notification here\n } finally {\n setLoadingStates((prev) => {\n const newMap = new Map(prev);\n newMap.delete(courseId);\n return newMap;\n });\n }\n };\n\n const renderCourse = (courseData, isArchived = false) => {\n const courseId = courseData.courseRun?.courseId;\n const isLoading = loadingStates.get(courseId);\n\n return (\n <Col\n key={courseData.cardId}\n xs={12}\n sm={6}\n md={4}\n lg={3}\n className=\"mb-4\"\n >\n <Card>\n <a href={courseData.courseRun?.homeUrl || '#'}>\n <Card.ImageCap\n src={getConfig().LMS_BASE_URL + courseData.course.bannerImgSrc}\n alt={courseData.course.courseName}\n />\n </a>\n <Card.Header\n title={\n <a href={courseData.courseRun?.homeUrl || '#'}>\n {courseData.course.courseName}\n </a>\n }\n subtitle={courseData.course.courseNumber}\n actions={\n <>\n {isArchived && <Badge variant=\"secondary\" className=\"me-2\">Archived</Badge>}\n <Dropdown>\n <Dropdown.Toggle\n id={`course-menu-${courseData.cardId}`}\n as={IconButton}\n src={MoreVert}\n iconAs={Icon}\n variant=\"primary\"\n aria-label=\"More actions\"\n />\n <Dropdown.Menu>\n {courseData.course.socialShareUrl && (\n <Dropdown.Item\n href={courseData.course.socialShareUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n View Course About Page\n </Dropdown.Item>\n )}\n </Dropdown.Menu>\n </Dropdown>\n </>\n }\n />\n <Card.Section>\n {courseData.course.shortDescription && (\n <p className=\"text-muted small\">\n {courseData.course.shortDescription}\n </p>\n )}\n </Card.Section>\n <Card.Footer>\n <Button\n variant={isArchived ? \"outline-primary\" : \"outline-secondary\"}\n size=\"sm\"\n disabled={isLoading}\n onClick={() => handleArchiveToggle(courseId, isArchived)}\n iconBefore={\n isLoading ? Spinner : isArchived ? Unarchive : Archive\n }\n >\n {isLoading\n ? \"Processing...\"\n : isArchived\n ? \"Unarchive\"\n : \"Archive\"}\n </Button>\n </Card.Footer>\n </Card>\n </Col>\n );\n };\n\n return (\n <Container fluid>\n <Row>\n {activeCourses.map((courseData) => renderCourse(courseData, false))}\n </Row>\n\n {archivedCoursesList.length > 0 && (\n <div className=\"mt-5\">\n <Collapsible\n title={`Archived Courses (${archivedCoursesList.length})`}\n defaultOpen={false}\n >\n <Row>\n {archivedCoursesList.map((courseData) =>\n renderCourse(courseData, true),\n )}\n </Row>\n </Collapsible>\n </div>\n )}\n </Container>\n );\n};\n\nexport default CourseList;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"plugin.js","names":["_react","_interopRequireWildcard","require","_frontendPlatform","_auth","_paragon","_icons","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t2","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_regenerator","Symbol","iterator","toStringTag","c","prototype","Generator","u","create","_regeneratorDefine2","p","y","G","v","a","d","bind","length","l","TypeError","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","displayName","w","m","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","next","push","isArray","CourseList","_ref","courseListData","_useState","useState","initial","Set","visibleList","forEach","courseData","_courseData$courseRun","courseRun","isArchivedByLearner","add","courseId","_useState2","archivedCourses","setArchivedCourses","_useState3","Map","_useState4","loadingStates","setLoadingStates","jsx","children","courses","activeCourses","filter","_courseData$courseRun2","archivedCoursesList","_courseData$courseRun3","handleArchiveToggle","_ref2","_callee","isCurrentlyArchived","client","lmsBaseUrl","url","listResponse","existingRecord","_t","_context","prev","getAuthenticatedHttpClient","getConfig","LMS_BASE_URL","concat","params","course_id","data","results","patch","id","is_archived","post","newSet","console","error","newMap","_x","_x2","renderCourse","_courseData$courseRun4","_courseData$courseRun5","_courseData$courseRun6","isArchived","undefined","isLoading","Col","xs","sm","md","lg","className","jsxs","Card","href","homeUrl","ImageCap","src","course","bannerImgSrc","alt","courseName","Header","title","subtitle","courseNumber","actions","Fragment","Badge","variant","Dropdown","Toggle","cardId","as","IconButton","MoreVert","iconAs","Icon","Menu","socialShareUrl","Item","target","rel","Section","shortDescription","Footer","Button","size","disabled","onClick","iconBefore","Spinner","Unarchive","Archive","Container","fluid","Row","map","Collapsible","defaultOpen","_default","exports"],"sources":["../src/plugin.jsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { getConfig } from \"@edx/frontend-platform\";\nimport { getAuthenticatedHttpClient } from \"@edx/frontend-platform/auth\";\nimport {\n Card,\n Container,\n Row,\n Col,\n Badge,\n Collapsible,\n Button,\n Spinner,\n Dropdown,\n IconButton,\n Icon,\n} from \"@openedx/paragon\";\nimport { Archive, Unarchive, MoreVert } from \"@openedx/paragon/icons\";\n\nconst CourseList = ({ courseListData }) => {\n // Seed the archived-course set from `courseRun.isArchivedByLearner`, which the\n // backend plugin's filter pipeline injects into each courseRun in the Learner\n // Home /init API response. This avoids a separate GET to course-archive-status\n // on every dashboard load. Local toggles below keep this set in sync without\n // a refetch.\n const [archivedCourses, setArchivedCourses] = useState(() => {\n const initial = new Set();\n (courseListData?.visibleList || []).forEach((courseData) => {\n if (courseData.courseRun?.isArchivedByLearner) {\n initial.add(courseData.courseRun.courseId);\n }\n });\n return initial;\n });\n const [loadingStates, setLoadingStates] = useState(new Map());\n\n if (!courseListData || !courseListData.visibleList) {\n return <div>Loading courses...</div>;\n }\n\n const courses = courseListData.visibleList;\n\n const activeCourses = courses.filter(\n (courseData) => !archivedCourses.has(courseData.courseRun?.courseId),\n );\n\n const archivedCoursesList = courses.filter((courseData) =>\n archivedCourses.has(courseData.courseRun?.courseId),\n );\n\n const handleArchiveToggle = async (courseId, isCurrentlyArchived) => {\n setLoadingStates((prev) => new Map(prev).set(courseId, true));\n\n try {\n const client = getAuthenticatedHttpClient();\n const lmsBaseUrl = getConfig().LMS_BASE_URL;\n const url = `${lmsBaseUrl}/sample-plugin/api/v1/course-archive-status/`;\n\n const listResponse = await client.get(url, {\n params: { course_id: courseId },\n });\n\n if (listResponse.data.results.length > 0) {\n const existingRecord = listResponse.data.results[0];\n await client.patch(`${url}${existingRecord.id}/`, {\n is_archived: !isCurrentlyArchived,\n });\n } else {\n await client.post(url, {\n course_id: courseId,\n is_archived: !isCurrentlyArchived,\n });\n }\n\n setArchivedCourses((prev) => {\n const newSet = new Set(prev);\n if (isCurrentlyArchived) {\n newSet.delete(courseId);\n } else {\n newSet.add(courseId);\n }\n return newSet;\n });\n } catch (error) {\n console.error(\n `Failed to ${isCurrentlyArchived ? \"unarchive\" : \"archive\"} course:`,\n error,\n );\n } finally {\n setLoadingStates((prev) => {\n const newMap = new Map(prev);\n newMap.delete(courseId);\n return newMap;\n });\n }\n };\n\n const renderCourse = (courseData, isArchived = false) => {\n const courseId = courseData.courseRun?.courseId;\n const isLoading = loadingStates.get(courseId);\n\n return (\n <Col\n key={courseData.cardId}\n xs={12}\n sm={6}\n md={4}\n lg={3}\n className=\"mb-4\"\n >\n <Card>\n <a href={courseData.courseRun?.homeUrl || '#'}>\n <Card.ImageCap\n src={getConfig().LMS_BASE_URL + courseData.course.bannerImgSrc}\n alt={courseData.course.courseName}\n />\n </a>\n <Card.Header\n title={\n <a href={courseData.courseRun?.homeUrl || '#'}>\n {courseData.course.courseName}\n </a>\n }\n subtitle={courseData.course.courseNumber}\n actions={\n <>\n {isArchived && <Badge variant=\"secondary\" className=\"me-2\">Archived</Badge>}\n <Dropdown>\n <Dropdown.Toggle\n id={`course-menu-${courseData.cardId}`}\n as={IconButton}\n src={MoreVert}\n iconAs={Icon}\n variant=\"primary\"\n aria-label=\"More actions\"\n />\n <Dropdown.Menu>\n {courseData.course.socialShareUrl && (\n <Dropdown.Item\n href={courseData.course.socialShareUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n View Course About Page\n </Dropdown.Item>\n )}\n </Dropdown.Menu>\n </Dropdown>\n </>\n }\n />\n <Card.Section>\n {courseData.course.shortDescription && (\n <p className=\"text-muted small\">\n {courseData.course.shortDescription}\n </p>\n )}\n </Card.Section>\n <Card.Footer>\n <Button\n variant={isArchived ? \"outline-primary\" : \"outline-secondary\"}\n size=\"sm\"\n disabled={isLoading}\n onClick={() => handleArchiveToggle(courseId, isArchived)}\n iconBefore={\n isLoading ? Spinner : isArchived ? Unarchive : Archive\n }\n >\n {isLoading\n ? \"Processing...\"\n : isArchived\n ? \"Unarchive\"\n : \"Archive\"}\n </Button>\n </Card.Footer>\n </Card>\n </Col>\n );\n };\n\n return (\n <Container fluid>\n <Row>\n {activeCourses.map((courseData) => renderCourse(courseData, false))}\n </Row>\n\n {archivedCoursesList.length > 0 && (\n <div className=\"mt-5\">\n <Collapsible\n title={`Archived Courses (${archivedCoursesList.length})`}\n defaultOpen={false}\n >\n <Row>\n {archivedCoursesList.map((courseData) =>\n renderCourse(courseData, true),\n )}\n </Row>\n </Collapsible>\n </div>\n )}\n </Container>\n );\n};\n\nexport default CourseList;\n"],"mappings":"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","ignoreList":[]}
|