@openedx/frontend-app-instructor-dashboard 1.0.0-alpha.3 → 1.0.0-alpha.30

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 (270) 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 +0 -6
  5. package/dist/app.js.map +1 -1
  6. package/dist/certificates/CertificatesPage.d.ts +1 -0
  7. package/dist/certificates/CertificatesPage.js +214 -2
  8. package/dist/certificates/CertificatesPage.js.map +1 -1
  9. package/dist/certificates/CertificatesPage.scss +90 -0
  10. package/dist/certificates/components/CertificateTable.d.ts +14 -0
  11. package/dist/certificates/components/CertificateTable.js +88 -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 +11 -0
  17. package/dist/certificates/components/CertificatesToolbar.js +32 -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 +25 -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 +27 -0
  39. package/dist/certificates/components/LearnerActionModal.js.map +1 -0
  40. package/dist/certificates/components/RemoveExceptionModal.d.ts +9 -0
  41. package/dist/certificates/components/RemoveExceptionModal.js +10 -0
  42. package/dist/certificates/components/RemoveExceptionModal.js.map +1 -0
  43. package/dist/certificates/components/RemoveInvalidationModal.d.ts +9 -0
  44. package/dist/certificates/components/RemoveInvalidationModal.js +10 -0
  45. package/dist/certificates/components/RemoveInvalidationModal.js.map +1 -0
  46. package/dist/certificates/constants.d.ts +15 -0
  47. package/dist/certificates/constants.js +16 -0
  48. package/dist/certificates/constants.js.map +1 -0
  49. package/dist/certificates/data/api.d.ts +23 -0
  50. package/dist/certificates/data/api.js +115 -0
  51. package/dist/certificates/data/api.js.map +1 -0
  52. package/dist/certificates/data/apiHook.d.ts +50 -0
  53. package/dist/certificates/data/apiHook.js +118 -0
  54. package/dist/certificates/data/apiHook.js.map +1 -0
  55. package/dist/certificates/data/queryKeys.d.ts +9 -0
  56. package/dist/certificates/data/queryKeys.js +9 -0
  57. package/dist/certificates/data/queryKeys.js.map +1 -0
  58. package/dist/certificates/messages.d.ts +343 -0
  59. package/dist/certificates/messages.js +345 -0
  60. package/dist/certificates/messages.js.map +1 -0
  61. package/dist/certificates/types.d.ts +66 -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/components/ActionCard.d.ts +2 -2
  74. package/dist/components/ActionCard.js +1 -1
  75. package/dist/components/ActionCard.js.map +1 -1
  76. package/dist/components/CodeEditor.d.ts +5 -0
  77. package/dist/components/CodeEditor.js +34 -0
  78. package/dist/components/CodeEditor.js.map +1 -0
  79. package/dist/components/PendingTasks.d.ts +3 -1
  80. package/dist/components/PendingTasks.js +3 -2
  81. package/dist/components/PendingTasks.js.map +1 -1
  82. package/dist/components/SpecifyLearnerField.d.ts +4 -1
  83. package/dist/components/SpecifyLearnerField.js +33 -13
  84. package/dist/components/SpecifyLearnerField.js.map +1 -1
  85. package/dist/components/SpecifyProblemField.d.ts +13 -0
  86. package/dist/components/SpecifyProblemField.js +52 -0
  87. package/dist/components/SpecifyProblemField.js.map +1 -0
  88. package/dist/components/UsernameFilter.d.ts +7 -0
  89. package/dist/components/UsernameFilter.js +19 -0
  90. package/dist/components/UsernameFilter.js.map +1 -0
  91. package/dist/components/messages.d.ts +40 -0
  92. package/dist/components/messages.js +40 -0
  93. package/dist/components/messages.js.map +1 -1
  94. package/dist/courseInfo/types.d.ts +4 -0
  95. package/dist/courseInfo/types.js.map +1 -1
  96. package/dist/courseTeam/CourseTeamPage.js +25 -2
  97. package/dist/courseTeam/CourseTeamPage.js.map +1 -1
  98. package/dist/courseTeam/components/AddTeamMemberModal.d.ts +6 -0
  99. package/dist/courseTeam/components/AddTeamMemberModal.js +61 -0
  100. package/dist/courseTeam/components/AddTeamMemberModal.js.map +1 -0
  101. package/dist/courseTeam/components/EditTeamMemberModal.d.ts +8 -0
  102. package/dist/courseTeam/components/EditTeamMemberModal.js +91 -0
  103. package/dist/courseTeam/components/EditTeamMemberModal.js.map +1 -0
  104. package/dist/courseTeam/components/MembersContent.d.ts +6 -0
  105. package/dist/courseTeam/components/MembersContent.js +48 -0
  106. package/dist/courseTeam/components/MembersContent.js.map +1 -0
  107. package/dist/courseTeam/components/RoleFilter.d.ts +7 -0
  108. package/dist/courseTeam/components/RoleFilter.js +22 -0
  109. package/dist/courseTeam/components/RoleFilter.js.map +1 -0
  110. package/dist/courseTeam/components/RolesContent.d.ts +3 -0
  111. package/dist/courseTeam/components/RolesContent.js +25 -0
  112. package/dist/courseTeam/components/RolesContent.js.map +1 -0
  113. package/dist/courseTeam/constants.d.ts +3 -0
  114. package/dist/courseTeam/constants.js +4 -0
  115. package/dist/courseTeam/constants.js.map +1 -0
  116. package/dist/courseTeam/data/api.d.ts +6 -0
  117. package/dist/courseTeam/data/api.js +38 -0
  118. package/dist/courseTeam/data/api.js.map +1 -0
  119. package/dist/courseTeam/data/apiHook.d.ts +8 -0
  120. package/dist/courseTeam/data/apiHook.js +32 -0
  121. package/dist/courseTeam/data/apiHook.js.map +1 -0
  122. package/dist/courseTeam/data/queryKeys.d.ts +7 -0
  123. package/dist/courseTeam/data/queryKeys.js +14 -0
  124. package/dist/courseTeam/data/queryKeys.js.map +1 -0
  125. package/dist/courseTeam/messages.d.ts +248 -0
  126. package/dist/courseTeam/messages.js +250 -0
  127. package/dist/courseTeam/messages.js.map +1 -0
  128. package/dist/courseTeam/types.d.ts +29 -0
  129. package/dist/courseTeam/types.js +3 -0
  130. package/dist/courseTeam/types.js.map +1 -0
  131. package/dist/data/api.d.ts +2 -1
  132. package/dist/data/api.js +9 -3
  133. package/dist/data/api.js.map +1 -1
  134. package/dist/data/apiHook.d.ts +1 -0
  135. package/dist/data/apiHook.js +10 -2
  136. package/dist/data/apiHook.js.map +1 -1
  137. package/dist/data/queryKeys.d.ts +4 -0
  138. package/dist/data/queryKeys.js +4 -0
  139. package/dist/data/queryKeys.js.map +1 -1
  140. package/dist/dateExtensions/components/AddExtensionModal.d.ts +1 -1
  141. package/dist/dateExtensions/components/AddExtensionModal.js +6 -7
  142. package/dist/dateExtensions/components/AddExtensionModal.js.map +1 -1
  143. package/dist/dateExtensions/components/DateExtensionsList.js +3 -14
  144. package/dist/dateExtensions/components/DateExtensionsList.js.map +1 -1
  145. package/dist/dateExtensions/data/apiHook.d.ts +2 -2
  146. package/dist/dateExtensions/data/apiHook.js +4 -4
  147. package/dist/dateExtensions/data/apiHook.js.map +1 -1
  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 +1 -1
  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 +15 -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/instructorNav/InstructorNav.js +6 -1
  213. package/dist/instructorNav/InstructorNav.js.map +1 -1
  214. package/dist/routes.d.ts +1 -1
  215. package/dist/routes.js +2 -2
  216. package/dist/routes.js.map +1 -1
  217. package/dist/specialExams/SpecialExamsPage.js +14 -2
  218. package/dist/specialExams/SpecialExamsPage.js.map +1 -1
  219. package/dist/specialExams/components/AddAllowanceModal.d.ts +6 -0
  220. package/dist/specialExams/components/AddAllowanceModal.js +84 -0
  221. package/dist/specialExams/components/AddAllowanceModal.js.map +1 -0
  222. package/dist/specialExams/components/Allowances.d.ts +2 -0
  223. package/dist/specialExams/components/Allowances.js +32 -0
  224. package/dist/specialExams/components/Allowances.js.map +1 -0
  225. package/dist/specialExams/components/AllowancesList.d.ts +8 -0
  226. package/dist/specialExams/components/AllowancesList.js +58 -0
  227. package/dist/specialExams/components/AllowancesList.js.map +1 -0
  228. package/dist/specialExams/components/AttemptsList.d.ts +3 -0
  229. package/dist/specialExams/components/AttemptsList.js +45 -0
  230. package/dist/specialExams/components/AttemptsList.js.map +1 -0
  231. package/dist/specialExams/components/DeleteAllowanceModal.d.ts +8 -0
  232. package/dist/specialExams/components/DeleteAllowanceModal.js +29 -0
  233. package/dist/specialExams/components/DeleteAllowanceModal.js.map +1 -0
  234. package/dist/specialExams/components/EditAllowanceModal.d.ts +8 -0
  235. package/dist/specialExams/components/EditAllowanceModal.js +62 -0
  236. package/dist/specialExams/components/EditAllowanceModal.js.map +1 -0
  237. package/dist/specialExams/constants.d.ts +43 -0
  238. package/dist/specialExams/constants.js +19 -0
  239. package/dist/specialExams/constants.js.map +1 -0
  240. package/dist/specialExams/data/api.d.ts +7 -0
  241. package/dist/specialExams/data/api.js +49 -0
  242. package/dist/specialExams/data/api.js.map +1 -0
  243. package/dist/specialExams/data/apiHook.d.ts +6 -0
  244. package/dist/specialExams/data/apiHook.js +37 -0
  245. package/dist/specialExams/data/apiHook.js.map +1 -0
  246. package/dist/specialExams/data/queryKeys.d.ts +8 -0
  247. package/dist/specialExams/data/queryKeys.js +9 -0
  248. package/dist/specialExams/data/queryKeys.js.map +1 -0
  249. package/dist/specialExams/messages.d.ts +223 -0
  250. package/dist/specialExams/messages.js +225 -0
  251. package/dist/specialExams/messages.js.map +1 -0
  252. package/dist/specialExams/types.d.ts +64 -0
  253. package/dist/specialExams/types.js +2 -0
  254. package/dist/specialExams/types.js.map +1 -0
  255. package/dist/style.scss +16 -0
  256. package/dist/testUtils.js +1 -1
  257. package/dist/testUtils.js.map +1 -1
  258. package/dist/types/index.d.ts +1 -0
  259. package/dist/types/index.js.map +1 -1
  260. package/dist/utils/formatters.d.ts +5 -0
  261. package/dist/utils/formatters.js +10 -0
  262. package/dist/utils/formatters.js.map +1 -1
  263. package/package.json +4 -5
  264. package/dist/app.scss +0 -10
  265. package/dist/providers/QueryProvider.d.ts +0 -6
  266. package/dist/providers/QueryProvider.js +0 -16
  267. package/dist/providers/QueryProvider.js.map +0 -1
  268. package/dist/providers.d.ts +0 -3
  269. package/dist/providers.js +0 -8
  270. package/dist/providers.js.map +0 -1
@@ -0,0 +1,49 @@
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, camelCaseObject, snakeCaseObject } from '@openedx/frontend-base';
11
+ import { getApiBaseUrl } from '../../data/api';
12
+ const getQueryParams = (params) => {
13
+ const queryParams = new URLSearchParams({
14
+ page: (params.page + 1).toString(),
15
+ page_size: params.pageSize.toString(),
16
+ });
17
+ if (params.emailOrUsername) {
18
+ queryParams.append('search', params.emailOrUsername);
19
+ }
20
+ return queryParams;
21
+ };
22
+ export const getAttempts = (courseId, params) => __awaiter(void 0, void 0, void 0, function* () {
23
+ const queryParams = getQueryParams(params);
24
+ const { data } = yield getAuthenticatedHttpClient().get(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/special_exams/attempts?${queryParams.toString()}`);
25
+ return camelCaseObject(data);
26
+ });
27
+ export const getAllowances = (courseId, params) => __awaiter(void 0, void 0, void 0, function* () {
28
+ const queryParams = getQueryParams(params);
29
+ const { data } = yield getAuthenticatedHttpClient().get(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/special_exams/allowances?${queryParams.toString()}`);
30
+ return camelCaseObject(data);
31
+ });
32
+ export const addAllowance = (courseId, newAllowance) => __awaiter(void 0, void 0, void 0, function* () {
33
+ const newAllowanceSnakeCase = snakeCaseObject(newAllowance);
34
+ const { data } = yield getAuthenticatedHttpClient().post(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/special_exams/allowances`, newAllowanceSnakeCase);
35
+ return camelCaseObject(data);
36
+ });
37
+ export const deleteAllowance = (courseId, params) => __awaiter(void 0, void 0, void 0, function* () {
38
+ const snakeCaseParams = snakeCaseObject(params);
39
+ yield getAuthenticatedHttpClient().delete(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/special_exams/${params.examId}/allowance`, {
40
+ data: snakeCaseParams
41
+ });
42
+ });
43
+ export const getSpecialExams = (courseId, examType) => __awaiter(void 0, void 0, void 0, function* () {
44
+ const { data } = yield getAuthenticatedHttpClient().get(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/special_exams`, {
45
+ params: { exam_type: examType }
46
+ });
47
+ return camelCaseObject(data);
48
+ });
49
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/specialExams/data/api.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI9C,MAAM,cAAc,GAAG,CAAC,MAAsB,EAAE,EAAE;IAChD,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC;QACtC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;QAClC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE;KACtC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAO,QAAgB,EAAE,MAAsB,EAA8B,EAAE;IACxG,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAE3C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAC,GAAG,CACrD,GAAG,aAAa,EAAE,8BAA8B,QAAQ,2BAA2B,WAAW,CAAC,QAAQ,EAAE,EAAE,CAC5G,CAAC;IACF,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAA,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAO,QAAgB,EAAE,MAAsB,EAAgC,EAAE;IAC5G,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAE3C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAC,GAAG,CACrD,GAAG,aAAa,EAAE,8BAA8B,QAAQ,6BAA6B,WAAW,CAAC,QAAQ,EAAE,EAAE,CAC9G,CAAC;IACF,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAA,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAO,QAAgB,EAAE,YAAgC,EAAwB,EAAE;IAC7G,MAAM,qBAAqB,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAC,IAAI,CACtD,GAAG,aAAa,EAAE,8BAA8B,QAAQ,2BAA2B,EACnF,qBAAqB,CACtB,CAAC;IACF,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAA,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAO,QAAgB,EAAE,MAA6B,EAAiB,EAAE;IACtG,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,0BAA0B,EAAE,CAAC,MAAM,CACvC,GAAG,aAAa,EAAE,8BAA8B,QAAQ,kBAAkB,MAAM,CAAC,MAAM,YAAY,EAAE;QACnG,IAAI,EAAE,eAAe;KACtB,CACF,CAAC;AACJ,CAAC,CAAA,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAO,QAAgB,EAAE,QAAgB,EAA0B,EAAE;IAClG,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAC,GAAG,CACrD,GAAG,aAAa,EAAE,8BAA8B,QAAQ,gBAAgB,EAAE;QACxE,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;KAChC,CACF,CAAC;IACF,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAA,CAAC","sourcesContent":["import { getAuthenticatedHttpClient, camelCaseObject, snakeCaseObject } from '@openedx/frontend-base';\nimport { getApiBaseUrl } from '@src/data/api';\nimport { DataList } from '@src/types';\nimport { AddAllowanceParams, Allowance, Attempt, AttemptsParams, DeleteAllowanceParams, SpecialExam } from '../types';\n\nconst getQueryParams = (params: AttemptsParams) => {\n const queryParams = new URLSearchParams({\n page: (params.page + 1).toString(),\n page_size: params.pageSize.toString(),\n });\n\n if (params.emailOrUsername) {\n queryParams.append('search', params.emailOrUsername);\n }\n\n return queryParams;\n};\n\nexport const getAttempts = async (courseId: string, params: AttemptsParams): Promise<DataList<Attempt>> => {\n const queryParams = getQueryParams(params);\n\n const { data } = await getAuthenticatedHttpClient().get(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/special_exams/attempts?${queryParams.toString()}`\n );\n return camelCaseObject(data);\n};\n\nexport const getAllowances = async (courseId: string, params: AttemptsParams): Promise<DataList<Allowance>> => {\n const queryParams = getQueryParams(params);\n\n const { data } = await getAuthenticatedHttpClient().get(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/special_exams/allowances?${queryParams.toString()}`\n );\n return camelCaseObject(data);\n};\n\nexport const addAllowance = async (courseId: string, newAllowance: AddAllowanceParams): Promise<Allowance[]> => {\n const newAllowanceSnakeCase = snakeCaseObject(newAllowance);\n const { data } = await getAuthenticatedHttpClient().post(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/special_exams/allowances`,\n newAllowanceSnakeCase\n );\n return camelCaseObject(data);\n};\n\nexport const deleteAllowance = async (courseId: string, params: DeleteAllowanceParams): Promise<void> => {\n const snakeCaseParams = snakeCaseObject(params);\n await getAuthenticatedHttpClient().delete(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/special_exams/${params.examId}/allowance`, {\n data: snakeCaseParams\n }\n );\n};\n\nexport const getSpecialExams = async (courseId: string, examType: string): Promise<SpecialExam[]> => {\n const { data } = await getAuthenticatedHttpClient().get(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/special_exams`, {\n params: { exam_type: examType }\n }\n );\n return camelCaseObject(data);\n};\n"]}
@@ -0,0 +1,6 @@
1
+ import { AddAllowanceParams, AttemptsParams, DeleteAllowanceParams } from '../types';
2
+ export declare const useAttempts: (courseId: string, params: AttemptsParams) => import("@tanstack/react-query").UseQueryResult<import("../../types").DataList<import("../types").Attempt>, Error>;
3
+ export declare const useAllowances: (courseId: string, params: AttemptsParams) => import("@tanstack/react-query").UseQueryResult<import("../../types").DataList<import("../types").Allowance>, Error>;
4
+ export declare const useAddAllowance: (courseId: string) => import("@tanstack/react-query").UseMutationResult<import("../types").Allowance[], Error, AddAllowanceParams, unknown>;
5
+ export declare const useDeleteAllowance: (courseId: string) => import("@tanstack/react-query").UseMutationResult<void, Error, DeleteAllowanceParams, unknown>;
6
+ export declare const useSpecialExams: (courseId: string, examType: string) => import("@tanstack/react-query").UseQueryResult<import("../types").SpecialExam[], Error>;
@@ -0,0 +1,37 @@
1
+ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
2
+ import { addAllowance, deleteAllowance, getAllowances, getAttempts, getSpecialExams } from './api';
3
+ import { specialExamsQueryKeys } from './queryKeys';
4
+ export const useAttempts = (courseId, params) => (useQuery({
5
+ queryKey: specialExamsQueryKeys.attempts(courseId, params),
6
+ queryFn: () => getAttempts(courseId, params),
7
+ enabled: !!courseId,
8
+ }));
9
+ export const useAllowances = (courseId, params) => (useQuery({
10
+ queryKey: specialExamsQueryKeys.allowances(courseId, params),
11
+ queryFn: () => getAllowances(courseId, params),
12
+ enabled: !!courseId,
13
+ }));
14
+ export const useAddAllowance = (courseId) => {
15
+ const queryClient = useQueryClient();
16
+ return useMutation({
17
+ mutationFn: (newAllowance) => addAllowance(courseId, newAllowance),
18
+ onSuccess: () => {
19
+ queryClient.invalidateQueries({ queryKey: specialExamsQueryKeys.allowances(courseId), exact: false });
20
+ },
21
+ });
22
+ };
23
+ export const useDeleteAllowance = (courseId) => {
24
+ const queryClient = useQueryClient();
25
+ return useMutation({
26
+ mutationFn: (params) => deleteAllowance(courseId, params),
27
+ onSuccess: () => {
28
+ queryClient.invalidateQueries({ queryKey: specialExamsQueryKeys.allowances(courseId), exact: false });
29
+ },
30
+ });
31
+ };
32
+ export const useSpecialExams = (courseId, examType) => (useQuery({
33
+ queryKey: specialExamsQueryKeys.specialExams(courseId, examType),
34
+ queryFn: () => getSpecialExams(courseId, examType),
35
+ enabled: !!courseId && !!examType,
36
+ }));
37
+ //# sourceMappingURL=apiHook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../src/specialExams/data/apiHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AACnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAE,MAAsB,EAAE,EAAE,CAAC,CACvE,QAAQ,CAAC;IACP,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1D,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,QAAQ;CACpB,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAE,MAAsB,EAAE,EAAE,CAAC,CACzE,QAAQ,CAAC;IACP,QAAQ,EAAE,qBAAqB,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC5D,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC9C,OAAO,EAAE,CAAC,CAAC,QAAQ;CACpB,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,EAAE;IAClD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,CAAC,YAAgC,EAAE,EAAE,CAC/C,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC;QACtC,SAAS,EAAE,GAAG,EAAE;YACd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACxG,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAE,EAAE;IACrD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,CAAC,MAA6B,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC;QAChF,SAAS,EAAE,GAAG,EAAE;YACd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACxG,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,QAAgB,EAAE,EAAE,CAAC,CACrE,QAAQ,CAAC;IACP,QAAQ,EAAE,qBAAqB,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAChE,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ;CAClC,CAAC,CACH,CAAC","sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { addAllowance, deleteAllowance, getAllowances, getAttempts, getSpecialExams } from './api';\nimport { specialExamsQueryKeys } from './queryKeys';\nimport { AddAllowanceParams, AttemptsParams, DeleteAllowanceParams } from '../types';\n\nexport const useAttempts = (courseId: string, params: AttemptsParams) => (\n useQuery({\n queryKey: specialExamsQueryKeys.attempts(courseId, params),\n queryFn: () => getAttempts(courseId, params),\n enabled: !!courseId,\n })\n);\n\nexport const useAllowances = (courseId: string, params: AttemptsParams) => (\n useQuery({\n queryKey: specialExamsQueryKeys.allowances(courseId, params),\n queryFn: () => getAllowances(courseId, params),\n enabled: !!courseId,\n })\n);\n\nexport const useAddAllowance = (courseId: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (newAllowance: AddAllowanceParams) =>\n addAllowance(courseId, newAllowance),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: specialExamsQueryKeys.allowances(courseId), exact: false });\n },\n });\n};\n\nexport const useDeleteAllowance = (courseId: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (params: DeleteAllowanceParams) => deleteAllowance(courseId, params),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: specialExamsQueryKeys.allowances(courseId), exact: false });\n },\n });\n};\n\nexport const useSpecialExams = (courseId: string, examType: string) => (\n useQuery({\n queryKey: specialExamsQueryKeys.specialExams(courseId, examType),\n queryFn: () => getSpecialExams(courseId, examType),\n enabled: !!courseId && !!examType,\n })\n);\n"]}
@@ -0,0 +1,8 @@
1
+ import { AttemptsParams } from '../types';
2
+ export declare const specialExamsQueryKeys: {
3
+ all: readonly ["org.openedx.frontend.app.instructorDashboard", "specialExams"];
4
+ byCourse: (courseId: string) => readonly ["org.openedx.frontend.app.instructorDashboard", "specialExams", string];
5
+ attempts: (courseId: string, params: AttemptsParams) => readonly ["org.openedx.frontend.app.instructorDashboard", "specialExams", string, "attempts", number, string];
6
+ allowances: (courseId: string, params?: AttemptsParams) => readonly ["org.openedx.frontend.app.instructorDashboard", "specialExams", string, "allowances", number, string];
7
+ specialExams: (courseId: string, examType: string) => readonly ["org.openedx.frontend.app.instructorDashboard", "specialExams", string, "specialExams", string];
8
+ };
@@ -0,0 +1,9 @@
1
+ import { appId } from '../../constants';
2
+ export const specialExamsQueryKeys = {
3
+ all: [appId, 'specialExams'],
4
+ byCourse: (courseId) => [...specialExamsQueryKeys.all, courseId],
5
+ attempts: (courseId, params) => [...specialExamsQueryKeys.byCourse(courseId), 'attempts', params.page, params.emailOrUsername],
6
+ allowances: (courseId, params) => [...specialExamsQueryKeys.byCourse(courseId), 'allowances', (params === null || params === void 0 ? void 0 : params.page) || 1, (params === null || params === void 0 ? void 0 : params.emailOrUsername) || ''],
7
+ specialExams: (courseId, examType) => [...specialExamsQueryKeys.byCourse(courseId), 'specialExams', examType],
8
+ };
9
+ //# sourceMappingURL=queryKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryKeys.js","sourceRoot":"","sources":["../../../src/specialExams/data/queryKeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAGvC,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,GAAG,EAAE,CAAC,KAAK,EAAE,cAAc,CAAU;IACrC,QAAQ,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,CAAC,GAAG,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAU;IACjF,QAAQ,EAAE,CAAC,QAAgB,EAAE,MAAsB,EAAE,EAAE,CAAC,CAAC,GAAG,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,eAAe,CAAU;IAC/J,UAAU,EAAE,CAAC,QAAgB,EAAE,MAAuB,EAAE,EAAE,CAAC,CAAC,GAAG,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,CAAC,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,KAAI,EAAE,CAAU;IACjL,YAAY,EAAE,CAAC,QAAgB,EAAE,QAAgB,EAAE,EAAE,CAAC,CAAC,GAAG,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAU;CACvI,CAAC","sourcesContent":["import { appId } from '@src/constants';\nimport { AttemptsParams } from '../types';\n\nexport const specialExamsQueryKeys = {\n all: [appId, 'specialExams'] as const,\n byCourse: (courseId: string) => [...specialExamsQueryKeys.all, courseId] as const,\n attempts: (courseId: string, params: AttemptsParams) => [...specialExamsQueryKeys.byCourse(courseId), 'attempts', params.page, params.emailOrUsername] as const,\n allowances: (courseId: string, params?: AttemptsParams) => [...specialExamsQueryKeys.byCourse(courseId), 'allowances', params?.page || 1, params?.emailOrUsername || ''] as const,\n specialExams: (courseId: string, examType: string) => [...specialExamsQueryKeys.byCourse(courseId), 'specialExams', examType] as const,\n};\n"]}
@@ -0,0 +1,223 @@
1
+ declare const messages: {
2
+ specialExamsTitle: {
3
+ id: string;
4
+ defaultMessage: string;
5
+ description: string;
6
+ };
7
+ examAttempts: {
8
+ id: string;
9
+ defaultMessage: string;
10
+ description: string;
11
+ };
12
+ allowances: {
13
+ id: string;
14
+ defaultMessage: string;
15
+ description: string;
16
+ };
17
+ username: {
18
+ id: string;
19
+ defaultMessage: string;
20
+ description: string;
21
+ };
22
+ examName: {
23
+ id: string;
24
+ defaultMessage: string;
25
+ description: string;
26
+ };
27
+ timeLimit: {
28
+ id: string;
29
+ defaultMessage: string;
30
+ description: string;
31
+ };
32
+ type: {
33
+ id: string;
34
+ defaultMessage: string;
35
+ description: string;
36
+ };
37
+ startedAt: {
38
+ id: string;
39
+ defaultMessage: string;
40
+ description: string;
41
+ };
42
+ completedAt: {
43
+ id: string;
44
+ defaultMessage: string;
45
+ description: string;
46
+ };
47
+ status: {
48
+ id: string;
49
+ defaultMessage: string;
50
+ description: string;
51
+ };
52
+ noAttempts: {
53
+ id: string;
54
+ defaultMessage: string;
55
+ description: string;
56
+ };
57
+ noAllowances: {
58
+ id: string;
59
+ defaultMessage: string;
60
+ description: string;
61
+ };
62
+ editAllowance: {
63
+ id: string;
64
+ defaultMessage: string;
65
+ description: string;
66
+ };
67
+ email: {
68
+ id: string;
69
+ defaultMessage: string;
70
+ description: string;
71
+ };
72
+ allowanceType: {
73
+ id: string;
74
+ defaultMessage: string;
75
+ description: string;
76
+ };
77
+ allowanceValue: {
78
+ id: string;
79
+ defaultMessage: string;
80
+ description: string;
81
+ };
82
+ addAllowance: {
83
+ id: string;
84
+ defaultMessage: string;
85
+ description: string;
86
+ };
87
+ cancel: {
88
+ id: string;
89
+ defaultMessage: string;
90
+ description: string;
91
+ };
92
+ createAllowance: {
93
+ id: string;
94
+ defaultMessage: string;
95
+ description: string;
96
+ };
97
+ specifyLearners: {
98
+ id: string;
99
+ defaultMessage: string;
100
+ description: string;
101
+ };
102
+ specifyLearnersPlaceholder: {
103
+ id: string;
104
+ defaultMessage: string;
105
+ description: string;
106
+ };
107
+ selectExamType: {
108
+ id: string;
109
+ defaultMessage: string;
110
+ description: string;
111
+ };
112
+ selectExams: {
113
+ id: string;
114
+ defaultMessage: string;
115
+ description: string;
116
+ };
117
+ selectAllowanceType: {
118
+ id: string;
119
+ defaultMessage: string;
120
+ description: string;
121
+ };
122
+ addTime: {
123
+ id: string;
124
+ defaultMessage: string;
125
+ description: string;
126
+ };
127
+ addTimePlaceholder: {
128
+ id: string;
129
+ defaultMessage: string;
130
+ description: string;
131
+ };
132
+ actions: {
133
+ id: string;
134
+ defaultMessage: string;
135
+ description: string;
136
+ };
137
+ proctored: {
138
+ id: string;
139
+ defaultMessage: string;
140
+ description: string;
141
+ };
142
+ timed: {
143
+ id: string;
144
+ defaultMessage: string;
145
+ description: string;
146
+ };
147
+ timeMultiplier: {
148
+ id: string;
149
+ defaultMessage: string;
150
+ description: string;
151
+ };
152
+ additionalTime: {
153
+ id: string;
154
+ defaultMessage: string;
155
+ description: string;
156
+ };
157
+ reviewPolicy: {
158
+ id: string;
159
+ defaultMessage: string;
160
+ description: string;
161
+ };
162
+ exceptionPlaceholder: {
163
+ id: string;
164
+ defaultMessage: string;
165
+ description: string;
166
+ };
167
+ timeMultiplierPlaceholder: {
168
+ id: string;
169
+ defaultMessage: string;
170
+ description: string;
171
+ };
172
+ edit: {
173
+ id: string;
174
+ defaultMessage: string;
175
+ description: string;
176
+ };
177
+ delete: {
178
+ id: string;
179
+ defaultMessage: string;
180
+ description: string;
181
+ };
182
+ deleteAllowance: {
183
+ id: string;
184
+ defaultMessage: string;
185
+ description: string;
186
+ };
187
+ deleteConfirmation: {
188
+ id: string;
189
+ defaultMessage: string;
190
+ description: string;
191
+ };
192
+ deleteError: {
193
+ id: string;
194
+ defaultMessage: string;
195
+ description: string;
196
+ };
197
+ addAdditionalTimeGranted: {
198
+ id: string;
199
+ defaultMessage: string;
200
+ description: string;
201
+ };
202
+ addReviewPolicyException: {
203
+ id: string;
204
+ defaultMessage: string;
205
+ description: string;
206
+ };
207
+ addTimeMultiplier: {
208
+ id: string;
209
+ defaultMessage: string;
210
+ description: string;
211
+ };
212
+ addAllowanceError: {
213
+ id: string;
214
+ defaultMessage: string;
215
+ description: string;
216
+ };
217
+ editAllowanceError: {
218
+ id: string;
219
+ defaultMessage: string;
220
+ description: string;
221
+ };
222
+ };
223
+ export default messages;
@@ -0,0 +1,225 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ specialExamsTitle: {
4
+ id: 'instruct.specialExams.title',
5
+ defaultMessage: 'Special Exams',
6
+ description: 'Title for the special exams page'
7
+ },
8
+ examAttempts: {
9
+ id: 'instruct.specialExams.examAttempts',
10
+ defaultMessage: 'Exam Attempts',
11
+ description: 'Label for the exam attempts tab'
12
+ },
13
+ allowances: {
14
+ id: 'instruct.specialExams.allowances',
15
+ defaultMessage: 'Allowances',
16
+ description: 'Label for the allowances tab'
17
+ },
18
+ username: {
19
+ id: 'instruct.specialExams.username',
20
+ defaultMessage: 'Username',
21
+ description: 'Column header for username in exam attempts list',
22
+ },
23
+ examName: {
24
+ id: 'instruct.specialExams.examName',
25
+ defaultMessage: 'Exam Name',
26
+ description: 'Column header for exam name in exam attempts list',
27
+ },
28
+ timeLimit: {
29
+ id: 'instruct.specialExams.timeLimit',
30
+ defaultMessage: 'Time Limit',
31
+ description: 'Column header for time limit in exam attempts list',
32
+ },
33
+ type: {
34
+ id: 'instruct.specialExams.type',
35
+ defaultMessage: 'Type',
36
+ description: 'Column header for type in exam attempts list',
37
+ },
38
+ startedAt: {
39
+ id: 'instruct.specialExams.startedAt',
40
+ defaultMessage: 'Started At',
41
+ description: 'Column header for started at in exam attempts list',
42
+ },
43
+ completedAt: {
44
+ id: 'instruct.specialExams.completedAt',
45
+ defaultMessage: 'Completed At',
46
+ description: 'Column header for completed at in exam attempts list',
47
+ },
48
+ status: {
49
+ id: 'instruct.specialExams.status',
50
+ defaultMessage: 'Status',
51
+ description: 'Column header for status in exam attempts list',
52
+ },
53
+ noAttempts: {
54
+ id: 'instruct.specialExams.noAttempts',
55
+ defaultMessage: 'No exam attempts found',
56
+ description: 'Message displayed when there are no exam attempts to show',
57
+ },
58
+ noAllowances: {
59
+ id: 'instruct.specialExams.noAllowances',
60
+ defaultMessage: 'No allowances found',
61
+ description: 'Message displayed when there are no allowances to show',
62
+ },
63
+ editAllowance: {
64
+ id: 'instruct.specialExams.editAllowance',
65
+ defaultMessage: 'Edit Allowance',
66
+ description: 'ARIA label for actions button and modal title when editing an allowance',
67
+ },
68
+ email: {
69
+ id: 'instruct.specialExams.email',
70
+ defaultMessage: 'Email',
71
+ description: 'Column header for email in allowances list',
72
+ },
73
+ allowanceType: {
74
+ id: 'instruct.specialExams.allowanceType',
75
+ defaultMessage: 'Allowance Type',
76
+ description: 'Column header for allowance type in allowances list',
77
+ },
78
+ allowanceValue: {
79
+ id: 'instruct.specialExams.allowanceValue',
80
+ defaultMessage: 'Allowance Value',
81
+ description: 'Column header for allowance value in allowances list',
82
+ },
83
+ addAllowance: {
84
+ id: 'instruct.specialExams.addAllowance',
85
+ defaultMessage: 'Add Allowance',
86
+ description: 'Label for the button to add a new allowance',
87
+ },
88
+ cancel: {
89
+ id: 'instruct.specialExams.cancel',
90
+ defaultMessage: 'Cancel',
91
+ description: 'Label for cancel button in add/edit allowance modal',
92
+ },
93
+ createAllowance: {
94
+ id: 'instruct.specialExams.createAllowance',
95
+ defaultMessage: 'Create Allowance',
96
+ description: 'Label for the create button in add allowance modal',
97
+ },
98
+ specifyLearners: {
99
+ id: 'instruct.specialExams.specifyLearners',
100
+ defaultMessage: 'Specify Learners',
101
+ description: 'Label for the field to specify learners in add allowance modal',
102
+ },
103
+ specifyLearnersPlaceholder: {
104
+ id: 'instruct.specialExams.specifyLearnersPlaceholder',
105
+ defaultMessage: 'Learner email addresses and/or usernames separated by commas',
106
+ description: 'Placeholder for the field to specify learners in add allowance modal',
107
+ },
108
+ selectExamType: {
109
+ id: 'instruct.specialExams.selectExamType',
110
+ defaultMessage: 'Select Exam Type',
111
+ description: 'Label for the field to select exam type in add allowance modal',
112
+ },
113
+ selectExams: {
114
+ id: 'instruct.specialExams.selectExams',
115
+ defaultMessage: 'Select Exam(s)',
116
+ description: 'Label for the field to select exams in add allowance modal',
117
+ },
118
+ selectAllowanceType: {
119
+ id: 'instruct.specialExams.selectAllowanceType',
120
+ defaultMessage: 'Select Allowance Type',
121
+ description: 'Label for the field to select allowance type in add allowance modal',
122
+ },
123
+ addTime: {
124
+ id: 'instruct.specialExams.addTime',
125
+ defaultMessage: 'Add Time',
126
+ description: 'Label for the field to enter time value in add allowance modal',
127
+ },
128
+ addTimePlaceholder: {
129
+ id: 'instruct.specialExams.addTimePlaceholder',
130
+ defaultMessage: 'Time (minutes)',
131
+ description: 'Placeholder for the field to enter time value in add allowance modal',
132
+ },
133
+ actions: {
134
+ id: 'instruct.specialExams.actions',
135
+ defaultMessage: 'Actions',
136
+ description: 'ARIA label for actions button in allowances list',
137
+ },
138
+ proctored: {
139
+ id: 'instruct.specialExams.proctored',
140
+ defaultMessage: 'Proctored',
141
+ description: 'Label for whether the special exam is proctored in the list of special exams',
142
+ },
143
+ timed: {
144
+ id: 'instruct.specialExams.timed',
145
+ defaultMessage: 'Timed',
146
+ description: 'Label for whether the special exam is timed in the list of special exams',
147
+ },
148
+ timeMultiplier: {
149
+ id: 'instruct.specialExams.timeMultiplier',
150
+ defaultMessage: 'Time Multiplier',
151
+ description: 'Label for the time multiplier value in the list of special exams',
152
+ },
153
+ additionalTime: {
154
+ id: 'instruct.specialExams.additionalTime',
155
+ defaultMessage: 'Additional Time',
156
+ description: 'Label for the additional time value in the list of special exams',
157
+ },
158
+ reviewPolicy: {
159
+ id: 'instruct.specialExams.reviewPolicy',
160
+ defaultMessage: 'Review Policy Exception',
161
+ description: 'Label for the review policy exception in the list of special exams',
162
+ },
163
+ exceptionPlaceholder: {
164
+ id: 'instruct.specialExams.exceptionPlaceholder',
165
+ defaultMessage: 'Exception',
166
+ description: 'Placeholder for the review policy exception description in add allowance modal',
167
+ },
168
+ timeMultiplierPlaceholder: {
169
+ id: 'instruct.specialExams.timeMultiplierPlaceholder',
170
+ defaultMessage: 'Multiplier (number > 1)',
171
+ description: 'Placeholder for the time multiplier value in add allowance modal',
172
+ },
173
+ edit: {
174
+ id: 'instruct.specialExams.edit',
175
+ defaultMessage: 'Edit',
176
+ description: 'Label for edit action in allowance list',
177
+ },
178
+ delete: {
179
+ id: 'instruct.specialExams.delete',
180
+ defaultMessage: 'Delete',
181
+ description: 'Label for delete action in allowance list',
182
+ },
183
+ deleteAllowance: {
184
+ id: 'instruct.specialExams.deleteAllowance',
185
+ defaultMessage: 'Delete Allowance',
186
+ description: 'Title for delete allowance confirmation modal'
187
+ },
188
+ deleteConfirmation: {
189
+ id: 'instruct.specialExams.deleteConfirmation',
190
+ defaultMessage: 'Delete allowance for {user} for {examName}?',
191
+ description: 'Delete confirmation message'
192
+ },
193
+ deleteError: {
194
+ id: 'instruct.specialExams.deleteError',
195
+ defaultMessage: 'An error occurred while deleting the allowance. Please try again.',
196
+ description: 'Error message displayed when there is an issue deleting an allowance'
197
+ },
198
+ addAdditionalTimeGranted: {
199
+ id: 'instruct.specialExams.addAdditionalTimeGranted',
200
+ defaultMessage: 'Add Time',
201
+ description: 'Label for additional time granted field in add allowance modal',
202
+ },
203
+ addReviewPolicyException: {
204
+ id: 'instruct.specialExams.addReviewPolicyException',
205
+ defaultMessage: 'Add Policy Exception',
206
+ description: 'Label for review policy exception field in add allowance modal',
207
+ },
208
+ addTimeMultiplier: {
209
+ id: 'instruct.specialExams.addTimeMultiplier',
210
+ defaultMessage: 'Add Time Multiplier',
211
+ description: 'Label for time multiplier field in add allowance modal',
212
+ },
213
+ addAllowanceError: {
214
+ id: 'instruct.specialExams.addAllowanceError',
215
+ defaultMessage: 'An error occurred while adding the allowance. Please try again.',
216
+ description: 'Error message displayed when there is an issue adding a new allowance'
217
+ },
218
+ editAllowanceError: {
219
+ id: 'instruct.specialExams.editAllowanceError',
220
+ defaultMessage: 'An error occurred while editing the allowance. Please try again.',
221
+ description: 'Error message displayed when there is an issue editing an allowance'
222
+ }
223
+ });
224
+ export default messages;
225
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/specialExams/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,iBAAiB,EAAE;QACjB,EAAE,EAAE,6BAA6B;QACjC,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,kCAAkC;KAChD;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,oCAAoC;QACxC,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,iCAAiC;KAC/C;IACD,UAAU,EAAE;QACV,EAAE,EAAE,kCAAkC;QACtC,cAAc,EAAE,YAAY;QAC5B,WAAW,EAAE,8BAA8B;KAC5C;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,gCAAgC;QACpC,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,kDAAkD;KAChE;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,gCAAgC;QACpC,cAAc,EAAE,WAAW;QAC3B,WAAW,EAAE,mDAAmD;KACjE;IACD,SAAS,EAAE;QACT,EAAE,EAAE,iCAAiC;QACrC,cAAc,EAAE,YAAY;QAC5B,WAAW,EAAE,oDAAoD;KAClE;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,4BAA4B;QAChC,cAAc,EAAE,MAAM;QACtB,WAAW,EAAE,8CAA8C;KAC5D;IACD,SAAS,EAAE;QACT,EAAE,EAAE,iCAAiC;QACrC,cAAc,EAAE,YAAY;QAC5B,WAAW,EAAE,oDAAoD;KAClE;IACD,WAAW,EAAE;QACX,EAAE,EAAE,mCAAmC;QACvC,cAAc,EAAE,cAAc;QAC9B,WAAW,EAAE,sDAAsD;KACpE;IACD,MAAM,EAAE;QACN,EAAE,EAAE,8BAA8B;QAClC,cAAc,EAAE,QAAQ;QACxB,WAAW,EAAE,gDAAgD;KAC9D;IACD,UAAU,EAAE;QACV,EAAE,EAAE,kCAAkC;QACtC,cAAc,EAAE,wBAAwB;QACxC,WAAW,EAAE,2DAA2D;KACzE;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,oCAAoC;QACxC,cAAc,EAAE,qBAAqB;QACrC,WAAW,EAAE,wDAAwD;KACtE;IACD,aAAa,EAAE;QACb,EAAE,EAAE,qCAAqC;QACzC,cAAc,EAAE,gBAAgB;QAChC,WAAW,EAAE,yEAAyE;KACvF;IACD,KAAK,EAAE;QACL,EAAE,EAAE,6BAA6B;QACjC,cAAc,EAAE,OAAO;QACvB,WAAW,EAAE,4CAA4C;KAC1D;IACD,aAAa,EAAE;QACb,EAAE,EAAE,qCAAqC;QACzC,cAAc,EAAE,gBAAgB;QAChC,WAAW,EAAE,qDAAqD;KACnE;IACD,cAAc,EAAE;QACd,EAAE,EAAE,sCAAsC;QAC1C,cAAc,EAAE,iBAAiB;QACjC,WAAW,EAAE,sDAAsD;KACpE;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,oCAAoC;QACxC,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,6CAA6C;KAC3D;IACD,MAAM,EAAE;QACN,EAAE,EAAE,8BAA8B;QAClC,cAAc,EAAE,QAAQ;QACxB,WAAW,EAAE,qDAAqD;KACnE;IACD,eAAe,EAAE;QACf,EAAE,EAAE,uCAAuC;QAC3C,cAAc,EAAE,kBAAkB;QAClC,WAAW,EAAE,oDAAoD;KAClE;IACD,eAAe,EAAE;QACf,EAAE,EAAE,uCAAuC;QAC3C,cAAc,EAAE,kBAAkB;QAClC,WAAW,EAAE,gEAAgE;KAC9E;IACD,0BAA0B,EAAE;QAC1B,EAAE,EAAE,kDAAkD;QACtD,cAAc,EAAE,8DAA8D;QAC9E,WAAW,EAAE,sEAAsE;KACpF;IACD,cAAc,EAAE;QACd,EAAE,EAAE,sCAAsC;QAC1C,cAAc,EAAE,kBAAkB;QAClC,WAAW,EAAE,gEAAgE;KAC9E;IACD,WAAW,EAAE;QACX,EAAE,EAAE,mCAAmC;QACvC,cAAc,EAAE,gBAAgB;QAChC,WAAW,EAAE,4DAA4D;KAC1E;IACD,mBAAmB,EAAE;QACnB,EAAE,EAAE,2CAA2C;QAC/C,cAAc,EAAE,uBAAuB;QACvC,WAAW,EAAE,qEAAqE;KACnF;IACD,OAAO,EAAE;QACP,EAAE,EAAE,+BAA+B;QACnC,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,gEAAgE;KAC9E;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,0CAA0C;QAC9C,cAAc,EAAE,gBAAgB;QAChC,WAAW,EAAE,sEAAsE;KACpF;IACD,OAAO,EAAE;QACP,EAAE,EAAE,+BAA+B;QACnC,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,kDAAkD;KAChE;IACD,SAAS,EAAE;QACT,EAAE,EAAE,iCAAiC;QACrC,cAAc,EAAE,WAAW;QAC3B,WAAW,EAAE,8EAA8E;KAC5F;IACD,KAAK,EAAE;QACL,EAAE,EAAE,6BAA6B;QACjC,cAAc,EAAE,OAAO;QACvB,WAAW,EAAE,0EAA0E;KACxF;IACD,cAAc,EAAE;QACd,EAAE,EAAE,sCAAsC;QAC1C,cAAc,EAAE,iBAAiB;QACjC,WAAW,EAAE,kEAAkE;KAChF;IACD,cAAc,EAAE;QACd,EAAE,EAAE,sCAAsC;QAC1C,cAAc,EAAE,iBAAiB;QACjC,WAAW,EAAE,kEAAkE;KAChF;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,oCAAoC;QACxC,cAAc,EAAE,yBAAyB;QACzC,WAAW,EAAE,oEAAoE;KAClF;IACD,oBAAoB,EAAE;QACpB,EAAE,EAAE,4CAA4C;QAChD,cAAc,EAAE,WAAW;QAC3B,WAAW,EAAE,gFAAgF;KAC9F;IACD,yBAAyB,EAAE;QACzB,EAAE,EAAE,iDAAiD;QACrD,cAAc,EAAE,yBAAyB;QACzC,WAAW,EAAE,kEAAkE;KAChF;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,4BAA4B;QAChC,cAAc,EAAE,MAAM;QACtB,WAAW,EAAE,yCAAyC;KACvD;IACD,MAAM,EAAE;QACN,EAAE,EAAE,8BAA8B;QAClC,cAAc,EAAE,QAAQ;QACxB,WAAW,EAAE,2CAA2C;KACzD;IACD,eAAe,EAAE;QACf,EAAE,EAAE,uCAAuC;QAC3C,cAAc,EAAE,kBAAkB;QAClC,WAAW,EAAE,+CAA+C;KAC7D;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,0CAA0C;QAC9C,cAAc,EAAE,6CAA6C;QAC7D,WAAW,EAAE,6BAA6B;KAC3C;IACD,WAAW,EAAE;QACX,EAAE,EAAE,mCAAmC;QACvC,cAAc,EAAE,mEAAmE;QACnF,WAAW,EAAE,sEAAsE;KACpF;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,gDAAgD;QACpD,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,gEAAgE;KAC9E;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,gDAAgD;QACpD,cAAc,EAAE,sBAAsB;QACtC,WAAW,EAAE,gEAAgE;KAC9E;IACD,iBAAiB,EAAE;QACjB,EAAE,EAAE,yCAAyC;QAC7C,cAAc,EAAE,qBAAqB;QACrC,WAAW,EAAE,wDAAwD;KACtE;IACD,iBAAiB,EAAE;QACjB,EAAE,EAAE,yCAAyC;QAC7C,cAAc,EAAE,iEAAiE;QACjF,WAAW,EAAE,uEAAuE;KACrF;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,0CAA0C;QAC9C,cAAc,EAAE,kEAAkE;QAClF,WAAW,EAAE,qEAAqE;KACnF;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n specialExamsTitle: {\n id: 'instruct.specialExams.title',\n defaultMessage: 'Special Exams',\n description: 'Title for the special exams page'\n },\n examAttempts: {\n id: 'instruct.specialExams.examAttempts',\n defaultMessage: 'Exam Attempts',\n description: 'Label for the exam attempts tab'\n },\n allowances: {\n id: 'instruct.specialExams.allowances',\n defaultMessage: 'Allowances',\n description: 'Label for the allowances tab'\n },\n username: {\n id: 'instruct.specialExams.username',\n defaultMessage: 'Username',\n description: 'Column header for username in exam attempts list',\n },\n examName: {\n id: 'instruct.specialExams.examName',\n defaultMessage: 'Exam Name',\n description: 'Column header for exam name in exam attempts list',\n },\n timeLimit: {\n id: 'instruct.specialExams.timeLimit',\n defaultMessage: 'Time Limit',\n description: 'Column header for time limit in exam attempts list',\n },\n type: {\n id: 'instruct.specialExams.type',\n defaultMessage: 'Type',\n description: 'Column header for type in exam attempts list',\n },\n startedAt: {\n id: 'instruct.specialExams.startedAt',\n defaultMessage: 'Started At',\n description: 'Column header for started at in exam attempts list',\n },\n completedAt: {\n id: 'instruct.specialExams.completedAt',\n defaultMessage: 'Completed At',\n description: 'Column header for completed at in exam attempts list',\n },\n status: {\n id: 'instruct.specialExams.status',\n defaultMessage: 'Status',\n description: 'Column header for status in exam attempts list',\n },\n noAttempts: {\n id: 'instruct.specialExams.noAttempts',\n defaultMessage: 'No exam attempts found',\n description: 'Message displayed when there are no exam attempts to show',\n },\n noAllowances: {\n id: 'instruct.specialExams.noAllowances',\n defaultMessage: 'No allowances found',\n description: 'Message displayed when there are no allowances to show',\n },\n editAllowance: {\n id: 'instruct.specialExams.editAllowance',\n defaultMessage: 'Edit Allowance',\n description: 'ARIA label for actions button and modal title when editing an allowance',\n },\n email: {\n id: 'instruct.specialExams.email',\n defaultMessage: 'Email',\n description: 'Column header for email in allowances list',\n },\n allowanceType: {\n id: 'instruct.specialExams.allowanceType',\n defaultMessage: 'Allowance Type',\n description: 'Column header for allowance type in allowances list',\n },\n allowanceValue: {\n id: 'instruct.specialExams.allowanceValue',\n defaultMessage: 'Allowance Value',\n description: 'Column header for allowance value in allowances list',\n },\n addAllowance: {\n id: 'instruct.specialExams.addAllowance',\n defaultMessage: 'Add Allowance',\n description: 'Label for the button to add a new allowance',\n },\n cancel: {\n id: 'instruct.specialExams.cancel',\n defaultMessage: 'Cancel',\n description: 'Label for cancel button in add/edit allowance modal',\n },\n createAllowance: {\n id: 'instruct.specialExams.createAllowance',\n defaultMessage: 'Create Allowance',\n description: 'Label for the create button in add allowance modal',\n },\n specifyLearners: {\n id: 'instruct.specialExams.specifyLearners',\n defaultMessage: 'Specify Learners',\n description: 'Label for the field to specify learners in add allowance modal',\n },\n specifyLearnersPlaceholder: {\n id: 'instruct.specialExams.specifyLearnersPlaceholder',\n defaultMessage: 'Learner email addresses and/or usernames separated by commas',\n description: 'Placeholder for the field to specify learners in add allowance modal',\n },\n selectExamType: {\n id: 'instruct.specialExams.selectExamType',\n defaultMessage: 'Select Exam Type',\n description: 'Label for the field to select exam type in add allowance modal',\n },\n selectExams: {\n id: 'instruct.specialExams.selectExams',\n defaultMessage: 'Select Exam(s)',\n description: 'Label for the field to select exams in add allowance modal',\n },\n selectAllowanceType: {\n id: 'instruct.specialExams.selectAllowanceType',\n defaultMessage: 'Select Allowance Type',\n description: 'Label for the field to select allowance type in add allowance modal',\n },\n addTime: {\n id: 'instruct.specialExams.addTime',\n defaultMessage: 'Add Time',\n description: 'Label for the field to enter time value in add allowance modal',\n },\n addTimePlaceholder: {\n id: 'instruct.specialExams.addTimePlaceholder',\n defaultMessage: 'Time (minutes)',\n description: 'Placeholder for the field to enter time value in add allowance modal',\n },\n actions: {\n id: 'instruct.specialExams.actions',\n defaultMessage: 'Actions',\n description: 'ARIA label for actions button in allowances list',\n },\n proctored: {\n id: 'instruct.specialExams.proctored',\n defaultMessage: 'Proctored',\n description: 'Label for whether the special exam is proctored in the list of special exams',\n },\n timed: {\n id: 'instruct.specialExams.timed',\n defaultMessage: 'Timed',\n description: 'Label for whether the special exam is timed in the list of special exams',\n },\n timeMultiplier: {\n id: 'instruct.specialExams.timeMultiplier',\n defaultMessage: 'Time Multiplier',\n description: 'Label for the time multiplier value in the list of special exams',\n },\n additionalTime: {\n id: 'instruct.specialExams.additionalTime',\n defaultMessage: 'Additional Time',\n description: 'Label for the additional time value in the list of special exams',\n },\n reviewPolicy: {\n id: 'instruct.specialExams.reviewPolicy',\n defaultMessage: 'Review Policy Exception',\n description: 'Label for the review policy exception in the list of special exams',\n },\n exceptionPlaceholder: {\n id: 'instruct.specialExams.exceptionPlaceholder',\n defaultMessage: 'Exception',\n description: 'Placeholder for the review policy exception description in add allowance modal',\n },\n timeMultiplierPlaceholder: {\n id: 'instruct.specialExams.timeMultiplierPlaceholder',\n defaultMessage: 'Multiplier (number > 1)',\n description: 'Placeholder for the time multiplier value in add allowance modal',\n },\n edit: {\n id: 'instruct.specialExams.edit',\n defaultMessage: 'Edit',\n description: 'Label for edit action in allowance list',\n },\n delete: {\n id: 'instruct.specialExams.delete',\n defaultMessage: 'Delete',\n description: 'Label for delete action in allowance list',\n },\n deleteAllowance: {\n id: 'instruct.specialExams.deleteAllowance',\n defaultMessage: 'Delete Allowance',\n description: 'Title for delete allowance confirmation modal'\n },\n deleteConfirmation: {\n id: 'instruct.specialExams.deleteConfirmation',\n defaultMessage: 'Delete allowance for {user} for {examName}?',\n description: 'Delete confirmation message'\n },\n deleteError: {\n id: 'instruct.specialExams.deleteError',\n defaultMessage: 'An error occurred while deleting the allowance. Please try again.',\n description: 'Error message displayed when there is an issue deleting an allowance'\n },\n addAdditionalTimeGranted: {\n id: 'instruct.specialExams.addAdditionalTimeGranted',\n defaultMessage: 'Add Time',\n description: 'Label for additional time granted field in add allowance modal',\n },\n addReviewPolicyException: {\n id: 'instruct.specialExams.addReviewPolicyException',\n defaultMessage: 'Add Policy Exception',\n description: 'Label for review policy exception field in add allowance modal',\n },\n addTimeMultiplier: {\n id: 'instruct.specialExams.addTimeMultiplier',\n defaultMessage: 'Add Time Multiplier',\n description: 'Label for time multiplier field in add allowance modal',\n },\n addAllowanceError: {\n id: 'instruct.specialExams.addAllowanceError',\n defaultMessage: 'An error occurred while adding the allowance. Please try again.',\n description: 'Error message displayed when there is an issue adding a new allowance'\n },\n editAllowanceError: {\n id: 'instruct.specialExams.editAllowanceError',\n defaultMessage: 'An error occurred while editing the allowance. Please try again.',\n description: 'Error message displayed when there is an issue editing an allowance'\n }\n});\n\nexport default messages;\n"]}