@openedx/frontend-app-instructor-dashboard 1.0.0-alpha.1 → 1.0.0-alpha.11

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 (151) hide show
  1. package/dist/Main.js +3 -12
  2. package/dist/Main.js.map +1 -1
  3. package/dist/app.js +2 -8
  4. package/dist/app.js.map +1 -1
  5. package/dist/app.scss +4 -0
  6. package/dist/cohorts/CohortsPage.js +1 -1
  7. package/dist/cohorts/CohortsPage.js.map +1 -1
  8. package/dist/cohorts/data/queryKeys.d.ts +4 -4
  9. package/dist/components/SpecifyLearnerField.d.ts +4 -2
  10. package/dist/components/SpecifyLearnerField.js +38 -4
  11. package/dist/components/SpecifyLearnerField.js.map +1 -1
  12. package/dist/components/SpecifyProblem.d.ts +2 -0
  13. package/dist/components/SpecifyProblem.js +6 -0
  14. package/dist/components/SpecifyProblem.js.map +1 -0
  15. package/dist/components/UsernameFilter.d.ts +7 -0
  16. package/dist/components/UsernameFilter.js +19 -0
  17. package/dist/components/UsernameFilter.js.map +1 -0
  18. package/dist/components/messages.d.ts +15 -0
  19. package/dist/components/messages.js +15 -0
  20. package/dist/components/messages.js.map +1 -1
  21. package/dist/constants.d.ts +2 -1
  22. package/dist/constants.js +2 -1
  23. package/dist/constants.js.map +1 -1
  24. package/dist/courseInfo/types.d.ts +7 -0
  25. package/dist/courseInfo/types.js.map +1 -1
  26. package/dist/courseTeam/CourseTeamPage.js +9 -2
  27. package/dist/courseTeam/CourseTeamPage.js.map +1 -1
  28. package/dist/courseTeam/components/MembersContent.d.ts +2 -0
  29. package/dist/courseTeam/components/MembersContent.js +60 -0
  30. package/dist/courseTeam/components/MembersContent.js.map +1 -0
  31. package/dist/courseTeam/components/RolesContent.d.ts +3 -0
  32. package/dist/courseTeam/components/RolesContent.js +25 -0
  33. package/dist/courseTeam/components/RolesContent.js.map +1 -0
  34. package/dist/courseTeam/data/api.d.ts +4 -0
  35. package/dist/courseTeam/data/api.js +30 -0
  36. package/dist/courseTeam/data/api.js.map +1 -0
  37. package/dist/courseTeam/data/apiHook.d.ts +3 -0
  38. package/dist/courseTeam/data/apiHook.js +14 -0
  39. package/dist/courseTeam/data/apiHook.js.map +1 -0
  40. package/dist/courseTeam/data/queryKeys.d.ts +7 -0
  41. package/dist/courseTeam/data/queryKeys.js +14 -0
  42. package/dist/courseTeam/data/queryKeys.js.map +1 -0
  43. package/dist/courseTeam/messages.d.ts +158 -0
  44. package/dist/courseTeam/messages.js +160 -0
  45. package/dist/courseTeam/messages.js.map +1 -0
  46. package/dist/courseTeam/types.d.ts +15 -0
  47. package/dist/courseTeam/types.js +2 -0
  48. package/dist/courseTeam/types.js.map +1 -0
  49. package/dist/data/api.d.ts +9 -1
  50. package/dist/data/api.js +13 -3
  51. package/dist/data/api.js.map +1 -1
  52. package/dist/data/apiHook.d.ts +1 -0
  53. package/dist/data/apiHook.js +10 -2
  54. package/dist/data/apiHook.js.map +1 -1
  55. package/dist/data/queryKeys.d.ts +8 -4
  56. package/dist/data/queryKeys.js +4 -0
  57. package/dist/data/queryKeys.js.map +1 -1
  58. package/dist/dataDownloads/data/queryKeys.d.ts +3 -3
  59. package/dist/dateExtensions/components/AddExtensionModal.d.ts +2 -6
  60. package/dist/dateExtensions/components/AddExtensionModal.js +22 -8
  61. package/dist/dateExtensions/components/AddExtensionModal.js.map +1 -1
  62. package/dist/dateExtensions/components/DateExtensionsList.js +2 -13
  63. package/dist/dateExtensions/components/DateExtensionsList.js.map +1 -1
  64. package/dist/dateExtensions/data/queryKeys.d.ts +5 -5
  65. package/dist/dateExtensions/messages.d.ts +0 -5
  66. package/dist/dateExtensions/messages.js +0 -5
  67. package/dist/dateExtensions/messages.js.map +1 -1
  68. package/dist/dateExtensions/types.d.ts +6 -2
  69. package/dist/dateExtensions/types.js.map +1 -1
  70. package/dist/enrollments/EnrollmentsPage.js +32 -5
  71. package/dist/enrollments/EnrollmentsPage.js.map +1 -1
  72. package/dist/enrollments/components/AddBetaTestersModal.d.ts +6 -0
  73. package/dist/enrollments/components/AddBetaTestersModal.js +61 -0
  74. package/dist/enrollments/components/AddBetaTestersModal.js.map +1 -0
  75. package/dist/enrollments/components/EnrollLearnersModal.d.ts +6 -0
  76. package/dist/enrollments/components/EnrollLearnersModal.js +53 -0
  77. package/dist/enrollments/components/EnrollLearnersModal.js.map +1 -0
  78. package/dist/enrollments/components/EnrollmentStatusModal.js +3 -3
  79. package/dist/enrollments/components/EnrollmentStatusModal.js.map +1 -1
  80. package/dist/enrollments/components/EnrollmentsList.d.ts +4 -3
  81. package/dist/enrollments/components/EnrollmentsList.js +13 -14
  82. package/dist/enrollments/components/EnrollmentsList.js.map +1 -1
  83. package/dist/enrollments/components/UnenrollModal.d.ts +2 -2
  84. package/dist/enrollments/components/UnenrollModal.js +29 -3
  85. package/dist/enrollments/components/UnenrollModal.js.map +1 -1
  86. package/dist/enrollments/components/UpdateBetaTesterModal.d.ts +8 -0
  87. package/dist/enrollments/components/UpdateBetaTesterModal.js +52 -0
  88. package/dist/enrollments/components/UpdateBetaTesterModal.js.map +1 -0
  89. package/dist/enrollments/data/api.d.ts +4 -2
  90. package/dist/enrollments/data/api.js +11 -1
  91. package/dist/enrollments/data/api.js.map +1 -1
  92. package/dist/enrollments/data/apiHook.d.ts +5 -3
  93. package/dist/enrollments/data/apiHook.js +21 -3
  94. package/dist/enrollments/data/apiHook.js.map +1 -1
  95. package/dist/enrollments/data/queryKeys.d.ts +5 -5
  96. package/dist/enrollments/data/queryKeys.js.map +1 -1
  97. package/dist/enrollments/messages.d.ts +121 -1
  98. package/dist/enrollments/messages.js +126 -6
  99. package/dist/enrollments/messages.js.map +1 -1
  100. package/dist/enrollments/types.d.ts +26 -5
  101. package/dist/enrollments/types.js.map +1 -1
  102. package/dist/grading/GradingPage.js +11 -2
  103. package/dist/grading/GradingPage.js.map +1 -1
  104. package/dist/grading/components/GradingActionRow.d.ts +2 -0
  105. package/dist/grading/components/GradingActionRow.js +28 -0
  106. package/dist/grading/components/GradingActionRow.js.map +1 -0
  107. package/dist/grading/components/GradingConfigurationModal.d.ts +6 -0
  108. package/dist/grading/components/GradingConfigurationModal.js +14 -0
  109. package/dist/grading/components/GradingConfigurationModal.js.map +1 -0
  110. package/dist/grading/components/GradingLearnerContent.d.ts +6 -0
  111. package/dist/grading/components/GradingLearnerContent.js +12 -0
  112. package/dist/grading/components/GradingLearnerContent.js.map +1 -0
  113. package/dist/grading/data/api.d.ts +1 -0
  114. package/dist/grading/data/api.js +17 -0
  115. package/dist/grading/data/api.js.map +1 -0
  116. package/dist/grading/data/apiHook.d.ts +1 -0
  117. package/dist/grading/data/apiHook.js +9 -0
  118. package/dist/grading/data/apiHook.js.map +1 -0
  119. package/dist/grading/data/queryKeys.d.ts +5 -0
  120. package/dist/grading/data/queryKeys.js +7 -0
  121. package/dist/grading/data/queryKeys.js.map +1 -0
  122. package/dist/grading/messages.d.ts +63 -0
  123. package/dist/grading/messages.js +65 -0
  124. package/dist/grading/messages.js.map +1 -0
  125. package/dist/grading/types.d.ts +1 -0
  126. package/dist/grading/types.js +2 -0
  127. package/dist/grading/types.js.map +1 -0
  128. package/dist/i18n/index.d.ts +1 -25
  129. package/dist/i18n/index.js +1 -25
  130. package/dist/i18n/index.js.map +1 -1
  131. package/dist/index.d.ts +2 -3
  132. package/dist/index.js +2 -3
  133. package/dist/index.js.map +1 -1
  134. package/dist/instructorNav/InstructorNav.js +1 -1
  135. package/dist/instructorNav/InstructorNav.js.map +1 -1
  136. package/dist/provides.d.ts +4 -0
  137. package/dist/provides.js +7 -0
  138. package/dist/provides.js.map +1 -0
  139. package/dist/routes.d.ts +1 -1
  140. package/dist/routes.js +4 -3
  141. package/dist/routes.js.map +1 -1
  142. package/dist/types/index.d.ts +8 -0
  143. package/dist/types/index.js +1 -0
  144. package/dist/types/index.js.map +1 -1
  145. package/package.json +8 -2
  146. package/dist/providers/QueryProvider.d.ts +0 -6
  147. package/dist/providers/QueryProvider.js +0 -16
  148. package/dist/providers/QueryProvider.js.map +0 -1
  149. package/dist/providers.d.ts +0 -3
  150. package/dist/providers.js +0 -8
  151. package/dist/providers.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/grading/types.ts"],"names":[],"mappings":"","sourcesContent":["export type GradingToolsType = 'single' | 'all';\n"]}
@@ -1,25 +1 @@
1
- declare const _default: {
2
- ar: {};
3
- 'zh-hk': {};
4
- 'zh-cn': {};
5
- uk: {};
6
- 'tr-tr': {};
7
- th: {};
8
- te: {};
9
- ru: {};
10
- 'pt-pt': {};
11
- 'pt-br': {};
12
- 'it-it': {};
13
- id: {};
14
- hi: {};
15
- he: {};
16
- 'fr-ca': {};
17
- fa: {};
18
- 'es-es': {};
19
- 'es-419': {};
20
- el: {};
21
- 'de-de': {};
22
- da: {};
23
- bo: {};
24
- };
25
- export default _default;
1
+ export { default } from './messages';
@@ -1,26 +1,2 @@
1
- // Placeholder be overridden by `make pull_translations`
2
- export default {
3
- ar: {},
4
- 'zh-hk': {},
5
- 'zh-cn': {},
6
- uk: {},
7
- 'tr-tr': {},
8
- th: {},
9
- te: {},
10
- ru: {},
11
- 'pt-pt': {},
12
- 'pt-br': {},
13
- 'it-it': {},
14
- id: {},
15
- hi: {},
16
- he: {},
17
- 'fr-ca': {},
18
- fa: {},
19
- 'es-es': {},
20
- 'es-419': {},
21
- el: {},
22
- 'de-de': {},
23
- da: {},
24
- bo: {},
25
- };
1
+ export { default } from './messages';
26
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.js"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,eAAe;IACb,EAAE,EAAE,EAAE;IACN,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,EAAE,EAAE,EAAE;IACN,OAAO,EAAE,EAAE;IACX,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,OAAO,EAAE,EAAE;IACX,EAAE,EAAE,EAAE;IACN,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,EAAE;IACZ,EAAE,EAAE,EAAE;IACN,OAAO,EAAE,EAAE;IACX,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;CACP,CAAC","sourcesContent":["// Placeholder be overridden by `make pull_translations`\nexport default {\n ar: {},\n 'zh-hk': {},\n 'zh-cn': {},\n uk: {},\n 'tr-tr': {},\n th: {},\n te: {},\n ru: {},\n 'pt-pt': {},\n 'pt-br': {},\n 'it-it': {},\n id: {},\n hi: {},\n he: {},\n 'fr-ca': {},\n fa: {},\n 'es-es': {},\n 'es-419': {},\n el: {},\n 'de-de': {},\n da: {},\n bo: {},\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC","sourcesContent":["export { default } from './messages';\n"]}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,2 @@
1
- export { default as instructApp } from './app';
2
- export { default as instructRoutes } from './routes';
3
- export { default as instructMessages } from './i18n';
1
+ export { default as instructorDashboardApp } from './app';
2
+ export { default as instructorDashboardRoutes } from './routes';
package/dist/index.js CHANGED
@@ -1,4 +1,3 @@
1
- export { default as instructApp } from './app';
2
- export { default as instructRoutes } from './routes';
3
- export { default as instructMessages } from './i18n';
1
+ export { default as instructorDashboardApp } from './app';
2
+ export { default as instructorDashboardRoutes } from './routes';
4
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,QAAQ,CAAC","sourcesContent":["export { default as instructApp } from './app';\nexport { default as instructRoutes } from './routes';\nexport { default as instructMessages } from './i18n';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,UAAU,CAAC","sourcesContent":["export { default as instructorDashboardApp } from './app';\nexport { default as instructorDashboardRoutes } from './routes';\n"]}
@@ -8,7 +8,7 @@ import { useWidgetProps } from '../slots/SlotUtils';
8
8
  const InstructorNav = () => {
9
9
  const { courseId = '', tabId = '' } = useParams();
10
10
  const { data: courseInfo, isLoading } = useCourseInfo(courseId);
11
- const widgetPropsArray = useWidgetProps('org.openedx.frontend.slot.instructor.tabs.v1');
11
+ const widgetPropsArray = useWidgetProps('org.openedx.frontend.slot.instructorDashboard.tabs.v1');
12
12
  const { clearAlerts } = useAlert();
13
13
  const sortedTabs = useMemo(() => {
14
14
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"InstructorNav.js","sourceRoot":"","sources":["../../src/instructorNav/InstructorNav.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\nimport { useParams, Link } from 'react-router-dom';\nimport { Nav, Navbar, Skeleton } from '@openedx/paragon';\nimport { useCourseInfo } from '@src/data/apiHook';\nimport { useAlert } from '@src/providers/AlertProvider';\nimport { useWidgetProps } from '../slots/SlotUtils';\n\nexport interface TabProps {\n tabId: string,\n url: string,\n title: string,\n sortOrder: number,\n}\n\nconst InstructorNav = () => {\n const { courseId = '', tabId = '' } = useParams<{ courseId: string, tabId?: string }>();\n const { data: courseInfo, isLoading } = useCourseInfo(courseId);\n const widgetPropsArray = useWidgetProps('org.openedx.frontend.slot.instructor.tabs.v1') as TabProps[];\n const { clearAlerts } = useAlert();\n\n const sortedTabs = useMemo(() => {\n if (isLoading) return [];\n const apiTabs: TabProps[] = courseInfo?.tabs ?? [];\n const tabMap = new Map<string, TabProps>();\n\n // Adding tabs from API and from slot into a map to avoid duplicates\n apiTabs.forEach(tab => {\n tabMap.set(tab.tabId, tab);\n });\n\n widgetPropsArray.forEach(slotTab => {\n // If the slotTab doesn't have a tabId or title, we can't render it properly, so we skip it.\n if (!slotTab.tabId || !slotTab.title) {\n return;\n }\n\n tabMap.set(slotTab.tabId, slotTab);\n });\n\n const allTabs = Array.from(tabMap.values());\n\n // Tabs are sorted by sortOrder, with a fallback to 1000 to be placed at the end for tabs that don't have sortOrder defined (to avoid NaN issues)\n return allTabs.sort((a, b) => (a.sortOrder ?? 1000) - (b.sortOrder ?? 1000));\n }, [courseInfo?.tabs, isLoading, widgetPropsArray]);\n\n if (isLoading) {\n return <Skeleton className=\"lead\" />;\n }\n\n if (sortedTabs.length === 0) return null;\n\n return (\n <Navbar expand=\"md\" className=\"py-0\">\n <Nav\n variant=\"tabs\"\n activeKey={tabId}\n >\n <Navbar.Toggle aria-controls=\"instructor-nav\" />\n <Navbar.Collapse id=\"instructor-nav\">\n {\n sortedTabs.map((tab) => (\n <Nav.Item key={tab.tabId}>\n <Nav.Link\n as={Link}\n to={tab.url}\n active={tab.tabId === tabId}\n onClick={() => clearAlerts()}\n >\n {tab.title}\n </Nav.Link>\n </Nav.Item>\n ))\n }\n </Navbar.Collapse>\n </Nav>\n </Navbar>\n );\n};\n\nexport default InstructorNav;\n"]}
1
+ {"version":3,"file":"InstructorNav.js","sourceRoot":"","sources":["../../src/instructorNav/InstructorNav.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AASpD,MAAM,aAAa,GAAG,GAAG,EAAE;IACzB,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,SAAS,EAAwC,CAAC;IACxF,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChE,MAAM,gBAAgB,GAAG,cAAc,CAAC,uDAAuD,CAAe,CAAC;IAC/G,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEnC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE;;QAC9B,IAAI,SAAS;YAAE,OAAO,EAAE,CAAC;QACzB,MAAM,OAAO,GAAe,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,mCAAI,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;QAE3C,oEAAoE;QACpE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACpB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACjC,4FAA4F;YAC5F,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAE5C,iJAAiJ;QACjJ,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,eAAC,OAAA,CAAC,MAAA,CAAC,CAAC,SAAS,mCAAI,IAAI,CAAC,GAAG,CAAC,MAAA,CAAC,CAAC,SAAS,mCAAI,IAAI,CAAC,CAAA,EAAA,CAAC,CAAC;IAC/E,CAAC,EAAE,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEpD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,KAAC,QAAQ,IAAC,SAAS,EAAC,MAAM,GAAG,CAAC;IACvC,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,OAAO,CACL,KAAC,MAAM,IAAC,MAAM,EAAC,IAAI,EAAC,SAAS,EAAC,MAAM,YAClC,MAAC,GAAG,IACF,OAAO,EAAC,MAAM,EACd,SAAS,EAAE,KAAK,aAEhB,KAAC,MAAM,CAAC,MAAM,qBAAe,gBAAgB,GAAG,EAChD,KAAC,MAAM,CAAC,QAAQ,IAAC,EAAE,EAAC,gBAAgB,YAEhC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACtB,KAAC,GAAG,CAAC,IAAI,cACP,KAAC,GAAG,CAAC,IAAI,IACP,EAAE,EAAE,IAAI,EACR,EAAE,EAAE,GAAG,CAAC,GAAG,EACX,MAAM,EAAE,GAAG,CAAC,KAAK,KAAK,KAAK,EAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,YAE3B,GAAG,CAAC,KAAK,GACD,IARE,GAAG,CAAC,KAAK,CASb,CACZ,CAAC,GAEY,IACd,GACC,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import { useMemo } from 'react';\nimport { useParams, Link } from 'react-router-dom';\nimport { Nav, Navbar, Skeleton } from '@openedx/paragon';\nimport { useCourseInfo } from '@src/data/apiHook';\nimport { useAlert } from '@src/providers/AlertProvider';\nimport { useWidgetProps } from '../slots/SlotUtils';\n\nexport interface TabProps {\n tabId: string,\n url: string,\n title: string,\n sortOrder: number,\n}\n\nconst InstructorNav = () => {\n const { courseId = '', tabId = '' } = useParams<{ courseId: string, tabId?: string }>();\n const { data: courseInfo, isLoading } = useCourseInfo(courseId);\n const widgetPropsArray = useWidgetProps('org.openedx.frontend.slot.instructorDashboard.tabs.v1') as TabProps[];\n const { clearAlerts } = useAlert();\n\n const sortedTabs = useMemo(() => {\n if (isLoading) return [];\n const apiTabs: TabProps[] = courseInfo?.tabs ?? [];\n const tabMap = new Map<string, TabProps>();\n\n // Adding tabs from API and from slot into a map to avoid duplicates\n apiTabs.forEach(tab => {\n tabMap.set(tab.tabId, tab);\n });\n\n widgetPropsArray.forEach(slotTab => {\n // If the slotTab doesn't have a tabId or title, we can't render it properly, so we skip it.\n if (!slotTab.tabId || !slotTab.title) {\n return;\n }\n\n tabMap.set(slotTab.tabId, slotTab);\n });\n\n const allTabs = Array.from(tabMap.values());\n\n // Tabs are sorted by sortOrder, with a fallback to 1000 to be placed at the end for tabs that don't have sortOrder defined (to avoid NaN issues)\n return allTabs.sort((a, b) => (a.sortOrder ?? 1000) - (b.sortOrder ?? 1000));\n }, [courseInfo?.tabs, isLoading, widgetPropsArray]);\n\n if (isLoading) {\n return <Skeleton className=\"lead\" />;\n }\n\n if (sortedTabs.length === 0) return null;\n\n return (\n <Navbar expand=\"md\" className=\"py-0\">\n <Nav\n variant=\"tabs\"\n activeKey={tabId}\n >\n <Navbar.Toggle aria-controls=\"instructor-nav\" />\n <Navbar.Collapse id=\"instructor-nav\">\n {\n sortedTabs.map((tab) => (\n <Nav.Item key={tab.tabId}>\n <Nav.Link\n as={Link}\n to={tab.url}\n active={tab.tabId === tabId}\n onClick={() => clearAlerts()}\n >\n {tab.title}\n </Nav.Link>\n </Nav.Item>\n ))\n }\n </Navbar.Collapse>\n </Nav>\n </Navbar>\n );\n};\n\nexport default InstructorNav;\n"]}
@@ -0,0 +1,4 @@
1
+ declare const provides: {
2
+ "org.openedx.frontend.provides.courseNavigationRoles.v1": string;
3
+ };
4
+ export default provides;
@@ -0,0 +1,7 @@
1
+ import { providesCourseNavigationRolesId } from '@openedx/frontend-base';
2
+ import { instructorDashboardRole } from './constants';
3
+ const provides = {
4
+ [providesCourseNavigationRolesId]: instructorDashboardRole
5
+ };
6
+ export default provides;
7
+ //# sourceMappingURL=provides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provides.js","sourceRoot":"","sources":["../src/provides.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,QAAQ,GAAG;IACf,CAAC,+BAA+B,CAAC,EAAE,uBAAuB;CAC3D,CAAC;AAEF,eAAe,QAAQ,CAAC","sourcesContent":["import { providesCourseNavigationRolesId } from '@openedx/frontend-base';\nimport { instructorDashboardRole } from './constants';\n\nconst provides = {\n [providesCourseNavigationRolesId]: instructorDashboardRole\n};\n\nexport default provides;\n"]}
package/dist/routes.d.ts CHANGED
@@ -2,7 +2,7 @@ declare const routes: {
2
2
  id: string;
3
3
  path: string;
4
4
  handle: {
5
- role: string;
5
+ roles: string[];
6
6
  };
7
7
  lazy(): Promise<{
8
8
  Component: () => import("react/jsx-runtime").JSX.Element;
package/dist/routes.js CHANGED
@@ -21,6 +21,7 @@ import OpenResponsesPage from './openResponses/OpenResponsesPage';
21
21
  import SpecialExamsPage from './specialExams/SpecialExamsPage';
22
22
  import PageNotFound from './components/PageNotFound';
23
23
  import { useWidgetProps } from './slots/SlotUtils';
24
+ import { instructorDashboardRole } from './constants';
24
25
  const defaultTabs = [
25
26
  { tabId: 'course_info', content: _jsx(CourseInfoPage, {}) },
26
27
  { tabId: 'enrollments', content: _jsx(EnrollmentsPage, {}) },
@@ -35,7 +36,7 @@ const defaultTabs = [
35
36
  ];
36
37
  const TabContent = () => {
37
38
  const { tabId } = useParams();
38
- const routeWidgets = useWidgetProps('org.openedx.frontend.slot.instructor.routes.v1');
39
+ const routeWidgets = useWidgetProps('org.openedx.frontend.slot.instructorDashboard.routes.v1');
39
40
  const tabRoutes = [
40
41
  ...defaultTabs.filter(defaultTab => !routeWidgets.some(slotTab => slotTab.tabId === defaultTab.tabId)),
41
42
  ...routeWidgets
@@ -45,10 +46,10 @@ const TabContent = () => {
45
46
  };
46
47
  const routes = [
47
48
  {
48
- id: 'org.openedx.frontend.route.instructor.main',
49
+ id: 'org.openedx.frontend.route.instructorDashboard.main',
49
50
  path: 'instructor-dashboard/:courseId',
50
51
  handle: {
51
- role: 'org.openedx.frontend.role.instructor'
52
+ roles: [instructorDashboardRole]
52
53
  },
53
54
  lazy() {
54
55
  return __awaiter(this, void 0, void 0, function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.tsx"],"names":[],"mappings":"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","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"]}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.tsx"],"names":[],"mappings":"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","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';\nimport { instructorDashboardRole } from './constants';\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.instructorDashboard.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.instructorDashboard.main',\n path: 'instructor-dashboard/:courseId',\n handle: {\n roles: [instructorDashboardRole]\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"]}
@@ -38,3 +38,11 @@ export interface DataTableFetchDataProps {
38
38
  }[];
39
39
  pageIndex: number;
40
40
  }
41
+ export interface Learner {
42
+ username: string;
43
+ fullName: string;
44
+ email: string;
45
+ }
46
+ export interface SelectedLearner extends Learner {
47
+ progressUrl: string;
48
+ }
@@ -1,4 +1,5 @@
1
1
  ;
2
2
  ;
3
+ ;
3
4
  export {};
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +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"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAiBC,CAAC;AAMD,CAAC;AAwBD,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\nexport interface Learner {\n username: string,\n fullName: string,\n email: string,\n};\n\nexport interface SelectedLearner extends Learner {\n progressUrl: string,\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openedx/frontend-app-instructor-dashboard",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.0.0-alpha.11",
4
4
  "description": "The Open edX Instructor Dashboard",
5
5
  "repository": {
6
6
  "type": "git",
@@ -23,6 +23,12 @@
23
23
  "*.css",
24
24
  "*.scss"
25
25
  ],
26
+ "atlasTranslations": {
27
+ "path": "translations/frontend-app-instructor-dashboard/src/i18n/messages",
28
+ "dependencies": [
29
+ "@openedx/frontend-base"
30
+ ]
31
+ },
26
32
  "scripts": {
27
33
  "build": "make build",
28
34
  "build:packages": "make build-packages",
@@ -37,6 +43,7 @@
37
43
  "prepack": "npm run clean && npm run build",
38
44
  "snapshot": "openedx test --updateSnapshot",
39
45
  "test": "openedx test --coverage --passWithNoTests",
46
+ "translations:pull": "openedx translations:pull",
40
47
  "watch:build": "nodemon --exec 'npm run build'"
41
48
  },
42
49
  "author": "Open edX",
@@ -55,7 +62,6 @@
55
62
  },
56
63
  "devDependencies": {
57
64
  "@edx/browserslist-config": "^1.5.0",
58
- "@tanstack/react-query-devtools": "^5.90.2",
59
65
  "@testing-library/jest-dom": "^6.8.0",
60
66
  "@testing-library/react": "^16.3.0",
61
67
  "@testing-library/user-event": "^14.6.1",
@@ -1,6 +0,0 @@
1
- import { ReactNode } from 'react';
2
- interface QueryProviderProps {
3
- children: ReactNode;
4
- }
5
- export declare const QueryProvider: ({ children }: QueryProviderProps) => import("react/jsx-runtime").JSX.Element;
6
- export {};
@@ -1,16 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
3
- const queryClient = new QueryClient({
4
- defaultOptions: {
5
- queries: {
6
- staleTime: 5 * 60 * 1000, // 5 minutes
7
- retry: 1,
8
- refetchOnWindowFocus: false,
9
- },
10
- mutations: {
11
- retry: 1,
12
- },
13
- },
14
- });
15
- export const QueryProvider = ({ children }) => (_jsx(QueryClientProvider, { client: queryClient, children: children }));
16
- //# sourceMappingURL=QueryProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"QueryProvider.js","sourceRoot":"","sources":["../../src/providers/QueryProvider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAOzE,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;IAClC,cAAc,EAAE;QACd,OAAO,EAAE;YACP,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,YAAY;YACtC,KAAK,EAAE,CAAC;YACR,oBAAoB,EAAE,KAAK;SAC5B;QACD,SAAS,EAAE;YACT,KAAK,EAAE,CAAC;SACT;KACF;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,QAAQ,EAAsB,EAAE,EAAE,CAAC,CACjE,KAAC,mBAAmB,IAAC,MAAM,EAAE,WAAW,YACrC,QAAQ,GACW,CACvB,CAAC","sourcesContent":["import { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { ReactNode } from 'react';\n\ninterface QueryProviderProps {\n children: ReactNode,\n}\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 5 * 60 * 1000, // 5 minutes\n retry: 1,\n refetchOnWindowFocus: false,\n },\n mutations: {\n retry: 1,\n },\n },\n});\n\nexport const QueryProvider = ({ children }: QueryProviderProps) => (\n <QueryClientProvider client={queryClient}>\n {children}\n </QueryClientProvider>\n);\n"]}
@@ -1,3 +0,0 @@
1
- import { AppProvider } from '@openedx/frontend-base';
2
- declare const providers: AppProvider[];
3
- export default providers;
package/dist/providers.js DELETED
@@ -1,8 +0,0 @@
1
- import { QueryProvider } from './providers/QueryProvider';
2
- import { AlertProvider } from './providers/AlertProvider';
3
- const providers = [
4
- QueryProvider,
5
- AlertProvider,
6
- ];
7
- export default providers;
8
- //# sourceMappingURL=providers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,SAAS,GAAkB;IAC/B,aAAa;IACb,aAAa;CACd,CAAC;AAEF,eAAe,SAAS,CAAC","sourcesContent":["import { AppProvider } from '@openedx/frontend-base';\nimport { QueryProvider } from './providers/QueryProvider';\nimport { AlertProvider } from './providers/AlertProvider';\n\nconst providers: AppProvider[] = [\n QueryProvider,\n AlertProvider,\n];\n\nexport default providers;\n"]}