@openedx/frontend-app-gradebook 2.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 (350) hide show
  1. package/LICENSE +661 -0
  2. package/README.rst +279 -0
  3. package/dist/Main.d.ts +3 -0
  4. package/dist/Main.js +17 -0
  5. package/dist/Main.js.map +1 -0
  6. package/dist/app.d.ts +3 -0
  7. package/dist/app.js +10 -0
  8. package/dist/app.js.map +1 -0
  9. package/dist/components/BulkManagementHistoryView/BulkManagementAlerts.d.ts +5 -0
  10. package/dist/components/BulkManagementHistoryView/BulkManagementAlerts.js +20 -0
  11. package/dist/components/BulkManagementHistoryView/BulkManagementAlerts.js.map +1 -0
  12. package/dist/components/BulkManagementHistoryView/BulkManagementHistoryView.scss +6 -0
  13. package/dist/components/BulkManagementHistoryView/HistoryTable.d.ts +33 -0
  14. package/dist/components/BulkManagementHistoryView/HistoryTable.js +53 -0
  15. package/dist/components/BulkManagementHistoryView/HistoryTable.js.map +1 -0
  16. package/dist/components/BulkManagementHistoryView/ResultsSummary.d.ts +16 -0
  17. package/dist/components/BulkManagementHistoryView/ResultsSummary.js +19 -0
  18. package/dist/components/BulkManagementHistoryView/ResultsSummary.js.map +1 -0
  19. package/dist/components/BulkManagementHistoryView/data/api.d.ts +5 -0
  20. package/dist/components/BulkManagementHistoryView/data/api.js +16 -0
  21. package/dist/components/BulkManagementHistoryView/data/api.js.map +1 -0
  22. package/dist/components/BulkManagementHistoryView/data/apiHook.d.ts +16 -0
  23. package/dist/components/BulkManagementHistoryView/data/apiHook.js +34 -0
  24. package/dist/components/BulkManagementHistoryView/data/apiHook.js.map +1 -0
  25. package/dist/components/BulkManagementHistoryView/data/queryKeys.d.ts +5 -0
  26. package/dist/components/BulkManagementHistoryView/data/queryKeys.js +7 -0
  27. package/dist/components/BulkManagementHistoryView/data/queryKeys.js.map +1 -0
  28. package/dist/components/BulkManagementHistoryView/data/utils.d.ts +34 -0
  29. package/dist/components/BulkManagementHistoryView/data/utils.js +45 -0
  30. package/dist/components/BulkManagementHistoryView/data/utils.js.map +1 -0
  31. package/dist/components/BulkManagementHistoryView/index.d.ts +2 -0
  32. package/dist/components/BulkManagementHistoryView/index.js +12 -0
  33. package/dist/components/BulkManagementHistoryView/index.js.map +1 -0
  34. package/dist/components/BulkManagementHistoryView/messages.d.ts +24 -0
  35. package/dist/components/BulkManagementHistoryView/messages.js +20 -0
  36. package/dist/components/BulkManagementHistoryView/messages.js.map +1 -0
  37. package/dist/components/GradebookFilters/AssignmentFilter/index.d.ts +10 -0
  38. package/dist/components/GradebookFilters/AssignmentFilter/index.js +31 -0
  39. package/dist/components/GradebookFilters/AssignmentFilter/index.js.map +1 -0
  40. package/dist/components/GradebookFilters/AssignmentGradeFilter/hooks.d.ts +19 -0
  41. package/dist/components/GradebookFilters/AssignmentGradeFilter/hooks.js +31 -0
  42. package/dist/components/GradebookFilters/AssignmentGradeFilter/hooks.js.map +1 -0
  43. package/dist/components/GradebookFilters/AssignmentGradeFilter/index.d.ts +10 -0
  44. package/dist/components/GradebookFilters/AssignmentGradeFilter/index.js +17 -0
  45. package/dist/components/GradebookFilters/AssignmentGradeFilter/index.js.map +1 -0
  46. package/dist/components/GradebookFilters/AssignmentTypeFilter/index.d.ts +10 -0
  47. package/dist/components/GradebookFilters/AssignmentTypeFilter/index.js +38 -0
  48. package/dist/components/GradebookFilters/AssignmentTypeFilter/index.js.map +1 -0
  49. package/dist/components/GradebookFilters/CourseGradeFilter/hooks.d.ts +15 -0
  50. package/dist/components/GradebookFilters/CourseGradeFilter/hooks.js +34 -0
  51. package/dist/components/GradebookFilters/CourseGradeFilter/hooks.js.map +1 -0
  52. package/dist/components/GradebookFilters/CourseGradeFilter/index.d.ts +10 -0
  53. package/dist/components/GradebookFilters/CourseGradeFilter/index.js +17 -0
  54. package/dist/components/GradebookFilters/CourseGradeFilter/index.js.map +1 -0
  55. package/dist/components/GradebookFilters/GradebookFilters.scss +6 -0
  56. package/dist/components/GradebookFilters/PercentGroup.d.ts +22 -0
  57. package/dist/components/GradebookFilters/PercentGroup.js +16 -0
  58. package/dist/components/GradebookFilters/PercentGroup.js.map +1 -0
  59. package/dist/components/GradebookFilters/SelectGroup.d.ts +24 -0
  60. package/dist/components/GradebookFilters/SelectGroup.js +17 -0
  61. package/dist/components/GradebookFilters/SelectGroup.js.map +1 -0
  62. package/dist/components/GradebookFilters/StudentGroupsFilter/hooks.d.ts +16 -0
  63. package/dist/components/GradebookFilters/StudentGroupsFilter/hooks.js +46 -0
  64. package/dist/components/GradebookFilters/StudentGroupsFilter/hooks.js.map +1 -0
  65. package/dist/components/GradebookFilters/StudentGroupsFilter/index.d.ts +10 -0
  66. package/dist/components/GradebookFilters/StudentGroupsFilter/index.js +23 -0
  67. package/dist/components/GradebookFilters/StudentGroupsFilter/index.js.map +1 -0
  68. package/dist/components/GradebookFilters/data/api.d.ts +10 -0
  69. package/dist/components/GradebookFilters/data/api.js +27 -0
  70. package/dist/components/GradebookFilters/data/api.js.map +1 -0
  71. package/dist/components/GradebookFilters/data/apiHook.d.ts +16 -0
  72. package/dist/components/GradebookFilters/data/apiHook.js +24 -0
  73. package/dist/components/GradebookFilters/data/apiHook.js.map +1 -0
  74. package/dist/components/GradebookFilters/data/hooks.d.ts +7 -0
  75. package/dist/components/GradebookFilters/data/hooks.js +53 -0
  76. package/dist/components/GradebookFilters/data/hooks.js.map +1 -0
  77. package/dist/components/GradebookFilters/data/queryKeys.d.ts +10 -0
  78. package/dist/components/GradebookFilters/data/queryKeys.js +12 -0
  79. package/dist/components/GradebookFilters/data/queryKeys.js.map +1 -0
  80. package/dist/components/GradebookFilters/index.d.ts +10 -0
  81. package/dist/components/GradebookFilters/index.js +32 -0
  82. package/dist/components/GradebookFilters/index.js.map +1 -0
  83. package/dist/components/GradebookFilters/messages.d.ts +112 -0
  84. package/dist/components/GradebookFilters/messages.js +75 -0
  85. package/dist/components/GradebookFilters/messages.js.map +1 -0
  86. package/dist/components/GradebookHeader/hooks.d.ts +13 -0
  87. package/dist/components/GradebookHeader/hooks.js +28 -0
  88. package/dist/components/GradebookHeader/hooks.js.map +1 -0
  89. package/dist/components/GradebookHeader/index.d.ts +2 -0
  90. package/dist/components/GradebookHeader/index.js +14 -0
  91. package/dist/components/GradebookHeader/index.js.map +1 -0
  92. package/dist/components/GradebookHeader/messages.d.ts +48 -0
  93. package/dist/components/GradebookHeader/messages.js +35 -0
  94. package/dist/components/GradebookHeader/messages.js.map +1 -0
  95. package/dist/components/GradesView/BulkManagementControls/index.d.ts +2 -0
  96. package/dist/components/GradesView/BulkManagementControls/index.js +26 -0
  97. package/dist/components/GradesView/BulkManagementControls/index.js.map +1 -0
  98. package/dist/components/GradesView/BulkManagementControls/messages.d.ts +8 -0
  99. package/dist/components/GradesView/BulkManagementControls/messages.js +10 -0
  100. package/dist/components/GradesView/BulkManagementControls/messages.js.map +1 -0
  101. package/dist/components/GradesView/EditModal/HistoryHeader.d.ts +21 -0
  102. package/dist/components/GradesView/EditModal/HistoryHeader.js +20 -0
  103. package/dist/components/GradesView/EditModal/HistoryHeader.js.map +1 -0
  104. package/dist/components/GradesView/EditModal/ModalHeaders.d.ts +3 -0
  105. package/dist/components/GradesView/EditModal/ModalHeaders.js +26 -0
  106. package/dist/components/GradesView/EditModal/ModalHeaders.js.map +1 -0
  107. package/dist/components/GradesView/EditModal/OverrideTable/AdjustedGradeInput/index.d.ts +5 -0
  108. package/dist/components/GradesView/EditModal/OverrideTable/AdjustedGradeInput/index.js +23 -0
  109. package/dist/components/GradesView/EditModal/OverrideTable/AdjustedGradeInput/index.js.map +1 -0
  110. package/dist/components/GradesView/EditModal/OverrideTable/ReasonInput/index.d.ts +6 -0
  111. package/dist/components/GradesView/EditModal/OverrideTable/ReasonInput/index.js +25 -0
  112. package/dist/components/GradesView/EditModal/OverrideTable/ReasonInput/index.js.map +1 -0
  113. package/dist/components/GradesView/EditModal/OverrideTable/index.d.ts +5 -0
  114. package/dist/components/GradesView/EditModal/OverrideTable/index.js +39 -0
  115. package/dist/components/GradesView/EditModal/OverrideTable/index.js.map +1 -0
  116. package/dist/components/GradesView/EditModal/OverrideTable/messages.d.ts +32 -0
  117. package/dist/components/GradesView/EditModal/OverrideTable/messages.js +25 -0
  118. package/dist/components/GradesView/EditModal/OverrideTable/messages.js.map +1 -0
  119. package/dist/components/GradesView/EditModal/index.d.ts +2 -0
  120. package/dist/components/GradesView/EditModal/index.js +35 -0
  121. package/dist/components/GradesView/EditModal/index.js.map +1 -0
  122. package/dist/components/GradesView/EditModal/messages.d.ts +72 -0
  123. package/dist/components/GradesView/EditModal/messages.js +50 -0
  124. package/dist/components/GradesView/EditModal/messages.js.map +1 -0
  125. package/dist/components/GradesView/FilterBadges/FilterBadge.d.ts +9 -0
  126. package/dist/components/GradesView/FilterBadges/FilterBadge.js +27 -0
  127. package/dist/components/GradesView/FilterBadges/FilterBadge.js.map +1 -0
  128. package/dist/components/GradesView/FilterBadges/index.d.ts +8 -0
  129. package/dist/components/GradesView/FilterBadges/index.js +15 -0
  130. package/dist/components/GradesView/FilterBadges/index.js.map +1 -0
  131. package/dist/components/GradesView/FilterMenuToggle/index.d.ts +5 -0
  132. package/dist/components/GradesView/FilterMenuToggle/index.js +18 -0
  133. package/dist/components/GradesView/FilterMenuToggle/index.js.map +1 -0
  134. package/dist/components/GradesView/FilterMenuToggle/messages.d.ts +8 -0
  135. package/dist/components/GradesView/FilterMenuToggle/messages.js +10 -0
  136. package/dist/components/GradesView/FilterMenuToggle/messages.js.map +1 -0
  137. package/dist/components/GradesView/FilteredUsersLabel/index.d.ts +15 -0
  138. package/dist/components/GradesView/FilteredUsersLabel/index.js +27 -0
  139. package/dist/components/GradesView/FilteredUsersLabel/index.js.map +1 -0
  140. package/dist/components/GradesView/FilteredUsersLabel/messages.d.ts +8 -0
  141. package/dist/components/GradesView/FilteredUsersLabel/messages.js +10 -0
  142. package/dist/components/GradesView/FilteredUsersLabel/messages.js.map +1 -0
  143. package/dist/components/GradesView/GradebookTable/Fields.d.ts +2 -0
  144. package/dist/components/GradesView/GradebookTable/Fields.js +32 -0
  145. package/dist/components/GradesView/GradebookTable/Fields.js.map +1 -0
  146. package/dist/components/GradesView/GradebookTable/GradeButton.d.ts +26 -0
  147. package/dist/components/GradesView/GradebookTable/GradeButton.js +56 -0
  148. package/dist/components/GradesView/GradebookTable/GradeButton.js.map +1 -0
  149. package/dist/components/GradesView/GradebookTable/LabelReplacements.d.ts +3 -0
  150. package/dist/components/GradesView/GradebookTable/LabelReplacements.js +42 -0
  151. package/dist/components/GradesView/GradebookTable/LabelReplacements.js.map +1 -0
  152. package/dist/components/GradesView/GradebookTable/hooks.d.ts +11 -0
  153. package/dist/components/GradesView/GradebookTable/hooks.js +45 -0
  154. package/dist/components/GradesView/GradebookTable/hooks.js.map +1 -0
  155. package/dist/components/GradesView/GradebookTable/index.d.ts +5 -0
  156. package/dist/components/GradesView/GradebookTable/index.js +16 -0
  157. package/dist/components/GradesView/GradebookTable/index.js.map +1 -0
  158. package/dist/components/GradesView/GradebookTable/messages.d.ts +64 -0
  159. package/dist/components/GradesView/GradebookTable/messages.js +45 -0
  160. package/dist/components/GradesView/GradebookTable/messages.js.map +1 -0
  161. package/dist/components/GradesView/GradesView.scss +156 -0
  162. package/dist/components/GradesView/ImportGradesButton/index.d.ts +5 -0
  163. package/dist/components/GradesView/ImportGradesButton/index.js +38 -0
  164. package/dist/components/GradesView/ImportGradesButton/index.js.map +1 -0
  165. package/dist/components/GradesView/ImportGradesButton/messages.d.ts +16 -0
  166. package/dist/components/GradesView/ImportGradesButton/messages.js +15 -0
  167. package/dist/components/GradesView/ImportGradesButton/messages.js.map +1 -0
  168. package/dist/components/GradesView/ImportSuccessToast/hooks.d.ts +10 -0
  169. package/dist/components/GradesView/ImportSuccessToast/hooks.js +31 -0
  170. package/dist/components/GradesView/ImportSuccessToast/hooks.js.map +1 -0
  171. package/dist/components/GradesView/ImportSuccessToast/index.d.ts +5 -0
  172. package/dist/components/GradesView/ImportSuccessToast/index.js +15 -0
  173. package/dist/components/GradesView/ImportSuccessToast/index.js.map +1 -0
  174. package/dist/components/GradesView/ImportSuccessToast/messages.d.ts +17 -0
  175. package/dist/components/GradesView/ImportSuccessToast/messages.js +15 -0
  176. package/dist/components/GradesView/ImportSuccessToast/messages.js.map +1 -0
  177. package/dist/components/GradesView/InterventionsReport/index.d.ts +2 -0
  178. package/dist/components/GradesView/InterventionsReport/index.js +27 -0
  179. package/dist/components/GradesView/InterventionsReport/index.js.map +1 -0
  180. package/dist/components/GradesView/InterventionsReport/messages.d.ts +25 -0
  181. package/dist/components/GradesView/InterventionsReport/messages.js +20 -0
  182. package/dist/components/GradesView/InterventionsReport/messages.js.map +1 -0
  183. package/dist/components/GradesView/PageButtons/index.d.ts +5 -0
  184. package/dist/components/GradesView/PageButtons/index.js +14 -0
  185. package/dist/components/GradesView/PageButtons/index.js.map +1 -0
  186. package/dist/components/GradesView/PageButtons/messages.d.ts +16 -0
  187. package/dist/components/GradesView/PageButtons/messages.js +15 -0
  188. package/dist/components/GradesView/PageButtons/messages.js.map +1 -0
  189. package/dist/components/GradesView/ScoreViewInput/index.d.ts +5 -0
  190. package/dist/components/GradesView/ScoreViewInput/index.js +20 -0
  191. package/dist/components/GradesView/ScoreViewInput/index.js.map +1 -0
  192. package/dist/components/GradesView/ScoreViewInput/messages.d.ts +24 -0
  193. package/dist/components/GradesView/ScoreViewInput/messages.js +20 -0
  194. package/dist/components/GradesView/ScoreViewInput/messages.js.map +1 -0
  195. package/dist/components/GradesView/SearchControls/hooks.d.ts +9 -0
  196. package/dist/components/GradesView/SearchControls/hooks.js +34 -0
  197. package/dist/components/GradesView/SearchControls/hooks.js.map +1 -0
  198. package/dist/components/GradesView/SearchControls/index.d.ts +5 -0
  199. package/dist/components/GradesView/SearchControls/index.js +14 -0
  200. package/dist/components/GradesView/SearchControls/index.js.map +1 -0
  201. package/dist/components/GradesView/SearchControls/messages.d.ts +16 -0
  202. package/dist/components/GradesView/SearchControls/messages.js +15 -0
  203. package/dist/components/GradesView/SearchControls/messages.js.map +1 -0
  204. package/dist/components/GradesView/SpinnerIcon.d.ts +5 -0
  205. package/dist/components/GradesView/SpinnerIcon.js +15 -0
  206. package/dist/components/GradesView/SpinnerIcon.js.map +1 -0
  207. package/dist/components/GradesView/StatusAlerts/index.d.ts +5 -0
  208. package/dist/components/GradesView/StatusAlerts/index.js +16 -0
  209. package/dist/components/GradesView/StatusAlerts/index.js.map +1 -0
  210. package/dist/components/GradesView/StatusAlerts/messages.d.ts +24 -0
  211. package/dist/components/GradesView/StatusAlerts/messages.js +20 -0
  212. package/dist/components/GradesView/StatusAlerts/messages.js.map +1 -0
  213. package/dist/components/GradesView/data/api.d.ts +44 -0
  214. package/dist/components/GradesView/data/api.js +64 -0
  215. package/dist/components/GradesView/data/api.js.map +1 -0
  216. package/dist/components/GradesView/data/apiHook.d.ts +92 -0
  217. package/dist/components/GradesView/data/apiHook.js +191 -0
  218. package/dist/components/GradesView/data/apiHook.js.map +1 -0
  219. package/dist/components/GradesView/data/hooks.d.ts +32 -0
  220. package/dist/components/GradesView/data/hooks.js +242 -0
  221. package/dist/components/GradesView/data/hooks.js.map +1 -0
  222. package/dist/components/GradesView/data/queryKeys.d.ts +13 -0
  223. package/dist/components/GradesView/data/queryKeys.js +15 -0
  224. package/dist/components/GradesView/data/queryKeys.js.map +1 -0
  225. package/dist/components/GradesView/data/utils.d.ts +96 -0
  226. package/dist/components/GradesView/data/utils.js +103 -0
  227. package/dist/components/GradesView/data/utils.js.map +1 -0
  228. package/dist/components/GradesView/index.d.ts +10 -0
  229. package/dist/components/GradesView/index.js +35 -0
  230. package/dist/components/GradesView/index.js.map +1 -0
  231. package/dist/components/GradesView/messages.d.ts +24 -0
  232. package/dist/components/GradesView/messages.js +20 -0
  233. package/dist/components/GradesView/messages.js.map +1 -0
  234. package/dist/components/NetworkButton/index.d.ts +23 -0
  235. package/dist/components/NetworkButton/index.js +54 -0
  236. package/dist/components/NetworkButton/index.js.map +1 -0
  237. package/dist/components/WithSidebar/WithSidebar.scss +36 -0
  238. package/dist/components/WithSidebar/index.d.ts +9 -0
  239. package/dist/components/WithSidebar/index.js +34 -0
  240. package/dist/components/WithSidebar/index.js.map +1 -0
  241. package/dist/constants.d.ts +1 -0
  242. package/dist/constants.js +2 -0
  243. package/dist/constants.js.map +1 -0
  244. package/dist/containers/GradebookPage/GradebookDataLoader.d.ts +10 -0
  245. package/dist/containers/GradebookPage/GradebookDataLoader.js +19 -0
  246. package/dist/containers/GradebookPage/GradebookDataLoader.js.map +1 -0
  247. package/dist/containers/GradebookPage/index.d.ts +2 -0
  248. package/dist/containers/GradebookPage/index.js +40 -0
  249. package/dist/containers/GradebookPage/index.js.map +1 -0
  250. package/dist/data/api.d.ts +20 -0
  251. package/dist/data/api.js +36 -0
  252. package/dist/data/api.js.map +1 -0
  253. package/dist/data/apiHook.d.ts +40 -0
  254. package/dist/data/apiHook.js +65 -0
  255. package/dist/data/apiHook.js.map +1 -0
  256. package/dist/data/constants/app.d.ts +13 -0
  257. package/dist/data/constants/app.js +58 -0
  258. package/dist/data/constants/app.js.map +1 -0
  259. package/dist/data/constants/errors.d.ts +2 -0
  260. package/dist/data/constants/errors.js +3 -0
  261. package/dist/data/constants/errors.js.map +1 -0
  262. package/dist/data/constants/filters.d.ts +15 -0
  263. package/dist/data/constants/filters.js +71 -0
  264. package/dist/data/constants/filters.js.map +1 -0
  265. package/dist/data/constants/filters.messages.d.ts +56 -0
  266. package/dist/data/constants/filters.messages.js +40 -0
  267. package/dist/data/constants/filters.messages.js.map +1 -0
  268. package/dist/data/constants/grades.d.ts +6 -0
  269. package/dist/data/constants/grades.js +17 -0
  270. package/dist/data/constants/grades.js.map +1 -0
  271. package/dist/data/filtersContext.d.ts +60 -0
  272. package/dist/data/filtersContext.js +212 -0
  273. package/dist/data/filtersContext.js.map +1 -0
  274. package/dist/data/filtersSnapshot.d.ts +20 -0
  275. package/dist/data/filtersSnapshot.js +15 -0
  276. package/dist/data/filtersSnapshot.js.map +1 -0
  277. package/dist/data/formatUtils.d.ts +15 -0
  278. package/dist/data/formatUtils.js +35 -0
  279. package/dist/data/formatUtils.js.map +1 -0
  280. package/dist/data/gradebookUiContext.d.ts +99 -0
  281. package/dist/data/gradebookUiContext.js +143 -0
  282. package/dist/data/gradebookUiContext.js.map +1 -0
  283. package/dist/data/queryClient.d.ts +10 -0
  284. package/dist/data/queryClient.js +34 -0
  285. package/dist/data/queryClient.js.map +1 -0
  286. package/dist/data/queryKeys.d.ts +11 -0
  287. package/dist/data/queryKeys.js +21 -0
  288. package/dist/data/queryKeys.js.map +1 -0
  289. package/dist/data/services/lms/api.d.ts +2 -0
  290. package/dist/data/services/lms/api.js +104 -0
  291. package/dist/data/services/lms/api.js.map +1 -0
  292. package/dist/data/services/lms/constants.d.ts +3 -0
  293. package/dist/data/services/lms/constants.js +16 -0
  294. package/dist/data/services/lms/constants.js.map +1 -0
  295. package/dist/data/services/lms/index.d.ts +2 -0
  296. package/dist/data/services/lms/index.js +8 -0
  297. package/dist/data/services/lms/index.js.map +1 -0
  298. package/dist/data/services/lms/messages.d.ts +2 -0
  299. package/dist/data/services/lms/messages.js +8 -0
  300. package/dist/data/services/lms/messages.js.map +1 -0
  301. package/dist/data/services/lms/urls.d.ts +19 -0
  302. package/dist/data/services/lms/urls.js +47 -0
  303. package/dist/data/services/lms/urls.js.map +1 -0
  304. package/dist/data/services/lms/utils.d.ts +4 -0
  305. package/dist/data/services/lms/utils.js +34 -0
  306. package/dist/data/services/lms/utils.js.map +1 -0
  307. package/dist/data/services/segment/constants.d.ts +8 -0
  308. package/dist/data/services/segment/constants.js +26 -0
  309. package/dist/data/services/segment/constants.js.map +1 -0
  310. package/dist/data/services/segment/events.d.ts +14 -0
  311. package/dist/data/services/segment/events.js +32 -0
  312. package/dist/data/services/segment/events.js.map +1 -0
  313. package/dist/data/utils.d.ts +10 -0
  314. package/dist/data/utils.js +14 -0
  315. package/dist/data/utils.js.map +1 -0
  316. package/dist/i18n/index.d.ts +1 -0
  317. package/dist/i18n/index.js +2 -0
  318. package/dist/i18n/index.js.map +1 -0
  319. package/dist/i18n/utils.d.ts +2 -0
  320. package/dist/i18n/utils.js +21 -0
  321. package/dist/i18n/utils.js.map +1 -0
  322. package/dist/index.d.ts +3 -0
  323. package/dist/index.js +4 -0
  324. package/dist/index.js.map +1 -0
  325. package/dist/messages.d.ts +8 -0
  326. package/dist/messages.js +10 -0
  327. package/dist/messages.js.map +1 -0
  328. package/dist/providers.d.ts +3 -0
  329. package/dist/providers.js +13 -0
  330. package/dist/providers.js.map +1 -0
  331. package/dist/routes.d.ts +11 -0
  332. package/dist/routes.js +16 -0
  333. package/dist/routes.js.map +1 -0
  334. package/dist/style.scss +13 -0
  335. package/dist/utils/StrictDict.d.ts +2 -0
  336. package/dist/utils/StrictDict.js +19 -0
  337. package/dist/utils/StrictDict.js.map +1 -0
  338. package/dist/utils/formatDate.d.ts +15 -0
  339. package/dist/utils/formatDate.js +19 -0
  340. package/dist/utils/formatDate.js.map +1 -0
  341. package/dist/utils/hoc.d.ts +3 -0
  342. package/dist/utils/hoc.js +21 -0
  343. package/dist/utils/hoc.js.map +1 -0
  344. package/dist/utils/index.d.ts +3 -0
  345. package/dist/utils/index.js +4 -0
  346. package/dist/utils/index.js.map +1 -0
  347. package/dist/utils/keyStore.d.ts +2 -0
  348. package/dist/utils/keyStore.js +4 -0
  349. package/dist/utils/keyStore.js.map +1 -0
  350. package/package.json +89 -0
@@ -0,0 +1,50 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ assignmentHeader: {
4
+ id: 'gradebook.GradesView.EditModal.headers.assignment',
5
+ defaultMessage: 'Assignment',
6
+ description: 'Edit Modal Assignment header',
7
+ },
8
+ currentGradeHeader: {
9
+ id: 'gradebook.GradesView.EditModal.headers.currentGrade',
10
+ defaultMessage: 'Current Grade',
11
+ description: 'Edit Modal Current Grade header',
12
+ },
13
+ originalGradeHeader: {
14
+ id: 'gradebook.GradesView.EditModal.headers.originalGrade',
15
+ defaultMessage: 'Original Grade',
16
+ description: 'Edit Modal Original Grade header',
17
+ },
18
+ studentHeader: {
19
+ id: 'gradebook.GradesView.EditModal.headers.student',
20
+ defaultMessage: 'Student',
21
+ description: 'Edit Modal Student header',
22
+ },
23
+ title: {
24
+ id: 'gradebook.GradesView.EditModal.title',
25
+ defaultMessage: 'Edit Grades',
26
+ description: 'Edit Modal title',
27
+ },
28
+ closeText: {
29
+ id: 'gradebook.GradesView.EditModal.closeText',
30
+ defaultMessage: 'Cancel',
31
+ description: 'Edit Modal close button text',
32
+ },
33
+ visibility: {
34
+ id: 'gradebook.GradesView.EditModal.contactSupport',
35
+ defaultMessage: 'Showing most recent actions (max 5). To see more, please contact support',
36
+ description: 'Edit Modal visibility hint message',
37
+ },
38
+ saveVisibility: {
39
+ id: 'gradebook.GradesView.EditModal.saveVisibility',
40
+ defaultMessage: 'Note: Once you save, your changes will be visible to students.',
41
+ description: 'Edit Modal saved changes effect hint',
42
+ },
43
+ saveGrade: {
44
+ id: 'gradebook.GradesView.EditModal.saveGrade',
45
+ defaultMessage: 'Save Grades',
46
+ description: 'Edit Modal Save button label',
47
+ },
48
+ });
49
+ export default messages;
50
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/components/GradesView/EditModal/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,gBAAgB,EAAE;QAChB,EAAE,EAAE,mDAAmD;QACvD,cAAc,EAAE,YAAY;QAC5B,WAAW,EAAE,8BAA8B;KAC5C;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,qDAAqD;QACzD,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,iCAAiC;KAC/C;IACD,mBAAmB,EAAE;QACnB,EAAE,EAAE,sDAAsD;QAC1D,cAAc,EAAE,gBAAgB;QAChC,WAAW,EAAE,kCAAkC;KAChD;IACD,aAAa,EAAE;QACb,EAAE,EAAE,gDAAgD;QACpD,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,2BAA2B;KACzC;IACD,KAAK,EAAE;QACL,EAAE,EAAE,sCAAsC;QAC1C,cAAc,EAAE,aAAa;QAC7B,WAAW,EAAE,kBAAkB;KAChC;IACD,SAAS,EAAE;QACT,EAAE,EAAE,0CAA0C;QAC9C,cAAc,EAAE,QAAQ;QACxB,WAAW,EAAE,8BAA8B;KAC5C;IACD,UAAU,EAAE;QACV,EAAE,EAAE,+CAA+C;QACnD,cAAc,EAAE,0EAA0E;QAC1F,WAAW,EAAE,oCAAoC;KAClD;IACD,cAAc,EAAE;QACd,EAAE,EAAE,+CAA+C;QACnD,cAAc,EAAE,gEAAgE;QAChF,WAAW,EAAE,sCAAsC;KACpD;IACD,SAAS,EAAE;QACT,EAAE,EAAE,0CAA0C;QAC9C,cAAc,EAAE,aAAa;QAC7B,WAAW,EAAE,8BAA8B;KAC5C;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n assignmentHeader: {\n id: 'gradebook.GradesView.EditModal.headers.assignment',\n defaultMessage: 'Assignment',\n description: 'Edit Modal Assignment header',\n },\n currentGradeHeader: {\n id: 'gradebook.GradesView.EditModal.headers.currentGrade',\n defaultMessage: 'Current Grade',\n description: 'Edit Modal Current Grade header',\n },\n originalGradeHeader: {\n id: 'gradebook.GradesView.EditModal.headers.originalGrade',\n defaultMessage: 'Original Grade',\n description: 'Edit Modal Original Grade header',\n },\n studentHeader: {\n id: 'gradebook.GradesView.EditModal.headers.student',\n defaultMessage: 'Student',\n description: 'Edit Modal Student header',\n },\n title: {\n id: 'gradebook.GradesView.EditModal.title',\n defaultMessage: 'Edit Grades',\n description: 'Edit Modal title',\n },\n closeText: {\n id: 'gradebook.GradesView.EditModal.closeText',\n defaultMessage: 'Cancel',\n description: 'Edit Modal close button text',\n },\n visibility: {\n id: 'gradebook.GradesView.EditModal.contactSupport',\n defaultMessage: 'Showing most recent actions (max 5). To see more, please contact support',\n description: 'Edit Modal visibility hint message',\n },\n saveVisibility: {\n id: 'gradebook.GradesView.EditModal.saveVisibility',\n defaultMessage: 'Note: Once you save, your changes will be visible to students.',\n description: 'Edit Modal saved changes effect hint',\n },\n saveGrade: {\n id: 'gradebook.GradesView.EditModal.saveGrade',\n defaultMessage: 'Save Grades',\n description: 'Edit Modal Save button label',\n },\n});\n\nexport default messages;\n"]}
@@ -0,0 +1,9 @@
1
+ export function FilterBadge({ filterName, handleClose, }: func): import("react").JSX.Element | null;
2
+ export namespace FilterBadge {
3
+ namespace propTypes {
4
+ let handleClose: PropTypes.Validator<(...args: any[]) => any>;
5
+ let filterName: PropTypes.Validator<string>;
6
+ }
7
+ }
8
+ export default FilterBadge;
9
+ import PropTypes from 'prop-types';
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import PropTypes from 'prop-types';
3
+ import { Button } from '@openedx/paragon';
4
+ import { useIntl } from '@openedx/frontend-base';
5
+ import { useFilterBadgeConfig } from '../data/hooks';
6
+ /**
7
+ * FilterBadge
8
+ * Base filter badge component, that displays a name and a close button.
9
+ * If showValue is true, it will also display the included value.
10
+ * @param {func} handleClose - close/dismiss filter event, taking a list of filternames
11
+ * to reset when the filter badge closes.
12
+ * @param {string} filterName - api filter name
13
+ */
14
+ export const FilterBadge = ({ filterName, handleClose, }) => {
15
+ const { formatMessage } = useIntl();
16
+ const { displayName, isDefault, hideValue, value, connectedFilters, } = useFilterBadgeConfig(filterName);
17
+ if (isDefault) {
18
+ return null;
19
+ }
20
+ return (_jsxs("div", { children: [_jsxs("span", { className: "badge badge-info", children: [_jsx("span", { "data-testid": "display-name", children: formatMessage(displayName) }), _jsx("span", { "data-testid": "filter-value", children: !hideValue ? `: ${value}` : '' }), _jsx(Button, { className: "btn-info", "aria-label": "close", onClick: handleClose(connectedFilters), children: _jsx("span", { "aria-hidden": "true", children: "\u00D7" }) })] }), _jsx("br", {})] }));
21
+ };
22
+ FilterBadge.propTypes = {
23
+ handleClose: PropTypes.func.isRequired,
24
+ filterName: PropTypes.string.isRequired,
25
+ };
26
+ export default FilterBadge;
27
+ //# sourceMappingURL=FilterBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterBadge.js","sourceRoot":"","sources":["../../../../src/components/GradesView/FilterBadges/FilterBadge.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAC1B,UAAU,EACV,WAAW,GACZ,EAAE,EAAE;IACH,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EACJ,WAAW,EACX,SAAS,EACT,SAAS,EACT,KAAK,EACL,gBAAgB,GACjB,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CACL,0BACE,gBAAM,SAAS,EAAC,kBAAkB,aAChC,8BAAkB,cAAc,YAAE,aAAa,CAAC,WAAW,CAAC,GAAQ,EACpE,8BAAkB,cAAc,YAC7B,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAC1B,EACP,KAAC,MAAM,IACL,SAAS,EAAC,UAAU,gBACT,OAAO,EAClB,OAAO,EAAE,WAAW,CAAC,gBAAgB,CAAC,YAEtC,8BAAkB,MAAM,uBAAe,GAChC,IACJ,EACP,cAAM,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,WAAW,CAAC,SAAS,GAAG;IACtB,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;IACtC,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACxC,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { Button } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { useFilterBadgeConfig } from '../data/hooks';\n\n/**\n * FilterBadge\n * Base filter badge component, that displays a name and a close button.\n * If showValue is true, it will also display the included value.\n * @param {func} handleClose - close/dismiss filter event, taking a list of filternames\n * to reset when the filter badge closes.\n * @param {string} filterName - api filter name\n */\nexport const FilterBadge = ({\n filterName,\n handleClose,\n}) => {\n const { formatMessage } = useIntl();\n const {\n displayName,\n isDefault,\n hideValue,\n value,\n connectedFilters,\n } = useFilterBadgeConfig(filterName);\n if (isDefault) {\n return null;\n }\n return (\n <div>\n <span className=\"badge badge-info\">\n <span data-testid=\"display-name\">{formatMessage(displayName)}</span>\n <span data-testid=\"filter-value\">\n {!hideValue ? `: ${value}` : ''}\n </span>\n <Button\n className=\"btn-info\"\n aria-label=\"close\"\n onClick={handleClose(connectedFilters)}\n >\n <span aria-hidden=\"true\">&times;</span>\n </Button>\n </span>\n <br />\n </div>\n );\n};\n\nFilterBadge.propTypes = {\n handleClose: PropTypes.func.isRequired,\n filterName: PropTypes.string.isRequired,\n};\n\nexport default FilterBadge;\n"]}
@@ -0,0 +1,8 @@
1
+ export function FilterBadges({ handleClose }: func): import("react").JSX.Element;
2
+ export namespace FilterBadges {
3
+ namespace propTypes {
4
+ let handleClose: PropTypes.Validator<(...args: any[]) => any>;
5
+ }
6
+ }
7
+ export default FilterBadges;
8
+ import PropTypes from 'prop-types';
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import PropTypes from 'prop-types';
3
+ import { badgeOrder } from '../../../data/constants/filters';
4
+ import FilterBadge from './FilterBadge';
5
+ /**
6
+ * FilterBadges
7
+ * Displays a FilterBadge for each filter type in the data model with their current values.
8
+ * @param {func} handleClose - event taking a list of filternames to reset
9
+ */
10
+ export const FilterBadges = ({ handleClose }) => (_jsx("div", { children: badgeOrder.map(filterName => (_jsx(FilterBadge, { handleClose, filterName }, filterName))) }));
11
+ FilterBadges.propTypes = {
12
+ handleClose: PropTypes.func.isRequired,
13
+ };
14
+ export default FilterBadges;
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradesView/FilterBadges/index.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAC/C,wBACG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAC5B,KAAC,WAAW,IAAwB,WAAW,EAAE,UAAU,IAAzC,UAAU,CAAqC,CAClE,CAAC,GACE,CACP,CAAC;AACF,YAAY,CAAC,SAAS,GAAG;IACvB,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;CACvC,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { badgeOrder } from '@src/data/constants/filters';\n\nimport FilterBadge from './FilterBadge';\n\n/**\n * FilterBadges\n * Displays a FilterBadge for each filter type in the data model with their current values.\n * @param {func} handleClose - event taking a list of filternames to reset\n */\nexport const FilterBadges = ({ handleClose }) => (\n <div>\n {badgeOrder.map(filterName => (\n <FilterBadge key={filterName} {...{ handleClose, filterName }} />\n ))}\n </div>\n);\nFilterBadges.propTypes = {\n handleClose: PropTypes.func.isRequired,\n};\n\nexport default FilterBadges;\n"]}
@@ -0,0 +1,5 @@
1
+ export function FilterMenuToggle(): import("react").JSX.Element;
2
+ export namespace FilterMenuToggle {
3
+ let propTypes: {};
4
+ }
5
+ export default FilterMenuToggle;
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Icon } from '@openedx/paragon';
3
+ import { useIntl } from '@openedx/frontend-base';
4
+ import { FilterAlt } from '@openedx/paragon/icons';
5
+ import { useGradebookUi } from '../../../data/gradebookUiContext';
6
+ import messages from './messages';
7
+ /**
8
+ * Controls for filtering the GradebookTable. Contains the "Edit Filters" button for opening the filter drawer
9
+ * as well as the search box for searching by username/email.
10
+ */
11
+ export const FilterMenuToggle = () => {
12
+ const { toggleFilterMenu } = useGradebookUi();
13
+ const { formatMessage } = useIntl();
14
+ return (_jsxs(Button, { id: "edit-filters-btn", className: "btn-primary align-self-start", onClick: toggleFilterMenu, children: [_jsx(Icon, { src: FilterAlt, className: "mr-1" }), " ", formatMessage(messages.editFilters)] }));
15
+ };
16
+ FilterMenuToggle.propTypes = {};
17
+ export default FilterMenuToggle;
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradesView/FilterMenuToggle/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,MAAM,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE,CAAC;IAC9C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,OAAO,CACL,MAAC,MAAM,IACL,EAAE,EAAC,kBAAkB,EACrB,SAAS,EAAC,8BAA8B,EACxC,OAAO,EAAE,gBAAgB,aAEzB,KAAC,IAAI,IAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAC,MAAM,GAAG,OAAE,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,IACvE,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,gBAAgB,CAAC,SAAS,GAAG,EAAE,CAAC;AAEhC,eAAe,gBAAgB,CAAC","sourcesContent":["import { Button, Icon } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\nimport { FilterAlt } from '@openedx/paragon/icons';\n\nimport { useGradebookUi } from '@src/data/gradebookUiContext';\n\nimport messages from './messages';\n\n/**\n * Controls for filtering the GradebookTable. Contains the \"Edit Filters\" button for opening the filter drawer\n * as well as the search box for searching by username/email.\n */\nexport const FilterMenuToggle = () => {\n const { toggleFilterMenu } = useGradebookUi();\n const { formatMessage } = useIntl();\n return (\n <Button\n id=\"edit-filters-btn\"\n className=\"btn-primary align-self-start\"\n onClick={toggleFilterMenu}\n >\n <Icon src={FilterAlt} className=\"mr-1\" /> {formatMessage(messages.editFilters)}\n </Button>\n );\n};\n\nFilterMenuToggle.propTypes = {};\n\nexport default FilterMenuToggle;\n"]}
@@ -0,0 +1,8 @@
1
+ export default messages;
2
+ declare namespace messages {
3
+ namespace editFilters {
4
+ let id: string;
5
+ let defaultMessage: string;
6
+ let description: string;
7
+ }
8
+ }
@@ -0,0 +1,10 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ editFilters: {
4
+ id: 'gradebook.GradesView.editFilterLabel',
5
+ defaultMessage: 'Edit Filters',
6
+ description: 'A labeled button in the Grades tab that opens/closes the Filters tab, allowing the grades to be filtered',
7
+ },
8
+ });
9
+ export default messages;
10
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/components/GradesView/FilterMenuToggle/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,WAAW,EAAE;QACX,EAAE,EAAE,sCAAsC;QAC1C,cAAc,EAAE,cAAc;QAC9B,WAAW,EAAE,0GAA0G;KACxH;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n editFilters: {\n id: 'gradebook.GradesView.editFilterLabel',\n defaultMessage: 'Edit Filters',\n description: 'A labeled button in the Grades tab that opens/closes the Filters tab, allowing the grades to be filtered',\n },\n});\n\nexport default messages;\n"]}
@@ -0,0 +1,15 @@
1
+ export function BoldText({ text }: {
2
+ text: any;
3
+ }): import("react").JSX.Element;
4
+ export namespace BoldText {
5
+ namespace propTypes {
6
+ let text: PropTypes.Validator<NonNullable<NonNullable<string | number | null | undefined>>>;
7
+ }
8
+ }
9
+ export function FilteredUsersLabel(): import("react").ReactNode[] | null;
10
+ export namespace FilteredUsersLabel {
11
+ let propTypes_1: {};
12
+ export { propTypes_1 as propTypes };
13
+ }
14
+ export default FilteredUsersLabel;
15
+ import PropTypes from 'prop-types';
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import PropTypes from 'prop-types';
3
+ import { useIntl } from '@openedx/frontend-base';
4
+ import { useUserCounts } from '../data/hooks';
5
+ import messages from './messages';
6
+ export const BoldText = ({ text }) => (_jsx("span", { className: "font-weight-bold", children: text }));
7
+ BoldText.propTypes = {
8
+ text: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
9
+ };
10
+ /**
11
+ * <FilteredUsersLabel />
12
+ * Simple label component displaying the filtered and total users shown
13
+ */
14
+ export const FilteredUsersLabel = () => {
15
+ const { filteredUsersCount, totalUsersCount } = useUserCounts();
16
+ const { formatMessage } = useIntl();
17
+ if (!totalUsersCount) {
18
+ return null;
19
+ }
20
+ return formatMessage(messages.visibilityLabel, {
21
+ filteredUsers: _jsx(BoldText, { text: filteredUsersCount }),
22
+ totalUsers: _jsx(BoldText, { text: totalUsersCount }),
23
+ });
24
+ };
25
+ FilteredUsersLabel.propTypes = {};
26
+ export default FilteredUsersLabel;
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradesView/FilteredUsersLabel/index.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACpC,eAAM,SAAS,EAAC,kBAAkB,YAAE,IAAI,GAAQ,CACjD,CAAC;AACF,QAAQ,CAAC,SAAS,GAAG;IACnB,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU;CAC3E,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,MAAM,EAAE,kBAAkB,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAAC;IAChE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,aAAa,CAClB,QAAQ,CAAC,eAAe,EACxB;QACE,aAAa,EAAE,KAAC,QAAQ,IAAC,IAAI,EAAE,kBAAkB,GAAI;QACrD,UAAU,EAAE,KAAC,QAAQ,IAAC,IAAI,EAAE,eAAe,GAAI;KAChD,CACF,CAAC;AACJ,CAAC,CAAC;AACF,kBAAkB,CAAC,SAAS,GAAG,EAAE,CAAC;AAElC,eAAe,kBAAkB,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { useUserCounts } from '../data/hooks';\nimport messages from './messages';\n\nexport const BoldText = ({ text }) => (\n <span className=\"font-weight-bold\">{text}</span>\n);\nBoldText.propTypes = {\n text: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n};\n\n/**\n * <FilteredUsersLabel />\n * Simple label component displaying the filtered and total users shown\n */\nexport const FilteredUsersLabel = () => {\n const { filteredUsersCount, totalUsersCount } = useUserCounts();\n const { formatMessage } = useIntl();\n\n if (!totalUsersCount) {\n return null;\n }\n return formatMessage(\n messages.visibilityLabel,\n {\n filteredUsers: <BoldText text={filteredUsersCount} />,\n totalUsers: <BoldText text={totalUsersCount} />,\n },\n );\n};\nFilteredUsersLabel.propTypes = {};\n\nexport default FilteredUsersLabel;\n"]}
@@ -0,0 +1,8 @@
1
+ export default messages;
2
+ declare namespace messages {
3
+ namespace visibilityLabel {
4
+ let id: string;
5
+ let defaultMessage: string;
6
+ let description: string;
7
+ }
8
+ }
@@ -0,0 +1,10 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ visibilityLabel: {
4
+ id: 'gradebook.GradesTab.usersVisibilityLabel',
5
+ defaultMessage: 'Showing {filteredUsers} of {totalUsers} total learners',
6
+ description: 'Users visibility label',
7
+ },
8
+ });
9
+ export default messages;
10
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/components/GradesView/FilteredUsersLabel/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,eAAe,EAAE;QACf,EAAE,EAAE,0CAA0C;QAC9C,cAAc,EAAE,wDAAwD;QACxE,WAAW,EAAE,wBAAwB;KACtC;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n visibilityLabel: {\n id: 'gradebook.GradesTab.usersVisibilityLabel',\n defaultMessage: 'Showing {filteredUsers} of {totalUsers} total learners',\n description: 'Users visibility label',\n },\n});\n\nexport default messages;\n"]}
@@ -0,0 +1,2 @@
1
+ declare const _default: any;
2
+ export default _default;
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import PropTypes from 'prop-types';
3
+ import { StrictDict } from '../../../utils';
4
+ /**
5
+ * Fields.Username
6
+ * simple label field for username, that optionally also displays external_user_key (userKey)
7
+ * if it is provided.
8
+ * @param {string} username - username for display
9
+ * @param {userKey} userKey - external_user_key for display
10
+ */
11
+ const Username = ({ username, userKey }) => (_jsx("div", { children: _jsx("span", { className: "wrap-text-in-cell", children: _jsxs("div", { children: [_jsx("div", { children: username }), userKey && _jsx("div", { className: "student-key", children: userKey })] }) }) }));
12
+ Username.defaultProps = {
13
+ userKey: null,
14
+ };
15
+ Username.propTypes = {
16
+ username: PropTypes.string.isRequired,
17
+ userKey: PropTypes.string,
18
+ };
19
+ /**
20
+ * Fields.Text
21
+ * Simple label field for text value.
22
+ * @param {string} value - value for display
23
+ */
24
+ const Text = ({ value }) => (_jsx("span", { className: "wrap-text-in-cell", children: value }));
25
+ Text.propTypes = {
26
+ value: PropTypes.string.isRequired,
27
+ };
28
+ export default StrictDict({
29
+ Text,
30
+ Username,
31
+ });
32
+ //# sourceMappingURL=Fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Fields.js","sourceRoot":"","sources":["../../../../src/components/GradesView/GradebookTable/Fields.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,QAAQ,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAC1C,wBACE,eAAM,SAAS,EAAC,mBAAmB,YACjC,0BACE,wBAAM,QAAQ,GAAO,EACpB,OAAO,IAAI,cAAK,SAAS,EAAC,aAAa,YAAE,OAAO,GAAO,IACpD,GACD,GACH,CACP,CAAC;AACF,QAAQ,CAAC,YAAY,GAAG;IACtB,OAAO,EAAE,IAAI;CACd,CAAC;AACF,QAAQ,CAAC,SAAS,GAAG;IACnB,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IACrC,OAAO,EAAE,SAAS,CAAC,MAAM;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,eAAM,SAAS,EAAC,mBAAmB,YAAE,KAAK,GAAQ,CAAC,CAAC;AACjF,IAAI,CAAC,SAAS,GAAG;IACf,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACnC,CAAC;AAEF,eAAe,UAAU,CAAC;IACxB,IAAI;IACJ,QAAQ;CACT,CAAC,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { StrictDict } from '@src/utils';\n\n/**\n * Fields.Username\n * simple label field for username, that optionally also displays external_user_key (userKey)\n * if it is provided.\n * @param {string} username - username for display\n * @param {userKey} userKey - external_user_key for display\n */\nconst Username = ({ username, userKey }) => (\n <div>\n <span className=\"wrap-text-in-cell\">\n <div>\n <div>{username}</div>\n {userKey && <div className=\"student-key\">{userKey}</div>}\n </div>\n </span>\n </div>\n);\nUsername.defaultProps = {\n userKey: null,\n};\nUsername.propTypes = {\n username: PropTypes.string.isRequired,\n userKey: PropTypes.string,\n};\n\n/**\n * Fields.Text\n * Simple label field for text value.\n * @param {string} value - value for display\n */\nconst Text = ({ value }) => (<span className=\"wrap-text-in-cell\">{value}</span>);\nText.propTypes = {\n value: PropTypes.string.isRequired,\n};\n\nexport default StrictDict({\n Text,\n Username,\n});\n"]}
@@ -0,0 +1,26 @@
1
+ export function useGradeButtonData({ entry, subsection }: {
2
+ entry: any;
3
+ subsection: any;
4
+ }): {
5
+ areGradesFrozen: boolean | undefined;
6
+ label: string | number;
7
+ onClick: () => void;
8
+ };
9
+ export function GradeButton({ entry, subsection }: object): string | number | import("react").JSX.Element;
10
+ export namespace GradeButton {
11
+ namespace propTypes {
12
+ let subsection: PropTypes.Validator<NonNullable<PropTypes.InferProps<{
13
+ attempted: PropTypes.Requireable<boolean>;
14
+ percent: PropTypes.Requireable<number>;
15
+ score_possible: PropTypes.Requireable<number>;
16
+ subsection_name: PropTypes.Requireable<string>;
17
+ module_id: PropTypes.Requireable<string>;
18
+ }>>>;
19
+ let entry: PropTypes.Validator<NonNullable<PropTypes.InferProps<{
20
+ user_id: PropTypes.Requireable<number>;
21
+ username: PropTypes.Requireable<string>;
22
+ }>>>;
23
+ }
24
+ }
25
+ export default module.GradeButton;
26
+ import PropTypes from 'prop-types';
@@ -0,0 +1,56 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import PropTypes from 'prop-types';
3
+ import { Button } from '@openedx/paragon';
4
+ import { useAssignmentTypes, useCourseIdWithGate } from '../../../data/apiHook';
5
+ import { useGradebookUi } from '../../../data/gradebookUiContext';
6
+ import { subsectionGrade } from '../data/utils';
7
+ import { useGradeData } from '../data/hooks';
8
+ import * as module from './GradeButton';
9
+ export const useGradeButtonData = ({ entry, subsection }) => {
10
+ var _a;
11
+ const { courseId, enabled } = useCourseIdWithGate();
12
+ const areGradesFrozen = (_a = useAssignmentTypes(courseId, { enabled }).data) === null || _a === void 0 ? void 0 : _a.areGradesFrozen;
13
+ const { gradeFormat } = useGradeData();
14
+ const { setModalStateFromTable: setModalState } = useGradebookUi();
15
+ const label = subsectionGrade[gradeFormat](subsection);
16
+ const onClick = () => {
17
+ setModalState({
18
+ userEntry: entry,
19
+ subsection,
20
+ });
21
+ };
22
+ return {
23
+ areGradesFrozen,
24
+ label,
25
+ onClick,
26
+ };
27
+ };
28
+ /**
29
+ * GradeButton
30
+ * The button link for a user's grade for a given subseciton.
31
+ * load formatting based on selected grade format, and on click, opens
32
+ * the editModal, loading in the current entry and subsection.
33
+ * @param {object} entry - user's grade entry
34
+ * @param {object} subsection - user's subsection grade from subsection_breakdown
35
+ */
36
+ export const GradeButton = ({ entry, subsection }) => {
37
+ const { areGradesFrozen, label, onClick, } = module.useGradeButtonData({ entry, subsection });
38
+ return areGradesFrozen
39
+ ? label
40
+ : (_jsx(Button, { variant: "link", className: "btn-header grade-button", onClick: onClick, children: label }));
41
+ };
42
+ GradeButton.propTypes = {
43
+ subsection: PropTypes.shape({
44
+ attempted: PropTypes.bool,
45
+ percent: PropTypes.number,
46
+ score_possible: PropTypes.number,
47
+ subsection_name: PropTypes.string,
48
+ module_id: PropTypes.string,
49
+ }).isRequired,
50
+ entry: PropTypes.shape({
51
+ user_id: PropTypes.number,
52
+ username: PropTypes.string,
53
+ }).isRequired,
54
+ };
55
+ export default GradeButton;
56
+ //# sourceMappingURL=GradeButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GradeButton.js","sourceRoot":"","sources":["../../../../src/components/GradesView/GradebookTable/GradeButton.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;;IAC1D,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAAC;IACpD,MAAM,eAAe,GAAG,MAAA,kBAAkB,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,0CAAE,eAAe,CAAC;IACxF,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAAC;IACvC,MAAM,EAAE,sBAAsB,EAAE,aAAa,EAAE,GAAG,cAAc,EAAE,CAAC;IACnE,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,aAAa,CAAC;YACZ,SAAS,EAAE,KAAK;YAChB,UAAU;SACX,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,eAAe;QACf,KAAK;QACL,OAAO;KACR,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;IACnD,MAAM,EACJ,eAAe,EACf,KAAK,EACL,OAAO,GACR,GAAG,MAAM,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IACrD,OAAO,eAAe;QACpB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,CACA,KAAC,MAAM,IACL,OAAO,EAAC,MAAM,EACd,SAAS,EAAC,yBAAyB,EACnC,OAAO,EAAE,OAAO,YAEf,KAAK,GACC,CACV,CAAC;AACN,CAAC,CAAC;AACF,WAAW,CAAC,SAAS,GAAG;IACtB,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC;QAC1B,SAAS,EAAE,SAAS,CAAC,IAAI;QACzB,OAAO,EAAE,SAAS,CAAC,MAAM;QACzB,cAAc,EAAE,SAAS,CAAC,MAAM;QAChC,eAAe,EAAE,SAAS,CAAC,MAAM;QACjC,SAAS,EAAE,SAAS,CAAC,MAAM;KAC5B,CAAC,CAAC,UAAU;IACb,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC;QACrB,OAAO,EAAE,SAAS,CAAC,MAAM;QACzB,QAAQ,EAAE,SAAS,CAAC,MAAM;KAC3B,CAAC,CAAC,UAAU;CACd,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { Button } from '@openedx/paragon';\n\nimport { useAssignmentTypes, useCourseIdWithGate } from '@src/data/apiHook';\nimport { useGradebookUi } from '@src/data/gradebookUiContext';\nimport { subsectionGrade } from '../data/utils';\nimport { useGradeData } from '../data/hooks';\nimport * as module from './GradeButton';\n\nexport const useGradeButtonData = ({ entry, subsection }) => {\n const { courseId, enabled } = useCourseIdWithGate();\n const areGradesFrozen = useAssignmentTypes(courseId, { enabled }).data?.areGradesFrozen;\n const { gradeFormat } = useGradeData();\n const { setModalStateFromTable: setModalState } = useGradebookUi();\n const label = subsectionGrade[gradeFormat](subsection);\n\n const onClick = () => {\n setModalState({\n userEntry: entry,\n subsection,\n });\n };\n\n return {\n areGradesFrozen,\n label,\n onClick,\n };\n};\n\n/**\n * GradeButton\n * The button link for a user's grade for a given subseciton.\n * load formatting based on selected grade format, and on click, opens\n * the editModal, loading in the current entry and subsection.\n * @param {object} entry - user's grade entry\n * @param {object} subsection - user's subsection grade from subsection_breakdown\n */\nexport const GradeButton = ({ entry, subsection }) => {\n const {\n areGradesFrozen,\n label,\n onClick,\n } = module.useGradeButtonData({ entry, subsection });\n return areGradesFrozen\n ? label\n : (\n <Button\n variant=\"link\"\n className=\"btn-header grade-button\"\n onClick={onClick}\n >\n {label}\n </Button>\n );\n};\nGradeButton.propTypes = {\n subsection: PropTypes.shape({\n attempted: PropTypes.bool,\n percent: PropTypes.number,\n score_possible: PropTypes.number,\n subsection_name: PropTypes.string,\n module_id: PropTypes.string,\n }).isRequired,\n entry: PropTypes.shape({\n user_id: PropTypes.number,\n username: PropTypes.string,\n }).isRequired,\n};\n\nexport default GradeButton;\n"]}
@@ -0,0 +1,3 @@
1
+ export const totalGradePercentageMessage: "Total Grade values are always displayed as a percentage.";
2
+ declare const _default: any;
3
+ export default _default;
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useIntl, getLocale, isRtl } from '@openedx/frontend-base';
3
+ import { Icon, OverlayTrigger, Tooltip, } from '@openedx/paragon';
4
+ import { InfoOutline } from '@openedx/paragon/icons';
5
+ import { StrictDict } from '../../../utils';
6
+ import messages from './messages';
7
+ export const totalGradePercentageMessage = 'Total Grade values are always displayed as a percentage.';
8
+ /**
9
+ * <TotalGradeLabelReplacement />
10
+ * Total Grade column header.
11
+ * displays an overlay tooltip with screen-reader text to indicate total grade percentage
12
+ */
13
+ const TotalGradeLabelReplacement = () => {
14
+ const { formatMessage } = useIntl();
15
+ return (_jsx("div", { children: _jsx(OverlayTrigger, { trigger: ['hover', 'focus'], placement: isRtl(getLocale()) ? 'right' : 'left', overlay: (_jsx(Tooltip, { id: "course-grade-tooltip", children: formatMessage(messages.totalGradePercentage) })), children: _jsxs("div", { children: [formatMessage(messages.totalGradeHeading), _jsx("div", { id: "courseGradeTooltipIcon", children: _jsx(Icon, { src: InfoOutline, screenReaderText: formatMessage(messages.totalGradePercentage) }) })] }) }, "left-basic") }));
16
+ };
17
+ /**
18
+ * Asterisk to display next to heading labels that are only used for masters students
19
+ */
20
+ const mastersOnlyFieldAsterisk = (_jsx("span", { className: "font-weight-normal", children: "*" }));
21
+ /**
22
+ * <UsernameLabelReplacement />
23
+ * Username column header. Lists that Student Key is possibly available
24
+ */
25
+ const UsernameLabelReplacement = () => {
26
+ const { formatMessage } = useIntl();
27
+ return (_jsxs("div", { children: [_jsx("div", { children: formatMessage(messages.usernameHeading) }), _jsxs("div", { className: "font-weight-normal student-key", children: [formatMessage(messages.studentKeyLabel), mastersOnlyFieldAsterisk] })] }));
28
+ };
29
+ /**
30
+ * <MastersOnlyLabelReplacement {message}>
31
+ * Column header for fields that are only available for masters students
32
+ */
33
+ const MastersOnlyLabelReplacement = (message) => {
34
+ const { formatMessage } = useIntl();
35
+ return (_jsxs("div", { children: [formatMessage(message), mastersOnlyFieldAsterisk] }));
36
+ };
37
+ export default StrictDict({
38
+ TotalGradeLabelReplacement,
39
+ UsernameLabelReplacement,
40
+ MastersOnlyLabelReplacement,
41
+ });
42
+ //# sourceMappingURL=LabelReplacements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LabelReplacements.js","sourceRoot":"","sources":["../../../../src/components/GradesView/GradebookTable/LabelReplacements.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EACL,IAAI,EACJ,cAAc,EACd,OAAO,GACR,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,2BAA2B,GAAG,0DAA0D,CAAC;AAEtG;;;;GAIG;AACH,MAAM,0BAA0B,GAAG,GAAG,EAAE;IACtC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,OAAO,CACL,wBACE,KAAC,cAAc,IACb,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAE3B,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAChD,OAAO,EAAE,CACP,KAAC,OAAO,IAAC,EAAE,EAAC,sBAAsB,YAC/B,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,GACrC,CACX,YAED,0BACG,aAAa,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAC1C,cAAK,EAAE,EAAC,wBAAwB,YAC9B,KAAC,IAAI,IACH,GAAG,EAAE,WAAW,EAChB,gBAAgB,EAAE,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,GAC9D,GACE,IACF,IAhBF,YAAY,CAiBD,GACb,CACP,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,wBAAwB,GAAG,CAC/B,eAAM,SAAS,EAAC,oBAAoB,kBAAS,CAC9C,CAAC;AAEF;;;GAGG;AACH,MAAM,wBAAwB,GAAG,GAAG,EAAE;IACpC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,OAAO,CACL,0BACE,wBACG,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,GACpC,EACN,eAAK,SAAS,EAAC,gCAAgC,aAC5C,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,EACtC,wBAAwB,IACtB,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,2BAA2B,GAAG,CAAC,OAAO,EAAE,EAAE;IAC9C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,OAAO,CACL,0BACG,aAAa,CAAC,OAAO,CAAC,EACrB,wBAAwB,IACtB,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC;IACxB,0BAA0B;IAC1B,wBAAwB;IACxB,2BAA2B;CAC5B,CAAC,CAAC","sourcesContent":["import { useIntl, getLocale, isRtl } from '@openedx/frontend-base';\nimport {\n Icon,\n OverlayTrigger,\n Tooltip,\n} from '@openedx/paragon';\nimport { InfoOutline } from '@openedx/paragon/icons';\n\nimport { StrictDict } from '@src/utils';\n\nimport messages from './messages';\n\nexport const totalGradePercentageMessage = 'Total Grade values are always displayed as a percentage.';\n\n/**\n * <TotalGradeLabelReplacement />\n * Total Grade column header.\n * displays an overlay tooltip with screen-reader text to indicate total grade percentage\n */\nconst TotalGradeLabelReplacement = () => {\n const { formatMessage } = useIntl();\n return (\n <div>\n <OverlayTrigger\n trigger={['hover', 'focus']}\n key=\"left-basic\"\n placement={isRtl(getLocale()) ? 'right' : 'left'}\n overlay={(\n <Tooltip id=\"course-grade-tooltip\">\n {formatMessage(messages.totalGradePercentage)}\n </Tooltip>\n )}\n >\n <div>\n {formatMessage(messages.totalGradeHeading)}\n <div id=\"courseGradeTooltipIcon\">\n <Icon\n src={InfoOutline}\n screenReaderText={formatMessage(messages.totalGradePercentage)}\n />\n </div>\n </div>\n </OverlayTrigger>\n </div>\n );\n};\n\n/**\n * Asterisk to display next to heading labels that are only used for masters students\n */\nconst mastersOnlyFieldAsterisk = (\n <span className=\"font-weight-normal\">*</span>\n);\n\n/**\n * <UsernameLabelReplacement />\n * Username column header. Lists that Student Key is possibly available\n */\nconst UsernameLabelReplacement = () => {\n const { formatMessage } = useIntl();\n return (\n <div>\n <div>\n {formatMessage(messages.usernameHeading)}\n </div>\n <div className=\"font-weight-normal student-key\">\n {formatMessage(messages.studentKeyLabel)}\n { mastersOnlyFieldAsterisk }\n </div>\n </div>\n );\n};\n\n/**\n * <MastersOnlyLabelReplacement {message}>\n * Column header for fields that are only available for masters students\n */\nconst MastersOnlyLabelReplacement = (message) => {\n const { formatMessage } = useIntl();\n return (\n <div>\n {formatMessage(message)}\n { mastersOnlyFieldAsterisk }\n </div>\n );\n};\n\nexport default StrictDict({\n TotalGradeLabelReplacement,\n UsernameLabelReplacement,\n MastersOnlyLabelReplacement,\n});\n"]}
@@ -0,0 +1,11 @@
1
+ export function useGradebookTableData(): {
2
+ columns: {
3
+ Header: any;
4
+ accessor: any;
5
+ }[];
6
+ data: any[];
7
+ grades: import("../data/apiHook").GradeEntry[];
8
+ nullMethod: () => null;
9
+ emptyContent: string;
10
+ };
11
+ export default useGradebookTableData;
@@ -0,0 +1,45 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useIntl } from '@openedx/frontend-base';
3
+ import { Headings } from '../../../data/constants/grades';
4
+ import { getLocalizedPercentSign } from '../../../i18n/utils';
5
+ import { roundGrade } from '../data/utils';
6
+ import { useAllGrades, useGradesHeadings } from '../data/hooks';
7
+ import messages from './messages';
8
+ import Fields from './Fields';
9
+ import LabelReplacements from './LabelReplacements';
10
+ import GradeButton from './GradeButton';
11
+ export const useGradebookTableData = () => {
12
+ const { formatMessage } = useIntl();
13
+ const grades = useAllGrades();
14
+ const headings = useGradesHeadings();
15
+ const mapHeaders = (heading) => {
16
+ let label;
17
+ if (heading === Headings.totalGrade) {
18
+ label = _jsx(LabelReplacements.TotalGradeLabelReplacement, {});
19
+ }
20
+ else if (heading === Headings.username) {
21
+ label = _jsx(LabelReplacements.UsernameLabelReplacement, {});
22
+ }
23
+ else if (heading === Headings.email) {
24
+ label = _jsx(LabelReplacements.MastersOnlyLabelReplacement, Object.assign({}, messages.emailHeading));
25
+ }
26
+ else if (heading === Headings.fullName) {
27
+ label = _jsx(LabelReplacements.MastersOnlyLabelReplacement, Object.assign({}, messages.fullNameHeading));
28
+ }
29
+ else {
30
+ label = heading;
31
+ }
32
+ return { Header: label, accessor: heading };
33
+ };
34
+ const mapRows = entry => (Object.assign({ [Headings.username]: (_jsx(Fields.Username, { username: entry.username, userKey: entry.external_user_key })), [Headings.email]: (_jsx(Fields.Text, { value: entry.email })), [Headings.totalGrade]: `${roundGrade(entry.percent * 100)}${getLocalizedPercentSign()}` }, entry.section_breakdown.reduce((acc, subsection) => (Object.assign(Object.assign({}, acc), { [subsection.label]: _jsx(GradeButton, { entry, subsection }) })), {})));
35
+ const nullMethod = () => null;
36
+ return {
37
+ columns: headings.map(mapHeaders),
38
+ data: grades.map(mapRows),
39
+ grades,
40
+ nullMethod,
41
+ emptyContent: formatMessage(messages.noResultsFound),
42
+ };
43
+ };
44
+ export default useGradebookTableData;
45
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../src/components/GradesView/GradebookTable/hooks.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACxC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IAErC,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,KAAK,CAAC;QACV,IAAI,OAAO,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;YACpC,KAAK,GAAG,KAAC,iBAAiB,CAAC,0BAA0B,KAAG,CAAC;QAC3D,CAAC;aAAM,IAAI,OAAO,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACzC,KAAK,GAAG,KAAC,iBAAiB,CAAC,wBAAwB,KAAG,CAAC;QACzD,CAAC;aAAM,IAAI,OAAO,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;YACtC,KAAK,GAAG,KAAC,iBAAiB,CAAC,2BAA2B,oBAAK,QAAQ,CAAC,YAAY,EAAI,CAAC;QACvF,CAAC;aAAM,IAAI,OAAO,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACzC,KAAK,GAAG,KAAC,iBAAiB,CAAC,2BAA2B,oBAAK,QAAQ,CAAC,eAAe,EAAI,CAAC;QAC1F,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,OAAO,CAAC;QAClB,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC9C,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,iBACvB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CACnB,KAAC,MAAM,CAAC,QAAQ,IAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,iBAAiB,GAAI,CAChF,EACD,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAC,MAAM,CAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAI,CAAC,EACvD,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,uBAAuB,EAAE,EAAE,IACpF,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,iCAClD,GAAG,KACN,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,KAAC,WAAW,IAAO,KAAK,EAAE,UAAU,GAAM,IAC9D,EAAE,EAAE,CAAC,EACP,CAAC;IAEH,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;IAE9B,OAAO;QACL,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QACzB,MAAM;QACN,UAAU;QACV,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,cAAc,CAAC;KACrD,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,qBAAqB,CAAC","sourcesContent":["import { useIntl } from '@openedx/frontend-base';\n\nimport { Headings } from '@src/data/constants/grades';\nimport { getLocalizedPercentSign } from '@src/i18n/utils';\n\nimport { roundGrade } from '../data/utils';\nimport { useAllGrades, useGradesHeadings } from '../data/hooks';\nimport messages from './messages';\nimport Fields from './Fields';\nimport LabelReplacements from './LabelReplacements';\nimport GradeButton from './GradeButton';\n\nexport const useGradebookTableData = () => {\n const { formatMessage } = useIntl();\n const grades = useAllGrades();\n const headings = useGradesHeadings();\n\n const mapHeaders = (heading) => {\n let label;\n if (heading === Headings.totalGrade) {\n label = <LabelReplacements.TotalGradeLabelReplacement />;\n } else if (heading === Headings.username) {\n label = <LabelReplacements.UsernameLabelReplacement />;\n } else if (heading === Headings.email) {\n label = <LabelReplacements.MastersOnlyLabelReplacement {...messages.emailHeading} />;\n } else if (heading === Headings.fullName) {\n label = <LabelReplacements.MastersOnlyLabelReplacement {...messages.fullNameHeading} />;\n } else {\n label = heading;\n }\n return { Header: label, accessor: heading };\n };\n\n const mapRows = entry => ({\n [Headings.username]: (\n <Fields.Username username={entry.username} userKey={entry.external_user_key} />\n ),\n [Headings.email]: (<Fields.Text value={entry.email} />),\n [Headings.totalGrade]: `${roundGrade(entry.percent * 100)}${getLocalizedPercentSign()}`,\n ...entry.section_breakdown.reduce((acc, subsection) => ({\n ...acc,\n [subsection.label]: <GradeButton {...{ entry, subsection }} />,\n }), {}),\n });\n\n const nullMethod = () => null;\n\n return {\n columns: headings.map(mapHeaders),\n data: grades.map(mapRows),\n grades,\n nullMethod,\n emptyContent: formatMessage(messages.noResultsFound),\n };\n};\n\nexport default useGradebookTableData;\n"]}
@@ -0,0 +1,5 @@
1
+ export function GradebookTable(): import("react").JSX.Element;
2
+ export namespace GradebookTable {
3
+ let propTypes: {};
4
+ }
5
+ export default GradebookTable;
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { DataTable } from '@openedx/paragon';
3
+ import useGradebookTableData from './hooks';
4
+ /**
5
+ * <GraebookTable />
6
+ * This is the wrapper component for the Grades tab gradebook table, holding
7
+ * a row for each user, with a column for their username, email, and total grade,
8
+ * along with one for each subsection in their grade entry.
9
+ */
10
+ export const GradebookTable = () => {
11
+ const { columns, data, grades, nullMethod, emptyContent, } = useGradebookTableData();
12
+ return (_jsx("div", { className: "gradebook-container", children: _jsxs(DataTable, { columns: columns, data: data, rowHeaderColumnKey: "username", hasFixedColumnWidths: true, itemCount: grades.length, RowStatusComponent: nullMethod, children: [_jsx(DataTable.TableControlBar, {}), _jsx(DataTable.Table, {}), _jsx(DataTable.EmptyTable, { content: emptyContent })] }) }));
13
+ };
14
+ GradebookTable.propTypes = {};
15
+ export default GradebookTable;
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradesView/GradebookTable/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,qBAAqB,MAAM,SAAS,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IACjC,MAAM,EACJ,OAAO,EACP,IAAI,EACJ,MAAM,EACN,UAAU,EACV,YAAY,GACb,GAAG,qBAAqB,EAAE,CAAC;IAE5B,OAAO,CACL,cAAK,SAAS,EAAC,qBAAqB,YAClC,MAAC,SAAS,IACR,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,kBAAkB,EAAC,UAAU,EAC7B,oBAAoB,QACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EACxB,kBAAkB,EAAE,UAAU,aAE9B,KAAC,SAAS,CAAC,eAAe,KAAG,EAC7B,KAAC,SAAS,CAAC,KAAK,KAAG,EACnB,KAAC,SAAS,CAAC,UAAU,IAAC,OAAO,EAAE,YAAY,GAAI,IACrC,GACR,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,cAAc,CAAC,SAAS,GAAG,EAAE,CAAC;AAE9B,eAAe,cAAc,CAAC","sourcesContent":["import { DataTable } from '@openedx/paragon';\n\nimport useGradebookTableData from './hooks';\n\n/**\n * <GraebookTable />\n * This is the wrapper component for the Grades tab gradebook table, holding\n * a row for each user, with a column for their username, email, and total grade,\n * along with one for each subsection in their grade entry.\n */\nexport const GradebookTable = () => {\n const {\n columns,\n data,\n grades,\n nullMethod,\n emptyContent,\n } = useGradebookTableData();\n\n return (\n <div className=\"gradebook-container\">\n <DataTable\n columns={columns}\n data={data}\n rowHeaderColumnKey=\"username\"\n hasFixedColumnWidths\n itemCount={grades.length}\n RowStatusComponent={nullMethod}\n >\n <DataTable.TableControlBar />\n <DataTable.Table />\n <DataTable.EmptyTable content={emptyContent} />\n </DataTable>\n </div>\n );\n};\n\nGradebookTable.propTypes = {};\n\nexport default GradebookTable;\n"]}