@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 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/components/GradesView/PageButtons/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,QAAQ,EAAE;QACR,EAAE,EAAE,2CAA2C;QAC/C,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,sCAAsC;KACpD;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,2CAA2C;QAC/C,cAAc,EAAE,WAAW;QAC3B,WAAW,EAAE,kCAAkC;KAChD;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n prevPage: {\n id: 'gradebook.GradesView.PageButtons.prevPage',\n defaultMessage: 'Previous Page',\n description: 'Grades tab Previous Page button text',\n },\n nextPage: {\n id: 'gradebook.GradesView.PageButtons.nextPage',\n defaultMessage: 'Next Page',\n description: 'Grades tab Next Page button text',\n },\n});\n\nexport default messages;\n"]}
@@ -0,0 +1,5 @@
1
+ export function ScoreViewInput(): import("react").JSX.Element;
2
+ export namespace ScoreViewInput {
3
+ let propTypes: {};
4
+ }
5
+ export default ScoreViewInput;
@@ -0,0 +1,20 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Form } from '@openedx/paragon';
3
+ import { useIntl } from '@openedx/frontend-base';
4
+ import { useGradebookUi } from '../../../data/gradebookUiContext';
5
+ import { useGradeData } from '../data/hooks';
6
+ import messages from './messages';
7
+ /**
8
+ * <ScoreViewInput />
9
+ * Select control for grade format (percent vs absolute).
10
+ */
11
+ export const ScoreViewInput = () => {
12
+ const { formatMessage } = useIntl();
13
+ const { gradeFormat } = useGradeData();
14
+ const { setGradeFormat } = useGradebookUi();
15
+ const toggleFormat = (e) => setGradeFormat(e.target.value);
16
+ return (_jsxs(Form.Group, { controlId: "ScoreView", children: [_jsxs(Form.Label, { children: [formatMessage(messages.scoreView), ":"] }), _jsxs(Form.Control, { as: "select", value: gradeFormat, onChange: toggleFormat, children: [_jsx("option", { value: "percent", children: formatMessage(messages.percent) }), _jsx("option", { value: "absolute", children: formatMessage(messages.absolute) })] })] }));
17
+ };
18
+ ScoreViewInput.propTypes = {};
19
+ export default ScoreViewInput;
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradesView/ScoreViewInput/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IACjC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAAC;IACvC,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3D,OAAO,CACL,MAAC,IAAI,CAAC,KAAK,IAAC,SAAS,EAAC,WAAW,aAC/B,MAAC,IAAI,CAAC,KAAK,eAAE,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAe,EAC7D,MAAC,IAAI,CAAC,OAAO,IACX,EAAE,EAAC,QAAQ,EACX,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,YAAY,aAEtB,iBAAQ,KAAK,EAAC,SAAS,YAAE,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAU,EAClE,iBAAQ,KAAK,EAAC,UAAU,YAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAU,IACvD,IACJ,CACd,CAAC;AACJ,CAAC,CAAC;AACF,cAAc,CAAC,SAAS,GAAG,EAAE,CAAC;AAE9B,eAAe,cAAc,CAAC","sourcesContent":["import { Form } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { useGradebookUi } from '@src/data/gradebookUiContext';\nimport { useGradeData } from '../data/hooks';\nimport messages from './messages';\n\n/**\n * <ScoreViewInput />\n * Select control for grade format (percent vs absolute).\n */\nexport const ScoreViewInput = () => {\n const { formatMessage } = useIntl();\n const { gradeFormat } = useGradeData();\n const { setGradeFormat } = useGradebookUi();\n const toggleFormat = (e) => setGradeFormat(e.target.value);\n return (\n <Form.Group controlId=\"ScoreView\">\n <Form.Label>{formatMessage(messages.scoreView)}:</Form.Label>\n <Form.Control\n as=\"select\"\n value={gradeFormat}\n onChange={toggleFormat}\n >\n <option value=\"percent\">{formatMessage(messages.percent)}</option>\n <option value=\"absolute\">{formatMessage(messages.absolute)}</option>\n </Form.Control>\n </Form.Group>\n );\n};\nScoreViewInput.propTypes = {};\n\nexport default ScoreViewInput;\n"]}
@@ -0,0 +1,24 @@
1
+ export default messages;
2
+ declare namespace messages {
3
+ namespace scoreView {
4
+ let id: string;
5
+ let defaultMessage: string;
6
+ let description: string;
7
+ }
8
+ namespace absolute {
9
+ let id_1: string;
10
+ export { id_1 as id };
11
+ let defaultMessage_1: string;
12
+ export { defaultMessage_1 as defaultMessage };
13
+ let description_1: string;
14
+ export { description_1 as description };
15
+ }
16
+ namespace percent {
17
+ let id_2: string;
18
+ export { id_2 as id };
19
+ let defaultMessage_2: string;
20
+ export { defaultMessage_2 as defaultMessage };
21
+ let description_2: string;
22
+ export { description_2 as description };
23
+ }
24
+ }
@@ -0,0 +1,20 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ scoreView: {
4
+ id: 'gradebook.GradesView.scoreViewLabel',
5
+ defaultMessage: 'Score View',
6
+ description: 'The label for the dropdown list that allows a user to select the Score format',
7
+ },
8
+ absolute: {
9
+ id: 'gradebook.GradesView.absoluteOption',
10
+ defaultMessage: 'Absolute',
11
+ description: 'A label within the Score Format dropdown list for the Absolute Grade Score option',
12
+ },
13
+ percent: {
14
+ id: 'gradebook.GradesView.percentOption',
15
+ defaultMessage: 'Percent',
16
+ description: 'A label within the Score Format dropdown list for the Percent Grade Score option',
17
+ },
18
+ });
19
+ export default messages;
20
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/components/GradesView/ScoreViewInput/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,SAAS,EAAE;QACT,EAAE,EAAE,qCAAqC;QACzC,cAAc,EAAE,YAAY;QAC5B,WAAW,EAAE,+EAA+E;KAC7F;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,qCAAqC;QACzC,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,mFAAmF;KACjG;IACD,OAAO,EAAE;QACP,EAAE,EAAE,oCAAoC;QACxC,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,kFAAkF;KAChG;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n scoreView: {\n id: 'gradebook.GradesView.scoreViewLabel',\n defaultMessage: 'Score View',\n description: 'The label for the dropdown list that allows a user to select the Score format',\n },\n absolute: {\n id: 'gradebook.GradesView.absoluteOption',\n defaultMessage: 'Absolute',\n description: 'A label within the Score Format dropdown list for the Absolute Grade Score option',\n },\n percent: {\n id: 'gradebook.GradesView.percentOption',\n defaultMessage: 'Percent',\n description: 'A label within the Score Format dropdown list for the Percent Grade Score option',\n },\n});\n\nexport default messages;\n"]}
@@ -0,0 +1,9 @@
1
+ export function useSearchControlsData(): {
2
+ onSubmit: (newValue: any) => void;
3
+ onBlur: (e: any) => void;
4
+ onClear: () => void;
5
+ searchValue: string;
6
+ inputLabel: string;
7
+ hintText: string;
8
+ };
9
+ export default useSearchControlsData;
@@ -0,0 +1,34 @@
1
+ import { useIntl } from '@openedx/frontend-base';
2
+ import { useFilters } from '../../../data/filtersContext';
3
+ import { useRefetchGrades } from '../data/hooks';
4
+ import messages from './messages';
5
+ /**
6
+ * Controls for filtering the GradebookTable. Contains the "Edit Filters" button for opening the filter drawer
7
+ * as well as the search box for searching by username/email.
8
+ */
9
+ export const useSearchControlsData = () => {
10
+ const { formatMessage } = useIntl();
11
+ const { searchValue, setSearchValue } = useFilters();
12
+ const fetchGrades = useRefetchGrades();
13
+ const onBlur = (e) => {
14
+ setSearchValue(e.target.value);
15
+ };
16
+ const onClear = () => {
17
+ setSearchValue('');
18
+ fetchGrades();
19
+ };
20
+ const onSubmit = (newValue) => {
21
+ setSearchValue(newValue);
22
+ fetchGrades();
23
+ };
24
+ return {
25
+ onSubmit,
26
+ onBlur,
27
+ onClear,
28
+ searchValue,
29
+ inputLabel: formatMessage(messages.label),
30
+ hintText: formatMessage(messages.hint),
31
+ };
32
+ };
33
+ export default useSearchControlsData;
34
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../src/components/GradesView/SearchControls/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACxC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,UAAU,EAAE,CAAC;IACrD,MAAM,WAAW,GAAG,gBAAgB,EAAE,CAAC;IAEvC,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE;QACnB,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,cAAc,CAAC,EAAE,CAAC,CAAC;QACnB,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,EAAE;QAC5B,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzB,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,MAAM;QACN,OAAO;QACP,WAAW;QACX,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;KACvC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,qBAAqB,CAAC","sourcesContent":["import { useIntl } from '@openedx/frontend-base';\n\nimport { useFilters } from '@src/data/filtersContext';\n\nimport { useRefetchGrades } from '../data/hooks';\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 useSearchControlsData = () => {\n const { formatMessage } = useIntl();\n const { searchValue, setSearchValue } = useFilters();\n const fetchGrades = useRefetchGrades();\n\n const onBlur = (e) => {\n setSearchValue(e.target.value);\n };\n\n const onClear = () => {\n setSearchValue('');\n fetchGrades();\n };\n\n const onSubmit = (newValue) => {\n setSearchValue(newValue);\n fetchGrades();\n };\n\n return {\n onSubmit,\n onBlur,\n onClear,\n searchValue,\n inputLabel: formatMessage(messages.label),\n hintText: formatMessage(messages.hint),\n };\n};\n\nexport default useSearchControlsData;\n"]}
@@ -0,0 +1,5 @@
1
+ export function SearchControls(): import("react").JSX.Element;
2
+ export namespace SearchControls {
3
+ let propTypes: {};
4
+ }
5
+ export default SearchControls;
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { SearchField } from '@openedx/paragon';
3
+ import useSearchControlsData from './hooks';
4
+ /**
5
+ * Controls for filtering the GradebookTable. Contains the "Edit Filters" button for opening the filter drawer
6
+ * as well as the search box for searching by username/email.
7
+ */
8
+ export const SearchControls = () => {
9
+ const { onSubmit, onBlur, onClear, searchValue, inputLabel, hintText, } = useSearchControlsData();
10
+ return (_jsxs("div", { className: "search-container", children: [_jsx(SearchField, { onSubmit: onSubmit, label: inputLabel, onBlur: onBlur, onClear: onClear, value: searchValue }), _jsx("small", { className: "form-text text-muted search-help-text", children: hintText })] }));
11
+ };
12
+ SearchControls.propTypes = {};
13
+ export default SearchControls;
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradesView/SearchControls/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,qBAAqB,MAAM,SAAS,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IACjC,MAAM,EACJ,QAAQ,EACR,MAAM,EACN,OAAO,EACP,WAAW,EACX,UAAU,EACV,QAAQ,GACT,GAAG,qBAAqB,EAAE,CAAC;IAE5B,OAAO,CACL,eAAK,SAAS,EAAC,kBAAkB,aAC/B,KAAC,WAAW,IACV,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,GAClB,EACF,gBAAO,SAAS,EAAC,uCAAuC,YACrD,QAAQ,GACH,IACJ,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,cAAc,CAAC,SAAS,GAAG,EAAE,CAAC;AAE9B,eAAe,cAAc,CAAC","sourcesContent":["import { SearchField } from '@openedx/paragon';\nimport useSearchControlsData from './hooks';\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 SearchControls = () => {\n const {\n onSubmit,\n onBlur,\n onClear,\n searchValue,\n inputLabel,\n hintText,\n } = useSearchControlsData();\n\n return (\n <div className=\"search-container\">\n <SearchField\n onSubmit={onSubmit}\n label={inputLabel}\n onBlur={onBlur}\n onClear={onClear}\n value={searchValue}\n />\n <small className=\"form-text text-muted search-help-text\">\n {hintText}\n </small>\n </div>\n );\n};\n\nSearchControls.propTypes = {};\n\nexport default SearchControls;\n"]}
@@ -0,0 +1,16 @@
1
+ export default messages;
2
+ declare namespace messages {
3
+ namespace label {
4
+ let id: string;
5
+ let defaultMessage: string;
6
+ let description: string;
7
+ }
8
+ namespace hint {
9
+ let id_1: string;
10
+ export { id_1 as id };
11
+ let defaultMessage_1: string;
12
+ export { defaultMessage_1 as defaultMessage };
13
+ let description_1: string;
14
+ export { description_1 as description };
15
+ }
16
+ }
@@ -0,0 +1,15 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ label: {
4
+ id: 'gradebook.GradesView.search.label',
5
+ defaultMessage: 'Search for a learner',
6
+ description: 'Text prompting a user to use this functionality to search for a learner',
7
+ },
8
+ hint: {
9
+ id: 'gradebook.GradesView.search.hint',
10
+ defaultMessage: 'Search by username, email, or student key',
11
+ description: 'A hint explaining the ways a user can search',
12
+ },
13
+ });
14
+ export default messages;
15
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/components/GradesView/SearchControls/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,KAAK,EAAE;QACL,EAAE,EAAE,mCAAmC;QACvC,cAAc,EAAE,sBAAsB;QACtC,WAAW,EAAE,yEAAyE;KACvF;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,kCAAkC;QACtC,cAAc,EAAE,2CAA2C;QAC3D,WAAW,EAAE,8CAA8C;KAC5D;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n label: {\n id: 'gradebook.GradesView.search.label',\n defaultMessage: 'Search for a learner',\n description: 'Text prompting a user to use this functionality to search for a learner',\n },\n hint: {\n id: 'gradebook.GradesView.search.hint',\n defaultMessage: 'Search by username, email, or student key',\n description: 'A hint explaining the ways a user can search',\n },\n});\n\nexport default messages;\n"]}
@@ -0,0 +1,5 @@
1
+ export function SpinnerIcon(): false | import("react").JSX.Element;
2
+ export namespace SpinnerIcon {
3
+ let propTypes: {};
4
+ }
5
+ export default SpinnerIcon;
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Spinner } from '@openedx/paragon';
3
+ import { useShouldShowSpinner } from './data/hooks';
4
+ /**
5
+ * <SpinnerIcon />
6
+ * Simple icon component that shows a spinner overlay only while the app is busy
7
+ * (grades fetching or a mutation in flight).
8
+ */
9
+ export const SpinnerIcon = () => {
10
+ const show = useShouldShowSpinner();
11
+ return show && (_jsx("div", { className: "spinner-overlay", children: _jsx(Spinner, { animation: "border", variant: "dark", screenReaderText: "loading" }) }));
12
+ };
13
+ SpinnerIcon.propTypes = {};
14
+ export default SpinnerIcon;
15
+ //# sourceMappingURL=SpinnerIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpinnerIcon.js","sourceRoot":"","sources":["../../../src/components/GradesView/SpinnerIcon.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE;IAC9B,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;IACpC,OAAO,IAAI,IAAI,CACb,cAAK,SAAS,EAAC,iBAAiB,YAC9B,KAAC,OAAO,IAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,EAAC,MAAM,EAAC,gBAAgB,EAAC,SAAS,GAAG,GACpE,CACP,CAAC;AACJ,CAAC,CAAC;AACF,WAAW,CAAC,SAAS,GAAG,EAAE,CAAC;AAE3B,eAAe,WAAW,CAAC","sourcesContent":["import { Spinner } from '@openedx/paragon';\n\nimport { useShouldShowSpinner } from './data/hooks';\n\n/**\n * <SpinnerIcon />\n * Simple icon component that shows a spinner overlay only while the app is busy\n * (grades fetching or a mutation in flight).\n */\nexport const SpinnerIcon = () => {\n const show = useShouldShowSpinner();\n return show && (\n <div className=\"spinner-overlay\">\n <Spinner animation=\"border\" variant=\"dark\" screenReaderText=\"loading\" />\n </div>\n );\n};\nSpinnerIcon.propTypes = {};\n\nexport default SpinnerIcon;\n"]}
@@ -0,0 +1,5 @@
1
+ export function StatusAlerts(): import("react").JSX.Element;
2
+ export namespace StatusAlerts {
3
+ let propTypes: {};
4
+ }
5
+ export default StatusAlerts;
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Alert } from '@openedx/paragon';
3
+ import { useIntl } from '@openedx/frontend-base';
4
+ import { useGradebookUi } from '../../../data/gradebookUiContext';
5
+ import { useCourseGradeFilterValidity } from '../../GradebookFilters/data/hooks';
6
+ import messages from './messages';
7
+ export const StatusAlerts = () => {
8
+ const { formatMessage } = useIntl();
9
+ const { isMinValid, isMaxValid } = useCourseGradeFilterValidity();
10
+ const { showSuccess, setShowSuccess } = useGradebookUi();
11
+ const gradeFilterText = `${isMinValid ? '' : formatMessage(messages.minGradeInvalid)}${isMaxValid ? '' : formatMessage(messages.maxGradeInvalid)}`;
12
+ return (_jsxs(_Fragment, { children: [_jsx(Alert, { variant: "success", onClose: () => setShowSuccess(false), show: showSuccess, children: formatMessage(messages.editSuccessAlert) }), _jsx(Alert, { variant: "danger", dismissible: false, show: !isMinValid || !isMaxValid, children: gradeFilterText })] }));
13
+ };
14
+ StatusAlerts.propTypes = {};
15
+ export default StatusAlerts;
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradesView/StatusAlerts/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAE3F,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE;IAC/B,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,4BAA4B,EAAE,CAAC;IAClE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAAC;IAEzD,MAAM,eAAe,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;IAEnJ,OAAO,CACL,8BACE,KAAC,KAAK,IACJ,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EACpC,IAAI,EAAE,WAAW,YAEhB,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GACnC,EACR,KAAC,KAAK,IACJ,OAAO,EAAC,QAAQ,EAChB,WAAW,EAAE,KAAK,EAClB,IAAI,EAAE,CAAC,UAAU,IAAI,CAAC,UAAU,YAE/B,eAAe,GACV,IACP,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,YAAY,CAAC,SAAS,GAAG,EAAE,CAAC;AAE5B,eAAe,YAAY,CAAC","sourcesContent":["import { Alert } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { useGradebookUi } from '@src/data/gradebookUiContext';\nimport { useCourseGradeFilterValidity } from '@src/components/GradebookFilters/data/hooks';\n\nimport messages from './messages';\n\nexport const StatusAlerts = () => {\n const { formatMessage } = useIntl();\n const { isMinValid, isMaxValid } = useCourseGradeFilterValidity();\n const { showSuccess, setShowSuccess } = useGradebookUi();\n\n const gradeFilterText = `${isMinValid ? '' : formatMessage(messages.minGradeInvalid)}${isMaxValid ? '' : formatMessage(messages.maxGradeInvalid)}`;\n\n return (\n <>\n <Alert\n variant=\"success\"\n onClose={() => setShowSuccess(false)}\n show={showSuccess}\n >\n {formatMessage(messages.editSuccessAlert)}\n </Alert>\n <Alert\n variant=\"danger\"\n dismissible={false}\n show={!isMinValid || !isMaxValid}\n >\n {gradeFilterText}\n </Alert>\n </>\n );\n};\n\nStatusAlerts.propTypes = {};\n\nexport default StatusAlerts;\n"]}
@@ -0,0 +1,24 @@
1
+ export default messages;
2
+ declare namespace messages {
3
+ namespace editSuccessAlert {
4
+ let id: string;
5
+ let defaultMessage: string;
6
+ let description: string;
7
+ }
8
+ namespace maxGradeInvalid {
9
+ let id_1: string;
10
+ export { id_1 as id };
11
+ let defaultMessage_1: string;
12
+ export { defaultMessage_1 as defaultMessage };
13
+ let description_1: string;
14
+ export { description_1 as description };
15
+ }
16
+ namespace minGradeInvalid {
17
+ let id_2: string;
18
+ export { id_2 as id };
19
+ let defaultMessage_2: string;
20
+ export { defaultMessage_2 as defaultMessage };
21
+ let description_2: string;
22
+ export { description_2 as description };
23
+ }
24
+ }
@@ -0,0 +1,20 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ editSuccessAlert: {
4
+ id: 'gradebook.GradesView.editSuccessAlert',
5
+ defaultMessage: 'The grade has been successfully edited. You may see a slight delay before updates appear in the Gradebook.',
6
+ description: 'An alert text for successfully editing a grade',
7
+ },
8
+ maxGradeInvalid: {
9
+ id: 'gradebook.GradesView.maxCourseGradeInvalid',
10
+ defaultMessage: 'Maximum course grade must be between 0 and 100',
11
+ description: 'An alert text for selecting a maximum course grade greater than 100',
12
+ },
13
+ minGradeInvalid: {
14
+ id: 'gradebook.GradesView.minCourseGradeInvalid',
15
+ defaultMessage: 'Minimum course grade must be between 0 and 100',
16
+ description: 'An alert text for selecting a minimum course grade less than 0',
17
+ },
18
+ });
19
+ export default messages;
20
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/components/GradesView/StatusAlerts/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,gBAAgB,EAAE;QAChB,EAAE,EAAE,uCAAuC;QAC3C,cAAc,EAAE,6GAA6G;QAC7H,WAAW,EAAE,iDAAiD;KAC/D;IACD,eAAe,EAAE;QACf,EAAE,EAAE,4CAA4C;QAChD,cAAc,EAAE,gDAAgD;QAChE,WAAW,EAAE,qEAAqE;KACnF;IACD,eAAe,EAAE;QACf,EAAE,EAAE,4CAA4C;QAChD,cAAc,EAAE,gDAAgD;QAChE,WAAW,EAAE,gEAAgE;KAC9E;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n editSuccessAlert: {\n id: 'gradebook.GradesView.editSuccessAlert',\n defaultMessage: 'The grade has been successfully edited. You may see a slight delay before updates appear in the Gradebook.',\n description: 'An alert text for successfully editing a grade',\n },\n maxGradeInvalid: {\n id: 'gradebook.GradesView.maxCourseGradeInvalid',\n defaultMessage: 'Maximum course grade must be between 0 and 100',\n description: 'An alert text for selecting a maximum course grade greater than 100',\n },\n minGradeInvalid: {\n id: 'gradebook.GradesView.minCourseGradeInvalid',\n defaultMessage: 'Minimum course grade must be between 0 and 100',\n description: 'An alert text for selecting a minimum course grade less than 0',\n },\n});\n\nexport default messages;\n"]}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * getGrades({ searchText, cohort, track, options })
3
+ * Fetches the gradebook rows for the current filter selection. Params mirror the
4
+ * legacy `fetchGrades` thunk (which reads them from Redux); returns the raw
5
+ * response body (results/previous/next/counts) — sorting/shaping happens in the
6
+ * consumer, matching the old `fetching.received` handling.
7
+ */
8
+ export declare const getGrades: ({ searchText, cohort, track, options, }: {
9
+ searchText: string | null;
10
+ cohort: unknown;
11
+ track: unknown;
12
+ options: Record<string, unknown>;
13
+ }) => Promise<any>;
14
+ /**
15
+ * getGradesPage(endpoint)
16
+ * Fetches a specific grades page by its opaque prev/next cursor URL (taken from a
17
+ * prior response's `previous`/`next`). Returns the raw response body, the same
18
+ * shape as `getGrades`. Mirrors the legacy `fetchPrevNextGrades` thunk.
19
+ */
20
+ export declare const getGradesPage: (endpoint: string) => Promise<any>;
21
+ /** Grade-override history for one learner on one subsection (display-shaped). */
22
+ export interface GradeOverrideHistory {
23
+ overrideHistory: {
24
+ date: string;
25
+ grader: string;
26
+ reason: string;
27
+ adjustedGrade: unknown;
28
+ }[];
29
+ currentEarnedAllOverride: number | null;
30
+ currentPossibleAllOverride: number | null;
31
+ currentEarnedGradedOverride: number | null;
32
+ currentPossibleGradedOverride: number | null;
33
+ originalGradeEarnedAll: number | null;
34
+ originalGradePossibleAll: number | null;
35
+ originalGradeEarnedGraded: number | null;
36
+ originalGradePossibleGraded: number | null;
37
+ }
38
+ /**
39
+ * getGradeOverrideHistory(subsectionId, userId)
40
+ * Fetches and shapes the grade-override history for a learner/subsection. Mirrors
41
+ * the legacy thunk: throws the default message on a network error, and the
42
+ * server-provided message (or the default) when the API reports `success: false`.
43
+ */
44
+ export declare const getGradeOverrideHistory: (subsectionId: string, userId: string | number) => Promise<GradeOverrideHistory>;
@@ -0,0 +1,64 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { getAuthenticatedHttpClient } from '@openedx/frontend-base';
11
+ import lms from '../../../data/services/lms';
12
+ import GRADE_OVERRIDE_HISTORY_ERROR_DEFAULT_MSG from '../../../data/constants/errors';
13
+ import { formatGradeOverrideForDisplay } from './utils';
14
+ /**
15
+ * getGrades({ searchText, cohort, track, options })
16
+ * Fetches the gradebook rows for the current filter selection. Params mirror the
17
+ * legacy `fetchGrades` thunk (which reads them from Redux); returns the raw
18
+ * response body (results/previous/next/counts) — sorting/shaping happens in the
19
+ * consumer, matching the old `fetching.received` handling.
20
+ */
21
+ export const getGrades = (_a) => __awaiter(void 0, [_a], void 0, function* ({ searchText, cohort, track, options, }) {
22
+ const { data } = yield lms.api.fetch.gradebookData(searchText, cohort, track, options);
23
+ return data;
24
+ });
25
+ /**
26
+ * getGradesPage(endpoint)
27
+ * Fetches a specific grades page by its opaque prev/next cursor URL (taken from a
28
+ * prior response's `previous`/`next`). Returns the raw response body, the same
29
+ * shape as `getGrades`. Mirrors the legacy `fetchPrevNextGrades` thunk.
30
+ */
31
+ export const getGradesPage = (endpoint) => __awaiter(void 0, void 0, void 0, function* () {
32
+ const { data } = yield getAuthenticatedHttpClient().get(endpoint);
33
+ return data;
34
+ });
35
+ /**
36
+ * getGradeOverrideHistory(subsectionId, userId)
37
+ * Fetches and shapes the grade-override history for a learner/subsection. Mirrors
38
+ * the legacy thunk: throws the default message on a network error, and the
39
+ * server-provided message (or the default) when the API reports `success: false`.
40
+ */
41
+ export const getGradeOverrideHistory = (subsectionId, userId) => __awaiter(void 0, void 0, void 0, function* () {
42
+ let data;
43
+ try {
44
+ ({ data } = yield lms.api.fetch.gradeOverrideHistory(subsectionId, userId));
45
+ }
46
+ catch (e) {
47
+ throw new Error(GRADE_OVERRIDE_HISTORY_ERROR_DEFAULT_MSG);
48
+ }
49
+ if (!data.success) {
50
+ throw new Error(data.error_message || GRADE_OVERRIDE_HISTORY_ERROR_DEFAULT_MSG);
51
+ }
52
+ return {
53
+ overrideHistory: formatGradeOverrideForDisplay(data.history),
54
+ currentEarnedAllOverride: data.override ? data.override.earned_all_override : null,
55
+ currentPossibleAllOverride: data.override ? data.override.possible_all_override : null,
56
+ currentEarnedGradedOverride: data.override ? data.override.earned_graded_override : null,
57
+ currentPossibleGradedOverride: data.override ? data.override.possible_graded_override : null,
58
+ originalGradeEarnedAll: data.original_grade ? data.original_grade.earned_all : null,
59
+ originalGradePossibleAll: data.original_grade ? data.original_grade.possible_all : null,
60
+ originalGradeEarnedGraded: data.original_grade ? data.original_grade.earned_graded : null,
61
+ originalGradePossibleGraded: data.original_grade ? data.original_grade.possible_graded : null,
62
+ };
63
+ });
64
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/components/GradesView/data/api.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,GAAG,MAAM,wBAAwB,CAAC;AACzC,OAAO,wCAAwC,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAUtB,EAAE,4CAV2B,EAC9B,UAAU,EACV,MAAM,EACN,KAAK,EACL,OAAO,GAMR;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACvF,OAAO,IAAI,CAAC;AACd,CAAC,CAAA,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAO,QAAgB,EAAE,EAAE;IACtD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC;AACd,CAAC,CAAA,CAAC;AAeF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,YAAoB,EACpB,MAAuB,EACQ,EAAE;IACjC,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,wCAAwC,CAAC,CAAC;IAClF,CAAC;IACD,OAAO;QACL,eAAe,EAAE,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC;QAC5D,wBAAwB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI;QAClF,0BAA0B,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI;QACtF,2BAA2B,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI;QACxF,6BAA6B,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI;QAC5F,sBAAsB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;QACnF,wBAAwB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;QACvF,yBAAyB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;QACzF,2BAA2B,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;KAC9F,CAAC;AACJ,CAAC,CAAA,CAAC","sourcesContent":["import { getAuthenticatedHttpClient } from '@openedx/frontend-base';\n\nimport lms from '@src/data/services/lms';\nimport GRADE_OVERRIDE_HISTORY_ERROR_DEFAULT_MSG from '@src/data/constants/errors';\nimport { formatGradeOverrideForDisplay } from './utils';\n\n/**\n * getGrades({ searchText, cohort, track, options })\n * Fetches the gradebook rows for the current filter selection. Params mirror the\n * legacy `fetchGrades` thunk (which reads them from Redux); returns the raw\n * response body (results/previous/next/counts) — sorting/shaping happens in the\n * consumer, matching the old `fetching.received` handling.\n */\nexport const getGrades = async ({\n searchText,\n cohort,\n track,\n options,\n}: {\n searchText: string | null;\n cohort: unknown;\n track: unknown;\n options: Record<string, unknown>;\n}) => {\n const { data } = await lms.api.fetch.gradebookData(searchText, cohort, track, options);\n return data;\n};\n\n/**\n * getGradesPage(endpoint)\n * Fetches a specific grades page by its opaque prev/next cursor URL (taken from a\n * prior response's `previous`/`next`). Returns the raw response body, the same\n * shape as `getGrades`. Mirrors the legacy `fetchPrevNextGrades` thunk.\n */\nexport const getGradesPage = async (endpoint: string) => {\n const { data } = await getAuthenticatedHttpClient().get(endpoint);\n return data;\n};\n\n/** Grade-override history for one learner on one subsection (display-shaped). */\nexport interface GradeOverrideHistory {\n overrideHistory: { date: string; grader: string; reason: string; adjustedGrade: unknown }[];\n currentEarnedAllOverride: number | null;\n currentPossibleAllOverride: number | null;\n currentEarnedGradedOverride: number | null;\n currentPossibleGradedOverride: number | null;\n originalGradeEarnedAll: number | null;\n originalGradePossibleAll: number | null;\n originalGradeEarnedGraded: number | null;\n originalGradePossibleGraded: number | null;\n}\n\n/**\n * getGradeOverrideHistory(subsectionId, userId)\n * Fetches and shapes the grade-override history for a learner/subsection. Mirrors\n * the legacy thunk: throws the default message on a network error, and the\n * server-provided message (or the default) when the API reports `success: false`.\n */\nexport const getGradeOverrideHistory = async (\n subsectionId: string,\n userId: string | number,\n): Promise<GradeOverrideHistory> => {\n let data;\n try {\n ({ data } = await lms.api.fetch.gradeOverrideHistory(subsectionId, userId));\n } catch (e) {\n throw new Error(GRADE_OVERRIDE_HISTORY_ERROR_DEFAULT_MSG);\n }\n if (!data.success) {\n throw new Error(data.error_message || GRADE_OVERRIDE_HISTORY_ERROR_DEFAULT_MSG);\n }\n return {\n overrideHistory: formatGradeOverrideForDisplay(data.history),\n currentEarnedAllOverride: data.override ? data.override.earned_all_override : null,\n currentPossibleAllOverride: data.override ? data.override.possible_all_override : null,\n currentEarnedGradedOverride: data.override ? data.override.earned_graded_override : null,\n currentPossibleGradedOverride: data.override ? data.override.possible_graded_override : null,\n originalGradeEarnedAll: data.original_grade ? data.original_grade.earned_all : null,\n originalGradePossibleAll: data.original_grade ? data.original_grade.possible_all : null,\n originalGradeEarnedGraded: data.original_grade ? data.original_grade.earned_graded : null,\n originalGradePossibleGraded: data.original_grade ? data.original_grade.possible_graded : null,\n };\n};\n"]}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * useGrades()
3
+ * Single-responsibility query for the main gradebook rows. Caller supplies
4
+ * `courseId`, the current pagination cursor (`gradesPageEndpoint` from
5
+ * `GradebookUi`, or `null` for the base/unpaged page), and decides when it may
6
+ * run via `enabled`. The base grades key is a prefix of the paged key, so
7
+ * invalidating `byCourse(courseId)` still refetches any page. The first
8
+ * (unpaged) page reads the current filter params at fetch time (so an
9
+ * imperative `invalidateQueries` on filter apply / search refetches with the
10
+ * latest values); a non-null cursor fetches that opaque prev/next URL —
11
+ * replacing the legacy `fetchPrevNextGrades` thunk.
12
+ */
13
+ export declare const useGrades: (courseId: string, gradesPageEndpoint: string | null, { enabled }?: {
14
+ enabled?: boolean;
15
+ }) => import("@tanstack/react-query").UseQueryResult<any, Error>;
16
+ /** One subsection cell within a learner's grade row. */
17
+ export interface SubsectionBreakdown {
18
+ label: string;
19
+ category?: string;
20
+ subsection_name?: string;
21
+ module_id?: string;
22
+ score_possible?: number;
23
+ score_earned?: number;
24
+ percent?: number;
25
+ attempted?: boolean;
26
+ [key: string]: unknown;
27
+ }
28
+ /** One learner's grade row from the gradebook response. */
29
+ export interface GradeEntry {
30
+ user_id?: number;
31
+ username?: string;
32
+ external_user_key?: string;
33
+ email?: string;
34
+ percent?: number;
35
+ section_breakdown: SubsectionBreakdown[];
36
+ [key: string]: unknown;
37
+ }
38
+ /** Shaped grades read-model derived from the `useGrades` query. */
39
+ export interface GradesData {
40
+ results: GradeEntry[];
41
+ prevPage: string | null;
42
+ nextPage: string | null;
43
+ totalUsersCount: number;
44
+ filteredUsersCount: number;
45
+ isFetching: boolean;
46
+ isError: boolean;
47
+ isSuccess: boolean;
48
+ }
49
+ /**
50
+ * useGradesData()
51
+ * Shapes the `useGrades` query into the read-model the grades table / counts /
52
+ * pagination consume — the React Query equivalent of the Redux `grades` slice
53
+ * fields that `useGradebookData` used to mirror. Results are sorted by username
54
+ * (matching the legacy `fetching.received` handling).
55
+ */
56
+ export declare const useGradesData: () => GradesData;
57
+ /**
58
+ * useGradeOverrideHistory(subsectionId, userId)
59
+ * Grade-override history for a single learner/subsection, used by the edit modal.
60
+ * Enabled only once both identifiers are present (i.e. the modal has been opened
61
+ * for a specific cell). `retry: false` because a `success: false` business error
62
+ * is not worth retrying.
63
+ */
64
+ export declare const useGradeOverrideHistory: (subsectionId?: string, userId?: string | number) => import("@tanstack/react-query").UseQueryResult<import("./api").GradeOverrideHistory, Error>;
65
+ /**
66
+ * useUpdateGrades()
67
+ * Grade-override save from the edit modal. The HTTP call runs through React Query;
68
+ * success emits the Segment `update.*` event, shows the success banner, resets to
69
+ * the first grades page, and invalidates the grades query (so the table reflects
70
+ * the override) and the edited cell's override history (so reopening the modal
71
+ * shows the new entry).
72
+ *
73
+ * The payload is captured as mutation variables when the trigger is called (same
74
+ * shape as the old `selectors.app.editUpdateData`): the caller closes the modal
75
+ * right after triggering the save, and a pending mutation picks up re-rendered
76
+ * options, so a closure over `modalState` would read the reset (empty) state.
77
+ *
78
+ * Returns a no-arg trigger to match the legacy `useUpdateGrades()` call site.
79
+ */
80
+ export declare const useUpdateGrades: () => () => void;
81
+ /**
82
+ * useSubmitImportGradesButtonData()
83
+ * Bulk grade-override CSV upload. The upload runs through React Query and, on
84
+ * success, invalidates the bulk-operation-history query so the new upload shows up.
85
+ * CSV progress/results/toast are React UI state (GradebookUi context) and success/
86
+ * failure emit the Segment `uploadOverride.*` events.
87
+ *
88
+ * Returns `(formData) => Promise` whose promise always resolves (errors are handled
89
+ * inside `onError`), matching the legacy thunk so the caller's `.then(clearInput)`
90
+ * still runs on both success and failure.
91
+ */
92
+ export declare const useSubmitImportGradesButtonData: () => (formData: FormData) => Promise<unknown>;