@openedx/frontend-app-instructor-dashboard 1.0.0-alpha.3 → 1.0.0-alpha.31
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.
- package/dist/Main.d.ts +1 -1
- package/dist/Main.js +4 -13
- package/dist/Main.js.map +1 -1
- package/dist/app.js +0 -6
- package/dist/app.js.map +1 -1
- package/dist/certificates/CertificatesPage.d.ts +1 -0
- package/dist/certificates/CertificatesPage.js +214 -2
- package/dist/certificates/CertificatesPage.js.map +1 -1
- package/dist/certificates/CertificatesPage.scss +90 -0
- package/dist/certificates/components/CertificateTable.d.ts +14 -0
- package/dist/certificates/components/CertificateTable.js +88 -0
- package/dist/certificates/components/CertificateTable.js.map +1 -0
- package/dist/certificates/components/CertificatesPageHeader.d.ts +7 -0
- package/dist/certificates/components/CertificatesPageHeader.js +11 -0
- package/dist/certificates/components/CertificatesPageHeader.js.map +1 -0
- package/dist/certificates/components/CertificatesToolbar.d.ts +11 -0
- package/dist/certificates/components/CertificatesToolbar.js +32 -0
- package/dist/certificates/components/CertificatesToolbar.js.map +1 -0
- package/dist/certificates/components/DisableCertificatesModal.d.ts +9 -0
- package/dist/certificates/components/DisableCertificatesModal.js +16 -0
- package/dist/certificates/components/DisableCertificatesModal.js.map +1 -0
- package/dist/certificates/components/FilterDropdown.d.ts +8 -0
- package/dist/certificates/components/FilterDropdown.js +50 -0
- package/dist/certificates/components/FilterDropdown.js.map +1 -0
- package/dist/certificates/components/GenerationHistoryTable.d.ts +11 -0
- package/dist/certificates/components/GenerationHistoryTable.js +25 -0
- package/dist/certificates/components/GenerationHistoryTable.js.map +1 -0
- package/dist/certificates/components/GrantExceptionsModal.d.ts +8 -0
- package/dist/certificates/components/GrantExceptionsModal.js +10 -0
- package/dist/certificates/components/GrantExceptionsModal.js.map +1 -0
- package/dist/certificates/components/InvalidateCertificateModal.d.ts +8 -0
- package/dist/certificates/components/InvalidateCertificateModal.js +10 -0
- package/dist/certificates/components/InvalidateCertificateModal.js.map +1 -0
- package/dist/certificates/components/IssuedCertificatesTab.d.ts +18 -0
- package/dist/certificates/components/IssuedCertificatesTab.js +6 -0
- package/dist/certificates/components/IssuedCertificatesTab.js.map +1 -0
- package/dist/certificates/components/LearnerActionModal.d.ts +16 -0
- package/dist/certificates/components/LearnerActionModal.js +27 -0
- package/dist/certificates/components/LearnerActionModal.js.map +1 -0
- package/dist/certificates/components/RemoveExceptionModal.d.ts +9 -0
- package/dist/certificates/components/RemoveExceptionModal.js +10 -0
- package/dist/certificates/components/RemoveExceptionModal.js.map +1 -0
- package/dist/certificates/components/RemoveInvalidationModal.d.ts +9 -0
- package/dist/certificates/components/RemoveInvalidationModal.js +10 -0
- package/dist/certificates/components/RemoveInvalidationModal.js.map +1 -0
- package/dist/certificates/constants.d.ts +15 -0
- package/dist/certificates/constants.js +16 -0
- package/dist/certificates/constants.js.map +1 -0
- package/dist/certificates/data/api.d.ts +23 -0
- package/dist/certificates/data/api.js +115 -0
- package/dist/certificates/data/api.js.map +1 -0
- package/dist/certificates/data/apiHook.d.ts +50 -0
- package/dist/certificates/data/apiHook.js +118 -0
- package/dist/certificates/data/apiHook.js.map +1 -0
- package/dist/certificates/data/queryKeys.d.ts +9 -0
- package/dist/certificates/data/queryKeys.js +9 -0
- package/dist/certificates/data/queryKeys.js.map +1 -0
- package/dist/certificates/messages.d.ts +343 -0
- package/dist/certificates/messages.js +345 -0
- package/dist/certificates/messages.js.map +1 -0
- package/dist/certificates/types.d.ts +66 -0
- package/dist/certificates/types.js +26 -0
- package/dist/certificates/types.js.map +1 -0
- package/dist/certificates/utils/errorHandling.d.ts +10 -0
- package/dist/certificates/utils/errorHandling.js +3 -0
- package/dist/certificates/utils/errorHandling.js.map +1 -0
- package/dist/certificates/utils/filterUtils.d.ts +4 -0
- package/dist/certificates/utils/filterUtils.js +31 -0
- package/dist/certificates/utils/filterUtils.js.map +1 -0
- package/dist/certificates/utils/index.d.ts +2 -0
- package/dist/certificates/utils/index.js +2 -0
- package/dist/certificates/utils/index.js.map +1 -0
- package/dist/components/ActionCard.d.ts +2 -2
- package/dist/components/ActionCard.js +1 -1
- package/dist/components/ActionCard.js.map +1 -1
- package/dist/components/CodeEditor.d.ts +5 -0
- package/dist/components/CodeEditor.js +34 -0
- package/dist/components/CodeEditor.js.map +1 -0
- package/dist/components/PendingTasks.d.ts +3 -1
- package/dist/components/PendingTasks.js +3 -2
- package/dist/components/PendingTasks.js.map +1 -1
- package/dist/components/SpecifyLearnerField.d.ts +4 -1
- package/dist/components/SpecifyLearnerField.js +33 -13
- package/dist/components/SpecifyLearnerField.js.map +1 -1
- package/dist/components/SpecifyProblemField.d.ts +13 -0
- package/dist/components/SpecifyProblemField.js +52 -0
- package/dist/components/SpecifyProblemField.js.map +1 -0
- package/dist/components/UsernameFilter.d.ts +7 -0
- package/dist/components/UsernameFilter.js +19 -0
- package/dist/components/UsernameFilter.js.map +1 -0
- package/dist/components/messages.d.ts +40 -0
- package/dist/components/messages.js +40 -0
- package/dist/components/messages.js.map +1 -1
- package/dist/courseInfo/types.d.ts +5 -0
- package/dist/courseInfo/types.js.map +1 -1
- package/dist/courseTeam/CourseTeamPage.js +25 -2
- package/dist/courseTeam/CourseTeamPage.js.map +1 -1
- package/dist/courseTeam/components/AddTeamMemberModal.d.ts +6 -0
- package/dist/courseTeam/components/AddTeamMemberModal.js +61 -0
- package/dist/courseTeam/components/AddTeamMemberModal.js.map +1 -0
- package/dist/courseTeam/components/EditTeamMemberModal.d.ts +8 -0
- package/dist/courseTeam/components/EditTeamMemberModal.js +102 -0
- package/dist/courseTeam/components/EditTeamMemberModal.js.map +1 -0
- package/dist/courseTeam/components/MembersContent.d.ts +6 -0
- package/dist/courseTeam/components/MembersContent.js +48 -0
- package/dist/courseTeam/components/MembersContent.js.map +1 -0
- package/dist/courseTeam/components/RoleFilter.d.ts +7 -0
- package/dist/courseTeam/components/RoleFilter.js +22 -0
- package/dist/courseTeam/components/RoleFilter.js.map +1 -0
- package/dist/courseTeam/components/RolesContent.d.ts +3 -0
- package/dist/courseTeam/components/RolesContent.js +25 -0
- package/dist/courseTeam/components/RolesContent.js.map +1 -0
- package/dist/courseTeam/constants.d.ts +3 -0
- package/dist/courseTeam/constants.js +4 -0
- package/dist/courseTeam/constants.js.map +1 -0
- package/dist/courseTeam/data/api.d.ts +6 -0
- package/dist/courseTeam/data/api.js +38 -0
- package/dist/courseTeam/data/api.js.map +1 -0
- package/dist/courseTeam/data/apiHook.d.ts +8 -0
- package/dist/courseTeam/data/apiHook.js +32 -0
- package/dist/courseTeam/data/apiHook.js.map +1 -0
- package/dist/courseTeam/data/queryKeys.d.ts +7 -0
- package/dist/courseTeam/data/queryKeys.js +14 -0
- package/dist/courseTeam/data/queryKeys.js.map +1 -0
- package/dist/courseTeam/messages.d.ts +258 -0
- package/dist/courseTeam/messages.js +260 -0
- package/dist/courseTeam/messages.js.map +1 -0
- package/dist/courseTeam/types.d.ts +29 -0
- package/dist/courseTeam/types.js +3 -0
- package/dist/courseTeam/types.js.map +1 -0
- package/dist/data/api.d.ts +2 -1
- package/dist/data/api.js +9 -3
- package/dist/data/api.js.map +1 -1
- package/dist/data/apiHook.d.ts +1 -0
- package/dist/data/apiHook.js +10 -2
- package/dist/data/apiHook.js.map +1 -1
- package/dist/data/queryKeys.d.ts +4 -0
- package/dist/data/queryKeys.js +4 -0
- package/dist/data/queryKeys.js.map +1 -1
- package/dist/dateExtensions/components/AddExtensionModal.d.ts +1 -1
- package/dist/dateExtensions/components/AddExtensionModal.js +6 -7
- package/dist/dateExtensions/components/AddExtensionModal.js.map +1 -1
- package/dist/dateExtensions/components/DateExtensionsList.js +3 -14
- package/dist/dateExtensions/components/DateExtensionsList.js.map +1 -1
- package/dist/dateExtensions/data/apiHook.d.ts +2 -2
- package/dist/dateExtensions/data/apiHook.js +4 -4
- package/dist/dateExtensions/data/apiHook.js.map +1 -1
- package/dist/dateExtensions/messages.d.ts +0 -5
- package/dist/dateExtensions/messages.js +1 -6
- package/dist/dateExtensions/messages.js.map +1 -1
- package/dist/enrollments/EnrollmentsPage.js +41 -7
- package/dist/enrollments/EnrollmentsPage.js.map +1 -1
- package/dist/enrollments/components/AddBetaTestersModal.d.ts +6 -0
- package/dist/enrollments/components/AddBetaTestersModal.js +69 -0
- package/dist/enrollments/components/AddBetaTestersModal.js.map +1 -0
- package/dist/enrollments/components/EnrollLearnersModal.d.ts +6 -0
- package/dist/enrollments/components/EnrollLearnersModal.js +53 -0
- package/dist/enrollments/components/EnrollLearnersModal.js.map +1 -0
- package/dist/enrollments/components/EnrollmentStatusModal.js +3 -3
- package/dist/enrollments/components/EnrollmentStatusModal.js.map +1 -1
- package/dist/enrollments/components/EnrollmentsList.d.ts +3 -2
- package/dist/enrollments/components/EnrollmentsList.js +13 -14
- package/dist/enrollments/components/EnrollmentsList.js.map +1 -1
- package/dist/enrollments/components/UnenrollModal.d.ts +1 -1
- package/dist/enrollments/components/UnenrollModal.js +29 -3
- package/dist/enrollments/components/UnenrollModal.js.map +1 -1
- package/dist/enrollments/components/UpdateBetaTesterModal.d.ts +8 -0
- package/dist/enrollments/components/UpdateBetaTesterModal.js +52 -0
- package/dist/enrollments/components/UpdateBetaTesterModal.js.map +1 -0
- package/dist/enrollments/data/api.d.ts +3 -1
- package/dist/enrollments/data/api.js +11 -1
- package/dist/enrollments/data/api.js.map +1 -1
- package/dist/enrollments/data/apiHook.d.ts +5 -3
- package/dist/enrollments/data/apiHook.js +21 -3
- package/dist/enrollments/data/apiHook.js.map +1 -1
- package/dist/enrollments/data/queryKeys.d.ts +1 -1
- package/dist/enrollments/data/queryKeys.js.map +1 -1
- package/dist/enrollments/messages.d.ts +131 -1
- package/dist/enrollments/messages.js +136 -6
- package/dist/enrollments/messages.js.map +1 -1
- package/dist/enrollments/types.d.ts +25 -0
- package/dist/enrollments/types.js.map +1 -1
- package/dist/grading/GradingPage.js +15 -2
- package/dist/grading/GradingPage.js.map +1 -1
- package/dist/grading/components/GradingActionRow.d.ts +2 -0
- package/dist/grading/components/GradingActionRow.js +28 -0
- package/dist/grading/components/GradingActionRow.js.map +1 -0
- package/dist/grading/components/GradingConfigurationModal.d.ts +6 -0
- package/dist/grading/components/GradingConfigurationModal.js +15 -0
- package/dist/grading/components/GradingConfigurationModal.js.map +1 -0
- package/dist/grading/components/GradingLearnerContent.d.ts +7 -0
- package/dist/grading/components/GradingLearnerContent.js +114 -0
- package/dist/grading/components/GradingLearnerContent.js.map +1 -0
- package/dist/grading/data/api.d.ts +6 -0
- package/dist/grading/data/api.js +59 -0
- package/dist/grading/data/api.js.map +1 -0
- package/dist/grading/data/apiHook.d.ts +6 -0
- package/dist/grading/data/apiHook.js +29 -0
- package/dist/grading/data/apiHook.js.map +1 -0
- package/dist/grading/data/queryKeys.d.ts +9 -0
- package/dist/grading/data/queryKeys.js +8 -0
- package/dist/grading/data/queryKeys.js.map +1 -0
- package/dist/grading/messages.d.ts +173 -0
- package/dist/grading/messages.js +175 -0
- package/dist/grading/messages.js.map +1 -0
- package/dist/grading/types.d.ts +11 -0
- package/dist/grading/types.js +2 -0
- package/dist/grading/types.js.map +1 -0
- package/dist/hooks/useDebouncedFilter.d.ts +1 -0
- package/dist/hooks/useDebouncedFilter.js +5 -0
- package/dist/hooks/useDebouncedFilter.js.map +1 -1
- package/dist/instructorNav/InstructorNav.js +6 -1
- package/dist/instructorNav/InstructorNav.js.map +1 -1
- package/dist/routes.d.ts +1 -1
- package/dist/routes.js +2 -2
- package/dist/routes.js.map +1 -1
- package/dist/specialExams/SpecialExamsPage.js +14 -2
- package/dist/specialExams/SpecialExamsPage.js.map +1 -1
- package/dist/specialExams/components/AddAllowanceModal.d.ts +6 -0
- package/dist/specialExams/components/AddAllowanceModal.js +84 -0
- package/dist/specialExams/components/AddAllowanceModal.js.map +1 -0
- package/dist/specialExams/components/Allowances.d.ts +2 -0
- package/dist/specialExams/components/Allowances.js +32 -0
- package/dist/specialExams/components/Allowances.js.map +1 -0
- package/dist/specialExams/components/AllowancesList.d.ts +8 -0
- package/dist/specialExams/components/AllowancesList.js +58 -0
- package/dist/specialExams/components/AllowancesList.js.map +1 -0
- package/dist/specialExams/components/AttemptsList.d.ts +3 -0
- package/dist/specialExams/components/AttemptsList.js +45 -0
- package/dist/specialExams/components/AttemptsList.js.map +1 -0
- package/dist/specialExams/components/DeleteAllowanceModal.d.ts +8 -0
- package/dist/specialExams/components/DeleteAllowanceModal.js +29 -0
- package/dist/specialExams/components/DeleteAllowanceModal.js.map +1 -0
- package/dist/specialExams/components/EditAllowanceModal.d.ts +8 -0
- package/dist/specialExams/components/EditAllowanceModal.js +62 -0
- package/dist/specialExams/components/EditAllowanceModal.js.map +1 -0
- package/dist/specialExams/constants.d.ts +43 -0
- package/dist/specialExams/constants.js +19 -0
- package/dist/specialExams/constants.js.map +1 -0
- package/dist/specialExams/data/api.d.ts +7 -0
- package/dist/specialExams/data/api.js +49 -0
- package/dist/specialExams/data/api.js.map +1 -0
- package/dist/specialExams/data/apiHook.d.ts +6 -0
- package/dist/specialExams/data/apiHook.js +37 -0
- package/dist/specialExams/data/apiHook.js.map +1 -0
- package/dist/specialExams/data/queryKeys.d.ts +8 -0
- package/dist/specialExams/data/queryKeys.js +9 -0
- package/dist/specialExams/data/queryKeys.js.map +1 -0
- package/dist/specialExams/messages.d.ts +223 -0
- package/dist/specialExams/messages.js +225 -0
- package/dist/specialExams/messages.js.map +1 -0
- package/dist/specialExams/types.d.ts +64 -0
- package/dist/specialExams/types.js +2 -0
- package/dist/specialExams/types.js.map +1 -0
- package/dist/style.scss +16 -0
- package/dist/testUtils.js +2 -2
- package/dist/testUtils.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/utils/formatters.d.ts +5 -0
- package/dist/utils/formatters.js +10 -0
- package/dist/utils/formatters.js.map +1 -1
- package/package.json +4 -5
- package/dist/app.scss +0 -10
- package/dist/providers/QueryProvider.d.ts +0 -6
- package/dist/providers/QueryProvider.js +0 -16
- package/dist/providers/QueryProvider.js.map +0 -1
- package/dist/providers.d.ts +0 -3
- package/dist/providers.js +0 -8
- package/dist/providers.js.map +0 -1
|
@@ -0,0 +1,115 @@
|
|
|
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 getIssuedCertificates = (courseId, params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
13
|
+
const { data } = yield getAuthenticatedHttpClient().get(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/issued`, {
|
|
14
|
+
params: {
|
|
15
|
+
page: params.page + 1,
|
|
16
|
+
page_size: params.pageSize,
|
|
17
|
+
filter: params.filter,
|
|
18
|
+
search: params.search,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
return camelCaseObject(data);
|
|
22
|
+
});
|
|
23
|
+
export const getInstructorTasks = (courseId, params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
|
+
const { data } = yield getAuthenticatedHttpClient().get(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/instructor_tasks`, {
|
|
25
|
+
params: {
|
|
26
|
+
page: params.page + 1,
|
|
27
|
+
page_size: params.pageSize,
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
return camelCaseObject(data);
|
|
31
|
+
});
|
|
32
|
+
export const grantBulkExceptions = (courseId, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
33
|
+
const { data } = yield getAuthenticatedHttpClient().post(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/exceptions`, {
|
|
34
|
+
learners: request.learners,
|
|
35
|
+
notes: request.notes,
|
|
36
|
+
});
|
|
37
|
+
return camelCaseObject(data);
|
|
38
|
+
});
|
|
39
|
+
export const invalidateCertificate = (courseId, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
40
|
+
const { data } = yield getAuthenticatedHttpClient().post(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/invalidations`, {
|
|
41
|
+
learners: request.learners,
|
|
42
|
+
notes: request.notes,
|
|
43
|
+
});
|
|
44
|
+
return camelCaseObject(data);
|
|
45
|
+
});
|
|
46
|
+
export const removeException = (courseId, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
47
|
+
yield getAuthenticatedHttpClient().delete(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/exceptions`, {
|
|
48
|
+
data: {
|
|
49
|
+
username: request.username,
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
export const removeInvalidation = (courseId, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
+
const httpClient = getAuthenticatedHttpClient();
|
|
55
|
+
const url = `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/invalidations`;
|
|
56
|
+
const payload = {
|
|
57
|
+
username: request.username,
|
|
58
|
+
};
|
|
59
|
+
yield httpClient.delete(url, {
|
|
60
|
+
data: payload,
|
|
61
|
+
headers: {
|
|
62
|
+
'Content-Type': 'application/json',
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
export const toggleCertificateGeneration = (courseId, enable) => __awaiter(void 0, void 0, void 0, function* () {
|
|
67
|
+
yield getAuthenticatedHttpClient().post(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/toggle_generation`, {
|
|
68
|
+
enabled: enable,
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
export const regenerateCertificates = (courseId, filter) => __awaiter(void 0, void 0, void 0, function* () {
|
|
72
|
+
const body = {};
|
|
73
|
+
// Map filter to backend parameters (must match backend filter logic)
|
|
74
|
+
switch (filter) {
|
|
75
|
+
case 'all':
|
|
76
|
+
body.student_set = 'all';
|
|
77
|
+
break;
|
|
78
|
+
case 'received':
|
|
79
|
+
body.statuses = ['downloadable'];
|
|
80
|
+
break;
|
|
81
|
+
case 'not_received':
|
|
82
|
+
// Match backend filter: notpassing or unavailable
|
|
83
|
+
body.statuses = ['notpassing', 'unavailable'];
|
|
84
|
+
break;
|
|
85
|
+
case 'audit_passing':
|
|
86
|
+
body.statuses = ['audit_passing'];
|
|
87
|
+
break;
|
|
88
|
+
case 'audit_not_passing':
|
|
89
|
+
body.statuses = ['audit_notpassing'];
|
|
90
|
+
break;
|
|
91
|
+
case 'error':
|
|
92
|
+
body.statuses = ['error'];
|
|
93
|
+
break;
|
|
94
|
+
case 'granted_exceptions':
|
|
95
|
+
body.student_set = 'allowlisted';
|
|
96
|
+
break;
|
|
97
|
+
case 'invalidated':
|
|
98
|
+
// Invalidated certificates have unavailable status
|
|
99
|
+
body.statuses = ['unavailable'];
|
|
100
|
+
break;
|
|
101
|
+
default:
|
|
102
|
+
body.student_set = 'all';
|
|
103
|
+
}
|
|
104
|
+
yield getAuthenticatedHttpClient().post(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/regenerate`, body);
|
|
105
|
+
});
|
|
106
|
+
export const getCertificateGenerationHistory = (courseId, params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
107
|
+
const { data } = yield getAuthenticatedHttpClient().get(`${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/generation_history`, {
|
|
108
|
+
params: {
|
|
109
|
+
page: params.page + 1,
|
|
110
|
+
page_size: params.pageSize,
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
return camelCaseObject(data);
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/certificates/data/api.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCaseObject, getAuthenticatedHttpClient } from '@openedx/frontend-base';\nimport { getApiBaseUrl } from '@src/data/api';\nimport type { DataList, PaginationParams } from '@src/types';\nimport type {\n CertificateData,\n CertificateGenerationHistory,\n CertificateQueryParams,\n GrantExceptionRequest,\n InstructorTask,\n InvalidateCertificateRequest,\n RemoveExceptionRequest,\n RemoveInvalidationRequest,\n} from '@src/certificates/types';\n\nexport const getIssuedCertificates = async (\n courseId: string,\n params: CertificateQueryParams,\n): Promise<DataList<CertificateData>> => {\n const { data } = await getAuthenticatedHttpClient().get(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/issued`,\n {\n params: {\n page: params.page + 1,\n page_size: params.pageSize,\n filter: params.filter,\n search: params.search,\n },\n },\n );\n return camelCaseObject(data);\n};\n\nexport const getInstructorTasks = async (\n courseId: string,\n params: PaginationParams,\n): Promise<DataList<InstructorTask>> => {\n const { data } = await getAuthenticatedHttpClient().get(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/instructor_tasks`,\n {\n params: {\n page: params.page + 1,\n page_size: params.pageSize,\n },\n },\n );\n return camelCaseObject(data);\n};\n\nexport const grantBulkExceptions = async (\n courseId: string,\n request: GrantExceptionRequest,\n): Promise<{ success: string[], errors: { learner: string, message: string }[] }> => {\n const { data } = await getAuthenticatedHttpClient().post(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/exceptions`,\n {\n learners: request.learners,\n notes: request.notes,\n },\n );\n return camelCaseObject(data);\n};\n\nexport const invalidateCertificate = async (\n courseId: string,\n request: InvalidateCertificateRequest,\n): Promise<{ success: string[], errors: { learner: string, message: string }[] }> => {\n const { data } = await getAuthenticatedHttpClient().post(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/invalidations`,\n {\n learners: request.learners,\n notes: request.notes,\n },\n );\n return camelCaseObject(data);\n};\n\nexport const removeException = async (\n courseId: string,\n request: RemoveExceptionRequest,\n): Promise<void> => {\n await getAuthenticatedHttpClient().delete(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/exceptions`,\n {\n data: {\n username: request.username,\n },\n },\n );\n};\n\nexport const removeInvalidation = async (\n courseId: string,\n request: RemoveInvalidationRequest,\n): Promise<void> => {\n const httpClient = getAuthenticatedHttpClient();\n const url = `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/invalidations`;\n const payload = {\n username: request.username,\n };\n\n await httpClient.delete(url, {\n data: payload,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n};\n\nexport const toggleCertificateGeneration = async (\n courseId: string,\n enable: boolean,\n): Promise<void> => {\n await getAuthenticatedHttpClient().post(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/toggle_generation`,\n {\n enabled: enable,\n },\n );\n};\n\nexport const regenerateCertificates = async (\n courseId: string,\n filter: string,\n): Promise<void> => {\n const body: { statuses?: string[], student_set?: string } = {};\n\n // Map filter to backend parameters (must match backend filter logic)\n switch (filter) {\n case 'all':\n body.student_set = 'all';\n break;\n case 'received':\n body.statuses = ['downloadable'];\n break;\n case 'not_received':\n // Match backend filter: notpassing or unavailable\n body.statuses = ['notpassing', 'unavailable'];\n break;\n case 'audit_passing':\n body.statuses = ['audit_passing'];\n break;\n case 'audit_not_passing':\n body.statuses = ['audit_notpassing'];\n break;\n case 'error':\n body.statuses = ['error'];\n break;\n case 'granted_exceptions':\n body.student_set = 'allowlisted';\n break;\n case 'invalidated':\n // Invalidated certificates have unavailable status\n body.statuses = ['unavailable'];\n break;\n default:\n body.student_set = 'all';\n }\n\n await getAuthenticatedHttpClient().post(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/regenerate`,\n body,\n );\n};\n\nexport const getCertificateGenerationHistory = async (\n courseId: string,\n params: PaginationParams,\n): Promise<DataList<CertificateGenerationHistory>> => {\n const { data } = await getAuthenticatedHttpClient().get(\n `${getApiBaseUrl()}/api/instructor/v2/courses/${courseId}/certificates/generation_history`,\n {\n params: {\n page: params.page + 1,\n page_size: params.pageSize,\n },\n },\n );\n return camelCaseObject(data);\n};\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { PaginationParams } from '../../types';
|
|
2
|
+
import type { CertificateQueryParams, GrantExceptionRequest, InvalidateCertificateRequest, RemoveExceptionRequest, RemoveInvalidationRequest } from '../../certificates/types';
|
|
3
|
+
/**
|
|
4
|
+
* Hook to fetch issued certificates
|
|
5
|
+
*/
|
|
6
|
+
export declare const useIssuedCertificates: (courseId: string, params: CertificateQueryParams) => import("@tanstack/react-query").UseQueryResult<import("../../types").DataList<import("../../certificates/types").CertificateData>, Error>;
|
|
7
|
+
/**
|
|
8
|
+
* Hook to fetch instructor tasks
|
|
9
|
+
*/
|
|
10
|
+
export declare const useInstructorTasks: (courseId: string, params: PaginationParams) => import("@tanstack/react-query").UseQueryResult<import("../../types").DataList<import("../../certificates/types").InstructorTask>, Error>;
|
|
11
|
+
/**
|
|
12
|
+
* Hook to fetch certificate generation history
|
|
13
|
+
*/
|
|
14
|
+
export declare const useCertificateGenerationHistory: (courseId: string, params: PaginationParams) => import("@tanstack/react-query").UseQueryResult<import("../../types").DataList<import("../../certificates/types").CertificateGenerationHistory>, Error>;
|
|
15
|
+
/**
|
|
16
|
+
* Hook to grant bulk certificate exceptions
|
|
17
|
+
*/
|
|
18
|
+
export declare const useGrantBulkExceptions: (courseId: string) => import("@tanstack/react-query").UseMutationResult<{
|
|
19
|
+
success: string[];
|
|
20
|
+
errors: {
|
|
21
|
+
learner: string;
|
|
22
|
+
message: string;
|
|
23
|
+
}[];
|
|
24
|
+
}, Error, GrantExceptionRequest, unknown>;
|
|
25
|
+
/**
|
|
26
|
+
* Hook to invalidate certificate
|
|
27
|
+
*/
|
|
28
|
+
export declare const useInvalidateCertificate: (courseId: string) => import("@tanstack/react-query").UseMutationResult<{
|
|
29
|
+
success: string[];
|
|
30
|
+
errors: {
|
|
31
|
+
learner: string;
|
|
32
|
+
message: string;
|
|
33
|
+
}[];
|
|
34
|
+
}, Error, InvalidateCertificateRequest, unknown>;
|
|
35
|
+
/**
|
|
36
|
+
* Hook to remove certificate exception
|
|
37
|
+
*/
|
|
38
|
+
export declare const useRemoveException: (courseId: string) => import("@tanstack/react-query").UseMutationResult<void, Error, RemoveExceptionRequest, unknown>;
|
|
39
|
+
/**
|
|
40
|
+
* Hook to remove certificate invalidation
|
|
41
|
+
*/
|
|
42
|
+
export declare const useRemoveInvalidation: (courseId: string) => import("@tanstack/react-query").UseMutationResult<void, Error, RemoveInvalidationRequest, unknown>;
|
|
43
|
+
/**
|
|
44
|
+
* Hook to toggle certificate generation
|
|
45
|
+
*/
|
|
46
|
+
export declare const useToggleCertificateGeneration: (courseId: string) => import("@tanstack/react-query").UseMutationResult<void, Error, boolean, unknown>;
|
|
47
|
+
/**
|
|
48
|
+
* Hook to regenerate certificates
|
|
49
|
+
*/
|
|
50
|
+
export declare const useRegenerateCertificates: (courseId: string) => import("@tanstack/react-query").UseMutationResult<void, Error, string, unknown>;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
|
2
|
+
import { getCertificateGenerationHistory, getInstructorTasks, getIssuedCertificates, grantBulkExceptions, invalidateCertificate, regenerateCertificates, removeException, removeInvalidation, toggleCertificateGeneration, } from '../../certificates/data/api';
|
|
3
|
+
import { certificatesQueryKeys } from '../../certificates/data/queryKeys';
|
|
4
|
+
/**
|
|
5
|
+
* Hook to fetch issued certificates
|
|
6
|
+
*/
|
|
7
|
+
export const useIssuedCertificates = (courseId, params) => useQuery({
|
|
8
|
+
queryKey: certificatesQueryKeys.issued(courseId, params),
|
|
9
|
+
queryFn: () => getIssuedCertificates(courseId, params),
|
|
10
|
+
enabled: !!courseId,
|
|
11
|
+
});
|
|
12
|
+
/**
|
|
13
|
+
* Hook to fetch instructor tasks
|
|
14
|
+
*/
|
|
15
|
+
export const useInstructorTasks = (courseId, params) => useQuery({
|
|
16
|
+
queryKey: certificatesQueryKeys.tasks(courseId, params),
|
|
17
|
+
queryFn: () => getInstructorTasks(courseId, params),
|
|
18
|
+
enabled: !!courseId,
|
|
19
|
+
});
|
|
20
|
+
/**
|
|
21
|
+
* Hook to fetch certificate generation history
|
|
22
|
+
*/
|
|
23
|
+
export const useCertificateGenerationHistory = (courseId, params) => useQuery({
|
|
24
|
+
queryKey: certificatesQueryKeys.generationHistory(courseId, params),
|
|
25
|
+
queryFn: () => getCertificateGenerationHistory(courseId, params),
|
|
26
|
+
enabled: !!courseId,
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* Hook to grant bulk certificate exceptions
|
|
30
|
+
*/
|
|
31
|
+
export const useGrantBulkExceptions = (courseId) => {
|
|
32
|
+
const queryClient = useQueryClient();
|
|
33
|
+
return useMutation({
|
|
34
|
+
mutationFn: (request) => grantBulkExceptions(courseId, request),
|
|
35
|
+
onSuccess: () => {
|
|
36
|
+
queryClient.invalidateQueries({
|
|
37
|
+
queryKey: certificatesQueryKeys.byCourse(courseId),
|
|
38
|
+
exact: false,
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Hook to invalidate certificate
|
|
45
|
+
*/
|
|
46
|
+
export const useInvalidateCertificate = (courseId) => {
|
|
47
|
+
const queryClient = useQueryClient();
|
|
48
|
+
return useMutation({
|
|
49
|
+
mutationFn: (request) => invalidateCertificate(courseId, request),
|
|
50
|
+
onSuccess: () => {
|
|
51
|
+
queryClient.invalidateQueries({
|
|
52
|
+
queryKey: certificatesQueryKeys.byCourse(courseId),
|
|
53
|
+
exact: false,
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Hook to remove certificate exception
|
|
60
|
+
*/
|
|
61
|
+
export const useRemoveException = (courseId) => {
|
|
62
|
+
const queryClient = useQueryClient();
|
|
63
|
+
return useMutation({
|
|
64
|
+
mutationFn: (request) => removeException(courseId, request),
|
|
65
|
+
onSuccess: () => {
|
|
66
|
+
queryClient.invalidateQueries({
|
|
67
|
+
queryKey: certificatesQueryKeys.byCourse(courseId),
|
|
68
|
+
exact: false,
|
|
69
|
+
});
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Hook to remove certificate invalidation
|
|
75
|
+
*/
|
|
76
|
+
export const useRemoveInvalidation = (courseId) => {
|
|
77
|
+
const queryClient = useQueryClient();
|
|
78
|
+
return useMutation({
|
|
79
|
+
mutationFn: (request) => removeInvalidation(courseId, request),
|
|
80
|
+
onSuccess: () => {
|
|
81
|
+
queryClient.invalidateQueries({
|
|
82
|
+
queryKey: certificatesQueryKeys.byCourse(courseId),
|
|
83
|
+
exact: false,
|
|
84
|
+
});
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Hook to toggle certificate generation
|
|
90
|
+
*/
|
|
91
|
+
export const useToggleCertificateGeneration = (courseId) => {
|
|
92
|
+
const queryClient = useQueryClient();
|
|
93
|
+
return useMutation({
|
|
94
|
+
mutationFn: (enable) => toggleCertificateGeneration(courseId, enable),
|
|
95
|
+
onSuccess: () => {
|
|
96
|
+
queryClient.invalidateQueries({
|
|
97
|
+
queryKey: certificatesQueryKeys.byCourse(courseId),
|
|
98
|
+
exact: false,
|
|
99
|
+
});
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Hook to regenerate certificates
|
|
105
|
+
*/
|
|
106
|
+
export const useRegenerateCertificates = (courseId) => {
|
|
107
|
+
const queryClient = useQueryClient();
|
|
108
|
+
return useMutation({
|
|
109
|
+
mutationFn: (filter) => regenerateCertificates(courseId, filter),
|
|
110
|
+
onSuccess: () => {
|
|
111
|
+
queryClient.invalidateQueries({
|
|
112
|
+
queryKey: certificatesQueryKeys.byCourse(courseId),
|
|
113
|
+
exact: false,
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=apiHook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../src/certificates/data/apiHook.ts"],"names":[],"mappings":"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","sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport type { PaginationParams } from '@src/types';\nimport type {\n CertificateQueryParams,\n GrantExceptionRequest,\n InvalidateCertificateRequest,\n RemoveExceptionRequest,\n RemoveInvalidationRequest,\n} from '@src/certificates/types';\nimport {\n getCertificateGenerationHistory,\n getInstructorTasks,\n getIssuedCertificates,\n grantBulkExceptions,\n invalidateCertificate,\n regenerateCertificates,\n removeException,\n removeInvalidation,\n toggleCertificateGeneration,\n} from '@src/certificates/data/api';\nimport { certificatesQueryKeys } from '@src/certificates/data/queryKeys';\n\n/**\n * Hook to fetch issued certificates\n */\nexport const useIssuedCertificates = (courseId: string, params: CertificateQueryParams) =>\n useQuery({\n queryKey: certificatesQueryKeys.issued(courseId, params),\n queryFn: () => getIssuedCertificates(courseId, params),\n enabled: !!courseId,\n });\n\n/**\n * Hook to fetch instructor tasks\n */\nexport const useInstructorTasks = (courseId: string, params: PaginationParams) =>\n useQuery({\n queryKey: certificatesQueryKeys.tasks(courseId, params),\n queryFn: () => getInstructorTasks(courseId, params),\n enabled: !!courseId,\n });\n\n/**\n * Hook to fetch certificate generation history\n */\nexport const useCertificateGenerationHistory = (courseId: string, params: PaginationParams) =>\n useQuery({\n queryKey: certificatesQueryKeys.generationHistory(courseId, params),\n queryFn: () => getCertificateGenerationHistory(courseId, params),\n enabled: !!courseId,\n });\n\n/**\n * Hook to grant bulk certificate exceptions\n */\nexport const useGrantBulkExceptions = (courseId: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (request: GrantExceptionRequest) => grantBulkExceptions(courseId, request),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: certificatesQueryKeys.byCourse(courseId),\n exact: false,\n });\n },\n });\n};\n\n/**\n * Hook to invalidate certificate\n */\nexport const useInvalidateCertificate = (courseId: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (request: InvalidateCertificateRequest) => invalidateCertificate(courseId, request),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: certificatesQueryKeys.byCourse(courseId),\n exact: false,\n });\n },\n });\n};\n\n/**\n * Hook to remove certificate exception\n */\nexport const useRemoveException = (courseId: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (request: RemoveExceptionRequest) => removeException(courseId, request),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: certificatesQueryKeys.byCourse(courseId),\n exact: false,\n });\n },\n });\n};\n\n/**\n * Hook to remove certificate invalidation\n */\nexport const useRemoveInvalidation = (courseId: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (request: RemoveInvalidationRequest) => removeInvalidation(courseId, request),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: certificatesQueryKeys.byCourse(courseId),\n exact: false,\n });\n },\n });\n};\n\n/**\n * Hook to toggle certificate generation\n */\nexport const useToggleCertificateGeneration = (courseId: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (enable: boolean) => toggleCertificateGeneration(courseId, enable),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: certificatesQueryKeys.byCourse(courseId),\n exact: false,\n });\n },\n });\n};\n\n/**\n * Hook to regenerate certificates\n */\nexport const useRegenerateCertificates = (courseId: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (filter: string) => regenerateCertificates(courseId, filter),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: certificatesQueryKeys.byCourse(courseId),\n exact: false,\n });\n },\n });\n};\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PaginationParams } from '../../types';
|
|
2
|
+
import type { CertificateQueryParams } from '../../certificates/types';
|
|
3
|
+
export declare const certificatesQueryKeys: {
|
|
4
|
+
all: readonly ["org.openedx.frontend.app.instructorDashboard", "certificates"];
|
|
5
|
+
byCourse: (courseId: string) => readonly ["org.openedx.frontend.app.instructorDashboard", "certificates", string];
|
|
6
|
+
issued: (courseId: string, params: CertificateQueryParams) => readonly ["org.openedx.frontend.app.instructorDashboard", "certificates", string, "issued", CertificateQueryParams];
|
|
7
|
+
tasks: (courseId: string, params: PaginationParams) => readonly ["org.openedx.frontend.app.instructorDashboard", "certificates", string, "tasks", PaginationParams];
|
|
8
|
+
generationHistory: (courseId: string, params: PaginationParams) => readonly ["org.openedx.frontend.app.instructorDashboard", "certificates", string, "generationHistory", PaginationParams];
|
|
9
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { appId } from '../../constants';
|
|
2
|
+
export const certificatesQueryKeys = {
|
|
3
|
+
all: [appId, 'certificates'],
|
|
4
|
+
byCourse: (courseId) => [...certificatesQueryKeys.all, courseId],
|
|
5
|
+
issued: (courseId, params) => [...certificatesQueryKeys.byCourse(courseId), 'issued', params],
|
|
6
|
+
tasks: (courseId, params) => [...certificatesQueryKeys.byCourse(courseId), 'tasks', params],
|
|
7
|
+
generationHistory: (courseId, params) => [...certificatesQueryKeys.byCourse(courseId), 'generationHistory', params],
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=queryKeys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryKeys.js","sourceRoot":"","sources":["../../../src/certificates/data/queryKeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAIvC,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,MAAM,EAAE,CAAC,QAAgB,EAAE,MAA8B,EAAE,EAAE,CAC3D,CAAC,GAAG,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAU;IAC1E,KAAK,EAAE,CAAC,QAAgB,EAAE,MAAwB,EAAE,EAAE,CACpD,CAAC,GAAG,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAU;IACzE,iBAAiB,EAAE,CAAC,QAAgB,EAAE,MAAwB,EAAE,EAAE,CAChE,CAAC,GAAG,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAU;CACtF,CAAC","sourcesContent":["import { appId } from '@src/constants';\nimport type { PaginationParams } from '@src/types';\nimport type { CertificateQueryParams } from '@src/certificates/types';\n\nexport const certificatesQueryKeys = {\n all: [appId, 'certificates'] as const,\n byCourse: (courseId: string) => [...certificatesQueryKeys.all, courseId] as const,\n issued: (courseId: string, params: CertificateQueryParams) =>\n [...certificatesQueryKeys.byCourse(courseId), 'issued', params] as const,\n tasks: (courseId: string, params: PaginationParams) =>\n [...certificatesQueryKeys.byCourse(courseId), 'tasks', params] as const,\n generationHistory: (courseId: string, params: PaginationParams) =>\n [...certificatesQueryKeys.byCourse(courseId), 'generationHistory', params] as const,\n};\n"]}
|