diff options
author | David Meza <dmeza@users.noreply.github.com> | 2017-08-03 07:59:42 -0500 |
---|---|---|
committer | Joram Wilander <jwawilander@gmail.com> | 2017-08-03 08:59:42 -0400 |
commit | b54d1342990253d3fe4a00c64df27cdd1bb0719b (patch) | |
tree | dadf9452248080b1a976d37430409696091fe52b /webapp/components/modals/leave_private_channel_modal.jsx | |
parent | 19804c4e40340cc4c0093197f71216719ffe4050 (diff) | |
download | chat-b54d1342990253d3fe4a00c64df27cdd1bb0719b.tar.gz chat-b54d1342990253d3fe4a00c64df27cdd1bb0719b.tar.bz2 chat-b54d1342990253d3fe4a00c64df27cdd1bb0719b.zip |
PLT-6484 Add /leave command to leave a channel (#6402)
* PLT-6484 Add /leave command to leave a channel
* Text changes requeted on review.
* PLT-6484 Display the right error message when trying to /leave town-square
* PLT-6484 Be able to execute /leave command in direct and group message channels with the same effect as clicking x
* PLT-6484 Refactor to create new leave_private_channel_modal.jsx
* PLT-6484 Remove previous leave private channel logic to use new leave_private_channel_modal.jsx
* Remove dot in command description. Change localized error when leaving Town square.
* disable /leave command in reply threads on the right-hand sidebar, since it is not obvious which channel you should leave
Diffstat (limited to 'webapp/components/modals/leave_private_channel_modal.jsx')
-rw-r--r-- | webapp/components/modals/leave_private_channel_modal.jsx | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/webapp/components/modals/leave_private_channel_modal.jsx b/webapp/components/modals/leave_private_channel_modal.jsx new file mode 100644 index 000000000..9b8e6df83 --- /dev/null +++ b/webapp/components/modals/leave_private_channel_modal.jsx @@ -0,0 +1,120 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +import ConfirmModal from 'components/confirm_modal.jsx'; + +import * as ChannelActions from 'actions/channel_actions.jsx'; + +import ModalStore from 'stores/modal_store.jsx'; +import Constants from 'utils/constants.jsx'; + +import {intlShape, injectIntl, FormattedMessage} from 'react-intl'; + +import React from 'react'; + +class LeavePrivateChannelModal extends React.Component { + constructor(props) { + super(props); + + this.handleToggle = this.handleToggle.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this.handleHide = this.handleHide.bind(this); + this.handleKeyPress = this.handleKeyPress.bind(this); + + this.state = { + show: false, + channel: null + }; + this.mounted = false; + } + + componentDidMount() { + this.mounted = true; + ModalStore.addModalListener(Constants.ActionTypes.TOGGLE_LEAVE_PRIVATE_CHANNEL_MODAL, this.handleToggle); + } + + componentWillUnmount() { + this.mounted = false; + ModalStore.removeModalListener(Constants.ActionTypes.TOGGLE_LEAVE_PRIVATE_CHANNEL_MODAL, this.handleToggle); + } + + handleKeyPress(e) { + if (e.key === 'Enter' && this.state.show) { + this.handleSubmit(); + } + } + + handleSubmit() { + const channelId = this.state.channel.id; + this.setState({ + show: false, + channel: null + }); + ChannelActions.leaveChannel(channelId); + } + + handleToggle(value) { + this.setState({ + channel: value, + show: value !== null + }); + } + + handleHide() { + this.setState({ + show: false + }); + } + + render() { + let title = ''; + let message = ''; + if (this.state.channel) { + title = ( + <FormattedMessage + id='leave_private_channel_modal.title' + defaultMessage='Leave Private Channel {channel}' + values={{ + channel: <b>{this.state.channel.display_name}</b> + }} + /> + ); + + message = ( + <FormattedMessage + id='leave_private_channel_modal.message' + defaultMessage='Are you sure you wish to leave the private channel {channel}? You must be re-invited in order to re-join this channel in the future.' + values={{ + channel: <b>{this.state.channel.display_name}</b> + }} + /> + ); + } + + const buttonClass = 'btn btn-danger'; + const button = ( + <FormattedMessage + id='leave_private_channel_modal.leave' + defaultMessage='Yes, leave channel' + /> + ); + + return ( + <ConfirmModal + show={this.state.show} + title={title} + message={message} + confirmButtonClass={buttonClass} + confirmButtonText={button} + onConfirm={this.handleSubmit} + onCancel={this.handleHide} + /> + ); + } +} + +LeavePrivateChannelModal.propTypes = { + intl: intlShape.isRequired +}; + +export default injectIntl(LeavePrivateChannelModal); |