@openedx/frontend-app-instructor-dashboard 1.0.0-alpha.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.
Files changed (299) hide show
  1. package/LICENSE +661 -0
  2. package/README.rst +235 -0
  3. package/dist/Main.d.ts +3 -0
  4. package/dist/Main.js +13 -0
  5. package/dist/Main.js.map +1 -0
  6. package/dist/app.d.ts +3 -0
  7. package/dist/app.js +18 -0
  8. package/dist/app.js.map +1 -0
  9. package/dist/app.scss +10 -0
  10. package/dist/certificates/CertificatesPage.d.ts +2 -0
  11. package/dist/certificates/CertificatesPage.js +6 -0
  12. package/dist/certificates/CertificatesPage.js.map +1 -0
  13. package/dist/cohorts/CohortsPage.d.ts +3 -0
  14. package/dist/cohorts/CohortsPage.js +41 -0
  15. package/dist/cohorts/CohortsPage.js.map +1 -0
  16. package/dist/cohorts/CohortsPage.scss +14 -0
  17. package/dist/cohorts/components/CohortCard.d.ts +6 -0
  18. package/dist/cohorts/components/CohortCard.js +53 -0
  19. package/dist/cohorts/components/CohortCard.js.map +1 -0
  20. package/dist/cohorts/components/CohortContext.d.ts +14 -0
  21. package/dist/cohorts/components/CohortContext.js +46 -0
  22. package/dist/cohorts/components/CohortContext.js.map +1 -0
  23. package/dist/cohorts/components/CohortsForm.d.ts +11 -0
  24. package/dist/cohorts/components/CohortsForm.js +58 -0
  25. package/dist/cohorts/components/CohortsForm.js.map +1 -0
  26. package/dist/cohorts/components/DisableCohortsModal.d.ts +7 -0
  27. package/dist/cohorts/components/DisableCohortsModal.js +10 -0
  28. package/dist/cohorts/components/DisableCohortsModal.js.map +1 -0
  29. package/dist/cohorts/components/DisabledCohortsView.d.ts +5 -0
  30. package/dist/cohorts/components/DisabledCohortsView.js +10 -0
  31. package/dist/cohorts/components/DisabledCohortsView.js.map +1 -0
  32. package/dist/cohorts/components/EnabledCohortsView.d.ts +2 -0
  33. package/dist/cohorts/components/EnabledCohortsView.js +96 -0
  34. package/dist/cohorts/components/EnabledCohortsView.js.map +1 -0
  35. package/dist/cohorts/components/ManageLearners.d.ts +2 -0
  36. package/dist/cohorts/components/ManageLearners.js +64 -0
  37. package/dist/cohorts/components/ManageLearners.js.map +1 -0
  38. package/dist/cohorts/components/SelectedCohortInfo.d.ts +2 -0
  39. package/dist/cohorts/components/SelectedCohortInfo.js +43 -0
  40. package/dist/cohorts/components/SelectedCohortInfo.js.map +1 -0
  41. package/dist/cohorts/constants.d.ts +4 -0
  42. package/dist/cohorts/constants.js +5 -0
  43. package/dist/cohorts/constants.js.map +1 -0
  44. package/dist/cohorts/data/api.d.ts +9 -0
  45. package/dist/cohorts/data/api.js +54 -0
  46. package/dist/cohorts/data/api.js.map +1 -0
  47. package/dist/cohorts/data/apiHook.d.ts +14 -0
  48. package/dist/cohorts/data/apiHook.js +64 -0
  49. package/dist/cohorts/data/apiHook.js.map +1 -0
  50. package/dist/cohorts/data/queryKeys.d.ts +7 -0
  51. package/dist/cohorts/data/queryKeys.js +9 -0
  52. package/dist/cohorts/data/queryKeys.js.map +1 -0
  53. package/dist/cohorts/messages.d.ts +233 -0
  54. package/dist/cohorts/messages.js +235 -0
  55. package/dist/cohorts/messages.js.map +1 -0
  56. package/dist/cohorts/types.d.ts +15 -0
  57. package/dist/cohorts/types.js +2 -0
  58. package/dist/cohorts/types.js.map +1 -0
  59. package/dist/components/ActionCard.d.ts +11 -0
  60. package/dist/components/ActionCard.js +7 -0
  61. package/dist/components/ActionCard.js.map +1 -0
  62. package/dist/components/CSVComponent.d.ts +10 -0
  63. package/dist/components/CSVComponent.js +21 -0
  64. package/dist/components/CSVComponent.js.map +1 -0
  65. package/dist/components/ObjectCell.d.ts +5 -0
  66. package/dist/components/ObjectCell.js +7 -0
  67. package/dist/components/ObjectCell.js.map +1 -0
  68. package/dist/components/PageNotFound.d.ts +2 -0
  69. package/dist/components/PageNotFound.js +12 -0
  70. package/dist/components/PageNotFound.js.map +1 -0
  71. package/dist/components/PendingTasks.d.ts +5 -0
  72. package/dist/components/PendingTasks.js +38 -0
  73. package/dist/components/PendingTasks.js.map +1 -0
  74. package/dist/components/SpecifyLearnerField.d.ts +5 -0
  75. package/dist/components/SpecifyLearnerField.js +10 -0
  76. package/dist/components/SpecifyLearnerField.js.map +1 -0
  77. package/dist/components/messages.d.ts +108 -0
  78. package/dist/components/messages.js +110 -0
  79. package/dist/components/messages.js.map +1 -0
  80. package/dist/constants.d.ts +1 -0
  81. package/dist/constants.js +2 -0
  82. package/dist/constants.js.map +1 -0
  83. package/dist/courseInfo/CourseInfoPage.d.ts +2 -0
  84. package/dist/courseInfo/CourseInfoPage.js +7 -0
  85. package/dist/courseInfo/CourseInfoPage.js.map +1 -0
  86. package/dist/courseInfo/components/EnrollmentSummary/EnrollmentCounter.d.ts +8 -0
  87. package/dist/courseInfo/components/EnrollmentSummary/EnrollmentCounter.js +13 -0
  88. package/dist/courseInfo/components/EnrollmentSummary/EnrollmentCounter.js.map +1 -0
  89. package/dist/courseInfo/components/EnrollmentSummary/EnrollmentSummary.d.ts +2 -0
  90. package/dist/courseInfo/components/EnrollmentSummary/EnrollmentSummary.js +24 -0
  91. package/dist/courseInfo/components/EnrollmentSummary/EnrollmentSummary.js.map +1 -0
  92. package/dist/courseInfo/components/EnrollmentSummary/index.d.ts +2 -0
  93. package/dist/courseInfo/components/EnrollmentSummary/index.js +3 -0
  94. package/dist/courseInfo/components/EnrollmentSummary/index.js.map +1 -0
  95. package/dist/courseInfo/components/EnrollmentSummary/messages.d.ts +83 -0
  96. package/dist/courseInfo/components/EnrollmentSummary/messages.js +85 -0
  97. package/dist/courseInfo/components/EnrollmentSummary/messages.js.map +1 -0
  98. package/dist/courseInfo/components/EnrollmentSummary/utils.d.ts +1 -0
  99. package/dist/courseInfo/components/EnrollmentSummary/utils.js +9 -0
  100. package/dist/courseInfo/components/EnrollmentSummary/utils.js.map +1 -0
  101. package/dist/courseInfo/components/generalCourseInfo/GeneralCourseInfo.d.ts +2 -0
  102. package/dist/courseInfo/components/generalCourseInfo/GeneralCourseInfo.js +46 -0
  103. package/dist/courseInfo/components/generalCourseInfo/GeneralCourseInfo.js.map +1 -0
  104. package/dist/courseInfo/components/generalCourseInfo/StatusBadge.d.ts +5 -0
  105. package/dist/courseInfo/components/generalCourseInfo/StatusBadge.js +15 -0
  106. package/dist/courseInfo/components/generalCourseInfo/StatusBadge.js.map +1 -0
  107. package/dist/courseInfo/components/generalCourseInfo/index.d.ts +1 -0
  108. package/dist/courseInfo/components/generalCourseInfo/index.js +2 -0
  109. package/dist/courseInfo/components/generalCourseInfo/index.js.map +1 -0
  110. package/dist/courseInfo/components/generalCourseInfo/messages.d.ts +8 -0
  111. package/dist/courseInfo/components/generalCourseInfo/messages.js +10 -0
  112. package/dist/courseInfo/components/generalCourseInfo/messages.js.map +1 -0
  113. package/dist/courseInfo/messages.d.ts +8 -0
  114. package/dist/courseInfo/messages.js +10 -0
  115. package/dist/courseInfo/messages.js.map +1 -0
  116. package/dist/courseInfo/types.d.ts +27 -0
  117. package/dist/courseInfo/types.js +2 -0
  118. package/dist/courseInfo/types.js.map +1 -0
  119. package/dist/courseTeam/CourseTeamPage.d.ts +2 -0
  120. package/dist/courseTeam/CourseTeamPage.js +6 -0
  121. package/dist/courseTeam/CourseTeamPage.js.map +1 -0
  122. package/dist/data/api.d.ts +14 -0
  123. package/dist/data/api.js +33 -0
  124. package/dist/data/api.js.map +1 -0
  125. package/dist/data/apiHook.d.ts +4 -0
  126. package/dist/data/apiHook.js +28 -0
  127. package/dist/data/apiHook.js.map +1 -0
  128. package/dist/data/queryKeys.d.ts +8 -0
  129. package/dist/data/queryKeys.js +10 -0
  130. package/dist/data/queryKeys.js.map +1 -0
  131. package/dist/dataDownloads/DataDownloadsPage.d.ts +2 -0
  132. package/dist/dataDownloads/DataDownloadsPage.js +162 -0
  133. package/dist/dataDownloads/DataDownloadsPage.js.map +1 -0
  134. package/dist/dataDownloads/components/DataDownloadTable.d.ts +8 -0
  135. package/dist/dataDownloads/components/DataDownloadTable.js +42 -0
  136. package/dist/dataDownloads/components/DataDownloadTable.js.map +1 -0
  137. package/dist/dataDownloads/components/DownloadLinkCell.d.ts +6 -0
  138. package/dist/dataDownloads/components/DownloadLinkCell.js +13 -0
  139. package/dist/dataDownloads/components/DownloadLinkCell.js.map +1 -0
  140. package/dist/dataDownloads/components/GenerateReports.d.ts +8 -0
  141. package/dist/dataDownloads/components/GenerateReports.js +20 -0
  142. package/dist/dataDownloads/components/GenerateReports.js.map +1 -0
  143. package/dist/dataDownloads/components/ReportNameCell.d.ts +3 -0
  144. package/dist/dataDownloads/components/ReportNameCell.js +6 -0
  145. package/dist/dataDownloads/components/ReportNameCell.js.map +1 -0
  146. package/dist/dataDownloads/data/api.d.ts +2 -0
  147. package/dist/dataDownloads/data/api.js +23 -0
  148. package/dist/dataDownloads/data/api.js.map +1 -0
  149. package/dist/dataDownloads/data/apiHook.d.ts +7 -0
  150. package/dist/dataDownloads/data/apiHook.js +22 -0
  151. package/dist/dataDownloads/data/apiHook.js.map +1 -0
  152. package/dist/dataDownloads/data/queryKeys.d.ts +5 -0
  153. package/dist/dataDownloads/data/queryKeys.js +7 -0
  154. package/dist/dataDownloads/data/queryKeys.js.map +1 -0
  155. package/dist/dataDownloads/messages.d.ts +338 -0
  156. package/dist/dataDownloads/messages.js +341 -0
  157. package/dist/dataDownloads/messages.js.map +1 -0
  158. package/dist/dataDownloads/types.d.ts +8 -0
  159. package/dist/dataDownloads/types.js +2 -0
  160. package/dist/dataDownloads/types.js.map +1 -0
  161. package/dist/dataDownloads/utils.d.ts +26 -0
  162. package/dist/dataDownloads/utils.js +49 -0
  163. package/dist/dataDownloads/utils.js.map +1 -0
  164. package/dist/dateExtensions/DateExtensionsPage.d.ts +2 -0
  165. package/dist/dateExtensions/DateExtensionsPage.js +87 -0
  166. package/dist/dateExtensions/DateExtensionsPage.js.map +1 -0
  167. package/dist/dateExtensions/components/AddExtensionModal.d.ts +13 -0
  168. package/dist/dateExtensions/components/AddExtensionModal.js +34 -0
  169. package/dist/dateExtensions/components/AddExtensionModal.js.map +1 -0
  170. package/dist/dateExtensions/components/DateExtensionsList.d.ts +7 -0
  171. package/dist/dateExtensions/components/DateExtensionsList.js +103 -0
  172. package/dist/dateExtensions/components/DateExtensionsList.js.map +1 -0
  173. package/dist/dateExtensions/components/ResetExtensionsModal.d.ts +10 -0
  174. package/dist/dateExtensions/components/ResetExtensionsModal.js +10 -0
  175. package/dist/dateExtensions/components/ResetExtensionsModal.js.map +1 -0
  176. package/dist/dateExtensions/components/SelectGradedSubsection.d.ts +8 -0
  177. package/dist/dateExtensions/components/SelectGradedSubsection.js +15 -0
  178. package/dist/dateExtensions/components/SelectGradedSubsection.js.map +1 -0
  179. package/dist/dateExtensions/data/api.d.ts +6 -0
  180. package/dist/dateExtensions/data/api.js +40 -0
  181. package/dist/dateExtensions/data/api.js.map +1 -0
  182. package/dist/dateExtensions/data/apiHook.d.ts +11 -0
  183. package/dist/dateExtensions/data/apiHook.js +31 -0
  184. package/dist/dateExtensions/data/apiHook.js.map +1 -0
  185. package/dist/dateExtensions/data/queryKeys.d.ts +10 -0
  186. package/dist/dateExtensions/data/queryKeys.js +17 -0
  187. package/dist/dateExtensions/data/queryKeys.js.map +1 -0
  188. package/dist/dateExtensions/messages.d.ts +128 -0
  189. package/dist/dateExtensions/messages.js +130 -0
  190. package/dist/dateExtensions/messages.js.map +1 -0
  191. package/dist/dateExtensions/types.d.ts +24 -0
  192. package/dist/dateExtensions/types.js +2 -0
  193. package/dist/dateExtensions/types.js.map +1 -0
  194. package/dist/enrollments/EnrollmentsPage.d.ts +2 -0
  195. package/dist/enrollments/EnrollmentsPage.js +32 -0
  196. package/dist/enrollments/EnrollmentsPage.js.map +1 -0
  197. package/dist/enrollments/components/EnrollmentStatusModal.d.ts +6 -0
  198. package/dist/enrollments/components/EnrollmentStatusModal.js +23 -0
  199. package/dist/enrollments/components/EnrollmentStatusModal.js.map +1 -0
  200. package/dist/enrollments/components/EnrollmentsList.d.ts +6 -0
  201. package/dist/enrollments/components/EnrollmentsList.js +99 -0
  202. package/dist/enrollments/components/EnrollmentsList.js.map +1 -0
  203. package/dist/enrollments/components/UnenrollModal.d.ts +8 -0
  204. package/dist/enrollments/components/UnenrollModal.js +7 -0
  205. package/dist/enrollments/components/UnenrollModal.js.map +1 -0
  206. package/dist/enrollments/data/api.d.ts +4 -0
  207. package/dist/enrollments/data/api.js +32 -0
  208. package/dist/enrollments/data/api.js.map +1 -0
  209. package/dist/enrollments/data/apiHook.d.ts +3 -0
  210. package/dist/enrollments/data/apiHook.js +14 -0
  211. package/dist/enrollments/data/apiHook.js.map +1 -0
  212. package/dist/enrollments/data/queryKeys.d.ts +7 -0
  213. package/dist/enrollments/data/queryKeys.js +8 -0
  214. package/dist/enrollments/data/queryKeys.js.map +1 -0
  215. package/dist/enrollments/messages.d.ts +108 -0
  216. package/dist/enrollments/messages.js +110 -0
  217. package/dist/enrollments/messages.js.map +1 -0
  218. package/dist/enrollments/types.d.ts +15 -0
  219. package/dist/enrollments/types.js +2 -0
  220. package/dist/enrollments/types.js.map +1 -0
  221. package/dist/grading/GradingPage.d.ts +2 -0
  222. package/dist/grading/GradingPage.js +6 -0
  223. package/dist/grading/GradingPage.js.map +1 -0
  224. package/dist/hooks/useDebouncedFilter.d.ts +16 -0
  225. package/dist/hooks/useDebouncedFilter.js +27 -0
  226. package/dist/hooks/useDebouncedFilter.js.map +1 -0
  227. package/dist/i18n/index.d.ts +25 -0
  228. package/dist/i18n/index.js +26 -0
  229. package/dist/i18n/index.js.map +1 -0
  230. package/dist/index.d.ts +3 -0
  231. package/dist/index.js +4 -0
  232. package/dist/index.js.map +1 -0
  233. package/dist/instructorNav/InstructorNav.d.ts +8 -0
  234. package/dist/instructorNav/InstructorNav.js +42 -0
  235. package/dist/instructorNav/InstructorNav.js.map +1 -0
  236. package/dist/openResponses/OpenResponsesPage.d.ts +2 -0
  237. package/dist/openResponses/OpenResponsesPage.js +8 -0
  238. package/dist/openResponses/OpenResponsesPage.js.map +1 -0
  239. package/dist/openResponses/components/DetailAssessmentsList.d.ts +2 -0
  240. package/dist/openResponses/components/DetailAssessmentsList.js +44 -0
  241. package/dist/openResponses/components/DetailAssessmentsList.js.map +1 -0
  242. package/dist/openResponses/components/OpenResponsesSummary.d.ts +2 -0
  243. package/dist/openResponses/components/OpenResponsesSummary.js +30 -0
  244. package/dist/openResponses/components/OpenResponsesSummary.js.map +1 -0
  245. package/dist/openResponses/data/api.d.ts +4 -0
  246. package/dist/openResponses/data/api.js +23 -0
  247. package/dist/openResponses/data/api.js.map +1 -0
  248. package/dist/openResponses/data/apiHook.d.ts +2 -0
  249. package/dist/openResponses/data/apiHook.js +14 -0
  250. package/dist/openResponses/data/apiHook.js.map +1 -0
  251. package/dist/openResponses/data/queryKeys.d.ts +6 -0
  252. package/dist/openResponses/data/queryKeys.js +8 -0
  253. package/dist/openResponses/data/queryKeys.js.map +1 -0
  254. package/dist/openResponses/messages.d.ts +83 -0
  255. package/dist/openResponses/messages.js +85 -0
  256. package/dist/openResponses/messages.js.map +1 -0
  257. package/dist/openResponses/types.d.ts +12 -0
  258. package/dist/openResponses/types.js +2 -0
  259. package/dist/openResponses/types.js.map +1 -0
  260. package/dist/pageWrapper/PageWrapper.d.ts +4 -0
  261. package/dist/pageWrapper/PageWrapper.js +11 -0
  262. package/dist/pageWrapper/PageWrapper.js.map +1 -0
  263. package/dist/pageWrapper/messages.d.ts +8 -0
  264. package/dist/pageWrapper/messages.js +10 -0
  265. package/dist/pageWrapper/messages.js.map +1 -0
  266. package/dist/providers/AlertProvider.d.ts +41 -0
  267. package/dist/providers/AlertProvider.js +117 -0
  268. package/dist/providers/AlertProvider.js.map +1 -0
  269. package/dist/providers/QueryProvider.d.ts +6 -0
  270. package/dist/providers/QueryProvider.js +16 -0
  271. package/dist/providers/QueryProvider.js.map +1 -0
  272. package/dist/providers.d.ts +3 -0
  273. package/dist/providers.js +8 -0
  274. package/dist/providers.js.map +1 -0
  275. package/dist/routes.d.ts +20 -0
  276. package/dist/routes.js +72 -0
  277. package/dist/routes.js.map +1 -0
  278. package/dist/slots/PlaceholderSlot/PlaceholderSlot.d.ts +1 -0
  279. package/dist/slots/PlaceholderSlot/PlaceholderSlot.js +6 -0
  280. package/dist/slots/PlaceholderSlot/PlaceholderSlot.js.map +1 -0
  281. package/dist/slots/SlotUtils.d.ts +3 -0
  282. package/dist/slots/SlotUtils.js +17 -0
  283. package/dist/slots/SlotUtils.js.map +1 -0
  284. package/dist/slots.d.ts +3 -0
  285. package/dist/slots.js +3 -0
  286. package/dist/slots.js.map +1 -0
  287. package/dist/specialExams/SpecialExamsPage.d.ts +2 -0
  288. package/dist/specialExams/SpecialExamsPage.js +6 -0
  289. package/dist/specialExams/SpecialExamsPage.js.map +1 -0
  290. package/dist/testUtils.d.ts +4 -0
  291. package/dist/testUtils.js +24 -0
  292. package/dist/testUtils.js.map +1 -0
  293. package/dist/types/index.d.ts +40 -0
  294. package/dist/types/index.js +4 -0
  295. package/dist/types/index.js.map +1 -0
  296. package/dist/utils/formatters.d.ts +1 -0
  297. package/dist/utils/formatters.js +12 -0
  298. package/dist/utils/formatters.js.map +1 -0
  299. package/package.json +79 -0
package/dist/routes.js ADDED
@@ -0,0 +1,72 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ import { useParams, Navigate } from 'react-router-dom';
12
+ import CohortsPage from './cohorts/CohortsPage';
13
+ import CourseInfoPage from './courseInfo/CourseInfoPage';
14
+ import CertificatesPage from './certificates/CertificatesPage';
15
+ import CourseTeamPage from './courseTeam/CourseTeamPage';
16
+ import DataDownloadsPage from './dataDownloads/DataDownloadsPage';
17
+ import DateExtensionsPage from './dateExtensions/DateExtensionsPage';
18
+ import EnrollmentsPage from './enrollments/EnrollmentsPage';
19
+ import GradingPage from './grading/GradingPage';
20
+ import OpenResponsesPage from './openResponses/OpenResponsesPage';
21
+ import SpecialExamsPage from './specialExams/SpecialExamsPage';
22
+ import PageNotFound from './components/PageNotFound';
23
+ import { useWidgetProps } from './slots/SlotUtils';
24
+ const defaultTabs = [
25
+ { tabId: 'course_info', content: _jsx(CourseInfoPage, {}) },
26
+ { tabId: 'enrollments', content: _jsx(EnrollmentsPage, {}) },
27
+ { tabId: 'course_team', content: _jsx(CourseTeamPage, {}) },
28
+ { tabId: 'cohorts', content: _jsx(CohortsPage, {}) },
29
+ { tabId: 'date_extensions', content: _jsx(DateExtensionsPage, {}) },
30
+ { tabId: 'grading', content: _jsx(GradingPage, {}) },
31
+ { tabId: 'data_downloads', content: _jsx(DataDownloadsPage, {}) },
32
+ { tabId: 'special_exams', content: _jsx(SpecialExamsPage, {}) },
33
+ { tabId: 'certificates', content: _jsx(CertificatesPage, {}) },
34
+ { tabId: 'open_responses', content: _jsx(OpenResponsesPage, {}) },
35
+ ];
36
+ const TabContent = () => {
37
+ const { tabId } = useParams();
38
+ const routeWidgets = useWidgetProps('org.openedx.frontend.slot.instructor.routes.v1');
39
+ const tabRoutes = [
40
+ ...defaultTabs.filter(defaultTab => !routeWidgets.some(slotTab => slotTab.tabId === defaultTab.tabId)),
41
+ ...routeWidgets
42
+ ];
43
+ const foundTab = tabRoutes.find(tab => tab.tabId === tabId);
44
+ return foundTab ? foundTab.content : _jsx(PageNotFound, {});
45
+ };
46
+ const routes = [
47
+ {
48
+ id: 'org.openedx.frontend.route.instructor.main',
49
+ path: 'instructor-dashboard/:courseId',
50
+ handle: {
51
+ role: 'org.openedx.frontend.role.instructor'
52
+ },
53
+ lazy() {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ const module = yield import('./Main');
56
+ return { Component: module.default };
57
+ });
58
+ },
59
+ children: [
60
+ {
61
+ index: true,
62
+ element: _jsx(Navigate, { to: "course_info", replace: true })
63
+ },
64
+ {
65
+ path: ':tabId',
66
+ element: _jsx(TabContent, {})
67
+ },
68
+ ]
69
+ }
70
+ ];
71
+ export default routes;
72
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.tsx"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,cAAc,MAAM,gCAAgC,CAAC;AAC5D,OAAO,gBAAgB,MAAM,oCAAoC,CAAC;AAClE,OAAO,cAAc,MAAM,gCAAgC,CAAC;AAC5D,OAAO,iBAAiB,MAAM,sCAAsC,CAAC;AACrE,OAAO,kBAAkB,MAAM,wCAAwC,CAAC;AACxE,OAAO,eAAe,MAAM,kCAAkC,CAAC;AAC/D,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,iBAAiB,MAAM,sCAAsC,CAAC;AACrE,OAAO,gBAAgB,MAAM,oCAAoC,CAAC;AAClE,OAAO,YAAY,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOnD,MAAM,WAAW,GAA2B;IAC1C,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,KAAC,cAAc,KAAG,EAAE;IACrD,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,KAAC,eAAe,KAAG,EAAE;IACtD,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,KAAC,cAAc,KAAG,EAAE;IACrD,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAC,WAAW,KAAG,EAAE;IAC9C,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,KAAC,kBAAkB,KAAG,EAAE;IAC7D,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAC,WAAW,KAAG,EAAE;IAC9C,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAC,iBAAiB,KAAG,EAAE;IAC3D,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,KAAC,gBAAgB,KAAG,EAAE;IACzD,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,KAAC,gBAAgB,KAAG,EAAE;IACxD,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAC,iBAAiB,KAAG,EAAE;CAC5D,CAAC;AAEF,MAAM,UAAU,GAAG,GAAG,EAAE;IACtB,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAqB,CAAC;IACjD,MAAM,YAAY,GAAG,cAAc,CAAC,gDAAgD,CAA2B,CAAC;IAEhH,MAAM,SAAS,GAAG;QAChB,GAAG,WAAW,CAAC,MAAM,CACnB,UAAU,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK,CAAC,CAChF;QACD,GAAG,YAAY;KAChB,CAAC;IAEF,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAE5D,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAC,YAAY,KAAG,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG;IACb;QACE,EAAE,EAAE,4CAA4C;QAChD,IAAI,EAAE,gCAAgC;QACtC,MAAM,EAAE;YACN,IAAI,EAAE,sCAAsC;SAC7C;QACK,IAAI;;gBACR,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACtC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,CAAC;SAAA;QACD,QAAQ,EAAE;YACR;gBACE,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,KAAC,QAAQ,IAAC,EAAE,EAAC,aAAa,EAAC,OAAO,SAAG;aAC/C;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,KAAC,UAAU,KAAG;aACxB;SACF;KACF;CACF,CAAC;AAEF,eAAe,MAAM,CAAC","sourcesContent":["import { useParams, Navigate } from 'react-router-dom';\nimport CohortsPage from '@src/cohorts/CohortsPage';\nimport CourseInfoPage from '@src/courseInfo/CourseInfoPage';\nimport CertificatesPage from '@src/certificates/CertificatesPage';\nimport CourseTeamPage from '@src/courseTeam/CourseTeamPage';\nimport DataDownloadsPage from '@src/dataDownloads/DataDownloadsPage';\nimport DateExtensionsPage from '@src/dateExtensions/DateExtensionsPage';\nimport EnrollmentsPage from '@src/enrollments/EnrollmentsPage';\nimport GradingPage from '@src/grading/GradingPage';\nimport OpenResponsesPage from '@src/openResponses/OpenResponsesPage';\nimport SpecialExamsPage from '@src/specialExams/SpecialExamsPage';\nimport PageNotFound from '@src/components/PageNotFound';\nimport { useWidgetProps } from './slots/SlotUtils';\n\ninterface InstructorRouteProps {\n tabId: string,\n content: React.ReactNode,\n}\n\nconst defaultTabs: InstructorRouteProps[] = [\n { tabId: 'course_info', content: <CourseInfoPage /> },\n { tabId: 'enrollments', content: <EnrollmentsPage /> },\n { tabId: 'course_team', content: <CourseTeamPage /> },\n { tabId: 'cohorts', content: <CohortsPage /> },\n { tabId: 'date_extensions', content: <DateExtensionsPage /> },\n { tabId: 'grading', content: <GradingPage /> },\n { tabId: 'data_downloads', content: <DataDownloadsPage /> },\n { tabId: 'special_exams', content: <SpecialExamsPage /> },\n { tabId: 'certificates', content: <CertificatesPage /> },\n { tabId: 'open_responses', content: <OpenResponsesPage /> },\n];\n\nconst TabContent = () => {\n const { tabId } = useParams<{ tabId: string }>();\n const routeWidgets = useWidgetProps('org.openedx.frontend.slot.instructor.routes.v1') as InstructorRouteProps[];\n\n const tabRoutes = [\n ...defaultTabs.filter(\n defaultTab => !routeWidgets.some(slotTab => slotTab.tabId === defaultTab.tabId)\n ),\n ...routeWidgets\n ];\n\n const foundTab = tabRoutes.find(tab => tab.tabId === tabId);\n\n return foundTab ? foundTab.content : <PageNotFound />;\n};\n\nconst routes = [\n {\n id: 'org.openedx.frontend.route.instructor.main',\n path: 'instructor-dashboard/:courseId',\n handle: {\n role: 'org.openedx.frontend.role.instructor'\n },\n async lazy() {\n const module = await import('./Main');\n return { Component: module.default };\n },\n children: [\n {\n index: true,\n element: <Navigate to=\"course_info\" replace />\n },\n {\n path: ':tabId',\n element: <TabContent />\n },\n ]\n }\n];\n\nexport default routes;\n"]}
@@ -0,0 +1 @@
1
+ export declare const PlaceholderSlot: (_props: Record<string, any>) => null;
@@ -0,0 +1,6 @@
1
+ // This component will be a placeholder/dummy component just to retrieve Tab/Route props
2
+ // Since we need sortOrder prop (is not native on nav item/link) and we need tabId to identify content on routes
3
+ // We need to retrieve the props needed instead of rendering the Slot directly
4
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
5
+ export const PlaceholderSlot = (_props) => null;
6
+ //# sourceMappingURL=PlaceholderSlot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaceholderSlot.js","sourceRoot":"","sources":["../../../src/slots/PlaceholderSlot/PlaceholderSlot.tsx"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,gHAAgH;AAChH,8EAA8E;AAC9E,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAA2B,EAAE,EAAE,CAAC,IAAI,CAAC","sourcesContent":["// This component will be a placeholder/dummy component just to retrieve Tab/Route props\n// Since we need sortOrder prop (is not native on nav item/link) and we need tabId to identify content on routes\n// We need to retrieve the props needed instead of rendering the Slot directly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const PlaceholderSlot = (_props: Record<string, any>) => null;\n"]}
@@ -0,0 +1,3 @@
1
+ import { ReactNode } from 'react';
2
+ export declare function extractWidgetProps<T>(widget: ReactNode, validate?: (props: T) => boolean): T | null;
3
+ export declare function useWidgetProps<T>(slotId: string, validate?: (props: T) => boolean): T[];
@@ -0,0 +1,17 @@
1
+ import { useWidgetsForId } from '@openedx/frontend-base';
2
+ export function extractWidgetProps(widget, validate) {
3
+ if (widget && typeof widget === 'object' && 'props' in widget) {
4
+ const props = widget.props.children.props;
5
+ if (!validate || validate(props)) {
6
+ return props;
7
+ }
8
+ }
9
+ return null;
10
+ }
11
+ export function useWidgetProps(slotId, validate) {
12
+ const widgets = useWidgetsForId(slotId);
13
+ return widgets
14
+ .map(widget => extractWidgetProps(widget, validate))
15
+ .filter((props) => props !== null && props !== undefined) || [];
16
+ }
17
+ //# sourceMappingURL=SlotUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlotUtils.js","sourceRoot":"","sources":["../../src/slots/SlotUtils.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,MAAM,UAAU,kBAAkB,CAAI,MAAiB,EAAE,QAAgC;IACvF,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAU,CAAC;QAC/C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAAI,MAAc,EAAE,QAAgC;IAChF,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,OAAO;SACX,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAI,MAAM,EAAE,QAAQ,CAAC,CAAC;SACtD,MAAM,CAAC,CAAC,KAAK,EAAc,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;AAChF,CAAC","sourcesContent":["import { useWidgetsForId } from '@openedx/frontend-base';\nimport { ReactNode } from 'react';\n\nexport function extractWidgetProps<T>(widget: ReactNode, validate?: (props: T) => boolean): T | null {\n if (widget && typeof widget === 'object' && 'props' in widget) {\n const props = widget.props.children.props as T;\n if (!validate || validate(props)) {\n return props;\n }\n }\n return null;\n}\n\nexport function useWidgetProps<T>(slotId: string, validate?: (props: T) => boolean): T[] {\n const widgets = useWidgetsForId(slotId);\n return widgets\n .map(widget => extractWidgetProps<T>(widget, validate))\n .filter((props): props is T => props !== null && props !== undefined) || [];\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { SlotOperation } from '@openedx/frontend-base';
2
+ declare const slots: SlotOperation[];
3
+ export default slots;
package/dist/slots.js ADDED
@@ -0,0 +1,3 @@
1
+ const slots = [];
2
+ export default slots;
3
+ //# sourceMappingURL=slots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slots.js","sourceRoot":"","sources":["../src/slots.tsx"],"names":[],"mappings":"AAEA,MAAM,KAAK,GAAoB,EAAE,CAAC;AAElC,eAAe,KAAK,CAAC","sourcesContent":["import { SlotOperation } from '@openedx/frontend-base';\n\nconst slots: SlotOperation[] = [];\n\nexport default slots;\n"]}
@@ -0,0 +1,2 @@
1
+ declare const SpecialExamsPage: () => import("react/jsx-runtime").JSX.Element;
2
+ export default SpecialExamsPage;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ const SpecialExamsPage = () => {
3
+ return (_jsx("div", { children: _jsx("h3", { children: "Special Exams" }) }));
4
+ };
5
+ export default SpecialExamsPage;
6
+ //# sourceMappingURL=SpecialExamsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpecialExamsPage.js","sourceRoot":"","sources":["../../src/specialExams/SpecialExamsPage.tsx"],"names":[],"mappings":";AAAA,MAAM,gBAAgB,GAAG,GAAG,EAAE;IAC5B,OAAO,CACL,wBACE,yCAAsB,GAClB,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC","sourcesContent":["const SpecialExamsPage = () => {\n return (\n <div>\n <h3>Special Exams</h3>\n </div>\n );\n};\n\nexport default SpecialExamsPage;\n"]}
@@ -0,0 +1,4 @@
1
+ export declare const renderWithQueryClient: (ui: React.ReactElement) => import("@testing-library/react").RenderResult<typeof import("@testing-library/dom/types/queries"), HTMLElement, HTMLElement>;
2
+ export declare const renderWithIntl: (component: any) => import("@testing-library/react").RenderResult<typeof import("@testing-library/dom/types/queries"), HTMLElement, HTMLElement>;
3
+ export declare const renderWithAlertAndIntl: (component: any) => import("@testing-library/react").RenderResult<typeof import("@testing-library/dom/types/queries"), HTMLElement, HTMLElement>;
4
+ export declare const createQueryMock: (data?: any, isLoading?: boolean) => any;
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { render } from '@testing-library/react';
3
+ import { IntlProvider } from '@openedx/frontend-base';
4
+ import { AlertProvider } from './providers/AlertProvider';
5
+ import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
6
+ const queryClient = new QueryClient();
7
+ export const renderWithQueryClient = (ui) => renderWithIntl(_jsx(QueryClientProvider, { client: queryClient, children: ui }));
8
+ export const renderWithIntl = (component) => {
9
+ return render(_jsx(IntlProvider, { locale: "en", messages: {}, children: component }));
10
+ };
11
+ export const renderWithAlertAndIntl = (component) => {
12
+ return render(_jsx(AlertProvider, { children: _jsx(IntlProvider, { locale: "en", messages: {}, children: component }) }));
13
+ };
14
+ export const createQueryMock = (data = undefined, isLoading = false) => ({
15
+ data,
16
+ isLoading,
17
+ error: null,
18
+ isError: false,
19
+ isSuccess: !isLoading && data !== undefined,
20
+ status: isLoading ? 'loading' : data ? 'success' : 'idle',
21
+ fetchStatus: isLoading ? 'fetching' : 'idle',
22
+ refetch: jest.fn(),
23
+ });
24
+ //# sourceMappingURL=testUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../src/testUtils.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEzE,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EAAsB,EAAE,EAAE,CAC9D,cAAc,CACZ,KAAC,mBAAmB,IAAC,MAAM,EAAE,WAAW,YACrC,EAAE,GACiB,CACvB,CAAC;AAEJ,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,EAAE;IAC1C,OAAO,MAAM,CAAC,KAAC,YAAY,IAAC,MAAM,EAAC,IAAI,EAAC,QAAQ,EAAE,EAAE,YAAI,SAAS,GAAiB,CAAC,CAAC;AACtF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,SAAS,EAAE,EAAE;IAClD,OAAO,MAAM,CACX,KAAC,aAAa,cACZ,KAAC,YAAY,IAAC,MAAM,EAAC,IAAI,EAAC,QAAQ,EAAE,EAAE,YACnC,SAAS,GACG,GACD,CACjB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAY,SAAS,EAAE,SAAS,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC;IAC5E,IAAI;IACJ,SAAS;IACT,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,CAAC,SAAS,IAAI,IAAI,KAAK,SAAS;IAC3C,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;IACzD,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;IAC5C,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;CACX,CAAA,CAAC","sourcesContent":["import { render } from '@testing-library/react';\nimport { IntlProvider } from '@openedx/frontend-base';\nimport { AlertProvider } from './providers/AlertProvider';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\n\nconst queryClient = new QueryClient();\n\nexport const renderWithQueryClient = (ui: React.ReactElement) =>\n renderWithIntl(\n <QueryClientProvider client={queryClient}>\n {ui}\n </QueryClientProvider>\n );\n\nexport const renderWithIntl = (component) => {\n return render(<IntlProvider locale=\"en\" messages={{}}>{ component }</IntlProvider>);\n};\n\nexport const renderWithAlertAndIntl = (component) => {\n return render(\n <AlertProvider>\n <IntlProvider locale=\"en\" messages={{}}>\n {component}\n </IntlProvider>\n </AlertProvider>\n );\n};\n\nexport const createQueryMock = (data: any = undefined, isLoading = false) => ({\n data,\n isLoading,\n error: null,\n isError: false,\n isSuccess: !isLoading && data !== undefined,\n status: isLoading ? 'loading' : data ? 'success' : 'idle',\n fetchStatus: isLoading ? 'fetching' : 'idle',\n refetch: jest.fn(),\n} as any);\n"]}
@@ -0,0 +1,40 @@
1
+ export interface TableCellValue<T> {
2
+ row: {
3
+ original: T;
4
+ };
5
+ }
6
+ export interface PaginationParams {
7
+ page: number;
8
+ pageSize: number;
9
+ }
10
+ export interface APIError {
11
+ response: {
12
+ data: {
13
+ error: string;
14
+ };
15
+ };
16
+ }
17
+ export interface DataList<T> {
18
+ count: number;
19
+ numPages: number;
20
+ results: T[];
21
+ }
22
+ export interface PendingTask {
23
+ taskType: string;
24
+ taskInput: Record<string, any>;
25
+ taskId: string;
26
+ requester: string;
27
+ taskState: string;
28
+ created: string;
29
+ taskOutput: Record<string, any> | null;
30
+ durationSec: number;
31
+ status: string;
32
+ taskMessage: string;
33
+ }
34
+ export interface DataTableFetchDataProps {
35
+ filters: {
36
+ id: string;
37
+ value: string;
38
+ }[];
39
+ pageIndex: number;
40
+ }
@@ -0,0 +1,4 @@
1
+ ;
2
+ ;
3
+ export {};
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAiBC,CAAC;AAMD,CAAC","sourcesContent":["export interface TableCellValue<T> {\n row: {\n original: T,\n },\n}\n\nexport interface PaginationParams {\n page: number,\n pageSize: number,\n}\n\nexport interface APIError {\n response: {\n data: {\n error: string,\n },\n },\n};\n\nexport interface DataList<T> {\n count: number,\n numPages: number,\n results: T[],\n};\n\nexport interface PendingTask {\n taskType: string,\n taskInput: Record<string, any>,\n taskId: string,\n requester: string,\n taskState: string,\n created: string,\n taskOutput: Record<string, any> | null,\n durationSec: number,\n status: string,\n taskMessage: string,\n}\n\nexport interface DataTableFetchDataProps {\n filters: { id: string, value: string }[],\n pageIndex: number,\n}\n"]}
@@ -0,0 +1 @@
1
+ export declare const parseObject: (input: any) => string;
@@ -0,0 +1,12 @@
1
+ export const parseObject = (input) => {
2
+ if (typeof input === 'string') {
3
+ return input;
4
+ }
5
+ try {
6
+ return JSON.stringify(input, null, 2);
7
+ }
8
+ catch (_a) {
9
+ return String(input);
10
+ }
11
+ };
12
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/utils/formatters.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAU,EAAU,EAAE;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC","sourcesContent":["export const parseObject = (input: any): string => {\n if (typeof input === 'string') {\n return input;\n }\n try {\n return JSON.stringify(input, null, 2);\n } catch {\n return String(input);\n }\n};\n"]}
package/package.json ADDED
@@ -0,0 +1,79 @@
1
+ {
2
+ "name": "@openedx/frontend-app-instructor-dashboard",
3
+ "version": "1.0.0-alpha.0",
4
+ "description": "The Open edX Instructor Dashboard",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/openedx/frontend-app-instructor-dashboard.git"
8
+ },
9
+ "exports": {
10
+ ".": "./dist/index.js",
11
+ "./app.scss": "./dist/app.scss"
12
+ },
13
+ "files": [
14
+ "/dist"
15
+ ],
16
+ "workspaces": [
17
+ "packages/*"
18
+ ],
19
+ "browserslist": [
20
+ "extends @edx/browserslist-config"
21
+ ],
22
+ "sideEffects": [
23
+ "*.css",
24
+ "*.scss"
25
+ ],
26
+ "scripts": {
27
+ "build": "make build",
28
+ "build:packages": "make build-packages",
29
+ "clean": "make clean",
30
+ "clean:packages": "make clean-packages",
31
+ "dev": "PORT=2003 PUBLIC_PATH=/instructor-dashboard openedx dev",
32
+ "dev:site": "make dev-site",
33
+ "dev:packages": "make dev-packages",
34
+ "i18n_extract": "openedx formatjs extract",
35
+ "lint": "openedx lint .",
36
+ "lint:fix": "openedx lint --fix .",
37
+ "prepack": "npm run clean && npm run build",
38
+ "snapshot": "openedx test --updateSnapshot",
39
+ "test": "openedx test --coverage --passWithNoTests",
40
+ "watch:build": "nodemon --exec 'npm run build'"
41
+ },
42
+ "author": "Open edX",
43
+ "license": "AGPL-3.0",
44
+ "homepage": "https://github.com/openedx/frontend-app-instructor-dashboard#readme",
45
+ "publishConfig": {
46
+ "access": "public"
47
+ },
48
+ "bugs": {
49
+ "url": "https://github.com/openedx/frontend-app-instructor-dashboard/issues"
50
+ },
51
+ "dependencies": {
52
+ "@edx/brand": "npm:@openedx/brand-openedx@^1.2.3",
53
+ "@edx/openedx-atlas": "^0.7.0",
54
+ "lodash": "^4.17.23"
55
+ },
56
+ "devDependencies": {
57
+ "@edx/browserslist-config": "^1.5.0",
58
+ "@tanstack/react-query-devtools": "^5.90.2",
59
+ "@testing-library/jest-dom": "^6.8.0",
60
+ "@testing-library/react": "^16.3.0",
61
+ "@testing-library/user-event": "^14.6.1",
62
+ "@types/jest": "^30.0.0",
63
+ "@types/react": "^18",
64
+ "@types/react-dom": "^18",
65
+ "jest": "^29",
66
+ "nodemon": "^3.1.14",
67
+ "tsc-alias": "^1.8.16",
68
+ "turbo": "^2.9.2"
69
+ },
70
+ "peerDependencies": {
71
+ "@openedx/frontend-base": "^1.0.0-alpha || 0.0.0-dev",
72
+ "@openedx/paragon": "^23",
73
+ "@tanstack/react-query": "^5",
74
+ "react": "^18",
75
+ "react-dom": "^18",
76
+ "react-router": "^6",
77
+ "react-router-dom": "^6"
78
+ }
79
+ }