From b54d1342990253d3fe4a00c64df27cdd1bb0719b Mon Sep 17 00:00:00 2001 From: David Meza Date: Thu, 3 Aug 2017 07:59:42 -0500 Subject: 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 --- .../modals/leave_private_channel_modal.jsx | 120 +++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 webapp/components/modals/leave_private_channel_modal.jsx (limited to 'webapp/components/modals/leave_private_channel_modal.jsx') 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 = ( + {this.state.channel.display_name} + }} + /> + ); + + message = ( + {this.state.channel.display_name} + }} + /> + ); + } + + const buttonClass = 'btn btn-danger'; + const button = ( + + ); + + return ( + + ); + } +} + +LeavePrivateChannelModal.propTypes = { + intl: intlShape.isRequired +}; + +export default injectIntl(LeavePrivateChannelModal); -- cgit v1.2.3-1-g7c22