Compare commits
8 Commits
open-relea
...
open-relea
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
706d0ba36b | ||
|
|
aa2b1a56bc | ||
|
|
e795163aa6 | ||
|
|
bd25b6b4d0 | ||
|
|
acdad5af00 | ||
|
|
ba9fb375d9 | ||
|
|
f303712830 | ||
|
|
b536180a3e |
10
package-lock.json
generated
10
package-lock.json
generated
@@ -12,7 +12,7 @@
|
||||
"@edx/brand": "npm:@edx/brand-openedx@^1.2.0",
|
||||
"@edx/frontend-component-footer": "12.2.0",
|
||||
"@edx/frontend-component-header": "4.6.0",
|
||||
"@edx/frontend-platform": "5.0.0",
|
||||
"@edx/frontend-platform": "5.5.4",
|
||||
"@edx/paragon": "20.45.0",
|
||||
"@edx/react-unit-test-utils": "1.7.0",
|
||||
"@edx/reactifex": "^2.1.1",
|
||||
@@ -2452,9 +2452,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@edx/frontend-platform": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@edx/frontend-platform/-/frontend-platform-5.0.0.tgz",
|
||||
"integrity": "sha512-DD9/B4rnC3BKPiWlbEFF1JIYFbWC6vUBKTyN8sf4khi4DNhhWhsobk+iNeCWNzF9UgCPRbniIqesdV1F9NXNZw==",
|
||||
"version": "5.5.4",
|
||||
"resolved": "https://registry.npmjs.org/@edx/frontend-platform/-/frontend-platform-5.5.4.tgz",
|
||||
"integrity": "sha512-Yum+oST7XfDwDnDhBnzeR/mjp6O+G0g+5AZtIJ1BdTKQH1z9FObfim/pfoiI9STiYlguVpeWMkzWuca/QMLO/Q==",
|
||||
"dependencies": {
|
||||
"@cospired/i18n-iso-languages": "4.1.0",
|
||||
"@formatjs/intl-pluralrules": "4.3.3",
|
||||
@@ -2482,7 +2482,7 @@
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@edx/frontend-build": ">= 8.1.0 || ^12.9.0-alpha.1",
|
||||
"@edx/paragon": ">= 10.0.0 < 21.0.0",
|
||||
"@edx/paragon": ">= 10.0.0 < 22.0.0",
|
||||
"prop-types": "^15.7.2",
|
||||
"react": "^16.9.0 || ^17.0.0",
|
||||
"react-dom": "^16.9.0 || ^17.0.0",
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"@edx/brand": "npm:@edx/brand-openedx@^1.2.0",
|
||||
"@edx/frontend-component-footer": "12.2.0",
|
||||
"@edx/frontend-component-header": "4.6.0",
|
||||
"@edx/frontend-platform": "5.0.0",
|
||||
"@edx/frontend-platform": "5.5.4",
|
||||
"@edx/paragon": "20.45.0",
|
||||
"@edx/react-unit-test-utils": "1.7.0",
|
||||
"@edx/reactifex": "^2.1.1",
|
||||
|
||||
@@ -6,7 +6,6 @@ import { AppProvider } from '@edx/frontend-platform/react';
|
||||
import Footer from '@edx/frontend-component-footer';
|
||||
import Header from '@edx/frontend-component-header';
|
||||
|
||||
import { routePath } from 'data/constants/app';
|
||||
import store from 'data/store';
|
||||
import GradebookPage from 'containers/GradebookPage';
|
||||
import './App.scss';
|
||||
@@ -20,7 +19,7 @@ const App = () => (
|
||||
<main>
|
||||
<Routes>
|
||||
<Route
|
||||
path={routePath}
|
||||
path="/:courseId"
|
||||
element={<GradebookPage />}
|
||||
/>
|
||||
</Routes>
|
||||
|
||||
@@ -7,7 +7,6 @@ import { AppProvider } from '@edx/frontend-platform/react';
|
||||
import Footer from '@edx/frontend-component-footer';
|
||||
import Header from '@edx/frontend-component-header';
|
||||
|
||||
import { routePath } from 'data/constants/app';
|
||||
import store from 'data/store';
|
||||
import GradebookPage from 'containers/GradebookPage';
|
||||
|
||||
@@ -21,9 +20,6 @@ jest.mock('react-router-dom', () => ({
|
||||
jest.mock('@edx/frontend-platform/react', () => ({
|
||||
AppProvider: () => 'AppProvider',
|
||||
}));
|
||||
jest.mock('data/constants/app', () => ({
|
||||
routePath: '/:courseId',
|
||||
}));
|
||||
jest.mock('@edx/frontend-component-footer', () => 'Footer');
|
||||
jest.mock('data/store', () => 'testStore');
|
||||
jest.mock('containers/GradebookPage', () => 'GradebookPage');
|
||||
@@ -66,7 +62,7 @@ describe('App router component', () => {
|
||||
expect(secondChild.find('main')).toEqual(shallow(
|
||||
<main>
|
||||
<Routes>
|
||||
<Route path={routePath} element={<GradebookPage />} />
|
||||
<Route path="/:courseId" element={<GradebookPage />} />
|
||||
</Routes>
|
||||
</main>,
|
||||
));
|
||||
|
||||
@@ -21,7 +21,9 @@ exports[`GradebookHeader component render default view shapshot 1`] = `
|
||||
<div
|
||||
className="subtitle-row d-flex justify-content-between align-items-center"
|
||||
>
|
||||
<h2>
|
||||
<h2
|
||||
className="text-break"
|
||||
>
|
||||
test-course-id
|
||||
</h2>
|
||||
</div>
|
||||
@@ -49,7 +51,9 @@ exports[`GradebookHeader component render frozen grades snapshot: show frozen wa
|
||||
<div
|
||||
className="subtitle-row d-flex justify-content-between align-items-center"
|
||||
>
|
||||
<h2>
|
||||
<h2
|
||||
className="text-break"
|
||||
>
|
||||
test-course-id
|
||||
</h2>
|
||||
</div>
|
||||
@@ -83,7 +87,9 @@ exports[`GradebookHeader component render show bulk management snapshot: show to
|
||||
<div
|
||||
className="subtitle-row d-flex justify-content-between align-items-center"
|
||||
>
|
||||
<h2>
|
||||
<h2
|
||||
className="text-break"
|
||||
>
|
||||
test-course-id
|
||||
</h2>
|
||||
<Button
|
||||
@@ -117,7 +123,9 @@ exports[`GradebookHeader component render user cannot view gradebook snapshot: s
|
||||
<div
|
||||
className="subtitle-row d-flex justify-content-between align-items-center"
|
||||
>
|
||||
<h2>
|
||||
<h2
|
||||
className="text-break"
|
||||
>
|
||||
test-course-id
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
@@ -26,7 +26,7 @@ export const GradebookHeader = () => {
|
||||
</a>
|
||||
<h1>{formatMessage(messages.gradebook)}</h1>
|
||||
<div className="subtitle-row d-flex justify-content-between align-items-center">
|
||||
<h2>{courseId}</h2>
|
||||
<h2 className="text-break">{courseId}</h2>
|
||||
{showBulkManagement && (
|
||||
<Button variant="tertiary" onClick={handleToggleViewClick}>
|
||||
{formatMessage(toggleViewMessage)}
|
||||
|
||||
@@ -20,6 +20,6 @@ exports[`OverrideTable component render snapshot 1`] = `
|
||||
},
|
||||
]
|
||||
}
|
||||
itemCount={2}
|
||||
itemCount={3}
|
||||
/>
|
||||
`;
|
||||
|
||||
@@ -9,7 +9,7 @@ const useOverrideTableData = () => {
|
||||
const { formatMessage } = useIntl();
|
||||
|
||||
const hide = selectors.grades.useHasOverrideErrors();
|
||||
const gradeOverrides = selectors.grades.useGradeData().gradeOverrideHistoryResults;
|
||||
const gradeOverrides = selectors.grades.useGradeData().gradeOverrideHistoryResults || [];
|
||||
const tableProps = {};
|
||||
if (!hide) {
|
||||
tableProps.columns = [
|
||||
|
||||
@@ -20,18 +20,20 @@ export const OverrideTable = () => {
|
||||
|
||||
if (hide) { return null; }
|
||||
|
||||
const tableData = [
|
||||
...data,
|
||||
{
|
||||
adjustedGrade: <AdjustedGradeInput />,
|
||||
date: formatDateForDisplay(new Date()),
|
||||
reason: <ReasonInput />,
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<DataTable
|
||||
columns={columns}
|
||||
data={[
|
||||
...data,
|
||||
{
|
||||
adjustedGrade: <AdjustedGradeInput />,
|
||||
date: formatDateForDisplay(new Date()),
|
||||
reason: <ReasonInput />,
|
||||
},
|
||||
]}
|
||||
itemCount={data.length}
|
||||
data={tableData}
|
||||
itemCount={tableData.length}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -7,6 +7,7 @@ exports[`FilterMenuToggle component render snapshot 1`] = `
|
||||
onClick={[MockFunction hooks.toggleFilterMenu]}
|
||||
>
|
||||
<Icon
|
||||
className="mr-1"
|
||||
src="FilterAlt"
|
||||
/>
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ export const FilterMenuToggle = () => {
|
||||
className="btn-primary align-self-start"
|
||||
onClick={toggleFilterMenu}
|
||||
>
|
||||
<Icon src={FilterAlt} /> {formatMessage(messages.editFilters)}
|
||||
<Icon src={FilterAlt} className="mr-1" /> {formatMessage(messages.editFilters)}
|
||||
</Button>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
}
|
||||
.grade-history-header{
|
||||
float: left;
|
||||
min-width: 170px;
|
||||
}
|
||||
|
||||
.grade-history-assignment{
|
||||
@@ -65,7 +66,7 @@
|
||||
.gradebook-container {
|
||||
width: 100%;
|
||||
overflow-x: auto;
|
||||
height: 600px;
|
||||
max-height: 600px;
|
||||
overflow-y: auto;
|
||||
position: relative;
|
||||
}
|
||||
@@ -122,3 +123,34 @@ select#ScoreView.form-control {
|
||||
border-right-color: $black;
|
||||
}
|
||||
}
|
||||
|
||||
#edit-filters-btn {
|
||||
@include media-breakpoint-down(xs) {
|
||||
width: 100%;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.search-container {
|
||||
@include media-breakpoint-down(xs) {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.pgn__modal-body-content .pgn__data-table-layout-wrapper {
|
||||
@include media-breakpoint-down(sm) {
|
||||
clear: both;
|
||||
padding: 1rem 0;
|
||||
}
|
||||
}
|
||||
|
||||
.page-gradebook {
|
||||
position: relative;
|
||||
|
||||
.sidebar-container {
|
||||
position: relative;
|
||||
}
|
||||
aside.sidebar {
|
||||
overflow: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`SearchControls component render snapshot 1`] = `
|
||||
<div>
|
||||
<div
|
||||
className="search-container"
|
||||
>
|
||||
<SearchField
|
||||
inputLabel="test-input-label"
|
||||
onBlur={[MockFunction hooks.onBlur]}
|
||||
|
||||
@@ -18,7 +18,7 @@ export const SearchControls = () => {
|
||||
} = useSearchControlsData();
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className="search-container">
|
||||
<SearchField
|
||||
onSubmit={onSubmit}
|
||||
inputLabel={inputLabel}
|
||||
|
||||
@@ -10,7 +10,7 @@ exports[`GradesView component render snapshot 1`] = `
|
||||
filter-step-heading
|
||||
</h3>
|
||||
<div
|
||||
className="d-flex justify-content-between"
|
||||
className="d-flex justify-content-between flex-wrap"
|
||||
>
|
||||
<FilterMenuToggle />
|
||||
<SearchControls />
|
||||
|
||||
@@ -34,7 +34,7 @@ export const GradesView = ({ updateQueryParams }) => {
|
||||
{stepHeadings.filter}
|
||||
</h3>
|
||||
|
||||
<div className="d-flex justify-content-between">
|
||||
<div className="d-flex justify-content-between flex-wrap">
|
||||
<FilterMenuToggle />
|
||||
<SearchControls />
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
import { StrictDict } from 'utils';
|
||||
import { getConfig } from '@edx/frontend-platform';
|
||||
|
||||
export const routePath = `${getConfig().PUBLIC_PATH}:courseId`;
|
||||
|
||||
export const views = StrictDict({
|
||||
grades: 'grades',
|
||||
|
||||
Reference in New Issue
Block a user