@openedx/frontend-app-gradebook 2.0.0-alpha.4 → 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 +21 -6
- 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/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/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 -17
- 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/slots.d.ts +3 -0
- package/dist/slots.js +22 -0
- package/dist/slots.js.map +1 -0
- package/package.json +2 -2
|
@@ -2,32 +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
|
-
// Evaluated at call time: with client-side navigation, this module can be
|
|
6
|
-
// imported before the URL reflects the gradebook route.
|
|
7
|
-
const getCourseId = () => window.location.pathname.split('/').filter(Boolean).pop() || '';
|
|
8
5
|
export const getUrlPrefix = () => `${getSiteConfig().lmsBaseUrl}/api/`;
|
|
9
|
-
export const getBulkGradesUrl = () => `${getUrlPrefix()}bulk_grades/course/${
|
|
6
|
+
export const getBulkGradesUrl = (courseId) => `${getUrlPrefix()}bulk_grades/course/${courseId}/`;
|
|
10
7
|
export const getEnrollmentUrl = () => `${getUrlPrefix()}enrollment/v2/`;
|
|
11
8
|
export const getGradesUrl = () => `${getUrlPrefix()}grades/v1/`;
|
|
12
|
-
export const getGradebookUrl = () => `${getGradesUrl()}gradebook/${
|
|
13
|
-
export const getBulkUpdateUrl = () => `${getGradebookUrl()}bulk-update`;
|
|
14
|
-
export const getInterventionUrl = () => `${getBulkGradesUrl()}intervention/`;
|
|
15
|
-
export const getCohortsUrl = () => `${getUrlPrefix()}cohorts/v1/courses/${
|
|
16
|
-
export const getTracksUrl = () => `${getEnrollmentUrl()}course/${
|
|
17
|
-
export const getBulkHistoryUrl = () => `${getBulkUpdateUrl()}history/`;
|
|
18
|
-
export const getAssignmentTypesUrl = () => stringifyUrl(`${getGradebookUrl()}grading-info`, { graded_only: true });
|
|
19
|
-
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 });
|
|
20
17
|
/**
|
|
21
|
-
*
|
|
18
|
+
* bulkGradesUrlByRow(courseId, rowId)
|
|
22
19
|
* returns the bulkGrades url with the given rowId.
|
|
20
|
+
* @param {string} courseId - course identifier
|
|
23
21
|
* @param {string} rowId - row/error identifier
|
|
24
22
|
* @return {string} - bulk grades fetch url
|
|
25
23
|
*/
|
|
26
|
-
export const bulkGradesUrlByRow = (rowId) => stringifyUrl(getBulkGradesUrl(), { error_id: rowId });
|
|
27
|
-
export const gradeCsvUrl = (options = {}) => stringifyUrl(getBulkGradesUrl(), filterQuery(options));
|
|
28
|
-
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)));
|
|
29
27
|
export const sectionOverrideHistoryUrl = (subsectionId, userId) => stringifyUrl(`${getGradesUrl()}subsection/${subsectionId}/`, { user_id: userId, history_record_limit: historyRecordLimit });
|
|
30
|
-
export const instructorDashboardUrl = () => (`${getSiteConfig().lmsBaseUrl}/courses/${
|
|
28
|
+
export const instructorDashboardUrl = (courseId) => (`${getSiteConfig().lmsBaseUrl}/courses/${courseId}/instructor`);
|
|
31
29
|
export default StrictDict({
|
|
32
30
|
getUrlPrefix,
|
|
33
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,
|
|
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/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",
|