diff --git a/src/views/preview/comment/compose-comment.jsx b/src/views/preview/comment/compose-comment.jsx index df96b4773..e0df969c0 100644 --- a/src/views/preview/comment/compose-comment.jsx +++ b/src/views/preview/comment/compose-comment.jsx @@ -47,7 +47,8 @@ class ComposeComment extends React.Component { status: ComposeStatus.EDITING, error: null, appealId: null, - muteOpen: false + muteOpen: false, + muteExpiresAt: this.props.muteStatus.muteExpiresAt }; } handleInput (event) { @@ -185,85 +186,87 @@ class ComposeComment extends React.Component { ) : null } -
- - - - - {this.state.error && this.state.status !== ComposeStatus.REJECTED_MUTE ? ( - -
- -
-
- ) : null} - - = 0 ? - 'compose-valid' : 'compose-invalid')} - disabled={this.state.status === ComposeStatus.REJECTED_MUTE} - handleUpdate={onUpdate} - name="compose-comment" - type="textarea" - value={this.state.message} - onInput={this.handleInput} - /> - - - - + + + + + {this.state.error && this.state.status !== ComposeStatus.REJECTED_MUTE ? ( + +
+ +
+
+ ) : null} + + = 0 ? 'compose-valid' : 'compose-invalid')} - > - -
-
-
-
- {this.state.muteOpen ? ( - - ) : null} -
+ disabled={this.state.status === ComposeStatus.REJECTED_MUTE} + handleUpdate={onUpdate} + name="compose-comment" + type="textarea" + value={this.state.message} + onInput={this.handleInput} + /> + + + + = 0 ? + 'compose-valid' : 'compose-invalid')} + > + + + + + + {this.state.muteOpen ? ( + + ) : null} + + ) : null } ); } @@ -271,6 +274,10 @@ class ComposeComment extends React.Component { ComposeComment.propTypes = { commenteeId: PropTypes.number, + muteStatus: PropTypes.shape({ + offenses: PropTypes.array, + muteExpiresAt: PropTypes.number + }), onAddComment: PropTypes.func, onCancel: PropTypes.func, parentId: PropTypes.number, @@ -284,6 +291,7 @@ ComposeComment.propTypes = { }; const mapStateToProps = state => ({ + muteStatus: state.session.session.permissions.mute_status, user: state.session.session.user }); diff --git a/test/unit/components/compose-comment.test.jsx b/test/unit/components/compose-comment.test.jsx index 051416218..f13d42168 100644 --- a/test/unit/components/compose-comment.test.jsx +++ b/test/unit/components/compose-comment.test.jsx @@ -26,9 +26,11 @@ describe('Compose Comment test', () => { store = mockStore({ session: { session: { - user: {} + user: {}, + permissions: { + mute_status: {} + } } - } }); }); @@ -74,14 +76,15 @@ describe('Compose Comment test', () => { expect(component.find('FlexRow.compose-error-row').exists()).toEqual(false); }); - test('Comment Status shows when mute expiration in the future ', () => { + test('Comment Status shows but compose box does not when mute expiration in the future ', () => { const realDateNow = Date.now.bind(global.Date); global.Date.now = () => 0; const component = getComposeCommentWrapper({}); const commentInstance = component.instance(); commentInstance.setState({muteExpiresAt: 100}); component.update(); - expect(component.find('FlexRow.compose-comment').exists()).toEqual(true); + // Compose box should be hidden if muted unless they got muted due to a comment they just posted. + expect(component.find('FlexRow.compose-comment').exists()).toEqual(false); expect(component.find('MuteModal').exists()).toEqual(false); expect(component.find('CommentingStatus').exists()).toEqual(true); global.Date.now = realDateNow; @@ -99,7 +102,7 @@ describe('Compose Comment test', () => { expect(component.find('FlexRow.compose-comment').exists()).toEqual(true); expect(component.find('MuteModal').exists()).toEqual(false); expect(component.find('CommentingStatus').exists()).toEqual(true); - // Compose box is disabled + // Compose box exists but is disabled expect(component.find('InplaceInput.compose-input').exists()).toEqual(true); expect(component.find('InplaceInput.compose-input').props().disabled).toBe(true); global.Date.now = realDateNow;