@openedx/frontend-app-gradebook 2.0.0-alpha.3 → 2.0.0-alpha.5
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/Gradebook.d.ts +7 -0
- package/dist/Gradebook.js +12 -0
- package/dist/Gradebook.js.map +1 -0
- package/dist/Main.d.ts +0 -1
- package/dist/Main.js +7 -9
- package/dist/Main.js.map +1 -1
- package/dist/app.js +2 -0
- package/dist/app.js.map +1 -1
- package/dist/components/BulkManagementHistoryView/ResultsSummary.d.ts +2 -3
- package/dist/components/BulkManagementHistoryView/ResultsSummary.js +6 -3
- package/dist/components/BulkManagementHistoryView/ResultsSummary.js.map +1 -1
- package/dist/components/BulkManagementHistoryView/data/api.d.ts +2 -2
- package/dist/components/BulkManagementHistoryView/data/api.js +4 -2
- package/dist/components/BulkManagementHistoryView/data/api.js.map +1 -1
- package/dist/components/BulkManagementHistoryView/data/apiHook.js +1 -1
- package/dist/components/BulkManagementHistoryView/data/apiHook.js.map +1 -1
- package/dist/components/GradebookFilters/CourseGradeFilter/hooks.js +3 -1
- package/dist/components/GradebookFilters/CourseGradeFilter/hooks.js.map +1 -1
- package/dist/components/GradebookFilters/data/api.d.ts +4 -4
- package/dist/components/GradebookFilters/data/api.js +6 -6
- package/dist/components/GradebookFilters/data/api.js.map +1 -1
- package/dist/components/GradebookFilters/data/apiHook.js +2 -2
- package/dist/components/GradebookFilters/data/apiHook.js.map +1 -1
- package/dist/components/GradebookHeader/index.js +27 -4
- package/dist/components/GradebookHeader/index.js.map +1 -1
- package/dist/components/GradesView/BulkManagementControls/index.js +3 -1
- package/dist/components/GradesView/BulkManagementControls/index.js.map +1 -1
- package/dist/components/GradesView/GradesView.scss +0 -3
- package/dist/components/GradesView/InterventionsReport/index.js +3 -1
- package/dist/components/GradesView/InterventionsReport/index.js.map +1 -1
- package/dist/components/GradesView/data/api.d.ts +2 -1
- package/dist/components/GradesView/data/api.js +2 -2
- package/dist/components/GradesView/data/api.js.map +1 -1
- package/dist/components/GradesView/data/apiHook.js +11 -11
- package/dist/components/GradesView/data/apiHook.js.map +1 -1
- package/dist/components/GradesView/data/hooks.js +10 -4
- package/dist/components/GradesView/data/hooks.js.map +1 -1
- package/dist/components/WithSidebar/WithSidebar.scss +4 -3
- package/dist/containers/GradebookPage/index.js +3 -2
- package/dist/containers/GradebookPage/index.js.map +1 -1
- package/dist/data/api.d.ts +2 -2
- package/dist/data/api.js +4 -4
- package/dist/data/api.js.map +1 -1
- package/dist/data/apiHook.js +4 -4
- package/dist/data/apiHook.js.map +1 -1
- package/dist/data/courseIdContext.d.ts +2 -0
- package/dist/data/courseIdContext.js +6 -0
- package/dist/data/courseIdContext.js.map +1 -0
- package/dist/data/gradebookNavigationContext.d.ts +6 -0
- package/dist/data/gradebookNavigationContext.js +9 -0
- package/dist/data/gradebookNavigationContext.js.map +1 -0
- package/dist/data/services/lms/api.js +17 -13
- package/dist/data/services/lms/api.js.map +1 -1
- package/dist/data/services/lms/urls.d.ts +13 -13
- package/dist/data/services/lms/urls.js +15 -15
- package/dist/data/services/lms/urls.js.map +1 -1
- package/dist/data/services/segment/constants.d.ts +0 -5
- package/dist/data/services/segment/constants.js +0 -2
- package/dist/data/services/segment/constants.js.map +1 -1
- package/dist/data/services/segment/events.d.ts +8 -8
- package/dist/data/services/segment/events.js +10 -10
- package/dist/data/services/segment/events.js.map +1 -1
- package/dist/i18n/utils.d.ts +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/routes.d.ts +3 -1
- package/dist/routes.js +15 -3
- package/dist/routes.js.map +1 -1
- package/dist/slots.d.ts +3 -0
- package/dist/slots.js +22 -0
- package/dist/slots.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/data/services/lms/api.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,IAAI,EAAE,EACX,WAAW,EACX,yBAAyB,GAC1B,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAEjC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;AAE1C;;mFAEmF;AACnF,MAAM,eAAe,GAAG,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/data/services/lms/api.js"],"names":[],"mappings":"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","sourcesContent":["import { StrictDict } from '@src/utils';\n\nimport urls, {\n gradeCsvUrl,\n sectionOverrideHistoryUrl,\n} from './urls';\nimport { pageSize, paramKeys } from './constants';\nimport messages from './messages';\n\nimport * as utils from './utils';\n\nconst { get, post, stringifyUrl } = utils;\n\n/*********************************************************************************\n * GET Actions\n *********************************************************************************/\nconst assignmentTypes = (courseId) => get(urls.getAssignmentTypesUrl(courseId));\nconst cohorts = (courseId) => get(urls.getCohortsUrl(courseId));\nconst roles = (courseId) => get(urls.getRolesUrl(courseId));\nconst tracks = (courseId) => get(urls.getTracksUrl(courseId));\n\n/**\n * fetch.gradebookData(courseId, searchText, cohort, track, options)\n * fetches updated gradebook data based on current filter selections.\n * Raises an error if assignment grade limits are set, but not assignment.\n * @param {string} courseId - course identifier\n * @param {string} searchText - search text filter\n * @param {nunber} cohort - selected cohort filter\n * @param {string} track - selected track filter\n * @param {object} options - additional optional filter values\n * @return {Promise} - get response\n */\nconst gradebookData = (courseId, searchText, cohort, track, options = {}) => {\n if ((options.assignmentGradeMax || options.assignmentGradeMin) && !options.assignment) {\n throw new Error(messages.errors.missingAssignment);\n }\n const queryParams = {\n [paramKeys.pageSize]: pageSize,\n [paramKeys.userContains]: searchText,\n [paramKeys.cohortId]: cohort,\n [paramKeys.enrollmentMode]: track,\n [paramKeys.courseGradeMax]: options.courseGradeMax,\n [paramKeys.courseGradeMin]: options.courseGradeMin,\n [paramKeys.excludedCourseRoles]: options.includeCourseRoleMembers ? null : ['all'],\n [paramKeys.assignment]: options.assignment,\n [paramKeys.assignmentGradeMax]: options.assignmentGradeMax,\n [paramKeys.assignmentGradeMin]: options.assignmentGradeMin,\n };\n return get(stringifyUrl(urls.getGradebookUrl(courseId), queryParams));\n};\n\n/**\n * fetch.gradeBulkOperationHistory(courseId)\n * fetches bulk operation history and raises an error if the operation fails\n * @param {string} courseId - course identifier\n * @return {Promise} - get response\n */\nconst gradeBulkOperationHistory = (courseId) => get(urls.getBulkHistoryUrl(courseId))\n .then(response => response.data)\n .catch(() => Promise.reject(Error(messages.errors.unhandledResponse)));\n\n/**\n * fetch.gradeOverrideHistory(subsectionId, userId)\n * fetches grade override history for a given user on a given subsection\n * @param {string} subsectionId - subsection identifier\n * @param {string} userId - user identifier\n * @return {Promise} - get response\n */\nconst gradeOverrideHistory = (subsectionId, userId) => (\n get(sectionOverrideHistoryUrl(subsectionId, userId))\n);\n\n/*********************************************************************************\n * POST Actions\n *********************************************************************************/\n/**\n * updateGradebookData(courseId, updateData)\n * sends an update message with new grades overrides\n * @param {string} courseId - course identifier\n * @param {object[]} updateData\n * {\n * user_id: <int>,\n * usage_id: <string>\n * grade: {\n * earned_all_override: <int>\n * possible_all_override: <int>\n * earned_graded_override: <int>\n * possible_graded_override: <int>\n * }\n * }\n * @return {Promise} - post response\n */\nconst updateGradebookData = (courseId, updateData) => post(urls.getBulkUpdateUrl(courseId), updateData);\n\n/**\n * uploadGradeCsv(courseId, formData)\n * Posts form data to grade csv url. On success, forwards response data.\n * Reject promise with result on failure.\n * @param {string} courseId - course identifier\n * @param {object} formData - new grade data\n * @return {Promise} - post response\n */\nconst uploadGradeCsv = (courseId, formData) => (\n post(gradeCsvUrl(courseId), formData).then((result) => {\n if (result.status === 200 && !result.data.error_messages.length) {\n return result.data;\n }\n return Promise.reject(result);\n })\n);\n\nexport default StrictDict({\n fetch: StrictDict({\n assignmentTypes,\n cohorts,\n gradebookData,\n gradeBulkOperationHistory,\n gradeOverrideHistory,\n roles,\n tracks,\n }),\n updateGradebookData,\n uploadGradeCsv,\n});\n"]}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
export function getUrlPrefix(): string;
|
|
2
|
-
export function getBulkGradesUrl(): string;
|
|
2
|
+
export function getBulkGradesUrl(courseId: any): string;
|
|
3
3
|
export function getEnrollmentUrl(): string;
|
|
4
4
|
export function getGradesUrl(): string;
|
|
5
|
-
export function getGradebookUrl(): string;
|
|
6
|
-
export function getBulkUpdateUrl(): string;
|
|
7
|
-
export function getInterventionUrl(): string;
|
|
8
|
-
export function getCohortsUrl(): string;
|
|
9
|
-
export function getTracksUrl(): string;
|
|
10
|
-
export function getBulkHistoryUrl(): string;
|
|
11
|
-
export function getAssignmentTypesUrl(): string;
|
|
12
|
-
export function getRolesUrl(): string;
|
|
13
|
-
export function bulkGradesUrlByRow(rowId: string): string;
|
|
14
|
-
export function gradeCsvUrl(options?: {}): string;
|
|
15
|
-
export function interventionExportCsvUrl(options?: {}): string;
|
|
5
|
+
export function getGradebookUrl(courseId: any): string;
|
|
6
|
+
export function getBulkUpdateUrl(courseId: any): string;
|
|
7
|
+
export function getInterventionUrl(courseId: any): string;
|
|
8
|
+
export function getCohortsUrl(courseId: any): string;
|
|
9
|
+
export function getTracksUrl(courseId: any): string;
|
|
10
|
+
export function getBulkHistoryUrl(courseId: any): string;
|
|
11
|
+
export function getAssignmentTypesUrl(courseId: any): string;
|
|
12
|
+
export function getRolesUrl(courseId: any): string;
|
|
13
|
+
export function bulkGradesUrlByRow(courseId: string, rowId: string): string;
|
|
14
|
+
export function gradeCsvUrl(courseId: any, options?: {}): string;
|
|
15
|
+
export function interventionExportCsvUrl(courseId: any, options?: {}): string;
|
|
16
16
|
export function sectionOverrideHistoryUrl(subsectionId: any, userId: any): string;
|
|
17
|
-
export function instructorDashboardUrl(): string;
|
|
17
|
+
export function instructorDashboardUrl(courseId: any): string;
|
|
18
18
|
declare const _default: any;
|
|
19
19
|
export default _default;
|
|
@@ -2,30 +2,30 @@ import { StrictDict } from '../../../utils';
|
|
|
2
2
|
import { historyRecordLimit } from './constants';
|
|
3
3
|
import { filterQuery, stringifyUrl } from './utils';
|
|
4
4
|
import { getSiteConfig } from '@openedx/frontend-base';
|
|
5
|
-
const courseId = window.location.pathname.split('/').filter(Boolean).pop() || '';
|
|
6
5
|
export const getUrlPrefix = () => `${getSiteConfig().lmsBaseUrl}/api/`;
|
|
7
|
-
export const getBulkGradesUrl = () => `${getUrlPrefix()}bulk_grades/course/${courseId}/`;
|
|
6
|
+
export const getBulkGradesUrl = (courseId) => `${getUrlPrefix()}bulk_grades/course/${courseId}/`;
|
|
8
7
|
export const getEnrollmentUrl = () => `${getUrlPrefix()}enrollment/v2/`;
|
|
9
8
|
export const getGradesUrl = () => `${getUrlPrefix()}grades/v1/`;
|
|
10
|
-
export const getGradebookUrl = () => `${getGradesUrl()}gradebook/${courseId}/`;
|
|
11
|
-
export const getBulkUpdateUrl = () => `${getGradebookUrl()}bulk-update`;
|
|
12
|
-
export const getInterventionUrl = () => `${getBulkGradesUrl()}intervention/`;
|
|
13
|
-
export const getCohortsUrl = () => `${getUrlPrefix()}cohorts/v1/courses/${courseId}/cohorts/`;
|
|
14
|
-
export const getTracksUrl = () => `${getEnrollmentUrl()}course/${courseId}?include_expired=1`;
|
|
15
|
-
export const getBulkHistoryUrl = () => `${getBulkUpdateUrl()}history/`;
|
|
16
|
-
export const getAssignmentTypesUrl = () => stringifyUrl(`${getGradebookUrl()}grading-info`, { graded_only: true });
|
|
17
|
-
export const getRolesUrl = () => stringifyUrl(`${getEnrollmentUrl()}roles/`, { courseId });
|
|
9
|
+
export const getGradebookUrl = (courseId) => `${getGradesUrl()}gradebook/${courseId}/`;
|
|
10
|
+
export const getBulkUpdateUrl = (courseId) => `${getGradebookUrl(courseId)}bulk-update`;
|
|
11
|
+
export const getInterventionUrl = (courseId) => `${getBulkGradesUrl(courseId)}intervention/`;
|
|
12
|
+
export const getCohortsUrl = (courseId) => `${getUrlPrefix()}cohorts/v1/courses/${courseId}/cohorts/`;
|
|
13
|
+
export const getTracksUrl = (courseId) => `${getEnrollmentUrl()}course/${courseId}?include_expired=1`;
|
|
14
|
+
export const getBulkHistoryUrl = (courseId) => `${getBulkUpdateUrl(courseId)}history/`;
|
|
15
|
+
export const getAssignmentTypesUrl = (courseId) => stringifyUrl(`${getGradebookUrl(courseId)}grading-info`, { graded_only: true });
|
|
16
|
+
export const getRolesUrl = (courseId) => stringifyUrl(`${getEnrollmentUrl()}roles/`, { courseId });
|
|
18
17
|
/**
|
|
19
|
-
*
|
|
18
|
+
* bulkGradesUrlByRow(courseId, rowId)
|
|
20
19
|
* returns the bulkGrades url with the given rowId.
|
|
20
|
+
* @param {string} courseId - course identifier
|
|
21
21
|
* @param {string} rowId - row/error identifier
|
|
22
22
|
* @return {string} - bulk grades fetch url
|
|
23
23
|
*/
|
|
24
|
-
export const bulkGradesUrlByRow = (rowId) => stringifyUrl(getBulkGradesUrl(), { error_id: rowId });
|
|
25
|
-
export const gradeCsvUrl = (options = {}) => stringifyUrl(getBulkGradesUrl(), filterQuery(options));
|
|
26
|
-
export const interventionExportCsvUrl = (options = {}) => (stringifyUrl(getInterventionUrl(), filterQuery(options)));
|
|
24
|
+
export const bulkGradesUrlByRow = (courseId, rowId) => stringifyUrl(getBulkGradesUrl(courseId), { error_id: rowId });
|
|
25
|
+
export const gradeCsvUrl = (courseId, options = {}) => stringifyUrl(getBulkGradesUrl(courseId), filterQuery(options));
|
|
26
|
+
export const interventionExportCsvUrl = (courseId, options = {}) => (stringifyUrl(getInterventionUrl(courseId), filterQuery(options)));
|
|
27
27
|
export const sectionOverrideHistoryUrl = (subsectionId, userId) => stringifyUrl(`${getGradesUrl()}subsection/${subsectionId}/`, { user_id: userId, history_record_limit: historyRecordLimit });
|
|
28
|
-
export const instructorDashboardUrl = () => (`${getSiteConfig().lmsBaseUrl}/courses/${courseId}/instructor`);
|
|
28
|
+
export const instructorDashboardUrl = (courseId) => (`${getSiteConfig().lmsBaseUrl}/courses/${courseId}/instructor`);
|
|
29
29
|
export default StrictDict({
|
|
30
30
|
getUrlPrefix,
|
|
31
31
|
getBulkGradesUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urls.js","sourceRoot":"","sources":["../../../../src/data/services/lms/urls.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,
|
|
1
|
+
{"version":3,"file":"urls.js","sourceRoot":"","sources":["../../../../src/data/services/lms/urls.js"],"names":[],"mappings":"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","sourcesContent":["import { StrictDict } from '@src/utils';\nimport { historyRecordLimit } from './constants';\nimport { filterQuery, stringifyUrl } from './utils';\nimport { getSiteConfig } from '@openedx/frontend-base';\n\nexport const getUrlPrefix = () => `${getSiteConfig().lmsBaseUrl}/api/`;\nexport const getBulkGradesUrl = (courseId) => `${getUrlPrefix()}bulk_grades/course/${courseId}/`;\nexport const getEnrollmentUrl = () => `${getUrlPrefix()}enrollment/v2/`;\nexport const getGradesUrl = () => `${getUrlPrefix()}grades/v1/`;\nexport const getGradebookUrl = (courseId) => `${getGradesUrl()}gradebook/${courseId}/`;\nexport const getBulkUpdateUrl = (courseId) => `${getGradebookUrl(courseId)}bulk-update`;\nexport const getInterventionUrl = (courseId) => `${getBulkGradesUrl(courseId)}intervention/`;\nexport const getCohortsUrl = (courseId) => `${getUrlPrefix()}cohorts/v1/courses/${courseId}/cohorts/`;\nexport const getTracksUrl = (courseId) => `${getEnrollmentUrl()}course/${courseId}?include_expired=1`;\nexport const getBulkHistoryUrl = (courseId) => `${getBulkUpdateUrl(courseId)}history/`;\nexport const getAssignmentTypesUrl = (courseId) => stringifyUrl(`${getGradebookUrl(courseId)}grading-info`, { graded_only: true });\nexport const getRolesUrl = (courseId) => stringifyUrl(`${getEnrollmentUrl()}roles/`, { courseId });\n/**\n * bulkGradesUrlByRow(courseId, rowId)\n * returns the bulkGrades url with the given rowId.\n * @param {string} courseId - course identifier\n * @param {string} rowId - row/error identifier\n * @return {string} - bulk grades fetch url\n */\nexport const bulkGradesUrlByRow = (courseId, rowId) => stringifyUrl(getBulkGradesUrl(courseId), { error_id: rowId });\n\nexport const gradeCsvUrl = (courseId, options = {}) => stringifyUrl(getBulkGradesUrl(courseId), filterQuery(options));\n\nexport const interventionExportCsvUrl = (courseId, options = {}) => (\n stringifyUrl(getInterventionUrl(courseId), filterQuery(options))\n);\n\nexport const sectionOverrideHistoryUrl = (subsectionId, userId) => stringifyUrl(\n `${getGradesUrl()}subsection/${subsectionId}/`,\n { user_id: userId, history_record_limit: historyRecordLimit },\n);\n\nexport const instructorDashboardUrl = (courseId) => (\n `${getSiteConfig().lmsBaseUrl}/courses/${courseId}/instructor`\n);\n\nexport default StrictDict({\n getUrlPrefix,\n getBulkGradesUrl,\n getEnrollmentUrl,\n getGradesUrl,\n getGradebookUrl,\n getBulkUpdateUrl,\n getInterventionUrl,\n getCohortsUrl,\n getTracksUrl,\n getBulkHistoryUrl,\n getAssignmentTypesUrl,\n getRolesUrl,\n bulkGradesUrlByRow,\n gradeCsvUrl,\n interventionExportCsvUrl,\n sectionOverrideHistoryUrl,\n});\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { StrictDict } from '../../../utils';
|
|
2
|
-
export const courseId = window.location.pathname.slice(1);
|
|
3
2
|
export const events = StrictDict({
|
|
4
3
|
receivedRoles: 'receivedRoles',
|
|
5
4
|
receivedGrades: 'receivedGrades',
|
|
@@ -22,5 +21,4 @@ export const eventNames = StrictDict({
|
|
|
22
21
|
[events.interventionReportDownloaded]: 'edx.gradebook.reports.intervention.downloaded',
|
|
23
22
|
});
|
|
24
23
|
export const trackingCategory = 'gradebook';
|
|
25
|
-
export const pageViewEvent = { category: trackingCategory, page: courseId };
|
|
26
24
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/data/services/segment/constants.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/data/services/segment/constants.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC;IAC/B,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,YAAY,EAAE,cAAc;IAC5B,uBAAuB,EAAE,yBAAyB;IAClD,oBAAoB,EAAE,sBAAsB;IAC5C,aAAa,EAAE,eAAe;IAC9B,sBAAsB,EAAE,wBAAwB;IAChD,4BAA4B,EAAE,8BAA8B;CAC7D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,gCAAgC;IACzD,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,+CAA+C;IACzE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,4CAA4C;IACnE,CAAC,MAAM,CAAC,uBAAuB,CAAC,EAAE,wDAAwD;IAC1F,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,qDAAqD;IACpF,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,qCAAqC;IAC7D,CAAC,MAAM,CAAC,sBAAsB,CAAC,EAAE,+CAA+C;IAChF,CAAC,MAAM,CAAC,4BAA4B,CAAC,EAAE,+CAA+C;CACvF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC","sourcesContent":["import { StrictDict } from '@src/utils';\n\nexport const events = StrictDict({\n receivedRoles: 'receivedRoles',\n receivedGrades: 'receivedGrades',\n updateSucceeded: 'updateSucceeded',\n updateFailed: 'updateFailed',\n uploadOverrideSucceeded: 'uploadOverrideSucceeded',\n uploadOverrideFailed: 'uploadOverrideFailed',\n filterApplied: 'filterApplied',\n gradesReportDownloaded: 'gradesReportDownloaded',\n interventionReportDownloaded: 'interventionReportDownloaded',\n});\n\nexport const eventNames = StrictDict({\n [events.receivedGrades]: 'edx.gradebook.grades.displayed',\n [events.updateSucceeded]: 'edx.gradebook.grades.grade_override.succeeded',\n [events.updateFailed]: 'edx.gradebook.grades.grade_override.failed',\n [events.uploadOverrideSucceeded]: 'edx.gradebook.grades.upload.grades_overrides.succeeded',\n [events.uploadOverrideFailed]: 'edx.gradebook.grades.upload.grades_overrides.failed',\n [events.filterApplied]: 'edx.gradebook.grades.filter_applied',\n [events.gradesReportDownloaded]: 'edx.gradebook.reports.grade_export.downloaded',\n [events.interventionReportDownloaded]: 'edx.gradebook.reports.intervention.downloaded',\n});\n\nexport const trackingCategory = 'gradebook';\n"]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
export function trackGradesDisplayed({ assignmentType, cohort, track, prev, next, }: {
|
|
1
|
+
export function trackGradesDisplayed(courseId: any, { assignmentType, cohort, track, prev, next, }: {
|
|
2
2
|
assignmentType: any;
|
|
3
3
|
cohort: any;
|
|
4
4
|
track: any;
|
|
5
5
|
prev: any;
|
|
6
6
|
next: any;
|
|
7
7
|
}): void;
|
|
8
|
-
export function trackGradeOverrideSucceeded(updatedGrades: any): void;
|
|
9
|
-
export function trackGradeOverrideFailed(error: any): void;
|
|
10
|
-
export function trackUploadOverrideSucceeded(): void;
|
|
11
|
-
export function trackUploadOverrideFailed(error: any): void;
|
|
12
|
-
export function trackFilterApplied(): void;
|
|
13
|
-
export function trackGradesReportDownloaded(): void;
|
|
14
|
-
export function trackInterventionReportDownloaded(): void;
|
|
8
|
+
export function trackGradeOverrideSucceeded(courseId: any, updatedGrades: any): void;
|
|
9
|
+
export function trackGradeOverrideFailed(courseId: any, error: any): void;
|
|
10
|
+
export function trackUploadOverrideSucceeded(courseId: any): void;
|
|
11
|
+
export function trackUploadOverrideFailed(courseId: any, error: any): void;
|
|
12
|
+
export function trackFilterApplied(courseId: any): void;
|
|
13
|
+
export function trackGradesReportDownloaded(courseId: any): void;
|
|
14
|
+
export function trackInterventionReportDownloaded(courseId: any): void;
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
import { sendTrackEvent } from '@openedx/frontend-base';
|
|
2
|
-
import {
|
|
2
|
+
import { events, eventNames, trackingCategory, } from './constants';
|
|
3
3
|
/**
|
|
4
4
|
* Segment analytics, emitted directly via `@openedx/frontend-base`
|
|
5
5
|
* (`sendTrackEvent`) instead of the legacy `redux-beacon` middleware that mapped
|
|
6
6
|
* Redux actions to Segment events. Event names + base properties (category + the
|
|
7
7
|
* `courseId` label) mirror the old `redux-beacon` mapping exactly.
|
|
8
8
|
*/
|
|
9
|
-
const baseProperties = () => ({ category: trackingCategory, label: courseId });
|
|
9
|
+
const baseProperties = (courseId) => ({ category: trackingCategory, label: courseId });
|
|
10
10
|
/**
|
|
11
11
|
* Grades were fetched and displayed. Mirrors the legacy `receivedGrades` trigger,
|
|
12
12
|
* which fired per fetch with the filters it ran under and the page cursors.
|
|
13
13
|
*/
|
|
14
|
-
export const trackGradesDisplayed = ({ assignmentType, cohort, track, prev, next, }) => sendTrackEvent(eventNames[events.receivedGrades], Object.assign(Object.assign({}, baseProperties()), { assignmentType, cohort, track, prev, next }));
|
|
14
|
+
export const trackGradesDisplayed = (courseId, { assignmentType, cohort, track, prev, next, }) => sendTrackEvent(eventNames[events.receivedGrades], Object.assign(Object.assign({}, baseProperties(courseId)), { assignmentType, cohort, track, prev, next }));
|
|
15
15
|
/** Grade override saved from the edit modal succeeded. */
|
|
16
|
-
export const trackGradeOverrideSucceeded = (updatedGrades) => sendTrackEvent(eventNames[events.updateSucceeded], Object.assign(Object.assign({}, baseProperties()), { updatedGrades }));
|
|
16
|
+
export const trackGradeOverrideSucceeded = (courseId, updatedGrades) => sendTrackEvent(eventNames[events.updateSucceeded], Object.assign(Object.assign({}, baseProperties(courseId)), { updatedGrades }));
|
|
17
17
|
/** Grade override save failed. */
|
|
18
|
-
export const trackGradeOverrideFailed = (error) => sendTrackEvent(eventNames[events.updateFailed], Object.assign(Object.assign({}, baseProperties()), { error }));
|
|
18
|
+
export const trackGradeOverrideFailed = (courseId, error) => sendTrackEvent(eventNames[events.updateFailed], Object.assign(Object.assign({}, baseProperties(courseId)), { error }));
|
|
19
19
|
/** Bulk grade CSV override upload succeeded. */
|
|
20
|
-
export const trackUploadOverrideSucceeded = () => sendTrackEvent(eventNames[events.uploadOverrideSucceeded], baseProperties());
|
|
20
|
+
export const trackUploadOverrideSucceeded = (courseId) => sendTrackEvent(eventNames[events.uploadOverrideSucceeded], baseProperties(courseId));
|
|
21
21
|
/** Bulk grade CSV override upload failed. */
|
|
22
|
-
export const trackUploadOverrideFailed = (error) => sendTrackEvent(eventNames[events.uploadOverrideFailed], Object.assign(Object.assign({}, baseProperties()), { error }));
|
|
22
|
+
export const trackUploadOverrideFailed = (courseId, error) => sendTrackEvent(eventNames[events.uploadOverrideFailed], Object.assign(Object.assign({}, baseProperties(courseId)), { error }));
|
|
23
23
|
/**
|
|
24
24
|
* A filter was applied. Mirrors the legacy mapping, which fired this only from the
|
|
25
25
|
* course-grade-limit apply action.
|
|
26
26
|
*/
|
|
27
|
-
export const trackFilterApplied = () => sendTrackEvent(eventNames[events.filterApplied], baseProperties());
|
|
27
|
+
export const trackFilterApplied = (courseId) => sendTrackEvent(eventNames[events.filterApplied], baseProperties(courseId));
|
|
28
28
|
/** Grades CSV export was downloaded. */
|
|
29
|
-
export const trackGradesReportDownloaded = () => sendTrackEvent(eventNames[events.gradesReportDownloaded], baseProperties());
|
|
29
|
+
export const trackGradesReportDownloaded = (courseId) => sendTrackEvent(eventNames[events.gradesReportDownloaded], baseProperties(courseId));
|
|
30
30
|
/** Intervention report was downloaded. */
|
|
31
|
-
export const trackInterventionReportDownloaded = () => sendTrackEvent(eventNames[events.interventionReportDownloaded], baseProperties());
|
|
31
|
+
export const trackInterventionReportDownloaded = (courseId) => sendTrackEvent(eventNames[events.interventionReportDownloaded], baseProperties(courseId));
|
|
32
32
|
//# sourceMappingURL=events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/data/services/segment/events.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/data/services/segment/events.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EACL,MAAM,EAAE,UAAU,EAAE,gBAAgB,GACrC,MAAM,aAAa,CAAC;AAErB;;;;;GAKG;AACH,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAEvF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE,EAC7C,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,GAC1C,EAAE,EAAE,CAAC,cAAc,CAClB,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,kCAE5B,cAAc,CAAC,QAAQ,CAAC,KAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAEzE,CAAC;AAEF,0DAA0D;AAC1D,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,CAAC,cAAc,CACpF,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,kCAC7B,cAAc,CAAC,QAAQ,CAAC,KAAE,aAAa,IAC7C,CAAC;AAEF,kCAAkC;AAClC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,cAAc,CACzE,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,kCAC1B,cAAc,CAAC,QAAQ,CAAC,KAAE,KAAK,IACrC,CAAC;AAEF,gDAAgD;AAChD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CACtE,UAAU,CAAC,MAAM,CAAC,uBAAuB,CAAC,EAC1C,cAAc,CAAC,QAAQ,CAAC,CACzB,CAAC;AAEF,6CAA6C;AAC7C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,cAAc,CAC1E,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC,kCAClC,cAAc,CAAC,QAAQ,CAAC,KAAE,KAAK,IACrC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAC5D,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,EAChC,cAAc,CAAC,QAAQ,CAAC,CACzB,CAAC;AAEF,wCAAwC;AACxC,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CACrE,UAAU,CAAC,MAAM,CAAC,sBAAsB,CAAC,EACzC,cAAc,CAAC,QAAQ,CAAC,CACzB,CAAC;AAEF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAC3E,UAAU,CAAC,MAAM,CAAC,4BAA4B,CAAC,EAC/C,cAAc,CAAC,QAAQ,CAAC,CACzB,CAAC","sourcesContent":["import { sendTrackEvent } from '@openedx/frontend-base';\n\nimport {\n events, eventNames, trackingCategory,\n} from './constants';\n\n/**\n * Segment analytics, emitted directly via `@openedx/frontend-base`\n * (`sendTrackEvent`) instead of the legacy `redux-beacon` middleware that mapped\n * Redux actions to Segment events. Event names + base properties (category + the\n * `courseId` label) mirror the old `redux-beacon` mapping exactly.\n */\nconst baseProperties = (courseId) => ({ category: trackingCategory, label: courseId });\n\n/**\n * Grades were fetched and displayed. Mirrors the legacy `receivedGrades` trigger,\n * which fired per fetch with the filters it ran under and the page cursors.\n */\nexport const trackGradesDisplayed = (courseId, {\n assignmentType, cohort, track, prev, next,\n}) => sendTrackEvent(\n eventNames[events.receivedGrades],\n {\n ...baseProperties(courseId), assignmentType, cohort, track, prev, next,\n },\n);\n\n/** Grade override saved from the edit modal succeeded. */\nexport const trackGradeOverrideSucceeded = (courseId, updatedGrades) => sendTrackEvent(\n eventNames[events.updateSucceeded],\n { ...baseProperties(courseId), updatedGrades },\n);\n\n/** Grade override save failed. */\nexport const trackGradeOverrideFailed = (courseId, error) => sendTrackEvent(\n eventNames[events.updateFailed],\n { ...baseProperties(courseId), error },\n);\n\n/** Bulk grade CSV override upload succeeded. */\nexport const trackUploadOverrideSucceeded = (courseId) => sendTrackEvent(\n eventNames[events.uploadOverrideSucceeded],\n baseProperties(courseId),\n);\n\n/** Bulk grade CSV override upload failed. */\nexport const trackUploadOverrideFailed = (courseId, error) => sendTrackEvent(\n eventNames[events.uploadOverrideFailed],\n { ...baseProperties(courseId), error },\n);\n\n/**\n * A filter was applied. Mirrors the legacy mapping, which fired this only from the\n * course-grade-limit apply action.\n */\nexport const trackFilterApplied = (courseId) => sendTrackEvent(\n eventNames[events.filterApplied],\n baseProperties(courseId),\n);\n\n/** Grades CSV export was downloaded. */\nexport const trackGradesReportDownloaded = (courseId) => sendTrackEvent(\n eventNames[events.gradesReportDownloaded],\n baseProperties(courseId),\n);\n\n/** Intervention report was downloaded. */\nexport const trackInterventionReportDownloaded = (courseId) => sendTrackEvent(\n eventNames[events.interventionReportDownloaded],\n baseProperties(courseId),\n);\n"]}
|
package/dist/i18n/utils.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export function getLocalizedSlash(): "
|
|
1
|
+
export function getLocalizedSlash(): "\\" | "/";
|
|
2
2
|
export function getLocalizedPercentSign(): "%" | "%";
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC","sourcesContent":["export { default as gradebookApp } from './app';\nexport { default as gradebookRoutes } from './routes';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC","sourcesContent":["export { default as gradebookApp } from './app';\nexport { default as gradebookRoutes } from './routes';\nexport { default as Gradebook } from './Gradebook';\n"]}
|
package/dist/routes.d.ts
CHANGED
|
@@ -3,7 +3,9 @@ declare const routes: {
|
|
|
3
3
|
id: string;
|
|
4
4
|
path: string;
|
|
5
5
|
loader: typeof authenticatedLoader;
|
|
6
|
-
|
|
6
|
+
lazy(): Promise<{
|
|
7
|
+
Component: () => import("react").JSX.Element;
|
|
8
|
+
}>;
|
|
7
9
|
handle: {
|
|
8
10
|
roles: string[];
|
|
9
11
|
};
|
package/dist/routes.js
CHANGED
|
@@ -1,12 +1,24 @@
|
|
|
1
|
-
|
|
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
|
+
};
|
|
2
10
|
import { authenticatedLoader } from '@openedx/frontend-base';
|
|
3
|
-
const Main = lazy(() => import('./Main'));
|
|
4
11
|
const routes = [
|
|
5
12
|
{
|
|
6
13
|
id: 'org.openedx.frontend.route.gradebook.main',
|
|
7
14
|
path: '/gradebook/:courseId',
|
|
8
15
|
loader: authenticatedLoader,
|
|
9
|
-
|
|
16
|
+
lazy() {
|
|
17
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
const { default: Main } = yield import('./Main');
|
|
19
|
+
return { Component: Main };
|
|
20
|
+
});
|
|
21
|
+
},
|
|
10
22
|
handle: {
|
|
11
23
|
roles: ['org.openedx.frontend.role.gradebook'],
|
|
12
24
|
},
|
package/dist/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.tsx"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,MAAM,GAAG;IACb;QACE,EAAE,EAAE,2CAA2C;QAC/C,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,mBAAmB;QACrB,IAAI;;gBACR,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACjD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC7B,CAAC;SAAA;QACD,MAAM,EAAE;YACN,KAAK,EAAE,CAAC,qCAAqC,CAAC;SAC/C;KACF;CACF,CAAC;AAEF,eAAe,MAAM,CAAC","sourcesContent":["import { authenticatedLoader } from '@openedx/frontend-base';\n\nconst routes = [\n {\n id: 'org.openedx.frontend.route.gradebook.main',\n path: '/gradebook/:courseId',\n loader: authenticatedLoader,\n async lazy() {\n const { default: Main } = await import('./Main');\n return { Component: Main };\n },\n handle: {\n roles: ['org.openedx.frontend.role.gradebook'],\n },\n },\n];\n\nexport default routes;\n"]}
|
package/dist/slots.d.ts
ADDED
package/dist/slots.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { lazy, Suspense } from 'react';
|
|
3
|
+
import { WidgetOperationTypes } from '@openedx/frontend-base';
|
|
4
|
+
import { Spinner } from '@openedx/paragon';
|
|
5
|
+
// Lazy so the gradebook bundle isn't pulled into hosts that never render this slot.
|
|
6
|
+
const Gradebook = lazy(() => import('./Gradebook'));
|
|
7
|
+
// Slot id renders gradebook MFE inside student grades tab on ccx coach dashboard
|
|
8
|
+
const studentGradesSlotId = 'org.openedx.frontend.slot.ccxCoach.studentGrades.v1';
|
|
9
|
+
// Framed spinner instead of a blank tab while the chunk loads.
|
|
10
|
+
const GradebookWidgetFallback = () => (_jsx("div", { className: "d-flex justify-content-center p-4", children: _jsx(Spinner, { animation: "border", variant: "dark", screenReaderText: "Loading gradebook" }) }));
|
|
11
|
+
// Own Suspense boundary: the host slot doesn't provide one.
|
|
12
|
+
const GradebookWidget = ({ courseId, onBack }) => (_jsx(Suspense, { fallback: _jsx(GradebookWidgetFallback, {}), children: _jsx(Gradebook, { courseId: courseId, onBack: onBack }) }));
|
|
13
|
+
const slots = [
|
|
14
|
+
{
|
|
15
|
+
slotId: studentGradesSlotId,
|
|
16
|
+
id: 'org.openedx.frontend.widget.gradebook.studentGrades.v1',
|
|
17
|
+
op: WidgetOperationTypes.APPEND,
|
|
18
|
+
component: GradebookWidget,
|
|
19
|
+
},
|
|
20
|
+
];
|
|
21
|
+
export default slots;
|
|
22
|
+
//# sourceMappingURL=slots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../src/slots.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAiB,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,oFAAoF;AACpF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;AAEpD,iFAAiF;AACjF,MAAM,mBAAmB,GAAG,qDAAqD,CAAC;AAOlF,+DAA+D;AAC/D,MAAM,uBAAuB,GAAG,GAAG,EAAE,CAAC,CACpC,cAAK,SAAS,EAAC,mCAAmC,YAChD,KAAC,OAAO,IAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,EAAC,MAAM,EAAC,gBAAgB,EAAC,mBAAmB,GAAG,GAC9E,CACP,CAAC;AAEF,4DAA4D;AAC5D,MAAM,eAAe,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAwB,EAAE,EAAE,CAAC,CACtE,KAAC,QAAQ,IAAC,QAAQ,EAAE,KAAC,uBAAuB,KAAG,YAC7C,KAAC,SAAS,IAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAI,GACxC,CACZ,CAAC;AAEF,MAAM,KAAK,GAAoB;IAC7B;QACE,MAAM,EAAE,mBAAmB;QAC3B,EAAE,EAAE,wDAAwD;QAC5D,EAAE,EAAE,oBAAoB,CAAC,MAAM;QAC/B,SAAS,EAAE,eAAe;KAC3B;CACF,CAAC;AAEF,eAAe,KAAK,CAAC","sourcesContent":["import { lazy, Suspense } from 'react';\nimport { SlotOperation, WidgetOperationTypes } from '@openedx/frontend-base';\nimport { Spinner } from '@openedx/paragon';\n\n// Lazy so the gradebook bundle isn't pulled into hosts that never render this slot.\nconst Gradebook = lazy(() => import('./Gradebook'));\n\n// Slot id renders gradebook MFE inside student grades tab on ccx coach dashboard\nconst studentGradesSlotId = 'org.openedx.frontend.slot.ccxCoach.studentGrades.v1';\n\ninterface GradebookWidgetProps {\n courseId: string;\n onBack?: () => void;\n}\n\n// Framed spinner instead of a blank tab while the chunk loads.\nconst GradebookWidgetFallback = () => (\n <div className=\"d-flex justify-content-center p-4\">\n <Spinner animation=\"border\" variant=\"dark\" screenReaderText=\"Loading gradebook\" />\n </div>\n);\n\n// Own Suspense boundary: the host slot doesn't provide one.\nconst GradebookWidget = ({ courseId, onBack }: GradebookWidgetProps) => (\n <Suspense fallback={<GradebookWidgetFallback />}>\n <Gradebook courseId={courseId} onBack={onBack} />\n </Suspense>\n);\n\nconst slots: SlotOperation[] = [\n {\n slotId: studentGradesSlotId,\n id: 'org.openedx.frontend.widget.gradebook.studentGrades.v1',\n op: WidgetOperationTypes.APPEND,\n component: GradebookWidget,\n },\n];\n\nexport default slots;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openedx/frontend-app-gradebook",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.5",
|
|
4
4
|
"author": "Open edX",
|
|
5
5
|
"license": "AGPL-3.0",
|
|
6
6
|
"description": "edx editable gradebook-ui to manipulate grade overrides on subsections",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"sass": "^1.49.0"
|
|
63
63
|
},
|
|
64
64
|
"peerDependencies": {
|
|
65
|
-
"@openedx/frontend-base": "^2.0.0-alpha.
|
|
65
|
+
"@openedx/frontend-base": "^2.0.0-alpha.15 || 0.0.0-dev",
|
|
66
66
|
"@openedx/paragon": "^23",
|
|
67
67
|
"@tanstack/react-query": "^5",
|
|
68
68
|
"react": "^18",
|