diff --git a/src/components/FilePreview/FileCard.jsx b/src/components/FilePreview/FileCard.jsx index 27db0aa..1643d40 100644 --- a/src/components/FilePreview/FileCard.jsx +++ b/src/components/FilePreview/FileCard.jsx @@ -12,7 +12,7 @@ import './FileCard.scss'; */ export const FileCard = ({ file, children }) => ( - {file.name}}> + {file.name}}>
{children} diff --git a/src/components/FilePreview/FileCard.scss b/src/components/FilePreview/FileCard.scss index d82fce5..a515b59 100644 --- a/src/components/FilePreview/FileCard.scss +++ b/src/components/FilePreview/FileCard.scss @@ -2,6 +2,12 @@ .file-card { margin: map-get($spacers, 1) 0; + + .file-card-title { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } } .image-renderer { @@ -18,4 +24,10 @@ .txt-renderer { white-space: pre-wrap; +} + +@include media-breakpoint-down(sm) { + .file-card-title { + width: map-get($container-max-widths, "sm")/2; + } } \ No newline at end of file diff --git a/src/components/FilePreview/FileCard.test.jsx b/src/components/FilePreview/FileCard.test.jsx index e7ef285..d25e97c 100644 --- a/src/components/FilePreview/FileCard.test.jsx +++ b/src/components/FilePreview/FileCard.test.jsx @@ -29,7 +29,7 @@ describe('File Preview Card component', () => { describe('Component', () => { test('collapsible title is name header', () => { const title = el.find(Collapsible).prop('title'); - expect(title).toEqual(

{props.file.name}

); + expect(title).toEqual(

{props.file.name}

); }); test('forwards children into preview-panel', () => { const previewPanelChildren = el.find('.preview-panel').children(); diff --git a/src/components/FilePreview/__snapshots__/FileCard.test.jsx.snap b/src/components/FilePreview/__snapshots__/FileCard.test.jsx.snap index b53a30b..a3d0d85 100644 --- a/src/components/FilePreview/__snapshots__/FileCard.test.jsx.snap +++ b/src/components/FilePreview/__snapshots__/FileCard.test.jsx.snap @@ -9,7 +9,9 @@ exports[`File Preview Card component snapshot 1`] = ` className="file-collapsible" defaultOpen={true} title={ -

+

test-file-name.pdf

} diff --git a/src/containers/CriterionContainer/CriterionFeedback.jsx b/src/containers/CriterionContainer/CriterionFeedback.jsx index 07a1740..10035b6 100644 --- a/src/containers/CriterionContainer/CriterionFeedback.jsx +++ b/src/containers/CriterionContainer/CriterionFeedback.jsx @@ -25,6 +25,15 @@ export class CriterionFeedback extends React.Component { }); } + get commentMessage() { + const { config, isGrading } = this.props; + let commentMessage = this.translate(isGrading ? messages.addComments : messages.comments); + if (config === feedbackRequirement.optional) { + commentMessage += ` ${this.translate(messages.optional)}`; + } + return commentMessage; + } + translate = (msg) => this.props.intl.formatMessage(msg); render() { @@ -42,9 +51,7 @@ export class CriterionFeedback extends React.Component { ({ rubric: { @@ -27,7 +28,9 @@ jest.mock('data/redux/grading/selectors', () => ({ })), }, validation: { - criterionFeedbackIsInvalid: jest.fn((...args) => ({ selectedFeedbackIsInvalid: args })), + criterionFeedbackIsInvalid: jest.fn((...args) => ({ + selectedFeedbackIsInvalid: args, + })), }, })); @@ -67,11 +70,13 @@ describe('Criterion Feedback', () => { expect(el.instance().render()).toMatchSnapshot(); }); - test('is configure to disabled', () => { - el.setProps({ - config: feedbackRequirement.disabled, + Object.values(feedbackRequirement).forEach((requirement) => { + test(`feedback is configured to ${requirement}`, () => { + el.setProps({ + config: requirement, + }); + expect(el.instance().render()).toMatchSnapshot(); }); - expect(el.instance().render()).toMatchSnapshot(); }); }); @@ -121,6 +126,40 @@ describe('Criterion Feedback', () => { expect(props.setValue).toBeCalledTimes(1); }); }); + + describe('getter commentMessage', () => { + test('is grading', () => { + el.setProps({ config: feedbackRequirement.optional, isGrading: true }); + expect(el.instance().commentMessage).toContain( + messages.optional.defaultMessage, + ); + + el.setProps({ config: feedbackRequirement.required }); + expect(el.instance().commentMessage).not.toContain( + messages.optional.defaultMessage, + ); + + expect(el.instance().commentMessage).toContain( + messages.addComments.defaultMessage, + ); + }); + + test('is not grading', () => { + el.setProps({ config: feedbackRequirement.optional, isGrading: false }); + expect(el.instance().commentMessage).toContain( + messages.optional.defaultMessage, + ); + + el.setProps({ config: feedbackRequirement.required }); + expect(el.instance().commentMessage).not.toContain( + messages.optional.defaultMessage, + ); + + expect(el.instance().commentMessage).toContain( + messages.comments.defaultMessage, + ); + }); + }); }); describe('mapStateToProps', () => { @@ -142,7 +181,10 @@ describe('Criterion Feedback', () => { }); test('selector.grading.validation.criterionFeedbackIsInvalid', () => { expect(mapped.isInvalid).toEqual( - selectors.grading.validation.criterionFeedbackIsInvalid(testState, ownProps), + selectors.grading.validation.criterionFeedbackIsInvalid( + testState, + ownProps, + ), ); }); }); diff --git a/src/containers/CriterionContainer/__snapshots__/CriterionFeedback.test.jsx.snap b/src/containers/CriterionContainer/__snapshots__/CriterionFeedback.test.jsx.snap index 2858652..c22e932 100644 --- a/src/containers/CriterionContainer/__snapshots__/CriterionFeedback.test.jsx.snap +++ b/src/containers/CriterionContainer/__snapshots__/CriterionFeedback.test.jsx.snap @@ -1,5 +1,33 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`Criterion Feedback snapshot feedback is configured to disabled 1`] = `null`; + +exports[`Criterion Feedback snapshot feedback is configured to optional 1`] = ` + + + +`; + +exports[`Criterion Feedback snapshot feedback is configured to required 1`] = ` + + + +`; + exports[`Criterion Feedback snapshot feedback value is invalid 1`] = ` `; -exports[`Criterion Feedback snapshot is configure to disabled 1`] = `null`; - exports[`Criterion Feedback snapshot is graded 1`] = ` */ export const ReviewContent = ({ isFailed, isLoaded, showRubric }) => (isLoaded || isFailed) && ( -
+
+
- { isLoaded && ( - - - { showRubric && } - + {isLoaded && ( + + + + + {showRubric && } + )}
+
); ReviewContent.defaultProps = { isFailed: false, @@ -37,8 +41,12 @@ ReviewContent.propTypes = { }; export const mapStateToProps = (state) => ({ - isFailed: selectors.requests.isFailed(state, { requestKey: RequestKeys.fetchSubmission }), - isLoaded: selectors.requests.isCompleted(state, { requestKey: RequestKeys.fetchSubmission }), + isFailed: selectors.requests.isFailed(state, { + requestKey: RequestKeys.fetchSubmission, + }), + isLoaded: selectors.requests.isCompleted(state, { + requestKey: RequestKeys.fetchSubmission, + }), showRubric: selectors.app.showRubric(state), }); diff --git a/src/containers/ReviewModal/ReviewModal.scss b/src/containers/ReviewModal/ReviewModal.scss index f09d319..8b0fec8 100644 --- a/src/containers/ReviewModal/ReviewModal.scss +++ b/src/containers/ReviewModal/ReviewModal.scss @@ -17,15 +17,27 @@ margin: auto; height: 100%; } + + .content-wrapper { + width: min-content; + } } @include media-breakpoint-down(sm) { .review-modal-body { padding: 0 !important; - overflow-y: hidden !important; + overflow: hidden !important; + + & > div.pgn__modal-body-content { + overflow-y: scroll; + } .content-block .col { padding: 0; } + + .content-wrapper { + width: 100%; + } } } \ No newline at end of file diff --git a/src/containers/ReviewModal/__snapshots__/ReviewContent.test.jsx.snap b/src/containers/ReviewModal/__snapshots__/ReviewContent.test.jsx.snap index 40b1883..4a57d2b 100644 --- a/src/containers/ReviewModal/__snapshots__/ReviewContent.test.jsx.snap +++ b/src/containers/ReviewModal/__snapshots__/ReviewContent.test.jsx.snap @@ -4,7 +4,11 @@ exports[`ReviewContent component component render tests snapshot: failed, showRu
- +
+ +
`; @@ -12,15 +16,21 @@ exports[`ReviewContent component component render tests snapshot: hide rubric 1`
- - - - - - - + + + + + + + +
`; @@ -28,13 +38,19 @@ exports[`ReviewContent component component render tests snapshot: show rubric 1`
- - - - - - + + + + + + +
`; diff --git a/src/containers/Rubric/Rubric.scss b/src/containers/Rubric/Rubric.scss index 63f53ee..afffcfc 100644 --- a/src/containers/Rubric/Rubric.scss +++ b/src/containers/Rubric/Rubric.scss @@ -31,8 +31,6 @@ } } } -.rubric-feedback { -} .criterion-feedback { margin-top: 1rem; @@ -51,6 +49,9 @@ width: 320px; height: fit-content; max-height: 100%; + margin-left: map-get($spacers, 3); + position: sticky !important; + top: map-get($spacers, 1) * -1; .grading-rubric-header { box-shadow: 0 0 0.25rem rgba(0, 0, 0, 0.3) !important; @@ -74,3 +75,9 @@ opacity: .4 !important; } } + +@include media-breakpoint-down(sm) { + .grading-rubric-card { + margin-left: 0 !important; + } +} \ No newline at end of file diff --git a/src/containers/Rubric/__snapshots__/RubricFeedback.test.jsx.snap b/src/containers/Rubric/__snapshots__/RubricFeedback.test.jsx.snap index f698267..743aad5 100644 --- a/src/containers/Rubric/__snapshots__/RubricFeedback.test.jsx.snap +++ b/src/containers/Rubric/__snapshots__/RubricFeedback.test.jsx.snap @@ -24,7 +24,7 @@ exports[`Rubric Feedback component snapshot feedback value is invalid 1`] = ` as="input" className="rubric-feedback feedback-input" disabled={false} - floatingLabel="Add comments" + floatingLabel="Add comments (Optional)" onChange={[MockFunction this.onChange]} value="some value" /> @@ -67,7 +67,7 @@ exports[`Rubric Feedback component snapshot is graded 1`] = ` as="input" className="rubric-feedback feedback-input" disabled={true} - floatingLabel="Comments" + floatingLabel="Comments (Optional)" onChange={[MockFunction this.onChange]} value="some value" /> @@ -98,7 +98,7 @@ exports[`Rubric Feedback component snapshot is grading 1`] = ` as="input" className="rubric-feedback feedback-input" disabled={false} - floatingLabel="Add comments" + floatingLabel="Add comments (Optional)" onChange={[MockFunction this.onChange]} value="some value" /> diff --git a/src/containers/Rubric/messages.js b/src/containers/Rubric/messages.js index b9561d9..dc9d2fe 100644 --- a/src/containers/Rubric/messages.js +++ b/src/containers/Rubric/messages.js @@ -28,12 +28,12 @@ const messages = defineMessages({ }, addComments: { id: 'ora-grading.Rubric.addComments', - defaultMessage: 'Add comments', + defaultMessage: 'Add comments (Optional)', description: 'Rubric comments input label', }, comments: { id: 'ora-grading.Rubric.comments', - defaultMessage: 'Comments', + defaultMessage: 'Comments (Optional)', description: 'Rubric comments display label', }, overallFeedbackError: {