@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
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { CurrentAppProvider } from '@openedx/frontend-base';
|
|
3
|
+
import { appId } from './constants';
|
|
4
|
+
import { CourseIdContext } from './data/courseIdContext';
|
|
5
|
+
import { FiltersProvider } from './data/filtersContext';
|
|
6
|
+
import { GradebookUiProvider } from './data/gradebookUiContext';
|
|
7
|
+
import { GradebookNavigationContext } from './data/gradebookNavigationContext';
|
|
8
|
+
import GradebookPage from './containers/GradebookPage';
|
|
9
|
+
import './style.scss';
|
|
10
|
+
const Gradebook = ({ courseId, onBack }) => (_jsx(CurrentAppProvider, { appId: appId, children: _jsx(CourseIdContext.Provider, { value: courseId, children: _jsx(GradebookNavigationContext.Provider, { value: { onBack }, children: _jsx(FiltersProvider, { children: _jsx(GradebookUiProvider, { children: _jsx(GradebookPage, {}) }) }) }) }) }));
|
|
11
|
+
export default Gradebook;
|
|
12
|
+
//# sourceMappingURL=Gradebook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Gradebook.js","sourceRoot":"","sources":["../src/Gradebook.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAClF,OAAO,aAAa,MAAM,+BAA+B,CAAC;AAC1D,OAAO,cAAc,CAAC;AAOtB,MAAM,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAkB,EAAE,EAAE,CAAC,CAC1D,KAAC,kBAAkB,IAAC,KAAK,EAAE,KAAK,YAC9B,KAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,YACvC,KAAC,0BAA0B,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,MAAM,EAAE,YACpD,KAAC,eAAe,cACd,KAAC,mBAAmB,cAClB,KAAC,aAAa,KAAG,GACG,GACN,GACkB,GACb,GACR,CACtB,CAAC;AAEF,eAAe,SAAS,CAAC","sourcesContent":["import { CurrentAppProvider } from '@openedx/frontend-base';\nimport { appId } from './constants';\nimport { CourseIdContext } from '@src/data/courseIdContext';\nimport { FiltersProvider } from '@src/data/filtersContext';\nimport { GradebookUiProvider } from '@src/data/gradebookUiContext';\nimport { GradebookNavigationContext } from '@src/data/gradebookNavigationContext';\nimport GradebookPage from '@src/containers/GradebookPage';\nimport './style.scss';\n\ninterface GradebookProps {\n courseId: string;\n onBack?: () => void;\n}\n\nconst Gradebook = ({ courseId, onBack }: GradebookProps) => (\n <CurrentAppProvider appId={appId}>\n <CourseIdContext.Provider value={courseId}>\n <GradebookNavigationContext.Provider value={{ onBack }}>\n <FiltersProvider>\n <GradebookUiProvider>\n <GradebookPage />\n </GradebookUiProvider>\n </FiltersProvider>\n </GradebookNavigationContext.Provider>\n </CourseIdContext.Provider>\n </CurrentAppProvider>\n);\n\nexport default Gradebook;\n"]}
|
package/dist/Main.d.ts
CHANGED
package/dist/Main.js
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { PageWrap, getSiteConfig, useIntl } from '@openedx/frontend-base';
|
|
3
3
|
import { Helmet } from 'react-helmet';
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import { GradebookUiProvider } from './data/gradebookUiContext';
|
|
7
|
-
import GradebookPage from './containers/GradebookPage';
|
|
4
|
+
import { useParams } from 'react-router-dom';
|
|
5
|
+
import Gradebook from './Gradebook';
|
|
8
6
|
import messages from './messages';
|
|
9
|
-
import './style.scss';
|
|
10
7
|
const Main = () => {
|
|
11
8
|
const { formatMessage } = useIntl();
|
|
12
|
-
|
|
9
|
+
const { courseId = '' } = useParams();
|
|
10
|
+
return (_jsxs(_Fragment, { children: [_jsx(Helmet, { children: _jsx("title", { children: formatMessage(messages['gradebook.page.title'], {
|
|
13
11
|
siteName: getSiteConfig().siteName,
|
|
14
|
-
}) }) }), _jsx(
|
|
12
|
+
}) }) }), _jsx(PageWrap, { children: _jsx(Gradebook, { courseId: courseId }) })] }));
|
|
15
13
|
};
|
|
16
14
|
export default Main;
|
|
17
15
|
//# sourceMappingURL=Main.js.map
|
package/dist/Main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Main.js","sourceRoot":"","sources":["../src/Main.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Main.js","sourceRoot":"","sources":["../src/Main.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,IAAI,GAAG,GAAG,EAAE;IAChB,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,SAAS,EAAE,CAAC;IACtC,OAAO,CACL,8BACE,KAAC,MAAM,cACL,0BACG,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE;wBAC/C,QAAQ,EAAE,aAAa,EAAE,CAAC,QAAQ;qBACnC,CAAC,GACI,GACD,EACT,KAAC,QAAQ,cACP,KAAC,SAAS,IAAC,QAAQ,EAAE,QAAQ,GAAI,GACxB,IACV,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC","sourcesContent":["import { PageWrap, getSiteConfig, useIntl } from '@openedx/frontend-base';\nimport { Helmet } from 'react-helmet';\nimport { useParams } from 'react-router-dom';\nimport Gradebook from './Gradebook';\nimport messages from './messages';\n\nconst Main = () => {\n const { formatMessage } = useIntl();\n const { courseId = '' } = useParams();\n return (\n <>\n <Helmet>\n <title>\n {formatMessage(messages['gradebook.page.title'], {\n siteName: getSiteConfig().siteName,\n })}\n </title>\n </Helmet>\n <PageWrap>\n <Gradebook courseId={courseId} />\n </PageWrap>\n </>\n );\n};\n\nexport default Main;\n"]}
|
package/dist/app.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { appId } from './constants';
|
|
2
2
|
import routes from './routes';
|
|
3
3
|
import providers from './providers';
|
|
4
|
+
import slots from './slots';
|
|
4
5
|
const app = {
|
|
5
6
|
appId,
|
|
6
7
|
routes,
|
|
7
8
|
providers,
|
|
9
|
+
slots,
|
|
8
10
|
};
|
|
9
11
|
export default app;
|
|
10
12
|
//# sourceMappingURL=app.js.map
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,SAAS,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,MAAM,GAAG,GAAQ;IACf,KAAK;IACL,MAAM;IACN,SAAS;IACT,KAAK;CACN,CAAC;AAEF,eAAe,GAAG,CAAC","sourcesContent":["import { App } from '@openedx/frontend-base';\nimport { appId } from './constants';\nimport routes from './routes';\nimport providers from './providers';\nimport slots from './slots';\n\nconst app: App = {\n appId,\n routes,\n providers,\n slots,\n};\n\nexport default app;\n"]}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
export default ResultsSummary;
|
|
2
2
|
/**
|
|
3
|
-
* <ResultsSummary {...{
|
|
3
|
+
* <ResultsSummary {...{ rowId, text }} />
|
|
4
4
|
* displays a result summary cell for a single bulk management upgrade history entry.
|
|
5
|
-
* @param {string} courseId - course identifier
|
|
6
5
|
* @param {number} rowId - row/error identifier
|
|
7
6
|
* @param {string} text - summary string
|
|
8
7
|
*/
|
|
9
|
-
declare function ResultsSummary({ rowId, text, }:
|
|
8
|
+
declare function ResultsSummary({ rowId, text, }: number): import("react").JSX.Element;
|
|
10
9
|
declare namespace ResultsSummary {
|
|
11
10
|
namespace propTypes {
|
|
12
11
|
let rowId: PropTypes.Validator<number>;
|
|
@@ -3,14 +3,17 @@ import PropTypes from 'prop-types';
|
|
|
3
3
|
import { Hyperlink, Icon } from '@openedx/paragon';
|
|
4
4
|
import { Download } from '@openedx/paragon/icons';
|
|
5
5
|
import lms from '../../data/services/lms';
|
|
6
|
+
import { useCourseId } from '../../data/courseIdContext';
|
|
6
7
|
/**
|
|
7
|
-
* <ResultsSummary {...{
|
|
8
|
+
* <ResultsSummary {...{ rowId, text }} />
|
|
8
9
|
* displays a result summary cell for a single bulk management upgrade history entry.
|
|
9
|
-
* @param {string} courseId - course identifier
|
|
10
10
|
* @param {number} rowId - row/error identifier
|
|
11
11
|
* @param {string} text - summary string
|
|
12
12
|
*/
|
|
13
|
-
const ResultsSummary = ({ rowId, text, }) =>
|
|
13
|
+
const ResultsSummary = ({ rowId, text, }) => {
|
|
14
|
+
const courseId = useCourseId();
|
|
15
|
+
return (_jsxs(Hyperlink, { destination: lms.urls.bulkGradesUrlByRow(courseId, rowId), target: "_blank", showLaunchIcon: false, children: [_jsx(Icon, { src: Download, className: "d-inline-block" }), text] }));
|
|
16
|
+
};
|
|
14
17
|
ResultsSummary.propTypes = {
|
|
15
18
|
rowId: PropTypes.number.isRequired,
|
|
16
19
|
text: PropTypes.string.isRequired,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResultsSummary.js","sourceRoot":"","sources":["../../../src/components/BulkManagementHistoryView/ResultsSummary.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,GAAG,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ResultsSummary.js","sourceRoot":"","sources":["../../../src/components/BulkManagementHistoryView/ResultsSummary.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,GAAG,MAAM,wBAAwB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD;;;;;GAKG;AACH,MAAM,cAAc,GAAG,CAAC,EACtB,KAAK,EACL,IAAI,GACL,EAAE,EAAE;IACH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,OAAO,CACL,MAAC,SAAS,IACR,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,EACzD,MAAM,EAAC,QAAQ,EACf,cAAc,EAAE,KAAK,aAErB,KAAC,IAAI,IAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAC,gBAAgB,GAAG,EACjD,IAAI,IACK,CACb,CAAC;AACJ,CAAC,CAAC;AAEF,cAAc,CAAC,SAAS,GAAG;IACzB,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IAClC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CAClC,CAAC;AAEF,eAAe,cAAc,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { Hyperlink, Icon } from '@openedx/paragon';\nimport { Download } from '@openedx/paragon/icons';\n\nimport lms from '@src/data/services/lms';\nimport { useCourseId } from '@src/data/courseIdContext';\n\n/**\n * <ResultsSummary {...{ rowId, text }} />\n * displays a result summary cell for a single bulk management upgrade history entry.\n * @param {number} rowId - row/error identifier\n * @param {string} text - summary string\n */\nconst ResultsSummary = ({\n rowId,\n text,\n}) => {\n const courseId = useCourseId();\n return (\n <Hyperlink\n destination={lms.urls.bulkGradesUrlByRow(courseId, rowId)}\n target=\"_blank\"\n showLaunchIcon={false}\n >\n <Icon src={Download} className=\"d-inline-block\" />\n {text}\n </Hyperlink>\n );\n};\n\nResultsSummary.propTypes = {\n rowId: PropTypes.number.isRequired,\n text: PropTypes.string.isRequired,\n};\n\nexport default ResultsSummary;\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* getBulkOperationHistory()
|
|
2
|
+
* getBulkOperationHistory(courseId)
|
|
3
3
|
* Fetches the bulk grade-override upload history for the course.
|
|
4
4
|
*/
|
|
5
|
-
export declare const getBulkOperationHistory: () => Promise<any>;
|
|
5
|
+
export declare const getBulkOperationHistory: (courseId: string) => Promise<any>;
|
|
@@ -9,8 +9,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import lms from '../../../data/services/lms';
|
|
11
11
|
/**
|
|
12
|
-
* getBulkOperationHistory()
|
|
12
|
+
* getBulkOperationHistory(courseId)
|
|
13
13
|
* Fetches the bulk grade-override upload history for the course.
|
|
14
14
|
*/
|
|
15
|
-
export const getBulkOperationHistory = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
15
|
+
export const getBulkOperationHistory = (courseId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
return (lms.api.fetch.gradeBulkOperationHistory(courseId));
|
|
17
|
+
});
|
|
16
18
|
//# sourceMappingURL=api.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/components/BulkManagementHistoryView/data/api.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,GAAG,MAAM,wBAAwB,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/components/BulkManagementHistoryView/data/api.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,GAAG,MAAM,wBAAwB,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAO,QAAgB,EAAE,EAAE;IAAC,OAAA,CACjE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAClD,CAAA;EAAA,CAAC","sourcesContent":["import lms from '@src/data/services/lms';\n\n/**\n * getBulkOperationHistory(courseId)\n * Fetches the bulk grade-override upload history for the course.\n */\nexport const getBulkOperationHistory = async (courseId: string) => (\n lms.api.fetch.gradeBulkOperationHistory(courseId)\n);\n"]}
|
|
@@ -13,7 +13,7 @@ const EMPTY_ARRAY = [];
|
|
|
13
13
|
*/
|
|
14
14
|
export const useBulkOperationHistory = (courseId, { enabled = true } = {}) => useQuery({
|
|
15
15
|
queryKey: bulkOperationHistoryQueryKeys.byCourse(courseId),
|
|
16
|
-
queryFn: getBulkOperationHistory,
|
|
16
|
+
queryFn: () => getBulkOperationHistory(courseId),
|
|
17
17
|
enabled: !!courseId && enabled,
|
|
18
18
|
});
|
|
19
19
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../../src/components/BulkManagementHistoryView/data/apiHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEhD,8EAA8E;AAC9E,0DAA0D;AAC1D,MAAM,WAAW,GAAY,EAAE,CAAC;AAEhC;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,QAAgB,EAChB,EAAE,OAAO,GAAG,IAAI,KAA4B,EAAE,EAC9C,EAAE,CAAC,QAAQ,CAAC;IACZ,QAAQ,EAAE,6BAA6B,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC1D,OAAO,EAAE,uBAAuB;
|
|
1
|
+
{"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../../src/components/BulkManagementHistoryView/data/apiHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEhD,8EAA8E;AAC9E,0DAA0D;AAC1D,MAAM,WAAW,GAAY,EAAE,CAAC;AAEhC;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,QAAgB,EAChB,EAAE,OAAO,GAAG,IAAI,KAA4B,EAAE,EAC9C,EAAE,CAAC,QAAQ,CAAC;IACZ,QAAQ,EAAE,6BAA6B,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC1D,OAAO,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,QAAQ,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,QAAQ,IAAI,OAAO;CAC/B,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,EAAE;IAClD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAAC;IACpD,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,kBAAkB,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAChF,MAAM,EAAE,IAAI,EAAE,GAAG,uBAAuB,CAAC,QAAQ,EAAE;QACjD,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC,CAAA,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,uBAAuB,CAAA;KACnE,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,WAAW,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAC1D,CAAC,CAAC","sourcesContent":["import { useQuery } from '@tanstack/react-query';\n\nimport { useAssignmentTypes, useCourseIdWithGate } from '@src/data/apiHook';\n\nimport { getBulkOperationHistory } from './api';\nimport { bulkOperationHistoryQueryKeys } from './queryKeys';\nimport { transformHistoryEntry } from './utils';\n\n// Stable empty reference so the shaped read-model hook doesn't return a fresh\n// array on every render while the query is still loading.\nconst EMPTY_ARRAY: never[] = [];\n\n/**\n * useBulkOperationHistory()\n * Bulk grade-override upload history. Single-responsibility query hook: the\n * caller decides when it may run via `courseId` and `enabled`.\n */\nexport const useBulkOperationHistory = (\n courseId: string,\n { enabled = true }: { enabled?: boolean } = {},\n) => useQuery({\n queryKey: bulkOperationHistoryQueryKeys.byCourse(courseId),\n queryFn: () => getBulkOperationHistory(courseId),\n enabled: !!courseId && enabled,\n});\n\n/**\n * useBulkManagementHistoryEntries()\n * Read-model for the history table: wires the roles + assignment-types gates\n * into `useBulkOperationHistory` and shapes the results with\n * `transformHistoryEntry`. Replaces the former facade selector\n * `selectors.grades.useBulkManagementHistoryEntries`.\n */\nexport const useBulkManagementHistoryEntries = () => {\n const { courseId, enabled } = useCourseIdWithGate();\n const { data: assignmentTypesData } = useAssignmentTypes(courseId, { enabled });\n const { data } = useBulkOperationHistory(courseId, {\n enabled: enabled && !!assignmentTypesData?.bulkManagementAvailable,\n });\n return (data ?? EMPTY_ARRAY).map(transformHistoryEntry);\n};\n"]}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { useFilters } from '../../../data/filtersContext';
|
|
2
|
+
import { useCourseId } from '../../../data/courseIdContext';
|
|
2
3
|
import { trackFilterApplied } from '../../../data/services/segment/events';
|
|
3
4
|
import { useRefetchGrades } from '../../GradesView/data/hooks';
|
|
4
5
|
import { useAreCourseGradeFiltersValid } from '../data/hooks';
|
|
5
6
|
export const useCourseGradeFilterData = ({ updateQueryParams, }) => {
|
|
6
7
|
const isDisabled = !useAreCourseGradeFiltersValid();
|
|
8
|
+
const courseId = useCourseId();
|
|
7
9
|
const { courseGradeMin, courseGradeMax, setCourseGradeMin, setCourseGradeMax, applyCourseGradeLimits, } = useFilters();
|
|
8
10
|
const fetchGrades = useRefetchGrades();
|
|
9
11
|
const handleApplyClick = () => {
|
|
10
12
|
const localCourseLimits = { courseGradeMin, courseGradeMax };
|
|
11
13
|
applyCourseGradeLimits(localCourseLimits);
|
|
12
|
-
trackFilterApplied();
|
|
14
|
+
trackFilterApplied(courseId);
|
|
13
15
|
fetchGrades();
|
|
14
16
|
updateQueryParams(localCourseLimits);
|
|
15
17
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../src/components/GradebookFilters/CourseGradeFilter/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EACvC,iBAAiB,GAClB,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,CAAC,6BAA6B,EAAE,CAAC;IACpD,MAAM,EACJ,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,GACvB,GAAG,UAAU,EAAE,CAAC;IACjB,MAAM,WAAW,GAAG,gBAAgB,EAAE,CAAC;IAEvC,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,MAAM,iBAAiB,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;QAC7D,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;QAC1C,kBAAkB,
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../src/components/GradebookFilters/CourseGradeFilter/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EACvC,iBAAiB,GAClB,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,CAAC,6BAA6B,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,EACJ,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,GACvB,GAAG,UAAU,EAAE,CAAC;IACjB,MAAM,WAAW,GAAG,gBAAgB,EAAE,CAAC;IAEvC,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,MAAM,iBAAiB,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;QAC7D,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;QAC1C,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC7B,WAAW,EAAE,CAAC;QACd,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,EAAE;YACH,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gBACd,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;SACF;QACD,GAAG,EAAE;YACH,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gBACd,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;SACF;QACD,gBAAgB;QAChB,UAAU;KACX,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,wBAAwB,CAAC","sourcesContent":["import { useFilters } from '@src/data/filtersContext';\nimport { useCourseId } from '@src/data/courseIdContext';\nimport { trackFilterApplied } from '@src/data/services/segment/events';\nimport { useRefetchGrades } from '@src/components/GradesView/data/hooks';\n\nimport { useAreCourseGradeFiltersValid } from '../data/hooks';\n\nexport const useCourseGradeFilterData = ({\n updateQueryParams,\n}) => {\n const isDisabled = !useAreCourseGradeFiltersValid();\n const courseId = useCourseId();\n const {\n courseGradeMin,\n courseGradeMax,\n setCourseGradeMin,\n setCourseGradeMax,\n applyCourseGradeLimits,\n } = useFilters();\n const fetchGrades = useRefetchGrades();\n\n const handleApplyClick = () => {\n const localCourseLimits = { courseGradeMin, courseGradeMax };\n applyCourseGradeLimits(localCourseLimits);\n trackFilterApplied(courseId);\n fetchGrades();\n updateQueryParams(localCourseLimits);\n };\n\n return {\n max: {\n value: courseGradeMax,\n onChange: (e) => {\n setCourseGradeMax(e.target.value);\n },\n },\n min: {\n value: courseGradeMin,\n onChange: (e) => {\n setCourseGradeMin(e.target.value);\n },\n },\n handleApplyClick,\n isDisabled,\n };\n};\n\nexport default useCourseGradeFilterData;\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* getCohorts()
|
|
2
|
+
* getCohorts(courseId)
|
|
3
3
|
* Fetches the list of cohorts for the course.
|
|
4
4
|
*/
|
|
5
|
-
export declare const getCohorts: () => Promise<any>;
|
|
5
|
+
export declare const getCohorts: (courseId: string) => Promise<any>;
|
|
6
6
|
/**
|
|
7
|
-
* getTracks()
|
|
7
|
+
* getTracks(courseId)
|
|
8
8
|
* Fetches the course's enrollment tracks (course modes).
|
|
9
9
|
*/
|
|
10
|
-
export declare const getTracks: () => Promise<any>;
|
|
10
|
+
export declare const getTracks: (courseId: string) => Promise<any>;
|
|
@@ -9,19 +9,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import lms from '../../../data/services/lms';
|
|
11
11
|
/**
|
|
12
|
-
* getCohorts()
|
|
12
|
+
* getCohorts(courseId)
|
|
13
13
|
* Fetches the list of cohorts for the course.
|
|
14
14
|
*/
|
|
15
|
-
export const getCohorts = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
-
const { data } = yield lms.api.fetch.cohorts();
|
|
15
|
+
export const getCohorts = (courseId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
const { data } = yield lms.api.fetch.cohorts(courseId);
|
|
17
17
|
return data;
|
|
18
18
|
});
|
|
19
19
|
/**
|
|
20
|
-
* getTracks()
|
|
20
|
+
* getTracks(courseId)
|
|
21
21
|
* Fetches the course's enrollment tracks (course modes).
|
|
22
22
|
*/
|
|
23
|
-
export const getTracks = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
|
-
const { data } = yield lms.api.fetch.tracks();
|
|
23
|
+
export const getTracks = (courseId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
|
+
const { data } = yield lms.api.fetch.tracks(courseId);
|
|
25
25
|
return data.course_modes;
|
|
26
26
|
});
|
|
27
27
|
//# sourceMappingURL=api.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/components/GradebookFilters/data/api.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,GAAG,MAAM,wBAAwB,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/components/GradebookFilters/data/api.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,GAAG,MAAM,wBAAwB,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAO,QAAgB,EAAE,EAAE;IACnD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC,CAAA,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAO,QAAgB,EAAE,EAAE;IAClD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtD,OAAO,IAAI,CAAC,YAAY,CAAC;AAC3B,CAAC,CAAA,CAAC","sourcesContent":["import lms from '@src/data/services/lms';\n\n/**\n * getCohorts(courseId)\n * Fetches the list of cohorts for the course.\n */\nexport const getCohorts = async (courseId: string) => {\n const { data } = await lms.api.fetch.cohorts(courseId);\n return data;\n};\n\n/**\n * getTracks(courseId)\n * Fetches the course's enrollment tracks (course modes).\n */\nexport const getTracks = async (courseId: string) => {\n const { data } = await lms.api.fetch.tracks(courseId);\n return data.course_modes;\n};\n"]}
|
|
@@ -8,7 +8,7 @@ import { cohortsQueryKeys, tracksQueryKeys } from './queryKeys';
|
|
|
8
8
|
*/
|
|
9
9
|
export const useCohorts = (courseId, { enabled = true } = {}) => useQuery({
|
|
10
10
|
queryKey: cohortsQueryKeys.byCourse(courseId),
|
|
11
|
-
queryFn: getCohorts,
|
|
11
|
+
queryFn: () => getCohorts(courseId),
|
|
12
12
|
enabled: !!courseId && enabled,
|
|
13
13
|
});
|
|
14
14
|
/**
|
|
@@ -18,7 +18,7 @@ export const useCohorts = (courseId, { enabled = true } = {}) => useQuery({
|
|
|
18
18
|
*/
|
|
19
19
|
export const useTracks = (courseId, { enabled = true } = {}) => useQuery({
|
|
20
20
|
queryKey: tracksQueryKeys.byCourse(courseId),
|
|
21
|
-
queryFn: getTracks,
|
|
21
|
+
queryFn: () => getTracks(courseId),
|
|
22
22
|
enabled: !!courseId && enabled,
|
|
23
23
|
});
|
|
24
24
|
//# sourceMappingURL=apiHook.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../../src/components/GradebookFilters/data/apiHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEhE;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,QAAgB,EAChB,EAAE,OAAO,GAAG,IAAI,KAA4B,EAAE,EAC9C,EAAE,CAAC,QAAQ,CAAC;IACZ,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC7C,OAAO,EAAE,UAAU;
|
|
1
|
+
{"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../../src/components/GradebookFilters/data/apiHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEhE;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,QAAgB,EAChB,EAAE,OAAO,GAAG,IAAI,KAA4B,EAAE,EAC9C,EAAE,CAAC,QAAQ,CAAC;IACZ,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC7C,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,QAAQ,IAAI,OAAO;CAC/B,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,QAAgB,EAChB,EAAE,OAAO,GAAG,IAAI,KAA4B,EAAE,EAC9C,EAAE,CAAC,QAAQ,CAAC;IACZ,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC5C,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,QAAQ,IAAI,OAAO;CAC/B,CAAC,CAAC","sourcesContent":["import { useQuery } from '@tanstack/react-query';\n\nimport { getCohorts, getTracks } from './api';\nimport { cohortsQueryKeys, tracksQueryKeys } from './queryKeys';\n\n/**\n * useCohorts()\n * Single-responsibility query for the course's cohorts. Caller supplies\n * `courseId` and decides when it may run via `enabled`.\n */\nexport const useCohorts = (\n courseId: string,\n { enabled = true }: { enabled?: boolean } = {},\n) => useQuery({\n queryKey: cohortsQueryKeys.byCourse(courseId),\n queryFn: () => getCohorts(courseId),\n enabled: !!courseId && enabled,\n});\n\n/**\n * useTracks()\n * Single-responsibility query for the course's enrollment tracks. Caller\n * supplies `courseId` and decides when it may run via `enabled`.\n */\nexport const useTracks = (\n courseId: string,\n { enabled = true }: { enabled?: boolean } = {},\n) => useQuery({\n queryKey: tracksQueryKeys.byCourse(courseId),\n queryFn: () => getTracks(courseId),\n enabled: !!courseId && enabled,\n});\n"]}
|
|
@@ -1,14 +1,37 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Link } from 'react-router-dom';
|
|
3
|
+
import { resolveRouteByRole, useIntl } from '@openedx/frontend-base';
|
|
3
4
|
import { Button } from '@openedx/paragon';
|
|
4
5
|
import { instructorDashboardUrl } from '../../data/services/lms/urls';
|
|
6
|
+
import { useGradebookNavigation } from '../../data/gradebookNavigationContext';
|
|
5
7
|
import useGradebookHeaderData from './hooks';
|
|
6
8
|
import messages from './messages';
|
|
9
|
+
const instructorDashboardRole = 'org.openedx.frontend.role.instructorDashboard';
|
|
7
10
|
export const GradebookHeader = () => {
|
|
8
11
|
const { formatMessage } = useIntl();
|
|
9
12
|
const { areGradesFrozen, canUserViewGradebook, courseId, handleToggleViewClick, showBulkManagement, toggleViewMessage, } = useGradebookHeaderData();
|
|
10
|
-
const
|
|
11
|
-
|
|
13
|
+
const { onBack } = useGradebookNavigation();
|
|
14
|
+
// Prefer the instructor dashboard route if the running site provides one,
|
|
15
|
+
// so navigation stays within the SPA; otherwise fall back to a full page
|
|
16
|
+
// load of the legacy LMS dashboard. Skip resolving when the host provides
|
|
17
|
+
// its own onBack or the courseId isn't ready — resolveRouteByRole throws
|
|
18
|
+
// "Missing :courseId param" otherwise.
|
|
19
|
+
const dashboardRoute = (!onBack && courseId)
|
|
20
|
+
? resolveRouteByRole(instructorDashboardRole, { courseId })
|
|
21
|
+
: null;
|
|
22
|
+
const backLinkContent = (_jsxs(_Fragment, { children: [_jsx("span", { "aria-hidden": "true", children: '<< ' }), formatMessage(messages.backToDashboard)] }));
|
|
23
|
+
const renderBackLink = () => {
|
|
24
|
+
var _a;
|
|
25
|
+
// Host-provided handler wins over URL navigation (e.g. CCX Coach tab).
|
|
26
|
+
if (onBack) {
|
|
27
|
+
return (_jsx(Button, { variant: "link", className: "mb-3 p-0", onClick: onBack, children: backLinkContent }));
|
|
28
|
+
}
|
|
29
|
+
if (dashboardRoute === null || dashboardRoute === void 0 ? void 0 : dashboardRoute.isInternal) {
|
|
30
|
+
return _jsx(Link, { to: dashboardRoute.url, className: "mb-3", children: backLinkContent });
|
|
31
|
+
}
|
|
32
|
+
return _jsx("a", { href: (_a = dashboardRoute === null || dashboardRoute === void 0 ? void 0 : dashboardRoute.url) !== null && _a !== void 0 ? _a : instructorDashboardUrl(courseId), className: "mb-3", children: backLinkContent });
|
|
33
|
+
};
|
|
34
|
+
return (_jsxs("div", { className: "gradebook-header", children: [renderBackLink(), _jsx("h1", { children: formatMessage(messages.gradebook) }), _jsxs("div", { className: "subtitle-row d-flex justify-content-between align-items-center", children: [_jsx("h2", { className: "text-break", children: courseId }), showBulkManagement && (_jsx(Button, { variant: "tertiary", onClick: handleToggleViewClick, children: formatMessage(toggleViewMessage) }))] }), areGradesFrozen && (_jsx("div", { className: "alert alert-warning", role: "alert", children: formatMessage(messages.frozenWarning) })), (canUserViewGradebook === false) && (_jsx("div", { className: "alert alert-warning", role: "alert", children: formatMessage(messages.unauthorizedWarning) }))] }));
|
|
12
35
|
};
|
|
13
36
|
export default GradebookHeader;
|
|
14
37
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/GradebookHeader/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/GradebookHeader/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,sBAAsB,MAAM,SAAS,CAAC;AAC7C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,uBAAuB,GAAG,+CAA+C,CAAC;AAEhF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE;IAClC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EACJ,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,GAClB,GAAG,sBAAsB,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAC5C,0EAA0E;IAC1E,yEAAyE;IACzE,0EAA0E;IAC1E,yEAAyE;IACzE,uCAAuC;IACvC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC;QAC1C,CAAC,CAAC,kBAAkB,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,CAAC;QAC3D,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,eAAe,GAAG,CACtB,8BACE,8BAAkB,MAAM,YAAE,KAAK,GAAQ,EACtC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,IACvC,CACJ,CAAC;IACF,MAAM,cAAc,GAAG,GAAG,EAAE;;QAC1B,uEAAuE;QACvE,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CACL,KAAC,MAAM,IAAC,OAAO,EAAC,MAAM,EAAC,SAAS,EAAC,UAAU,EAAC,OAAO,EAAE,MAAM,YACxD,eAAe,GACT,CACV,CAAC;QACJ,CAAC;QACD,IAAI,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,UAAU,EAAE,CAAC;YAC/B,OAAO,KAAC,IAAI,IAAC,EAAE,EAAE,cAAc,CAAC,GAAG,EAAE,SAAS,EAAC,MAAM,YAAE,eAAe,GAAQ,CAAC;QACjF,CAAC;QACD,OAAO,YAAG,IAAI,EAAE,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,GAAG,mCAAI,sBAAsB,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAC,MAAM,YAAE,eAAe,GAAK,CAAC;IAClH,CAAC,CAAC;IACF,OAAO,CACL,eAAK,SAAS,EAAC,kBAAkB,aAC9B,cAAc,EAAE,EACjB,uBAAK,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAM,EAC5C,eAAK,SAAS,EAAC,gEAAgE,aAC7E,aAAI,SAAS,EAAC,YAAY,YAAE,QAAQ,GAAM,EACzC,kBAAkB,IAAI,CACrB,KAAC,MAAM,IAAC,OAAO,EAAC,UAAU,EAAC,OAAO,EAAE,qBAAqB,YACtD,aAAa,CAAC,iBAAiB,CAAC,GAC1B,CACV,IACG,EACL,eAAe,IAAI,CAClB,cAAK,SAAS,EAAC,qBAAqB,EAAC,IAAI,EAAC,OAAO,YAC9C,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,GAClC,CACP,EACA,CAAC,oBAAoB,KAAK,KAAK,CAAC,IAAI,CACnC,cAAK,SAAS,EAAC,qBAAqB,EAAC,IAAI,EAAC,OAAO,YAC9C,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GACxC,CACP,IACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC","sourcesContent":["import { Link } from 'react-router-dom';\n\nimport { resolveRouteByRole, useIntl } from '@openedx/frontend-base';\nimport { Button } from '@openedx/paragon';\n\nimport { instructorDashboardUrl } from '@src/data/services/lms/urls';\nimport { useGradebookNavigation } from '@src/data/gradebookNavigationContext';\nimport useGradebookHeaderData from './hooks';\nimport messages from './messages';\n\nconst instructorDashboardRole = 'org.openedx.frontend.role.instructorDashboard';\n\nexport const GradebookHeader = () => {\n const { formatMessage } = useIntl();\n const {\n areGradesFrozen,\n canUserViewGradebook,\n courseId,\n handleToggleViewClick,\n showBulkManagement,\n toggleViewMessage,\n } = useGradebookHeaderData();\n const { onBack } = useGradebookNavigation();\n // Prefer the instructor dashboard route if the running site provides one,\n // so navigation stays within the SPA; otherwise fall back to a full page\n // load of the legacy LMS dashboard. Skip resolving when the host provides\n // its own onBack or the courseId isn't ready — resolveRouteByRole throws\n // \"Missing :courseId param\" otherwise.\n const dashboardRoute = (!onBack && courseId)\n ? resolveRouteByRole(instructorDashboardRole, { courseId })\n : null;\n const backLinkContent = (\n <>\n <span aria-hidden=\"true\">{'<< '}</span>\n {formatMessage(messages.backToDashboard)}\n </>\n );\n const renderBackLink = () => {\n // Host-provided handler wins over URL navigation (e.g. CCX Coach tab).\n if (onBack) {\n return (\n <Button variant=\"link\" className=\"mb-3 p-0\" onClick={onBack}>\n {backLinkContent}\n </Button>\n );\n }\n if (dashboardRoute?.isInternal) {\n return <Link to={dashboardRoute.url} className=\"mb-3\">{backLinkContent}</Link>;\n }\n return <a href={dashboardRoute?.url ?? instructorDashboardUrl(courseId)} className=\"mb-3\">{backLinkContent}</a>;\n };\n return (\n <div className=\"gradebook-header\">\n {renderBackLink()}\n <h1>{formatMessage(messages.gradebook)}</h1>\n <div className=\"subtitle-row d-flex justify-content-between align-items-center\">\n <h2 className=\"text-break\">{courseId}</h2>\n {showBulkManagement && (\n <Button variant=\"tertiary\" onClick={handleToggleViewClick}>\n {formatMessage(toggleViewMessage)}\n </Button>\n )}\n </div>\n {areGradesFrozen && (\n <div className=\"alert alert-warning\" role=\"alert\">\n {formatMessage(messages.frozenWarning)}\n </div>\n )}\n {(canUserViewGradebook === false) && (\n <div className=\"alert alert-warning\" role=\"alert\">\n {formatMessage(messages.unauthorizedWarning)}\n </div>\n )}\n </div>\n );\n};\n\nexport default GradebookHeader;\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import NetworkButton from '../../NetworkButton';
|
|
3
3
|
import { useShowBulkManagement } from '../../../data/apiHook';
|
|
4
|
+
import { useCourseId } from '../../../data/courseIdContext';
|
|
4
5
|
import { trackGradesReportDownloaded } from '../../../data/services/segment/events';
|
|
5
6
|
import ImportGradesButton from '../ImportGradesButton';
|
|
6
7
|
import { useGradeExportUrl } from '../data/hooks';
|
|
@@ -13,8 +14,9 @@ import messages from './messages';
|
|
|
13
14
|
export const BulkManagementControls = () => {
|
|
14
15
|
const gradeExportUrl = useGradeExportUrl();
|
|
15
16
|
const showBulkManagement = useShowBulkManagement();
|
|
17
|
+
const courseId = useCourseId();
|
|
16
18
|
const handleClickExportGrades = () => {
|
|
17
|
-
trackGradesReportDownloaded();
|
|
19
|
+
trackGradesReportDownloaded(courseId);
|
|
18
20
|
window.location.assign(gradeExportUrl);
|
|
19
21
|
};
|
|
20
22
|
if (!showBulkManagement) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradesView/BulkManagementControls/index.jsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAEhF,OAAO,kBAAkB,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE;IACzC,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAC3C,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradesView/BulkManagementControls/index.jsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAEhF,OAAO,kBAAkB,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE;IACzC,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAC3C,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;IACnD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,MAAM,uBAAuB,GAAG,GAAG,EAAE;QACnC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IACzC,OAAO,CACL,eAAK,SAAS,EAAC,QAAQ,aACrB,KAAC,aAAa,IACZ,KAAK,EAAE,QAAQ,CAAC,iBAAiB,EACjC,OAAO,EAAE,uBAAuB,GAChC,EACF,KAAC,kBAAkB,KAAG,IAClB,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,sBAAsB,CAAC","sourcesContent":["import NetworkButton from '@src/components/NetworkButton';\nimport { useShowBulkManagement } from '@src/data/apiHook';\nimport { useCourseId } from '@src/data/courseIdContext';\nimport { trackGradesReportDownloaded } from '@src/data/services/segment/events';\n\nimport ImportGradesButton from '../ImportGradesButton';\nimport { useGradeExportUrl } from '../data/hooks';\nimport messages from './messages';\n\n/**\n * <BulkManagementControls />\n * Provides download buttons for Bulk Management and Intervention reports, only if\n * showBulkManagement is set in redus.\n */\nexport const BulkManagementControls = () => {\n const gradeExportUrl = useGradeExportUrl();\n const showBulkManagement = useShowBulkManagement();\n const courseId = useCourseId();\n\n const handleClickExportGrades = () => {\n trackGradesReportDownloaded(courseId);\n window.location.assign(gradeExportUrl);\n };\n\n if (!showBulkManagement) { return null; }\n return (\n <div className=\"d-flex\">\n <NetworkButton\n label={messages.downloadGradesBtn}\n onClick={handleClickExportGrades}\n />\n <ImportGradesButton />\n </div>\n );\n};\n\nexport default BulkManagementControls;\n"]}
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useIntl } from '@openedx/frontend-base';
|
|
3
3
|
import NetworkButton from '../../NetworkButton';
|
|
4
4
|
import { useShowBulkManagement } from '../../../data/apiHook';
|
|
5
|
+
import { useCourseId } from '../../../data/courseIdContext';
|
|
5
6
|
import { trackInterventionReportDownloaded } from '../../../data/services/segment/events';
|
|
6
7
|
import { useInterventionExportUrl } from '../data/hooks';
|
|
7
8
|
import messages from './messages';
|
|
@@ -13,9 +14,10 @@ import messages from './messages';
|
|
|
13
14
|
export const InterventionsReport = () => {
|
|
14
15
|
const interventionExportUrl = useInterventionExportUrl();
|
|
15
16
|
const showBulkManagement = useShowBulkManagement();
|
|
17
|
+
const courseId = useCourseId();
|
|
16
18
|
const { formatMessage } = useIntl();
|
|
17
19
|
const handleClick = () => {
|
|
18
|
-
trackInterventionReportDownloaded();
|
|
20
|
+
trackInterventionReportDownloaded(courseId);
|
|
19
21
|
window.location.assign(interventionExportUrl);
|
|
20
22
|
};
|
|
21
23
|
if (!showBulkManagement) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradesView/InterventionsReport/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,aAAa,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,iCAAiC,EAAE,MAAM,mCAAmC,CAAC;AAEtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,MAAM,qBAAqB,GAAG,wBAAwB,EAAE,CAAC;IACzD,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;IACnD,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,iCAAiC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/GradesView/InterventionsReport/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,aAAa,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iCAAiC,EAAE,MAAM,mCAAmC,CAAC;AAEtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,MAAM,qBAAqB,GAAG,wBAAwB,EAAE,CAAC;IACzD,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;IACnD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,iCAAiC,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,0BACE,aAAI,SAAS,EAAC,MAAM,YACjB,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,GAC3B,EACL,eACE,SAAS,EAAC,mDAAmD,aAE7D,cAAK,SAAS,EAAC,iCAAiC,YAC7C,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,GAChC,EACN,KAAC,aAAa,IACZ,KAAK,EAAE,QAAQ,CAAC,WAAW,EAC3B,OAAO,EAAE,WAAW,GACpB,IACE,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC","sourcesContent":["import { useIntl } from '@openedx/frontend-base';\n\nimport NetworkButton from '@src/components/NetworkButton';\nimport { useShowBulkManagement } from '@src/data/apiHook';\nimport { useCourseId } from '@src/data/courseIdContext';\nimport { trackInterventionReportDownloaded } from '@src/data/services/segment/events';\n\nimport { useInterventionExportUrl } from '../data/hooks';\nimport messages from './messages';\n\n/**\n * <InterventionsReport />\n * Provides download buttons for Bulk Management and Intervention reports, only if\n * showBulkManagement is set in redus.\n */\nexport const InterventionsReport = () => {\n const interventionExportUrl = useInterventionExportUrl();\n const showBulkManagement = useShowBulkManagement();\n const courseId = useCourseId();\n const { formatMessage } = useIntl();\n\n const handleClick = () => {\n trackInterventionReportDownloaded(courseId);\n window.location.assign(interventionExportUrl);\n };\n\n if (!showBulkManagement) {\n return null;\n }\n\n return (\n <div>\n <h4 className=\"mt-0\">\n {formatMessage(messages.title)}\n </h4>\n <div\n className=\"d-flex justify-content-between align-items-center\"\n >\n <div className=\"intervention-report-description\">\n {formatMessage(messages.description)}\n </div>\n <NetworkButton\n label={messages.downloadBtn}\n onClick={handleClick}\n />\n </div>\n </div>\n );\n};\n\nexport default InterventionsReport;\n"]}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* response body (results/previous/next/counts) — sorting/shaping happens in the
|
|
6
6
|
* consumer, matching the old `fetching.received` handling.
|
|
7
7
|
*/
|
|
8
|
-
export declare const getGrades: ({ searchText, cohort, track, options, }: {
|
|
8
|
+
export declare const getGrades: ({ courseId, searchText, cohort, track, options, }: {
|
|
9
|
+
courseId: string;
|
|
9
10
|
searchText: string | null;
|
|
10
11
|
cohort: unknown;
|
|
11
12
|
track: unknown;
|
|
@@ -18,8 +18,8 @@ import { formatGradeOverrideForDisplay } from './utils';
|
|
|
18
18
|
* response body (results/previous/next/counts) — sorting/shaping happens in the
|
|
19
19
|
* consumer, matching the old `fetching.received` handling.
|
|
20
20
|
*/
|
|
21
|
-
export const getGrades = (_a) => __awaiter(void 0, [_a], void 0, function* ({ searchText, cohort, track, options, }) {
|
|
22
|
-
const { data } = yield lms.api.fetch.gradebookData(searchText, cohort, track, options);
|
|
21
|
+
export const getGrades = (_a) => __awaiter(void 0, [_a], void 0, function* ({ courseId, searchText, cohort, track, options, }) {
|
|
22
|
+
const { data } = yield lms.api.fetch.gradebookData(courseId, searchText, cohort, track, options);
|
|
23
23
|
return data;
|
|
24
24
|
});
|
|
25
25
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/components/GradesView/data/api.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,GAAG,MAAM,wBAAwB,CAAC;AACzC,OAAO,wCAAwC,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/components/GradesView/data/api.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,GAAG,MAAM,wBAAwB,CAAC;AACzC,OAAO,wCAAwC,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAYtB,EAAE,4CAZ2B,EAC9B,QAAQ,EACR,UAAU,EACV,MAAM,EACN,KAAK,EACL,OAAO,GAOR;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACjG,OAAO,IAAI,CAAC;AACd,CAAC,CAAA,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAO,QAAgB,EAAE,EAAE;IACtD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC;AACd,CAAC,CAAA,CAAC;AAeF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,YAAoB,EACpB,MAAuB,EACQ,EAAE;IACjC,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,wCAAwC,CAAC,CAAC;IAClF,CAAC;IACD,OAAO;QACL,eAAe,EAAE,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC;QAC5D,wBAAwB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI;QAClF,0BAA0B,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI;QACtF,2BAA2B,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI;QACxF,6BAA6B,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI;QAC5F,sBAAsB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;QACnF,wBAAwB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;QACvF,yBAAyB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;QACzF,2BAA2B,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;KAC9F,CAAC;AACJ,CAAC,CAAA,CAAC","sourcesContent":["import { getAuthenticatedHttpClient } from '@openedx/frontend-base';\n\nimport lms from '@src/data/services/lms';\nimport GRADE_OVERRIDE_HISTORY_ERROR_DEFAULT_MSG from '@src/data/constants/errors';\nimport { formatGradeOverrideForDisplay } from './utils';\n\n/**\n * getGrades({ searchText, cohort, track, options })\n * Fetches the gradebook rows for the current filter selection. Params mirror the\n * legacy `fetchGrades` thunk (which reads them from Redux); returns the raw\n * response body (results/previous/next/counts) — sorting/shaping happens in the\n * consumer, matching the old `fetching.received` handling.\n */\nexport const getGrades = async ({\n courseId,\n searchText,\n cohort,\n track,\n options,\n}: {\n courseId: string;\n searchText: string | null;\n cohort: unknown;\n track: unknown;\n options: Record<string, unknown>;\n}) => {\n const { data } = await lms.api.fetch.gradebookData(courseId, searchText, cohort, track, options);\n return data;\n};\n\n/**\n * getGradesPage(endpoint)\n * Fetches a specific grades page by its opaque prev/next cursor URL (taken from a\n * prior response's `previous`/`next`). Returns the raw response body, the same\n * shape as `getGrades`. Mirrors the legacy `fetchPrevNextGrades` thunk.\n */\nexport const getGradesPage = async (endpoint: string) => {\n const { data } = await getAuthenticatedHttpClient().get(endpoint);\n return data;\n};\n\n/** Grade-override history for one learner on one subsection (display-shaped). */\nexport interface GradeOverrideHistory {\n overrideHistory: { date: string; grader: string; reason: string; adjustedGrade: unknown }[];\n currentEarnedAllOverride: number | null;\n currentPossibleAllOverride: number | null;\n currentEarnedGradedOverride: number | null;\n currentPossibleGradedOverride: number | null;\n originalGradeEarnedAll: number | null;\n originalGradePossibleAll: number | null;\n originalGradeEarnedGraded: number | null;\n originalGradePossibleGraded: number | null;\n}\n\n/**\n * getGradeOverrideHistory(subsectionId, userId)\n * Fetches and shapes the grade-override history for a learner/subsection. Mirrors\n * the legacy thunk: throws the default message on a network error, and the\n * server-provided message (or the default) when the API reports `success: false`.\n */\nexport const getGradeOverrideHistory = async (\n subsectionId: string,\n userId: string | number,\n): Promise<GradeOverrideHistory> => {\n let data;\n try {\n ({ data } = await lms.api.fetch.gradeOverrideHistory(subsectionId, userId));\n } catch (e) {\n throw new Error(GRADE_OVERRIDE_HISTORY_ERROR_DEFAULT_MSG);\n }\n if (!data.success) {\n throw new Error(data.error_message || GRADE_OVERRIDE_HISTORY_ERROR_DEFAULT_MSG);\n }\n return {\n overrideHistory: formatGradeOverrideForDisplay(data.history),\n currentEarnedAllOverride: data.override ? data.override.earned_all_override : null,\n currentPossibleAllOverride: data.override ? data.override.possible_all_override : null,\n currentEarnedGradedOverride: data.override ? data.override.earned_graded_override : null,\n currentPossibleGradedOverride: data.override ? data.override.possible_graded_override : null,\n originalGradeEarnedAll: data.original_grade ? data.original_grade.earned_all : null,\n originalGradePossibleAll: data.original_grade ? data.original_grade.possible_all : null,\n originalGradeEarnedGraded: data.original_grade ? data.original_grade.earned_graded : null,\n originalGradePossibleGraded: data.original_grade ? data.original_grade.possible_graded : null,\n };\n};\n"]}
|