Skip to content

Commit 1b0585b

Browse files
authored
Lk/exam timer (#188)
* chore: add exam timer to modal view * chore: update some left over styling * chore: remove unused utils * chore: remove unused style
1 parent 56f060f commit 1b0585b

File tree

13 files changed

+142
-57
lines changed

13 files changed

+142
-57
lines changed

package-lock.json

Lines changed: 84 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
},
3636
"dependencies": {
3737
"@edx/brand": "npm:@edx/[email protected]",
38+
"@edx/frontend-lib-special-exams": "^2.29.0",
3839
"@edx/frontend-platform": "5.6.1",
3940
"@edx/paragon": "^21.5.3",
4041
"@edx/react-unit-test-utils": "1.7.1",
@@ -88,6 +89,10 @@
8889
"overrides": {
8990
"@edx/react-unit-test-utils": {
9091
"@edx/frontend-build": "12.9.0-alpha.6"
92+
},
93+
"@edx/frontend-lib-special-exams": {
94+
"@edx/frontend-build": "12.9.0-alpha.6",
95+
"@edx/paragon": "^21.5.3"
9196
}
9297
}
9398
}

src/components/Assessment/Assessment.scss

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
@import "~@edx/brand/paragon/overrides";
44

55
.assessment-card {
6-
width: 320px !important;
6+
max-width: 320px !important;
77
height: fit-content;
88
max-height: 100%;
9-
margin-left: map-get($spacers, 3);
109
position: sticky !important;
1110
top: map-get($spacers, 1) * -1;
1211

src/components/ModalContainer.jsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
33

44
import { Button, Icon } from '@edx/paragon';
55
import { Close } from '@edx/paragon/icons';
6+
import { OuterExamTimer } from '@edx/frontend-lib-special-exams';
67

78
import { useORAConfigData } from 'hooks/app';
89
import { useCloseModalAction } from 'hooks/actions';
@@ -11,6 +12,7 @@ import ConfirmDialog from 'components/ConfirmDialog';
1112
import ProgressBar from 'components/ProgressBar';
1213

1314
import './ModalContainer.scss';
15+
import { useParams } from 'react-router';
1416

1517
/* The purpose of this component is to wrap views with a header/footer for situations
1618
* where we need to run non-embedded. It is a replicated style of FullScreenModal from
@@ -23,6 +25,7 @@ import './ModalContainer.scss';
2325
const ModalContainer = ({ children }) => {
2426
const { title } = useORAConfigData();
2527
const onClose = useCloseModalAction();
28+
const { courseId } = useParams();
2629
return (
2730
<div>
2831
{onClose.confirmProps && <ConfirmDialog {...onClose.confirmProps} />}
@@ -48,6 +51,9 @@ const ModalContainer = ({ children }) => {
4851
<ProgressBar className="px-2 shadow-sm" />
4952
</div>
5053
<div className="ora-modal-body content-body bg-light-300 p-4">
54+
<div className="exam-timer">
55+
<OuterExamTimer courseId={courseId} />
56+
</div>
5157
{children}
5258
</div>
5359
</div>

src/components/ModalContainer.scss

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
1-
@import "@edx/brand/paragon/variables.scss";
2-
@import "@edx/paragon/scss/core/core.scss";
3-
@import "@edx/brand/paragon/overrides.scss";
1+
@import '@edx/brand/paragon/variables.scss';
2+
@import '@edx/paragon/scss/core/core.scss';
3+
@import '@edx/brand/paragon/overrides.scss';
44

55
.ora-modal-body {
66
min-height: calc(100vh - 20px - 64px - (map-get($spacers, 2) * 8));
77
height: 100%;
88
}
9+
10+
.exam-timer {
11+
max-width: $max-width-lg;
12+
margin: auto;
13+
button {
14+
display: none;
15+
}
16+
}

src/components/ModalContainer.test.jsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ jest.mock('hooks/actions', () => ({
1212
}));
1313
jest.mock('components/ConfirmDialog', () => 'ConfirmDialog');
1414
jest.mock('components/ProgressBar', () => 'ProgressBar');
15+
jest.mock('react-router', () => ({
16+
useParams: jest.fn().mockReturnValue({ courseId: 'courseId' }),
17+
}));
18+
jest.mock('@edx/frontend-lib-special-exams', () => ({
19+
OuterExamTimer: () => 'OuterExamTimer',
20+
}));
1521

1622
describe('<ModalContainer />', () => {
1723
useORAConfigData.mockReturnValue({ title: 'title' });

src/components/__snapshots__/ModalContainer.test.jsx.snap

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ exports[`<ModalContainer /> render default 1`] = `
3939
<div
4040
className="ora-modal-body content-body bg-light-300 p-4"
4141
>
42+
<div
43+
className="exam-timer"
44+
>
45+
<OuterExamTimer
46+
courseId="courseId"
47+
/>
48+
</div>
4249
<div>
4350
children
4451
</div>
@@ -82,6 +89,13 @@ exports[`<ModalContainer /> render without confirmProps 1`] = `
8289
<div
8390
className="ora-modal-body content-body bg-light-300 p-4"
8491
>
92+
<div
93+
className="exam-timer"
94+
>
95+
<OuterExamTimer
96+
courseId="courseId"
97+
/>
98+
</div>
8599
<div>
86100
children
87101
</div>

src/data/redux/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { combineReducers } from 'redux';
2+
import { reducer as specialExams } from '@edx/frontend-lib-special-exams';
23

34
import { StrictDict } from 'utils';
45

@@ -16,7 +17,7 @@ const moduleProps = (propName) => Object.keys(modules).reduce(
1617
{},
1718
);
1819

19-
const rootReducer = combineReducers(moduleProps('reducer'));
20+
const rootReducer = combineReducers({ ...moduleProps('reducer'), specialExams });
2021

2122
const actions = StrictDict(moduleProps('actions'));
2223

src/data/services/lms/hooks/actions/utils.test.ts

Lines changed: 0 additions & 29 deletions
This file was deleted.

src/data/services/lms/hooks/actions/utils.ts

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/data/store.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
import * as redux from 'redux';
2-
import { composeWithDevTools } from 'redux-devtools-extension/logOnlyInProduction';
1+
import { configureStore } from '@reduxjs/toolkit';
32
import { createLogger } from 'redux-logger';
43

54
import reducer, { actions, selectors } from './redux';
65

76
export const createStore = (withLogger = true) => {
8-
const loggerMiddleware = createLogger();
9-
10-
const middleware = [loggerMiddleware];
11-
12-
const store = withLogger
13-
? redux.createStore(
14-
reducer,
15-
composeWithDevTools(redux.applyMiddleware(...middleware)),
16-
) : redux.createStore(reducer);
7+
const store = configureStore({
8+
reducer,
9+
middleware: (getDefaultMiddleware) => {
10+
const middleware = getDefaultMiddleware();
11+
if (withLogger) {
12+
middleware.push(createLogger());
13+
}
14+
return middleware;
15+
},
16+
});
1717

1818
/**
1919
* Dev tools for redux work

src/views/AssessmentView/BaseAssessmentView/__snapshots__/index.test.jsx.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ exports[`<BaseAssessmentView /> render default 1`] = `
3535
<ModalActions />
3636
</Col>
3737
<Col
38-
className="p-0 col-3 assessment-col"
38+
className="py-0 pr-0 pl-3 col-3 assessment-col"
3939
>
4040
<Assessment />
4141
</Col>

src/views/AssessmentView/BaseAssessmentView/index.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const BaseAssessmentView = ({
3737
{children}
3838
<ModalActions />
3939
</Col>
40-
<Col className="p-0 col-3 assessment-col">
40+
<Col className="py-0 pr-0 pl-3 col-3 assessment-col">
4141
<Assessment />
4242
</Col>
4343
</Row>

0 commit comments

Comments
 (0)