Compare commits
4 Commits
open-relea
...
open-relea
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
88d6ecd405 | ||
|
|
3e0879e66e | ||
|
|
1eb08d7ea0 | ||
|
|
7aef4ca9a7 |
@@ -20,15 +20,28 @@ export class AdjustedGradeInput extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onChange = ({ target }) => {
|
onChange = ({ target }) => {
|
||||||
this.props.setModalState({ adjustedGradeValue: target.value });
|
let adjustedGradeValue;
|
||||||
|
switch (true) {
|
||||||
|
case target.value < 0:
|
||||||
|
adjustedGradeValue = 0;
|
||||||
|
break;
|
||||||
|
case this.props.possibleGrade && target.value > this.props.possibleGrade:
|
||||||
|
adjustedGradeValue = this.props.possibleGrade;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
adjustedGradeValue = target.value;
|
||||||
|
}
|
||||||
|
this.props.setModalState({ adjustedGradeValue });
|
||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<span>
|
<span>
|
||||||
<Form.Control
|
<Form.Control
|
||||||
type="text"
|
type="number"
|
||||||
name="adjustedGradeValue"
|
name="adjustedGradeValue"
|
||||||
|
min="0"
|
||||||
|
max={this.props.possibleGrade ? this.props.possibleGrade : ''}
|
||||||
value={this.props.value}
|
value={this.props.value}
|
||||||
onChange={this.onChange}
|
onChange={this.onChange}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -54,9 +54,34 @@ describe('AdjustedGradeInput', () => {
|
|||||||
});
|
});
|
||||||
describe('behavior', () => {
|
describe('behavior', () => {
|
||||||
describe('onChange', () => {
|
describe('onChange', () => {
|
||||||
it('calls props.setModalState event target value', () => {
|
it('calls props.setModalState event target value with correct value', () => {
|
||||||
|
const value = 3;
|
||||||
|
el.instance().onChange({ target: { value } });
|
||||||
|
expect(props.setModalState).toHaveBeenCalledWith({
|
||||||
|
adjustedGradeValue: value,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('calls props.setModalState event target value with a value more then the possibleGrade value', () => {
|
||||||
const value = 42;
|
const value = 42;
|
||||||
el.instance().onChange({ target: { value } });
|
el.instance().onChange({ target: { value } });
|
||||||
|
expect(props.setModalState).toHaveBeenCalledWith({
|
||||||
|
adjustedGradeValue: props.possibleGrade,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('calls props.setModalState event target value with less then 0', () => {
|
||||||
|
const value = -5;
|
||||||
|
el.instance().onChange({ target: { value } });
|
||||||
|
expect(props.setModalState).toHaveBeenCalledWith({
|
||||||
|
adjustedGradeValue: 0,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('calls props.setModalState event target value without possibleGrade value', () => {
|
||||||
|
const value = 100;
|
||||||
|
const newEl = shallow(<AdjustedGradeInput {...props} possibleGrade={null} />);
|
||||||
|
newEl.instance().onChange({ target: { value } });
|
||||||
expect(props.setModalState).toHaveBeenCalledWith({
|
expect(props.setModalState).toHaveBeenCalledWith({
|
||||||
adjustedGradeValue: value,
|
adjustedGradeValue: value,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,9 +3,11 @@
|
|||||||
exports[`AdjustedGradeInput Component snapshots displays input control and "out of possible grade" label 1`] = `
|
exports[`AdjustedGradeInput Component snapshots displays input control and "out of possible grade" label 1`] = `
|
||||||
<span>
|
<span>
|
||||||
<Control
|
<Control
|
||||||
|
max={5}
|
||||||
|
min="0"
|
||||||
name="adjustedGradeValue"
|
name="adjustedGradeValue"
|
||||||
onChange={[MockFunction this.onChange]}
|
onChange={[MockFunction this.onChange]}
|
||||||
type="text"
|
type="number"
|
||||||
value={1}
|
value={1}
|
||||||
/>
|
/>
|
||||||
/ 5
|
/ 5
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
OverlayTrigger,
|
OverlayTrigger,
|
||||||
Tooltip,
|
Tooltip,
|
||||||
} from '@edx/paragon';
|
} from '@edx/paragon';
|
||||||
import { FormattedMessage } from '@edx/frontend-platform/i18n';
|
import { FormattedMessage, getLocale, isRtl } from '@edx/frontend-platform/i18n';
|
||||||
|
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ const TotalGradeLabelReplacement = () => (
|
|||||||
<OverlayTrigger
|
<OverlayTrigger
|
||||||
trigger={['hover', 'focus']}
|
trigger={['hover', 'focus']}
|
||||||
key="left-basic"
|
key="left-basic"
|
||||||
placement="left"
|
placement={isRtl(getLocale()) ? 'right' : 'left'}
|
||||||
overlay={(
|
overlay={(
|
||||||
<Tooltip id="course-grade-tooltip">
|
<Tooltip id="course-grade-tooltip">
|
||||||
<FormattedMessage {...messages.totalGradePercentage} />
|
<FormattedMessage {...messages.totalGradePercentage} />
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { shallow } from 'enzyme';
|
import { shallow } from 'enzyme';
|
||||||
|
import { getLocale } from '@edx/frontend-platform/i18n';
|
||||||
|
|
||||||
import { OverlayTrigger } from '@edx/paragon';
|
import { OverlayTrigger } from '@edx/paragon';
|
||||||
|
|
||||||
@@ -35,3 +36,17 @@ describe('LabelReplacements', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('snapshot', () => {
|
||||||
|
let el;
|
||||||
|
test('right to left overlay placement', () => {
|
||||||
|
getLocale.mockImplementation(() => 'en');
|
||||||
|
el = shallow(<TotalGradeLabelReplacement />);
|
||||||
|
expect(el).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
test('left to right overlay placement', () => {
|
||||||
|
getLocale.mockImplementation(() => 'ar');
|
||||||
|
el = shallow(<TotalGradeLabelReplacement />);
|
||||||
|
expect(el).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -80,3 +80,99 @@ exports[`LabelReplacements UsernameLabelReplacement snapshot 1`] = `
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`snapshot left to right overlay placement 1`] = `
|
||||||
|
<div>
|
||||||
|
<OverlayTrigger
|
||||||
|
key="left-basic"
|
||||||
|
overlay={
|
||||||
|
<Tooltip
|
||||||
|
id="course-grade-tooltip"
|
||||||
|
>
|
||||||
|
<FormattedMessage
|
||||||
|
defaultMessage="Total Grade values are always displayed as a percentage"
|
||||||
|
description="Gradebook table message that total grades are displayed in percent format"
|
||||||
|
id="gradebook.GradesView.table.totalGradePercentage"
|
||||||
|
/>
|
||||||
|
</Tooltip>
|
||||||
|
}
|
||||||
|
placement="right"
|
||||||
|
trigger={
|
||||||
|
Array [
|
||||||
|
"hover",
|
||||||
|
"focus",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<div>
|
||||||
|
<FormattedMessage
|
||||||
|
defaultMessage="Total Grade (%)"
|
||||||
|
description="Gradebook table total grade column header"
|
||||||
|
id="gradebook.GradesView.table.headings.totalGrade"
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
id="courseGradeTooltipIcon"
|
||||||
|
>
|
||||||
|
<Icon
|
||||||
|
className="fa fa-info-circle"
|
||||||
|
screenReaderText={
|
||||||
|
<FormattedMessage
|
||||||
|
defaultMessage="Total Grade values are always displayed as a percentage"
|
||||||
|
description="Gradebook table message that total grades are displayed in percent format"
|
||||||
|
id="gradebook.GradesView.table.totalGradePercentage"
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</OverlayTrigger>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`snapshot right to left overlay placement 1`] = `
|
||||||
|
<div>
|
||||||
|
<OverlayTrigger
|
||||||
|
key="left-basic"
|
||||||
|
overlay={
|
||||||
|
<Tooltip
|
||||||
|
id="course-grade-tooltip"
|
||||||
|
>
|
||||||
|
<FormattedMessage
|
||||||
|
defaultMessage="Total Grade values are always displayed as a percentage"
|
||||||
|
description="Gradebook table message that total grades are displayed in percent format"
|
||||||
|
id="gradebook.GradesView.table.totalGradePercentage"
|
||||||
|
/>
|
||||||
|
</Tooltip>
|
||||||
|
}
|
||||||
|
placement="left"
|
||||||
|
trigger={
|
||||||
|
Array [
|
||||||
|
"hover",
|
||||||
|
"focus",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<div>
|
||||||
|
<FormattedMessage
|
||||||
|
defaultMessage="Total Grade (%)"
|
||||||
|
description="Gradebook table total grade column header"
|
||||||
|
id="gradebook.GradesView.table.headings.totalGrade"
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
id="courseGradeTooltipIcon"
|
||||||
|
>
|
||||||
|
<Icon
|
||||||
|
className="fa fa-info-circle"
|
||||||
|
screenReaderText={
|
||||||
|
<FormattedMessage
|
||||||
|
defaultMessage="Total Grade values are always displayed as a percentage"
|
||||||
|
description="Gradebook table message that total grades are displayed in percent format"
|
||||||
|
id="gradebook.GradesView.table.totalGradePercentage"
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</OverlayTrigger>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ exports[`GradebookTable component snapshot - fields1 and 2 between email and tot
|
|||||||
Object {
|
Object {
|
||||||
"key": "Email",
|
"key": "Email",
|
||||||
"label": <FormattedMessage
|
"label": <FormattedMessage
|
||||||
defaultMessage="Email"
|
defaultMessage="Email*"
|
||||||
description="Gradebook table email column header"
|
description="Gradebook table email column header"
|
||||||
id="gradebook.GradesView.table.headings.email"
|
id="gradebook.GradesView.table.headings.email"
|
||||||
/>,
|
/>,
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { defineMessages } from '@edx/frontend-platform/i18n';
|
|||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
emailHeading: {
|
emailHeading: {
|
||||||
id: 'gradebook.GradesView.table.headings.email',
|
id: 'gradebook.GradesView.table.headings.email',
|
||||||
defaultMessage: 'Email',
|
defaultMessage: 'Email*',
|
||||||
description: 'Gradebook table email column header',
|
description: 'Gradebook table email column header',
|
||||||
},
|
},
|
||||||
totalGradeHeading: {
|
totalGradeHeading: {
|
||||||
|
|||||||
@@ -207,3 +207,13 @@
|
|||||||
select#ScoreView.form-control {
|
select#ScoreView.form-control {
|
||||||
padding-right: 26px;
|
padding-right: 26px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[dir=rtl] #course-grade-tooltip .arrow {
|
||||||
|
right: initial;
|
||||||
|
left: 0;
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
border-width: 0.4rem 0.4rem 0.4rem 0;
|
||||||
|
border-right-color: $black;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
exports[`WithSidebar Component snapshots basic snapshot 1`] = `
|
exports[`WithSidebar Component snapshots basic snapshot 1`] = `
|
||||||
<div
|
<div
|
||||||
className="d-flex sidebar-container"
|
className="d-flex sidebar-container page-gradebook"
|
||||||
>
|
>
|
||||||
<aside
|
<aside
|
||||||
className="sidebar-class-names"
|
className="sidebar-class-names"
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ export class WithSidebar extends React.Component {
|
|||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div className="d-flex sidebar-container">
|
<div className="d-flex sidebar-container page-gradebook">
|
||||||
<aside className={this.sidebarClassNames} onTransitionEnd={this.props.handleSlideDone}>
|
<aside className={this.sidebarClassNames} onTransitionEnd={this.props.handleSlideDone}>
|
||||||
{ this.props.sidebar }
|
{ this.props.sidebar }
|
||||||
</aside>
|
</aside>
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
"gradebook.GradesView.EditModal.Overrides.reasonHeader": "Reason",
|
"gradebook.GradesView.EditModal.Overrides.reasonHeader": "Reason",
|
||||||
"gradebook.GradesTab.usersVisibilityLabel'": "Showing {filteredUsers} of {totalUsers} total learners",
|
"gradebook.GradesTab.usersVisibilityLabel'": "Showing {filteredUsers} of {totalUsers} total learners",
|
||||||
"gradebook.GradesView.editFilterLabel": "Edit Filters",
|
"gradebook.GradesView.editFilterLabel": "Edit Filters",
|
||||||
"gradebook.GradesView.table.headings.email": "Email",
|
"gradebook.GradesView.table.headings.email": "Email*",
|
||||||
"gradebook.GradesView.table.headings.totalGrade": "Total Grade (%)",
|
"gradebook.GradesView.table.headings.totalGrade": "Total Grade (%)",
|
||||||
"gradebook.GradesView.table.headings.username": "Username",
|
"gradebook.GradesView.table.headings.username": "Username",
|
||||||
"gradebook.GradesView.table.labels.studentKey": "Student Key*",
|
"gradebook.GradesView.table.labels.studentKey": "Student Key*",
|
||||||
@@ -70,4 +70,4 @@
|
|||||||
"gradebook.GradesTab.FilterBadges.courseGrade": "Course Grade",
|
"gradebook.GradesTab.FilterBadges.courseGrade": "Course Grade",
|
||||||
"gradebook.GradesTab.FilterBadges.includeCourseRoleMembers": "Include Course Team Members",
|
"gradebook.GradesTab.FilterBadges.includeCourseRoleMembers": "Include Course Team Members",
|
||||||
"gradebook.GradesTab.FilterBadges.track": "Track"
|
"gradebook.GradesTab.FilterBadges.track": "Track"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
"gradebook.GradesView.EditModal.Overrides.reasonHeader": "Reason",
|
"gradebook.GradesView.EditModal.Overrides.reasonHeader": "Reason",
|
||||||
"gradebook.GradesTab.usersVisibilityLabel'": "Showing {filteredUsers} of {totalUsers} total learners",
|
"gradebook.GradesTab.usersVisibilityLabel'": "Showing {filteredUsers} of {totalUsers} total learners",
|
||||||
"gradebook.GradesView.editFilterLabel": "Edit Filters",
|
"gradebook.GradesView.editFilterLabel": "Edit Filters",
|
||||||
"gradebook.GradesView.table.headings.email": "Email",
|
"gradebook.GradesView.table.headings.email": "Email*",
|
||||||
"gradebook.GradesView.table.headings.totalGrade": "Total Grade (%)",
|
"gradebook.GradesView.table.headings.totalGrade": "Total Grade (%)",
|
||||||
"gradebook.GradesView.table.headings.username": "Username",
|
"gradebook.GradesView.table.headings.username": "Username",
|
||||||
"gradebook.GradesView.table.labels.studentKey": "Student Key*",
|
"gradebook.GradesView.table.labels.studentKey": "Student Key*",
|
||||||
@@ -70,4 +70,4 @@
|
|||||||
"gradebook.GradesTab.FilterBadges.courseGrade": "Course Grade",
|
"gradebook.GradesTab.FilterBadges.courseGrade": "Course Grade",
|
||||||
"gradebook.GradesTab.FilterBadges.includeCourseRoleMembers": "Include Course Team Members",
|
"gradebook.GradesTab.FilterBadges.includeCourseRoleMembers": "Include Course Team Members",
|
||||||
"gradebook.GradesTab.FilterBadges.track": "Track"
|
"gradebook.GradesTab.FilterBadges.track": "Track"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
"gradebook.GradesView.EditModal.Overrides.reasonHeader": "Motif",
|
"gradebook.GradesView.EditModal.Overrides.reasonHeader": "Motif",
|
||||||
"gradebook.GradesTab.usersVisibilityLabel'": "Showing {filteredUsers} of {totalUsers} total learners",
|
"gradebook.GradesTab.usersVisibilityLabel'": "Showing {filteredUsers} of {totalUsers} total learners",
|
||||||
"gradebook.GradesView.editFilterLabel": "Editer les filtres",
|
"gradebook.GradesView.editFilterLabel": "Editer les filtres",
|
||||||
"gradebook.GradesView.table.headings.email": "Email",
|
"gradebook.GradesView.table.headings.email": "Email*",
|
||||||
"gradebook.GradesView.table.headings.totalGrade": "Note totale (%)",
|
"gradebook.GradesView.table.headings.totalGrade": "Note totale (%)",
|
||||||
"gradebook.GradesView.table.headings.username": "Nom d’utilisateur",
|
"gradebook.GradesView.table.headings.username": "Nom d’utilisateur",
|
||||||
"gradebook.GradesView.table.labels.studentKey": "Clé d'étudiant",
|
"gradebook.GradesView.table.labels.studentKey": "Clé d'étudiant",
|
||||||
@@ -70,4 +70,4 @@
|
|||||||
"gradebook.GradesTab.FilterBadges.courseGrade": "Note du cours",
|
"gradebook.GradesTab.FilterBadges.courseGrade": "Note du cours",
|
||||||
"gradebook.GradesTab.FilterBadges.includeCourseRoleMembers": "Include Course Team Members",
|
"gradebook.GradesTab.FilterBadges.includeCourseRoleMembers": "Include Course Team Members",
|
||||||
"gradebook.GradesTab.FilterBadges.track": "Track"
|
"gradebook.GradesTab.FilterBadges.track": "Track"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
"gradebook.GradesView.EditModal.Overrides.reasonHeader": "Reason",
|
"gradebook.GradesView.EditModal.Overrides.reasonHeader": "Reason",
|
||||||
"gradebook.GradesTab.usersVisibilityLabel'": "Showing {filteredUsers} of {totalUsers} total learners",
|
"gradebook.GradesTab.usersVisibilityLabel'": "Showing {filteredUsers} of {totalUsers} total learners",
|
||||||
"gradebook.GradesView.editFilterLabel": "Edit Filters",
|
"gradebook.GradesView.editFilterLabel": "Edit Filters",
|
||||||
"gradebook.GradesView.table.headings.email": "Email",
|
"gradebook.GradesView.table.headings.email": "Email*",
|
||||||
"gradebook.GradesView.table.headings.totalGrade": "Total Grade (%)",
|
"gradebook.GradesView.table.headings.totalGrade": "Total Grade (%)",
|
||||||
"gradebook.GradesView.table.headings.username": "Username",
|
"gradebook.GradesView.table.headings.username": "Username",
|
||||||
"gradebook.GradesView.table.labels.studentKey": "Student Key*",
|
"gradebook.GradesView.table.labels.studentKey": "Student Key*",
|
||||||
@@ -70,4 +70,4 @@
|
|||||||
"gradebook.GradesTab.FilterBadges.courseGrade": "Course Grade",
|
"gradebook.GradesTab.FilterBadges.courseGrade": "Course Grade",
|
||||||
"gradebook.GradesTab.FilterBadges.includeCourseRoleMembers": "Include Course Team Members",
|
"gradebook.GradesTab.FilterBadges.includeCourseRoleMembers": "Include Course Team Members",
|
||||||
"gradebook.GradesTab.FilterBadges.track": "Track"
|
"gradebook.GradesTab.FilterBadges.track": "Track"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
"gradebook.GradesView.EditModal.Overrides.reasonHeader": "Reason",
|
"gradebook.GradesView.EditModal.Overrides.reasonHeader": "Reason",
|
||||||
"gradebook.GradesTab.usersVisibilityLabel'": "Showing {filteredUsers} of {totalUsers} total learners",
|
"gradebook.GradesTab.usersVisibilityLabel'": "Showing {filteredUsers} of {totalUsers} total learners",
|
||||||
"gradebook.GradesView.editFilterLabel": "Edit Filters",
|
"gradebook.GradesView.editFilterLabel": "Edit Filters",
|
||||||
"gradebook.GradesView.table.headings.email": "Email",
|
"gradebook.GradesView.table.headings.email": "Email*",
|
||||||
"gradebook.GradesView.table.headings.totalGrade": "Total Grade (%)",
|
"gradebook.GradesView.table.headings.totalGrade": "Total Grade (%)",
|
||||||
"gradebook.GradesView.table.headings.username": "Username",
|
"gradebook.GradesView.table.headings.username": "Username",
|
||||||
"gradebook.GradesView.table.labels.studentKey": "Student Key*",
|
"gradebook.GradesView.table.labels.studentKey": "Student Key*",
|
||||||
@@ -70,4 +70,4 @@
|
|||||||
"gradebook.GradesTab.FilterBadges.courseGrade": "Course Grade",
|
"gradebook.GradesTab.FilterBadges.courseGrade": "Course Grade",
|
||||||
"gradebook.GradesTab.FilterBadges.includeCourseRoleMembers": "Include Course Team Members",
|
"gradebook.GradesTab.FilterBadges.includeCourseRoleMembers": "Include Course Team Members",
|
||||||
"gradebook.GradesTab.FilterBadges.track": "Track"
|
"gradebook.GradesTab.FilterBadges.track": "Track"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,5 +19,6 @@ jest.mock('@edx/frontend-platform/i18n', () => {
|
|||||||
}),
|
}),
|
||||||
defineMessages: m => m,
|
defineMessages: m => m,
|
||||||
FormattedMessage: () => 'FormattedMessage',
|
FormattedMessage: () => 'FormattedMessage',
|
||||||
|
getLocale: jest.fn(),
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user