@openedx/plugin-sample 3.0.1 → 3.1.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 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 API Integration
93
+ #### 2. Backend Data via the Filter Pipeline
94
94
 
95
- ```jsx
96
- useEffect(() => {
97
- const fetchArchivedCourses = async () => {
98
- const client = getAuthenticatedHttpClient();
99
- const lmsBaseUrl = getConfig().LMS_BASE_URL;
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
- fetchArchivedCourses();
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
- - **Authentication**: `getAuthenticatedHttpClient()` handles Open edX auth
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 _t3 in e) "default" !== _t3 && {}.hasOwnProperty.call(e, _t3) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t3)) && (i.get || i.set) ? o(f, _t3, i) : f[_t3] = e[_t3]); return f; })(e, t); }
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
- var _useState = (0, _react.useState)(new Set()),
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, _courseData$course;
109
- var courseId = (_courseData$courseRun2 = courseData.courseRun) === null || _courseData$courseRun2 === void 0 ? void 0 : _courseData$courseRun2.courseId;
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
- var courseId = (_courseData$courseRun3 = courseData.courseRun) === null || _courseData$courseRun3 === void 0 ? void 0 : _courseData$courseRun3.courseId;
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 _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(courseId, isCurrentlyArchived) {
123
- var client, lmsBaseUrl, url, listResponse, existingRecord, _listResponse, _existingRecord, createResponse, _error$response, _error$response2, _error$response3, _t2;
124
- return _regenerator().w(function (_context2) {
125
- while (1) switch (_context2.p = _context2.n) {
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
- _context2.p = 1;
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
- if (!isCurrentlyArchived) {
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 = _context2.v;
83
+ listResponse = _context.v;
147
84
  if (!(listResponse.data.results.length > 0)) {
148
- _context2.n = 3;
85
+ _context.n = 4;
149
86
  break;
150
87
  }
151
88
  existingRecord = listResponse.data.results[0];
152
- _context2.n = 3;
89
+ _context.n = 3;
153
90
  return client.patch("".concat(url).concat(existingRecord.id, "/"), {
154
- course_id: courseId,
155
- is_archived: false
91
+ is_archived: !isCurrentlyArchived
156
92
  });
157
93
  case 3:
158
- // Update local state
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
- _context2.n = 5;
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: true
100
+ is_archived: !isCurrentlyArchived
195
101
  });
196
- case 8:
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).add(courseId);
204
- console.log("DEBUG: New archived courses set:", Array.from(newSet));
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
- case 10:
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 11:
212
- _context2.p = 11;
213
- _t2 = _context2.v;
214
- console.error("Failed to ".concat(isCurrentlyArchived ? "unarchive" : "archive", " course:"), _t2);
215
- console.error("Error details:", {
216
- status: (_error$response = _t2.response) === null || _error$response === void 0 ? void 0 : _error$response.status,
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 _context2.f(12);
230
- case 13:
231
- return _context2.a(2);
125
+ return _context.f(7);
126
+ case 8:
127
+ return _context.a(2);
232
128
  }
233
- }, _callee2, null, [[1, 11, 12, 13]]);
129
+ }, _callee, null, [[1, 6, 7, 8]]);
234
130
  }));
235
131
  return function handleArchiveToggle(_x, _x2) {
236
- return _ref3.apply(this, arguments);
132
+ return _ref2.apply(this, arguments);
237
133
  };
238
134
  }();
239
135
  var renderCourse = function renderCourse(courseData) {
@@ -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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openedx/plugin-sample",
3
- "version": "3.0.1",
3
+ "version": "3.1.0",
4
4
  "main": "dist/index.js",
5
5
  "files": [
6
6
  "dist"