@openedx/frontend-app-instructor-dashboard 1.0.0-alpha.2 → 1.0.0-alpha.21

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 (261) hide show
  1. package/dist/Main.d.ts +1 -1
  2. package/dist/Main.js +4 -13
  3. package/dist/Main.js.map +1 -1
  4. package/dist/app.js +2 -11
  5. package/dist/app.js.map +1 -1
  6. package/dist/certificates/CertificatesPage.d.ts +1 -0
  7. package/dist/certificates/CertificatesPage.js +162 -2
  8. package/dist/certificates/CertificatesPage.js.map +1 -1
  9. package/dist/certificates/CertificatesPage.scss +81 -0
  10. package/dist/certificates/components/CertificateTable.d.ts +14 -0
  11. package/dist/certificates/components/CertificateTable.js +85 -0
  12. package/dist/certificates/components/CertificateTable.js.map +1 -0
  13. package/dist/certificates/components/CertificatesPageHeader.d.ts +7 -0
  14. package/dist/certificates/components/CertificatesPageHeader.js +11 -0
  15. package/dist/certificates/components/CertificatesPageHeader.js.map +1 -0
  16. package/dist/certificates/components/CertificatesToolbar.d.ts +10 -0
  17. package/dist/certificates/components/CertificatesToolbar.js +12 -0
  18. package/dist/certificates/components/CertificatesToolbar.js.map +1 -0
  19. package/dist/certificates/components/DisableCertificatesModal.d.ts +9 -0
  20. package/dist/certificates/components/DisableCertificatesModal.js +16 -0
  21. package/dist/certificates/components/DisableCertificatesModal.js.map +1 -0
  22. package/dist/certificates/components/FilterDropdown.d.ts +8 -0
  23. package/dist/certificates/components/FilterDropdown.js +50 -0
  24. package/dist/certificates/components/FilterDropdown.js.map +1 -0
  25. package/dist/certificates/components/GenerationHistoryTable.d.ts +11 -0
  26. package/dist/certificates/components/GenerationHistoryTable.js +40 -0
  27. package/dist/certificates/components/GenerationHistoryTable.js.map +1 -0
  28. package/dist/certificates/components/GrantExceptionsModal.d.ts +8 -0
  29. package/dist/certificates/components/GrantExceptionsModal.js +10 -0
  30. package/dist/certificates/components/GrantExceptionsModal.js.map +1 -0
  31. package/dist/certificates/components/InvalidateCertificateModal.d.ts +8 -0
  32. package/dist/certificates/components/InvalidateCertificateModal.js +10 -0
  33. package/dist/certificates/components/InvalidateCertificateModal.js.map +1 -0
  34. package/dist/certificates/components/IssuedCertificatesTab.d.ts +18 -0
  35. package/dist/certificates/components/IssuedCertificatesTab.js +6 -0
  36. package/dist/certificates/components/IssuedCertificatesTab.js.map +1 -0
  37. package/dist/certificates/components/LearnerActionModal.d.ts +16 -0
  38. package/dist/certificates/components/LearnerActionModal.js +22 -0
  39. package/dist/certificates/components/LearnerActionModal.js.map +1 -0
  40. package/dist/certificates/components/RemoveInvalidationModal.d.ts +9 -0
  41. package/dist/certificates/components/RemoveInvalidationModal.js +10 -0
  42. package/dist/certificates/components/RemoveInvalidationModal.js.map +1 -0
  43. package/dist/certificates/constants.d.ts +15 -0
  44. package/dist/certificates/constants.js +16 -0
  45. package/dist/certificates/constants.js.map +1 -0
  46. package/dist/certificates/data/api.d.ts +9 -0
  47. package/dist/certificates/data/api.js +63 -0
  48. package/dist/certificates/data/api.js.map +1 -0
  49. package/dist/certificates/data/apiHook.d.ts +30 -0
  50. package/dist/certificates/data/apiHook.js +90 -0
  51. package/dist/certificates/data/apiHook.js.map +1 -0
  52. package/dist/certificates/data/dummyData.d.ts +2 -0
  53. package/dist/certificates/data/dummyData.js +234 -0
  54. package/dist/certificates/data/dummyData.js.map +1 -0
  55. package/dist/certificates/data/queryKeys.d.ts +8 -0
  56. package/dist/certificates/data/queryKeys.js +8 -0
  57. package/dist/certificates/data/queryKeys.js.map +1 -0
  58. package/dist/certificates/messages.d.ts +313 -0
  59. package/dist/certificates/messages.js +315 -0
  60. package/dist/certificates/messages.js.map +1 -0
  61. package/dist/certificates/types.d.ts +61 -0
  62. package/dist/certificates/types.js +26 -0
  63. package/dist/certificates/types.js.map +1 -0
  64. package/dist/certificates/utils/errorHandling.d.ts +10 -0
  65. package/dist/certificates/utils/errorHandling.js +3 -0
  66. package/dist/certificates/utils/errorHandling.js.map +1 -0
  67. package/dist/certificates/utils/filterUtils.d.ts +4 -0
  68. package/dist/certificates/utils/filterUtils.js +31 -0
  69. package/dist/certificates/utils/filterUtils.js.map +1 -0
  70. package/dist/certificates/utils/index.d.ts +2 -0
  71. package/dist/certificates/utils/index.js +2 -0
  72. package/dist/certificates/utils/index.js.map +1 -0
  73. package/dist/cohorts/data/queryKeys.d.ts +4 -4
  74. package/dist/components/ActionCard.d.ts +2 -2
  75. package/dist/components/ActionCard.js +1 -1
  76. package/dist/components/ActionCard.js.map +1 -1
  77. package/dist/components/PendingTasks.d.ts +3 -1
  78. package/dist/components/PendingTasks.js +3 -2
  79. package/dist/components/PendingTasks.js.map +1 -1
  80. package/dist/components/SpecifyLearnerField.d.ts +4 -1
  81. package/dist/components/SpecifyLearnerField.js +24 -10
  82. package/dist/components/SpecifyLearnerField.js.map +1 -1
  83. package/dist/components/SpecifyProblemField.d.ts +13 -0
  84. package/dist/components/SpecifyProblemField.js +46 -0
  85. package/dist/components/SpecifyProblemField.js.map +1 -0
  86. package/dist/components/UsernameFilter.d.ts +7 -0
  87. package/dist/components/UsernameFilter.js +19 -0
  88. package/dist/components/UsernameFilter.js.map +1 -0
  89. package/dist/components/messages.d.ts +30 -0
  90. package/dist/components/messages.js +30 -0
  91. package/dist/components/messages.js.map +1 -1
  92. package/dist/constants.d.ts +2 -1
  93. package/dist/constants.js +2 -1
  94. package/dist/constants.js.map +1 -1
  95. package/dist/courseInfo/types.d.ts +2 -0
  96. package/dist/courseInfo/types.js.map +1 -1
  97. package/dist/courseTeam/CourseTeamPage.js +20 -2
  98. package/dist/courseTeam/CourseTeamPage.js.map +1 -1
  99. package/dist/courseTeam/components/AddTeamMemberModal.d.ts +6 -0
  100. package/dist/courseTeam/components/AddTeamMemberModal.js +60 -0
  101. package/dist/courseTeam/components/AddTeamMemberModal.js.map +1 -0
  102. package/dist/courseTeam/components/EditTeamMemberModal.d.ts +8 -0
  103. package/dist/courseTeam/components/EditTeamMemberModal.js +90 -0
  104. package/dist/courseTeam/components/EditTeamMemberModal.js.map +1 -0
  105. package/dist/courseTeam/components/MembersContent.d.ts +6 -0
  106. package/dist/courseTeam/components/MembersContent.js +48 -0
  107. package/dist/courseTeam/components/MembersContent.js.map +1 -0
  108. package/dist/courseTeam/components/RoleFilter.d.ts +7 -0
  109. package/dist/courseTeam/components/RoleFilter.js +22 -0
  110. package/dist/courseTeam/components/RoleFilter.js.map +1 -0
  111. package/dist/courseTeam/components/RolesContent.d.ts +3 -0
  112. package/dist/courseTeam/components/RolesContent.js +25 -0
  113. package/dist/courseTeam/components/RolesContent.js.map +1 -0
  114. package/dist/courseTeam/data/api.d.ts +6 -0
  115. package/dist/courseTeam/data/api.js +38 -0
  116. package/dist/courseTeam/data/api.js.map +1 -0
  117. package/dist/courseTeam/data/apiHook.d.ts +11 -0
  118. package/dist/courseTeam/data/apiHook.js +32 -0
  119. package/dist/courseTeam/data/apiHook.js.map +1 -0
  120. package/dist/courseTeam/data/queryKeys.d.ts +7 -0
  121. package/dist/courseTeam/data/queryKeys.js +14 -0
  122. package/dist/courseTeam/data/queryKeys.js.map +1 -0
  123. package/dist/courseTeam/messages.d.ts +243 -0
  124. package/dist/courseTeam/messages.js +245 -0
  125. package/dist/courseTeam/messages.js.map +1 -0
  126. package/dist/courseTeam/types.d.ts +22 -0
  127. package/dist/courseTeam/types.js +3 -0
  128. package/dist/courseTeam/types.js.map +1 -0
  129. package/dist/data/api.d.ts +2 -1
  130. package/dist/data/api.js +9 -3
  131. package/dist/data/api.js.map +1 -1
  132. package/dist/data/apiHook.d.ts +1 -0
  133. package/dist/data/apiHook.js +10 -2
  134. package/dist/data/apiHook.js.map +1 -1
  135. package/dist/data/queryKeys.d.ts +10 -6
  136. package/dist/data/queryKeys.js +4 -0
  137. package/dist/data/queryKeys.js.map +1 -1
  138. package/dist/dataDownloads/data/queryKeys.d.ts +3 -3
  139. package/dist/dateExtensions/components/AddExtensionModal.d.ts +1 -1
  140. package/dist/dateExtensions/components/AddExtensionModal.js +5 -6
  141. package/dist/dateExtensions/components/AddExtensionModal.js.map +1 -1
  142. package/dist/dateExtensions/components/DateExtensionsList.js +2 -13
  143. package/dist/dateExtensions/components/DateExtensionsList.js.map +1 -1
  144. package/dist/dateExtensions/data/apiHook.d.ts +2 -2
  145. package/dist/dateExtensions/data/apiHook.js +4 -4
  146. package/dist/dateExtensions/data/apiHook.js.map +1 -1
  147. package/dist/dateExtensions/data/queryKeys.d.ts +5 -5
  148. package/dist/dateExtensions/messages.d.ts +0 -5
  149. package/dist/dateExtensions/messages.js +1 -6
  150. package/dist/dateExtensions/messages.js.map +1 -1
  151. package/dist/enrollments/EnrollmentsPage.js +41 -7
  152. package/dist/enrollments/EnrollmentsPage.js.map +1 -1
  153. package/dist/enrollments/components/AddBetaTestersModal.d.ts +6 -0
  154. package/dist/enrollments/components/AddBetaTestersModal.js +61 -0
  155. package/dist/enrollments/components/AddBetaTestersModal.js.map +1 -0
  156. package/dist/enrollments/components/EnrollLearnersModal.d.ts +6 -0
  157. package/dist/enrollments/components/EnrollLearnersModal.js +53 -0
  158. package/dist/enrollments/components/EnrollLearnersModal.js.map +1 -0
  159. package/dist/enrollments/components/EnrollmentStatusModal.js +3 -3
  160. package/dist/enrollments/components/EnrollmentStatusModal.js.map +1 -1
  161. package/dist/enrollments/components/EnrollmentsList.d.ts +3 -2
  162. package/dist/enrollments/components/EnrollmentsList.js +13 -14
  163. package/dist/enrollments/components/EnrollmentsList.js.map +1 -1
  164. package/dist/enrollments/components/UnenrollModal.d.ts +1 -1
  165. package/dist/enrollments/components/UnenrollModal.js +29 -3
  166. package/dist/enrollments/components/UnenrollModal.js.map +1 -1
  167. package/dist/enrollments/components/UpdateBetaTesterModal.d.ts +8 -0
  168. package/dist/enrollments/components/UpdateBetaTesterModal.js +52 -0
  169. package/dist/enrollments/components/UpdateBetaTesterModal.js.map +1 -0
  170. package/dist/enrollments/data/api.d.ts +3 -1
  171. package/dist/enrollments/data/api.js +11 -1
  172. package/dist/enrollments/data/api.js.map +1 -1
  173. package/dist/enrollments/data/apiHook.d.ts +5 -3
  174. package/dist/enrollments/data/apiHook.js +21 -3
  175. package/dist/enrollments/data/apiHook.js.map +1 -1
  176. package/dist/enrollments/data/queryKeys.d.ts +5 -5
  177. package/dist/enrollments/data/queryKeys.js.map +1 -1
  178. package/dist/enrollments/messages.d.ts +121 -1
  179. package/dist/enrollments/messages.js +126 -6
  180. package/dist/enrollments/messages.js.map +1 -1
  181. package/dist/enrollments/types.d.ts +24 -0
  182. package/dist/enrollments/types.js.map +1 -1
  183. package/dist/grading/GradingPage.js +15 -2
  184. package/dist/grading/GradingPage.js.map +1 -1
  185. package/dist/grading/components/GradingActionRow.d.ts +2 -0
  186. package/dist/grading/components/GradingActionRow.js +28 -0
  187. package/dist/grading/components/GradingActionRow.js.map +1 -0
  188. package/dist/grading/components/GradingConfigurationModal.d.ts +6 -0
  189. package/dist/grading/components/GradingConfigurationModal.js +14 -0
  190. package/dist/grading/components/GradingConfigurationModal.js.map +1 -0
  191. package/dist/grading/components/GradingLearnerContent.d.ts +7 -0
  192. package/dist/grading/components/GradingLearnerContent.js +114 -0
  193. package/dist/grading/components/GradingLearnerContent.js.map +1 -0
  194. package/dist/grading/data/api.d.ts +6 -0
  195. package/dist/grading/data/api.js +59 -0
  196. package/dist/grading/data/api.js.map +1 -0
  197. package/dist/grading/data/apiHook.d.ts +6 -0
  198. package/dist/grading/data/apiHook.js +29 -0
  199. package/dist/grading/data/apiHook.js.map +1 -0
  200. package/dist/grading/data/queryKeys.d.ts +9 -0
  201. package/dist/grading/data/queryKeys.js +8 -0
  202. package/dist/grading/data/queryKeys.js.map +1 -0
  203. package/dist/grading/messages.d.ts +173 -0
  204. package/dist/grading/messages.js +175 -0
  205. package/dist/grading/messages.js.map +1 -0
  206. package/dist/grading/types.d.ts +11 -0
  207. package/dist/grading/types.js +2 -0
  208. package/dist/grading/types.js.map +1 -0
  209. package/dist/hooks/useDebouncedFilter.d.ts +1 -0
  210. package/dist/hooks/useDebouncedFilter.js +5 -0
  211. package/dist/hooks/useDebouncedFilter.js.map +1 -1
  212. package/dist/index.d.ts +2 -3
  213. package/dist/index.js +2 -3
  214. package/dist/index.js.map +1 -1
  215. package/dist/instructorNav/InstructorNav.js +1 -1
  216. package/dist/instructorNav/InstructorNav.js.map +1 -1
  217. package/dist/provides.d.ts +4 -0
  218. package/dist/provides.js +7 -0
  219. package/dist/provides.js.map +1 -0
  220. package/dist/routes.d.ts +1 -1
  221. package/dist/routes.js +5 -4
  222. package/dist/routes.js.map +1 -1
  223. package/dist/specialExams/SpecialExamsPage.js +10 -2
  224. package/dist/specialExams/SpecialExamsPage.js.map +1 -1
  225. package/dist/specialExams/components/Allowances.d.ts +2 -0
  226. package/dist/specialExams/components/Allowances.js +6 -0
  227. package/dist/specialExams/components/Allowances.js.map +1 -0
  228. package/dist/specialExams/components/AttemptsList.d.ts +3 -0
  229. package/dist/specialExams/components/AttemptsList.js +44 -0
  230. package/dist/specialExams/components/AttemptsList.js.map +1 -0
  231. package/dist/specialExams/data/api.d.ts +3 -0
  232. package/dist/specialExams/data/api.js +23 -0
  233. package/dist/specialExams/data/api.js.map +1 -0
  234. package/dist/specialExams/data/apiHook.d.ts +2 -0
  235. package/dist/specialExams/data/apiHook.js +9 -0
  236. package/dist/specialExams/data/apiHook.js.map +1 -0
  237. package/dist/specialExams/data/queryKeys.d.ts +5 -0
  238. package/dist/specialExams/data/queryKeys.js +6 -0
  239. package/dist/specialExams/data/queryKeys.js.map +1 -0
  240. package/dist/specialExams/messages.d.ts +58 -0
  241. package/dist/specialExams/messages.js +60 -0
  242. package/dist/specialExams/messages.js.map +1 -0
  243. package/dist/specialExams/types.d.ts +13 -0
  244. package/dist/specialExams/types.js +2 -0
  245. package/dist/specialExams/types.js.map +1 -0
  246. package/dist/style.scss +16 -0
  247. package/dist/testUtils.js +1 -1
  248. package/dist/testUtils.js.map +1 -1
  249. package/dist/types/index.d.ts +1 -0
  250. package/dist/types/index.js.map +1 -1
  251. package/dist/utils/formatters.d.ts +5 -0
  252. package/dist/utils/formatters.js +10 -0
  253. package/dist/utils/formatters.js.map +1 -1
  254. package/package.json +2 -5
  255. package/dist/app.scss +0 -10
  256. package/dist/providers/QueryProvider.d.ts +0 -6
  257. package/dist/providers/QueryProvider.js +0 -16
  258. package/dist/providers/QueryProvider.js.map +0 -1
  259. package/dist/providers.d.ts +0 -3
  260. package/dist/providers.js +0 -8
  261. package/dist/providers.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GradingLearnerContent.js","sourceRoot":"","sources":["../../../src/grading/components/GradingLearnerContent.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useParams } from 'react-router-dom';\nimport { useEffect, useState, useRef } from 'react';\nimport { useIntl } from '@openedx/frontend-base';\nimport { Button, FormControl } from '@openedx/paragon';\nimport ActionCard, { ActionCardProps } from '@src/components/ActionCard';\nimport SpecifyLearnerField from '@src/components/SpecifyLearnerField';\nimport SpecifyProblemField from '@src/components/SpecifyProblemField';\nimport { useChangeScore, useDeleteHistory, useRescoreSubmission, useResetAttempts } from '@src/grading/data/apiHook';\nimport messages from '@src/grading/messages';\nimport { GradingToolsType } from '@src/grading/types';\nimport { usePendingTasks } from '@src/data/apiHook';\n\ninterface GradingLearnerContentProps {\n toolType: GradingToolsType,\n onShowTasks: () => void,\n}\n\nconst GradingLearnerContent = ({ toolType, onShowTasks }: GradingLearnerContentProps) => {\n const intl = useIntl();\n const { courseId = '' } = useParams<{ courseId: string }>();\n const [usernameOrEmail, setUsernameOrEmail] = useState('');\n const [blockId, setBlockId] = useState('');\n const [score, setScore] = useState('');\n const learnerFieldRef = useRef<{ reset: () => void }>(null);\n const problemFieldRef = useRef<{ reset: () => void }>(null);\n\n const { mutate: resetAttempts } = useResetAttempts(courseId);\n const { mutate: deleteHistory } = useDeleteHistory(courseId);\n const { mutate: changeScore } = useChangeScore(courseId);\n const { mutate: rescoreSubmission } = useRescoreSubmission(courseId);\n const { refetch: refetchTasks } = usePendingTasks(courseId);\n\n const handleResetAttempts = (): void => {\n resetAttempts({ learner: usernameOrEmail, problem: blockId });\n };\n\n const handleRescoreSubmission = (onlyIfHigher = false): void => {\n rescoreSubmission({ learner: usernameOrEmail, problem: blockId, onlyIfHigher });\n };\n\n const handleDeleteHistory = (): void => {\n deleteHistory({ learner: usernameOrEmail, problem: blockId });\n };\n\n const handleOverrideScore = (): void => {\n changeScore({ learner: usernameOrEmail, problem: blockId, newScore: Number(score) });\n };\n\n const handleScoreChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n const value = e.target.value;\n const numericRegex = /^-?\\d*\\.?\\d*$/;\n\n if (numericRegex.test(value) || value === '') {\n setScore(value);\n }\n };\n\n const handleTaskStatusClick = (): void => {\n refetchTasks();\n onShowTasks();\n };\n\n useEffect(() => {\n setUsernameOrEmail('');\n setBlockId('');\n setScore('');\n learnerFieldRef.current?.reset();\n problemFieldRef.current?.reset();\n }, [toolType]);\n\n const singleLearnerActionRows: ActionCardProps[] = [\n {\n title: intl.formatMessage(messages.resetAttempts),\n description: intl.formatMessage(messages.resetAttemptsDescription),\n customAction: (\n <Button disabled={!usernameOrEmail || !blockId} onClick={handleResetAttempts}>\n {intl.formatMessage(messages.resetAttemptsButtonLabel)}\n </Button>\n )\n },\n {\n title: intl.formatMessage(messages.rescoreSubmission),\n description: intl.formatMessage(messages.rescoreSubmissionDescription),\n customAction: (\n <div className=\"d-flex flex-column gap-3\">\n <Button disabled={!usernameOrEmail || !blockId} onClick={() => handleRescoreSubmission()}>{intl.formatMessage(messages.rescoreSubmissionButtonLabel)}</Button>\n <Button disabled={!usernameOrEmail || !blockId} onClick={() => handleRescoreSubmission(true)}>{intl.formatMessage(messages.rescoreIfImprovesScoreButtonLabel)}</Button>\n </div>\n ),\n },\n {\n title: intl.formatMessage(messages.overrideScore),\n description: intl.formatMessage(messages.overrideScoreDescription),\n buttonLabel: intl.formatMessage(messages.overrideScoreButtonLabel),\n customAction: (\n <div className=\"d-flex align-items-center gap-2\">\n <FormControl\n name={intl.formatMessage(messages.overrideScorePlaceholder)}\n type=\"number\"\n placeholder={intl.formatMessage(messages.overrideScorePlaceholder)}\n value={score}\n onChange={handleScoreChange}\n />\n <Button disabled={!usernameOrEmail || !blockId || !score} onClick={handleOverrideScore}>{intl.formatMessage(messages.overrideScoreButtonLabel)}</Button>\n </div>\n )\n },\n {\n title: intl.formatMessage(messages.deleteHistory),\n description: intl.formatMessage(messages.deleteHistoryDescription),\n customAction: (\n <div className=\"d-flex flex-column gap-3\">\n <Button disabled={!usernameOrEmail || !blockId} onClick={handleResetAttempts}>{intl.formatMessage(messages.resetAttemptsButtonLabel)}</Button>\n <Button disabled={!usernameOrEmail || !blockId} onClick={handleDeleteHistory}>{intl.formatMessage(messages.deleteHistoryButtonLabel)}</Button>\n </div>\n ),\n },\n {\n title: intl.formatMessage(messages.taskStatus),\n description: intl.formatMessage(messages.taskStatusDescription),\n customAction: (\n <Button disabled={!usernameOrEmail || !blockId} onClick={handleTaskStatusClick}>\n {intl.formatMessage(messages.taskStatusButtonLabel)}\n </Button>\n )\n }\n ];\n\n const allLearnersActionRows = [\n {\n title: intl.formatMessage(messages.resetAttempts),\n description: intl.formatMessage(messages.resetAllLearnersAttemptsDescription),\n buttonLabel: intl.formatMessage(messages.resetAttemptsButtonLabel),\n customAction: (\n <Button disabled={!blockId} onClick={handleResetAttempts}>\n {intl.formatMessage(messages.resetAttemptsButtonLabel)}\n </Button>\n )\n },\n {\n title: intl.formatMessage(messages.rescoreSubmission),\n description: intl.formatMessage(messages.rescoreSubmissionAllLearnersDescription),\n customAction: (\n <div className=\"d-flex flex-column gap-3\">\n <Button disabled={!blockId} onClick={() => handleRescoreSubmission()}>{intl.formatMessage(messages.rescoreAllSubmissionButtonLabel)}</Button>\n <Button disabled={!blockId} onClick={() => handleRescoreSubmission(true)}>{intl.formatMessage(messages.rescoreIfImprovesScoreButtonLabel)}</Button>\n </div>\n ),\n },\n {\n title: intl.formatMessage(messages.taskStatus),\n description: intl.formatMessage(messages.taskStatusDescription),\n customAction: (\n <Button onClick={handleTaskStatusClick}>\n {intl.formatMessage(messages.taskStatusButtonLabel)}\n </Button>\n )\n }\n ];\n\n const rows = toolType === 'single' ? singleLearnerActionRows : allLearnersActionRows;\n\n const handleProblemChange = (location: string): void => {\n setBlockId(location);\n };\n\n const handleLearnerChange = (usernameOrEmail: string): void => {\n setUsernameOrEmail(usernameOrEmail);\n };\n\n return (\n <>\n <p className=\"x-small text-primary mt-3\">\n {\n toolType === 'single'\n ? intl.formatMessage(messages.descriptionSingleLearner)\n : intl.formatMessage(messages.descriptionAllLearners)\n }\n </p>\n <div className=\"d-flex justify-content-between gap-4\">\n {toolType === 'single' && (\n <div className=\"w-50\">\n <SpecifyLearnerField ref={learnerFieldRef} onClickSelect={handleLearnerChange} />\n </div>\n )}\n <div className=\"w-50\">\n <SpecifyProblemField\n ref={problemFieldRef}\n fieldLabel={intl.formatMessage(messages.specifyProblem)}\n buttonLabel={intl.formatMessage(messages.select)}\n disabled={!usernameOrEmail && toolType === 'single'}\n usernameOrEmail={usernameOrEmail}\n onClickSelect={handleProblemChange}\n />\n </div>\n </div>\n {\n rows.map(({ title, description, buttonLabel, customAction, onButtonClick }, index) => (\n <ActionCard key={title} buttonLabel={buttonLabel} description={description} title={title} hasBorderBottom={index !== rows.length - 1} customAction={customAction} onButtonClick={onButtonClick} />\n ))\n }\n </>\n );\n};\n\nexport default GradingLearnerContent;\n"]}
@@ -0,0 +1,6 @@
1
+ import { RescoreParams, GradingParams, ScoreParams } from '../types';
2
+ export declare const getGradingConfiguration: (courseId: string) => Promise<any>;
3
+ export declare const postResetAttempts: (courseId: string, params: GradingParams) => Promise<any>;
4
+ export declare const postRescoreSubmission: (courseId: string, params: RescoreParams) => Promise<any>;
5
+ export declare const deleteState: (courseId: string, params: GradingParams) => Promise<any>;
6
+ export declare const changeScore: (courseId: string, params: ScoreParams) => Promise<any>;
@@ -0,0 +1,59 @@
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 { camelCaseObject, getAuthenticatedHttpClient } from '@openedx/frontend-base';
11
+ import { getApiBaseUrl } from '../../data/api';
12
+ export const getGradingConfiguration = (courseId) => __awaiter(void 0, void 0, void 0, function* () {
13
+ const { data } = yield getAuthenticatedHttpClient()
14
+ .get(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/grading-config`);
15
+ return camelCaseObject(data);
16
+ });
17
+ export const postResetAttempts = (courseId, params) => __awaiter(void 0, void 0, void 0, function* () {
18
+ const queryParams = new URLSearchParams();
19
+ if (params.learner) {
20
+ queryParams.append('learner', params.learner);
21
+ }
22
+ const problem = encodeURI(params.problem);
23
+ const { data } = yield getAuthenticatedHttpClient().post(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/${problem}/grading/attempts/reset`, queryParams);
24
+ return camelCaseObject(data);
25
+ });
26
+ export const postRescoreSubmission = (courseId, params) => __awaiter(void 0, void 0, void 0, function* () {
27
+ const queryParams = new URLSearchParams({
28
+ only_if_higher: params.onlyIfHigher.toString(),
29
+ });
30
+ if (params.learner) {
31
+ queryParams.append('learner', params.learner);
32
+ }
33
+ const problem = encodeURI(params.problem);
34
+ const { data } = yield getAuthenticatedHttpClient().post(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/${problem}/grading/scores/rescore`, queryParams);
35
+ return camelCaseObject(data);
36
+ });
37
+ export const deleteState = (courseId, params) => __awaiter(void 0, void 0, void 0, function* () {
38
+ const queryParams = new URLSearchParams();
39
+ if (params.learner) {
40
+ queryParams.append('learner', params.learner);
41
+ }
42
+ const problem = encodeURI(params.problem);
43
+ const { data } = yield getAuthenticatedHttpClient().delete(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/${problem}/grading/state`, {
44
+ data: queryParams,
45
+ });
46
+ return camelCaseObject(data);
47
+ });
48
+ export const changeScore = (courseId, params) => __awaiter(void 0, void 0, void 0, function* () {
49
+ const queryParams = new URLSearchParams({
50
+ new_score: params.newScore.toString(),
51
+ });
52
+ if (params.learner) {
53
+ queryParams.append('learner', params.learner);
54
+ }
55
+ const problem = encodeURI(params.problem);
56
+ const { data } = yield getAuthenticatedHttpClient().put(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/${problem}/grading/scores`, queryParams);
57
+ return camelCaseObject(data);
58
+ });
59
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/grading/data/api.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCaseObject, getAuthenticatedHttpClient } from '@openedx/frontend-base';\nimport { getApiBaseUrl } from '@src/data/api';\nimport { RescoreParams, GradingParams, ScoreParams } from '../types';\n\nexport const getGradingConfiguration = async (courseId: string) => {\n const { data } = await getAuthenticatedHttpClient()\n .get(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/grading-config`);\n return camelCaseObject(data);\n};\n\nexport const postResetAttempts = async (\n courseId: string,\n params: GradingParams\n): Promise<any> => {\n const queryParams = new URLSearchParams();\n\n if (params.learner) {\n queryParams.append('learner', params.learner);\n }\n\n const problem = encodeURI(params.problem);\n\n const { data } = await getAuthenticatedHttpClient().post(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/${problem}/grading/attempts/reset`, queryParams\n );\n return camelCaseObject(data);\n};\n\nexport const postRescoreSubmission = async (\n courseId: string,\n params: RescoreParams\n): Promise<any> => {\n const queryParams = new URLSearchParams({\n only_if_higher: params.onlyIfHigher.toString(),\n });\n\n if (params.learner) {\n queryParams.append('learner', params.learner);\n }\n\n const problem = encodeURI(params.problem);\n\n const { data } = await getAuthenticatedHttpClient().post(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/${problem}/grading/scores/rescore`, queryParams\n );\n return camelCaseObject(data);\n};\n\nexport const deleteState = async (\n courseId: string,\n params: GradingParams\n): Promise<any> => {\n const queryParams = new URLSearchParams();\n\n if (params.learner) {\n queryParams.append('learner', params.learner);\n }\n\n const problem = encodeURI(params.problem);\n\n const { data } = await getAuthenticatedHttpClient().delete(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/${problem}/grading/state`, {\n data: queryParams,\n }\n );\n return camelCaseObject(data);\n};\n\nexport const changeScore = async (\n courseId: string,\n params: ScoreParams\n): Promise<any> => {\n const queryParams = new URLSearchParams({\n new_score: params.newScore.toString(),\n });\n\n if (params.learner) {\n queryParams.append('learner', params.learner);\n }\n\n const problem = encodeURI(params.problem);\n\n const { data } = await getAuthenticatedHttpClient().put(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/${problem}/grading/scores`, queryParams\n );\n return camelCaseObject(data);\n};\n"]}
@@ -0,0 +1,6 @@
1
+ import { GradingParams, RescoreParams, ScoreParams } from '../../grading/types';
2
+ export declare const useGradingConfiguration: (courseId: string) => import("@tanstack/react-query").UseQueryResult<any, Error>;
3
+ export declare const useResetAttempts: (courseId: string) => import("@tanstack/react-query").UseMutationResult<any, Error, GradingParams, unknown>;
4
+ export declare const useRescoreSubmission: (courseId: string) => import("@tanstack/react-query").UseMutationResult<any, Error, RescoreParams, unknown>;
5
+ export declare const useDeleteHistory: (courseId: string) => import("@tanstack/react-query").UseMutationResult<any, Error, GradingParams, unknown>;
6
+ export declare const useChangeScore: (courseId: string) => import("@tanstack/react-query").UseMutationResult<any, Error, ScoreParams, unknown>;
@@ -0,0 +1,29 @@
1
+ import { useMutation, useQuery } from '@tanstack/react-query';
2
+ import { changeScore, deleteState, getGradingConfiguration, postRescoreSubmission, postResetAttempts } from '../../grading/data/api';
3
+ import { gradingQueryKeys } from '../../grading/data/queryKeys';
4
+ export const useGradingConfiguration = (courseId) => (useQuery({
5
+ queryKey: gradingQueryKeys.gradingConfiguration(courseId),
6
+ queryFn: () => getGradingConfiguration(courseId),
7
+ enabled: !!courseId,
8
+ }));
9
+ export const useResetAttempts = (courseId) => {
10
+ return useMutation({
11
+ mutationFn: (params) => postResetAttempts(courseId, params),
12
+ });
13
+ };
14
+ export const useRescoreSubmission = (courseId) => {
15
+ return useMutation({
16
+ mutationFn: (params) => postRescoreSubmission(courseId, params),
17
+ });
18
+ };
19
+ export const useDeleteHistory = (courseId) => {
20
+ return useMutation({
21
+ mutationFn: (params) => deleteState(courseId, params),
22
+ });
23
+ };
24
+ export const useChangeScore = (courseId) => {
25
+ return useMutation({
26
+ mutationFn: (params) => changeScore(courseId, params),
27
+ });
28
+ };
29
+ //# sourceMappingURL=apiHook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../src/grading/data/apiHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACpI,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAG/D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,CAC3D,QAAQ,CAAC;IACP,QAAQ,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,QAAQ,CAAC;IACzD,OAAO,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,QAAQ,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,QAAQ;CACpB,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAE,EAAE;IACnD,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,CAAC,MAAqB,EAAE,EAAE,CACpC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC;KACtC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,QAAgB,EAAE,EAAE;IACvD,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,CAAC,MAAqB,EAAE,EAAE,CACpC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAE,EAAE;IACnD,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,CAAC,MAAqB,EAAE,EAAE,CACpC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC;KAChC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,EAAE;IACjD,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,CAAC,MAAmB,EAAE,EAAE,CAClC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC;KAChC,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import { useMutation, useQuery } from '@tanstack/react-query';\nimport { changeScore, deleteState, getGradingConfiguration, postRescoreSubmission, postResetAttempts } from '@src/grading/data/api';\nimport { gradingQueryKeys } from '@src/grading/data/queryKeys';\nimport { GradingParams, RescoreParams, ScoreParams } from '@src/grading/types';\n\nexport const useGradingConfiguration = (courseId: string) => (\n useQuery({\n queryKey: gradingQueryKeys.gradingConfiguration(courseId),\n queryFn: () => getGradingConfiguration(courseId),\n enabled: !!courseId,\n })\n);\n\nexport const useResetAttempts = (courseId: string) => {\n return useMutation({\n mutationFn: (params: GradingParams) =>\n postResetAttempts(courseId, params),\n });\n};\n\nexport const useRescoreSubmission = (courseId: string) => {\n return useMutation({\n mutationFn: (params: RescoreParams) =>\n postRescoreSubmission(courseId, params),\n });\n};\n\nexport const useDeleteHistory = (courseId: string) => {\n return useMutation({\n mutationFn: (params: GradingParams) =>\n deleteState(courseId, params),\n });\n};\n\nexport const useChangeScore = (courseId: string) => {\n return useMutation({\n mutationFn: (params: ScoreParams) =>\n changeScore(courseId, params),\n });\n};\n"]}
@@ -0,0 +1,9 @@
1
+ export declare const gradingQueryKeys: {
2
+ all: readonly ["org.openedx.frontend.app.instructorDashboard", "grading"];
3
+ byCourse: (courseId: string) => readonly ["org.openedx.frontend.app.instructorDashboard", "grading", string];
4
+ gradingConfiguration: (courseId: string) => readonly ["org.openedx.frontend.app.instructorDashboard", "grading", string, "gradingConfiguration"];
5
+ resetAttempts: (courseId: string, params: {
6
+ learner: string;
7
+ problem: string;
8
+ }) => readonly ["org.openedx.frontend.app.instructorDashboard", "grading", string, "resetAttempts", string, string];
9
+ };
@@ -0,0 +1,8 @@
1
+ import { appId } from '../../constants';
2
+ export const gradingQueryKeys = {
3
+ all: [appId, 'grading'],
4
+ byCourse: (courseId) => [...gradingQueryKeys.all, courseId],
5
+ gradingConfiguration: (courseId) => [...gradingQueryKeys.byCourse(courseId), 'gradingConfiguration'],
6
+ resetAttempts: (courseId, params) => [...gradingQueryKeys.byCourse(courseId), 'resetAttempts', params.learner, params.problem],
7
+ };
8
+ //# sourceMappingURL=queryKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryKeys.js","sourceRoot":"","sources":["../../../src/grading/data/queryKeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,GAAG,EAAE,CAAC,KAAK,EAAE,SAAS,CAAU;IAChC,QAAQ,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAU;IAC5E,oBAAoB,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAU;IACrH,aAAa,EAAE,CAAC,QAAgB,EAAE,MAA4C,EAAE,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAU;CACtL,CAAC","sourcesContent":["import { appId } from '@src/constants';\n\nexport const gradingQueryKeys = {\n all: [appId, 'grading'] as const,\n byCourse: (courseId: string) => [...gradingQueryKeys.all, courseId] as const,\n gradingConfiguration: (courseId: string) => [...gradingQueryKeys.byCourse(courseId), 'gradingConfiguration'] as const,\n resetAttempts: (courseId: string, params: { learner: string, problem: string }) => [...gradingQueryKeys.byCourse(courseId), 'resetAttempts', params.learner, params.problem] as const,\n};\n"]}
@@ -0,0 +1,173 @@
1
+ declare const messages: {
2
+ pageTitle: {
3
+ id: string;
4
+ defaultMessage: string;
5
+ description: string;
6
+ };
7
+ configurationAlt: {
8
+ id: string;
9
+ defaultMessage: string;
10
+ description: string;
11
+ };
12
+ viewGradebook: {
13
+ id: string;
14
+ defaultMessage: string;
15
+ description: string;
16
+ };
17
+ singleLearner: {
18
+ id: string;
19
+ defaultMessage: string;
20
+ description: string;
21
+ };
22
+ allLearners: {
23
+ id: string;
24
+ defaultMessage: string;
25
+ description: string;
26
+ };
27
+ descriptionSingleLearner: {
28
+ id: string;
29
+ defaultMessage: string;
30
+ description: string;
31
+ };
32
+ descriptionAllLearners: {
33
+ id: string;
34
+ defaultMessage: string;
35
+ description: string;
36
+ };
37
+ gradingConfiguration: {
38
+ id: string;
39
+ defaultMessage: string;
40
+ description: string;
41
+ };
42
+ close: {
43
+ id: string;
44
+ defaultMessage: string;
45
+ description: string;
46
+ };
47
+ viewGradingConfiguration: {
48
+ id: string;
49
+ defaultMessage: string;
50
+ description: string;
51
+ };
52
+ viewCourseGradingSettings: {
53
+ id: string;
54
+ defaultMessage: string;
55
+ description: string;
56
+ };
57
+ noGradingConfiguration: {
58
+ id: string;
59
+ defaultMessage: string;
60
+ description: string;
61
+ };
62
+ resetAttempts: {
63
+ id: string;
64
+ defaultMessage: string;
65
+ description: string;
66
+ };
67
+ resetAttemptsDescription: {
68
+ id: string;
69
+ defaultMessage: string;
70
+ description: string;
71
+ };
72
+ resetAttemptsButtonLabel: {
73
+ id: string;
74
+ defaultMessage: string;
75
+ description: string;
76
+ };
77
+ rescoreSubmission: {
78
+ id: string;
79
+ defaultMessage: string;
80
+ description: string;
81
+ };
82
+ rescoreSubmissionDescription: {
83
+ id: string;
84
+ defaultMessage: string;
85
+ description: string;
86
+ };
87
+ rescoreSubmissionButtonLabel: {
88
+ id: string;
89
+ defaultMessage: string;
90
+ description: string;
91
+ };
92
+ rescoreIfImprovesScoreButtonLabel: {
93
+ id: string;
94
+ defaultMessage: string;
95
+ description: string;
96
+ };
97
+ overrideScore: {
98
+ id: string;
99
+ defaultMessage: string;
100
+ description: string;
101
+ };
102
+ overrideScoreDescription: {
103
+ id: string;
104
+ defaultMessage: string;
105
+ description: string;
106
+ };
107
+ overrideScoreButtonLabel: {
108
+ id: string;
109
+ defaultMessage: string;
110
+ description: string;
111
+ };
112
+ deleteHistory: {
113
+ id: string;
114
+ defaultMessage: string;
115
+ description: string;
116
+ };
117
+ deleteHistoryDescription: {
118
+ id: string;
119
+ defaultMessage: string;
120
+ description: string;
121
+ };
122
+ deleteHistoryButtonLabel: {
123
+ id: string;
124
+ defaultMessage: string;
125
+ description: string;
126
+ };
127
+ taskStatus: {
128
+ id: string;
129
+ defaultMessage: string;
130
+ description: string;
131
+ };
132
+ taskStatusDescription: {
133
+ id: string;
134
+ defaultMessage: string;
135
+ description: string;
136
+ };
137
+ taskStatusButtonLabel: {
138
+ id: string;
139
+ defaultMessage: string;
140
+ description: string;
141
+ };
142
+ specifyProblem: {
143
+ id: string;
144
+ defaultMessage: string;
145
+ description: string;
146
+ };
147
+ select: {
148
+ id: string;
149
+ defaultMessage: string;
150
+ description: string;
151
+ };
152
+ overrideScorePlaceholder: {
153
+ id: string;
154
+ defaultMessage: string;
155
+ description: string;
156
+ };
157
+ resetAllLearnersAttemptsDescription: {
158
+ id: string;
159
+ defaultMessage: string;
160
+ description: string;
161
+ };
162
+ rescoreSubmissionAllLearnersDescription: {
163
+ id: string;
164
+ defaultMessage: string;
165
+ description: string;
166
+ };
167
+ rescoreAllSubmissionButtonLabel: {
168
+ id: string;
169
+ defaultMessage: string;
170
+ description: string;
171
+ };
172
+ };
173
+ export default messages;
@@ -0,0 +1,175 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ pageTitle: {
4
+ id: 'instruct.grading.pageTitle',
5
+ defaultMessage: 'Grading Tools',
6
+ description: 'Title for the grading page'
7
+ },
8
+ configurationAlt: {
9
+ id: 'instruct.grading.configurationAlt',
10
+ defaultMessage: 'Grading Configuration and Settings',
11
+ description: 'Alt text for the configuration icon button'
12
+ },
13
+ viewGradebook: {
14
+ id: 'instruct.grading.viewGradebook',
15
+ defaultMessage: 'View Gradebook',
16
+ description: 'Text for the button to view the gradebook'
17
+ },
18
+ singleLearner: {
19
+ id: 'instruct.grading.singleLearner',
20
+ defaultMessage: 'Single Learner',
21
+ description: 'Single Learner button label to display corresponding grading tools'
22
+ },
23
+ allLearners: {
24
+ id: 'instruct.grading.allLearners',
25
+ defaultMessage: 'All Learners',
26
+ description: 'All learners button label to display corresponding grading tools'
27
+ },
28
+ descriptionSingleLearner: {
29
+ id: 'instruct.grading.descriptionSingleLearner',
30
+ defaultMessage: 'These grading tools allow for grade review and adjustment for a specific learner on a specific problem.',
31
+ description: 'Description for single learner grading tools'
32
+ },
33
+ descriptionAllLearners: {
34
+ id: 'instruct.grading.descriptionAllLearners',
35
+ defaultMessage: 'These grading tools allow for grade review and adjustment all enrolled learners on a specific problem.',
36
+ description: 'Description for all learners grading tools'
37
+ },
38
+ gradingConfiguration: {
39
+ id: 'instruct.grading.gradingConfiguration',
40
+ defaultMessage: 'Grading Configuration',
41
+ description: 'Title for the grading configuration modal'
42
+ },
43
+ close: {
44
+ id: 'instruct.grading.modals.close',
45
+ defaultMessage: 'Close',
46
+ description: 'Text for the close button in the grading configuration modal'
47
+ },
48
+ viewGradingConfiguration: {
49
+ id: 'instruct.grading.viewGradingConfiguration',
50
+ defaultMessage: 'View Grading Configuration',
51
+ description: 'View grading configuration menu item label'
52
+ },
53
+ viewCourseGradingSettings: {
54
+ id: 'instruct.grading.viewCourseGradingSettings',
55
+ defaultMessage: 'View Course Grading Settings',
56
+ description: 'View course grading settings menu item label'
57
+ },
58
+ noGradingConfiguration: {
59
+ id: 'instruct.grading.noGradingConfiguration',
60
+ defaultMessage: 'No grading configuration found for this course.',
61
+ description: 'Message to display when there is no grading configuration for the course'
62
+ },
63
+ resetAttempts: {
64
+ id: 'instruct.grading.resetAttempts',
65
+ defaultMessage: 'Reset Attempts',
66
+ description: 'Title for the reset attempts action card'
67
+ },
68
+ resetAttemptsDescription: {
69
+ id: 'instruct.grading.resetAttemptsDescription',
70
+ defaultMessage: 'Allow a learner who has used up all attempts to work on the problem again.',
71
+ description: 'Description for the reset attempts action card'
72
+ },
73
+ resetAttemptsButtonLabel: {
74
+ id: 'instruct.grading.resetAttemptsButtonLabel',
75
+ defaultMessage: 'Reset Attempts to Zero',
76
+ description: 'Button label for the reset attempts action card'
77
+ },
78
+ rescoreSubmission: {
79
+ id: 'instruct.grading.rescoreSubmission',
80
+ defaultMessage: 'Rescore Submission',
81
+ description: 'Title for the rescore submission action card'
82
+ },
83
+ rescoreSubmissionDescription: {
84
+ id: 'instruct.grading.rescoreSubmissionDescription',
85
+ defaultMessage: 'For the specified problem, two tools exist for rescoring learner responses.',
86
+ description: 'Description for the rescore submission action card'
87
+ },
88
+ rescoreSubmissionButtonLabel: {
89
+ id: 'instruct.grading.rescoreSubmissionButtonLabel',
90
+ defaultMessage: 'Rescore Learner\'s Submission',
91
+ description: 'Button label for the rescore submission action card'
92
+ },
93
+ rescoreIfImprovesScoreButtonLabel: {
94
+ id: 'instruct.grading.rescoreIfImprovesScoreButtonLabel',
95
+ defaultMessage: 'Rescore Only if Score Improves',
96
+ description: 'Button label for the rescore if improves score action in the rescore submission'
97
+ },
98
+ overrideScore: {
99
+ id: 'instruct.grading.overrideScore',
100
+ defaultMessage: 'Override Score',
101
+ description: 'Title for the override score action card'
102
+ },
103
+ overrideScoreDescription: {
104
+ id: 'instruct.grading.overrideScoreDescription',
105
+ defaultMessage: 'For the specified problem, override the learner\'s score. Input the new score, out of the total points available for this problem.',
106
+ description: 'Description for the override score action card'
107
+ },
108
+ overrideScoreButtonLabel: {
109
+ id: 'instruct.grading.overrideScoreButtonLabel',
110
+ defaultMessage: 'Override Learner\'s Score',
111
+ description: 'Button label for the override score action card'
112
+ },
113
+ deleteHistory: {
114
+ id: 'instruct.grading.deleteHistory',
115
+ defaultMessage: 'Delete History',
116
+ description: 'Title for the delete history action card'
117
+ },
118
+ deleteHistoryDescription: {
119
+ id: 'instruct.grading.deleteHistoryDescription',
120
+ defaultMessage: 'For the specified problem, permanently and completely delete the learner\'s answers and scores from the database.',
121
+ description: 'Description for the delete history action card'
122
+ },
123
+ deleteHistoryButtonLabel: {
124
+ id: 'instruct.grading.deleteHistoryButtonLabel',
125
+ defaultMessage: 'Delete Learner\'s State',
126
+ description: 'Button label for the delete history action card'
127
+ },
128
+ taskStatus: {
129
+ id: 'instruct.grading.taskStatus',
130
+ defaultMessage: 'Task Status',
131
+ description: 'Title for the task status action card'
132
+ },
133
+ taskStatusDescription: {
134
+ id: 'instruct.grading.taskStatusDescription',
135
+ defaultMessage: 'Show the status for the tasks that you submitted for this problem.',
136
+ description: 'Description for the task status action card'
137
+ },
138
+ taskStatusButtonLabel: {
139
+ id: 'instruct.grading.taskStatusButtonLabel',
140
+ defaultMessage: 'Show Task Status',
141
+ description: 'Button label for the task status action card'
142
+ },
143
+ specifyProblem: {
144
+ id: 'instruct.grading.specifyProblem',
145
+ defaultMessage: 'Specify Problem:',
146
+ description: 'Label for the specify problem input field'
147
+ },
148
+ select: {
149
+ id: 'instruct.grading.select',
150
+ defaultMessage: 'Select',
151
+ description: 'Label for the select button in the specify problem field'
152
+ },
153
+ overrideScorePlaceholder: {
154
+ id: 'instruct.grading.overrideScorePlaceholder',
155
+ defaultMessage: 'Score',
156
+ description: 'Placeholder text for the override score input field'
157
+ },
158
+ resetAllLearnersAttemptsDescription: {
159
+ id: 'instruct.grading.resetAllLearnersAttemptsDescription',
160
+ defaultMessage: 'Allows all learners to work on the problem again.',
161
+ description: 'Description for the reset attempts action card in the all learners view'
162
+ },
163
+ rescoreSubmissionAllLearnersDescription: {
164
+ id: 'instruct.grading.rescoreSubmissionAllLearnersDescription',
165
+ defaultMessage: 'For the specified problem, rescore all learners\' responses.',
166
+ description: 'Description for the rescore submission action card in the all learners view'
167
+ },
168
+ rescoreAllSubmissionButtonLabel: {
169
+ id: 'instruct.grading.rescoreAllSubmissionButtonLabel',
170
+ defaultMessage: 'Rescore All Learners\' Submissions',
171
+ description: 'Button label for the rescore submission action card in the all learners view'
172
+ }
173
+ });
174
+ export default messages;
175
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/grading/messages.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n pageTitle: {\n id: 'instruct.grading.pageTitle',\n defaultMessage: 'Grading Tools',\n description: 'Title for the grading page'\n },\n configurationAlt: {\n id: 'instruct.grading.configurationAlt',\n defaultMessage: 'Grading Configuration and Settings',\n description: 'Alt text for the configuration icon button'\n },\n viewGradebook: {\n id: 'instruct.grading.viewGradebook',\n defaultMessage: 'View Gradebook',\n description: 'Text for the button to view the gradebook'\n },\n singleLearner: {\n id: 'instruct.grading.singleLearner',\n defaultMessage: 'Single Learner',\n description: 'Single Learner button label to display corresponding grading tools'\n },\n allLearners: {\n id: 'instruct.grading.allLearners',\n defaultMessage: 'All Learners',\n description: 'All learners button label to display corresponding grading tools'\n },\n descriptionSingleLearner: {\n id: 'instruct.grading.descriptionSingleLearner',\n defaultMessage: 'These grading tools allow for grade review and adjustment for a specific learner on a specific problem.',\n description: 'Description for single learner grading tools'\n },\n descriptionAllLearners: {\n id: 'instruct.grading.descriptionAllLearners',\n defaultMessage: 'These grading tools allow for grade review and adjustment all enrolled learners on a specific problem.',\n description: 'Description for all learners grading tools'\n },\n gradingConfiguration: {\n id: 'instruct.grading.gradingConfiguration',\n defaultMessage: 'Grading Configuration',\n description: 'Title for the grading configuration modal'\n },\n close: {\n id: 'instruct.grading.modals.close',\n defaultMessage: 'Close',\n description: 'Text for the close button in the grading configuration modal'\n },\n viewGradingConfiguration: {\n id: 'instruct.grading.viewGradingConfiguration',\n defaultMessage: 'View Grading Configuration',\n description: 'View grading configuration menu item label'\n },\n viewCourseGradingSettings: {\n id: 'instruct.grading.viewCourseGradingSettings',\n defaultMessage: 'View Course Grading Settings',\n description: 'View course grading settings menu item label'\n },\n noGradingConfiguration: {\n id: 'instruct.grading.noGradingConfiguration',\n defaultMessage: 'No grading configuration found for this course.',\n description: 'Message to display when there is no grading configuration for the course'\n },\n resetAttempts: {\n id: 'instruct.grading.resetAttempts',\n defaultMessage: 'Reset Attempts',\n description: 'Title for the reset attempts action card'\n },\n resetAttemptsDescription: {\n id: 'instruct.grading.resetAttemptsDescription',\n defaultMessage: 'Allow a learner who has used up all attempts to work on the problem again.',\n description: 'Description for the reset attempts action card'\n },\n resetAttemptsButtonLabel: {\n id: 'instruct.grading.resetAttemptsButtonLabel',\n defaultMessage: 'Reset Attempts to Zero',\n description: 'Button label for the reset attempts action card'\n },\n rescoreSubmission: {\n id: 'instruct.grading.rescoreSubmission',\n defaultMessage: 'Rescore Submission',\n description: 'Title for the rescore submission action card'\n },\n rescoreSubmissionDescription: {\n id: 'instruct.grading.rescoreSubmissionDescription',\n defaultMessage: 'For the specified problem, two tools exist for rescoring learner responses.',\n description: 'Description for the rescore submission action card'\n },\n rescoreSubmissionButtonLabel: {\n id: 'instruct.grading.rescoreSubmissionButtonLabel',\n defaultMessage: 'Rescore Learner\\'s Submission',\n description: 'Button label for the rescore submission action card'\n },\n rescoreIfImprovesScoreButtonLabel: {\n id: 'instruct.grading.rescoreIfImprovesScoreButtonLabel',\n defaultMessage: 'Rescore Only if Score Improves',\n description: 'Button label for the rescore if improves score action in the rescore submission'\n },\n overrideScore: {\n id: 'instruct.grading.overrideScore',\n defaultMessage: 'Override Score',\n description: 'Title for the override score action card'\n },\n overrideScoreDescription: {\n id: 'instruct.grading.overrideScoreDescription',\n defaultMessage: 'For the specified problem, override the learner\\'s score. Input the new score, out of the total points available for this problem.',\n description: 'Description for the override score action card'\n },\n overrideScoreButtonLabel: {\n id: 'instruct.grading.overrideScoreButtonLabel',\n defaultMessage: 'Override Learner\\'s Score',\n description: 'Button label for the override score action card'\n },\n deleteHistory: {\n id: 'instruct.grading.deleteHistory',\n defaultMessage: 'Delete History',\n description: 'Title for the delete history action card'\n },\n deleteHistoryDescription: {\n id: 'instruct.grading.deleteHistoryDescription',\n defaultMessage: 'For the specified problem, permanently and completely delete the learner\\'s answers and scores from the database.',\n description: 'Description for the delete history action card'\n },\n deleteHistoryButtonLabel: {\n id: 'instruct.grading.deleteHistoryButtonLabel',\n defaultMessage: 'Delete Learner\\'s State',\n description: 'Button label for the delete history action card'\n },\n taskStatus: {\n id: 'instruct.grading.taskStatus',\n defaultMessage: 'Task Status',\n description: 'Title for the task status action card'\n },\n taskStatusDescription: {\n id: 'instruct.grading.taskStatusDescription',\n defaultMessage: 'Show the status for the tasks that you submitted for this problem.',\n description: 'Description for the task status action card'\n },\n taskStatusButtonLabel: {\n id: 'instruct.grading.taskStatusButtonLabel',\n defaultMessage: 'Show Task Status',\n description: 'Button label for the task status action card'\n },\n specifyProblem: {\n id: 'instruct.grading.specifyProblem',\n defaultMessage: 'Specify Problem:',\n description: 'Label for the specify problem input field'\n },\n select: {\n id: 'instruct.grading.select',\n defaultMessage: 'Select',\n description: 'Label for the select button in the specify problem field'\n },\n overrideScorePlaceholder: {\n id: 'instruct.grading.overrideScorePlaceholder',\n defaultMessage: 'Score',\n description: 'Placeholder text for the override score input field'\n },\n resetAllLearnersAttemptsDescription: {\n id: 'instruct.grading.resetAllLearnersAttemptsDescription',\n defaultMessage: 'Allows all learners to work on the problem again.',\n description: 'Description for the reset attempts action card in the all learners view'\n },\n rescoreSubmissionAllLearnersDescription: {\n id: 'instruct.grading.rescoreSubmissionAllLearnersDescription',\n defaultMessage: 'For the specified problem, rescore all learners\\' responses.',\n description: 'Description for the rescore submission action card in the all learners view'\n },\n rescoreAllSubmissionButtonLabel: {\n id: 'instruct.grading.rescoreAllSubmissionButtonLabel',\n defaultMessage: 'Rescore All Learners\\' Submissions',\n description: 'Button label for the rescore submission action card in the all learners view'\n }\n});\n\nexport default messages;\n"]}
@@ -0,0 +1,11 @@
1
+ export type GradingToolsType = 'single' | 'all';
2
+ export interface GradingParams {
3
+ learner?: string;
4
+ problem: string;
5
+ }
6
+ export interface RescoreParams extends GradingParams {
7
+ onlyIfHigher: boolean;
8
+ }
9
+ export interface ScoreParams extends GradingParams {
10
+ newScore: number;
11
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/grading/types.ts"],"names":[],"mappings":"","sourcesContent":["export type GradingToolsType = 'single' | 'all';\n\nexport interface GradingParams {\n learner?: string,\n problem: string,\n}\n\nexport interface RescoreParams extends GradingParams {\n onlyIfHigher: boolean,\n}\n\nexport interface ScoreParams extends GradingParams {\n newScore: number,\n}\n"]}
@@ -12,5 +12,6 @@ interface UseDebouncedFilterProps {
12
12
  export declare const useDebouncedFilter: ({ filterValue, setFilter, delay }: UseDebouncedFilterProps) => {
13
13
  inputValue: string;
14
14
  handleChange: (value: string) => void;
15
+ resetFilter: () => void;
15
16
  };
16
17
  export {};
@@ -19,9 +19,14 @@ export const useDebouncedFilter = ({ filterValue, setFilter, delay = 600 }) => {
19
19
  setInputValue(value);
20
20
  debouncedSetFilter(value);
21
21
  };
22
+ const resetFilter = () => {
23
+ setInputValue('');
24
+ setFilter('');
25
+ };
22
26
  return {
23
27
  inputValue,
24
28
  handleChange,
29
+ resetFilter,
25
30
  };
26
31
  };
27
32
  //# sourceMappingURL=useDebouncedFilter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDebouncedFilter.js","sourceRoot":"","sources":["../../src/hooks/useDebouncedFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAQlC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EACjC,WAAW,EACX,SAAS,EACT,KAAK,GAAG,GAAG,EACa,EAAE,EAAE;IAC5B,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAEhE,0CAA0C;IAC1C,6GAA6G;IAC7G,uDAAuD;IACvD,MAAM,kBAAkB,GAAG,WAAW,CACpC,QAAQ,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EACpD,CAAC,SAAS,EAAE,KAAK,CAAC,CACnB,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;QACrC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,OAAO;QACL,UAAU;QACV,YAAY;KACb,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { debounce } from 'lodash';\n\ninterface UseDebouncedFilterProps {\n filterValue: string,\n setFilter: (value: string) => void,\n delay?: number,\n}\n\n/**\n * Hook for handling debounced filter input with automatic synchronization\n * @param filterValue - Current filter value from parent component\n * @param setFilter - Function to update the filter in parent component\n * @param delay - Debounce delay in milliseconds (default: 600ms)\n */\nexport const useDebouncedFilter = ({\n filterValue,\n setFilter,\n delay = 600\n}: UseDebouncedFilterProps) => {\n const [inputValue, setInputValue] = useState(filterValue || '');\n\n // Debounced function to update the filter\n // Added 600ms delay after testing on 3G network - good balance between responsiveness and reducing API calls\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const debouncedSetFilter = useCallback(\n debounce((value: string) => setFilter(value), delay),\n [setFilter, delay]\n );\n\n useEffect(() => {\n setInputValue(filterValue || '');\n }, [filterValue]);\n\n const handleChange = (value: string) => {\n setInputValue(value);\n debouncedSetFilter(value);\n };\n\n return {\n inputValue,\n handleChange,\n };\n};\n"]}
1
+ {"version":3,"file":"useDebouncedFilter.js","sourceRoot":"","sources":["../../src/hooks/useDebouncedFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAQlC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EACjC,WAAW,EACX,SAAS,EACT,KAAK,GAAG,GAAG,EACa,EAAE,EAAE;IAC5B,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAEhE,0CAA0C;IAC1C,6GAA6G;IAC7G,uDAAuD;IACvD,MAAM,kBAAkB,GAAG,WAAW,CACpC,QAAQ,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EACpD,CAAC,SAAS,EAAE,KAAK,CAAC,CACnB,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;QACrC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,OAAO;QACL,UAAU;QACV,YAAY;QACZ,WAAW;KACZ,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { debounce } from 'lodash';\n\ninterface UseDebouncedFilterProps {\n filterValue: string,\n setFilter: (value: string) => void,\n delay?: number,\n}\n\n/**\n * Hook for handling debounced filter input with automatic synchronization\n * @param filterValue - Current filter value from parent component\n * @param setFilter - Function to update the filter in parent component\n * @param delay - Debounce delay in milliseconds (default: 600ms)\n */\nexport const useDebouncedFilter = ({\n filterValue,\n setFilter,\n delay = 600\n}: UseDebouncedFilterProps) => {\n const [inputValue, setInputValue] = useState(filterValue || '');\n\n // Debounced function to update the filter\n // Added 600ms delay after testing on 3G network - good balance between responsiveness and reducing API calls\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const debouncedSetFilter = useCallback(\n debounce((value: string) => setFilter(value), delay),\n [setFilter, delay]\n );\n\n useEffect(() => {\n setInputValue(filterValue || '');\n }, [filterValue]);\n\n const handleChange = (value: string) => {\n setInputValue(value);\n debouncedSetFilter(value);\n };\n\n const resetFilter = () => {\n setInputValue('');\n setFilter('');\n };\n\n return {\n inputValue,\n handleChange,\n resetFilter,\n };\n};\n"]}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,2 @@
1
- export { default as instructApp } from './app';
2
- export { default as instructRoutes } from './routes';
3
- export { default as instructMessages } from './i18n';
1
+ export { default as instructorDashboardApp } from './app';
2
+ export { default as instructorDashboardRoutes } from './routes';
package/dist/index.js CHANGED
@@ -1,4 +1,3 @@
1
- export { default as instructApp } from './app';
2
- export { default as instructRoutes } from './routes';
3
- export { default as instructMessages } from './i18n';
1
+ export { default as instructorDashboardApp } from './app';
2
+ export { default as instructorDashboardRoutes } from './routes';
4
3
  //# sourceMappingURL=index.js.map