From f1668bad15d27e6e2b40e5079f0b878603b33684 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Tue, 25 Apr 2017 12:34:21 -0400 Subject: Add confirm dialog before leaving private channel (#6206) --- webapp/components/channel_header.jsx | 65 +++++++++++++++++++++++++++++++++-- webapp/components/confirm_modal.jsx | 20 ++++++++--- webapp/components/navbar.jsx | 66 ++++++++++++++++++++++++++++++++++-- webapp/i18n/en.json | 3 ++ 4 files changed, 146 insertions(+), 8 deletions(-) diff --git a/webapp/components/channel_header.jsx b/webapp/components/channel_header.jsx index 82864d48c..f09a4a61d 100644 --- a/webapp/components/channel_header.jsx +++ b/webapp/components/channel_header.jsx @@ -14,6 +14,7 @@ import ChannelMembersModal from './channel_members_modal.jsx'; import ChannelNotificationsModal from './channel_notifications_modal.jsx'; import DeleteChannelModal from './delete_channel_modal.jsx'; import RenameChannelModal from './rename_channel_modal.jsx'; +import ConfirmModal from './confirm_modal.jsx'; import ToggleModalButton from './toggle_modal_button.jsx'; import ChannelStore from 'stores/channel_store.jsx'; @@ -57,6 +58,8 @@ export default class ChannelHeader extends React.Component { this.initWebrtc = this.initWebrtc.bind(this); this.onBusy = this.onBusy.bind(this); this.openDirectMessageModal = this.openDirectMessageModal.bind(this); + this.createLeaveChannelModal = this.createLeaveChannelModal.bind(this); + this.hideLeaveChannelModal = this.hideLeaveChannelModal.bind(this); const state = this.getStateFromStores(); state.showEditChannelPurposeModal = false; @@ -84,7 +87,8 @@ export default class ChannelHeader extends React.Component { otherUserId, enableFormatting: PreferenceStore.getBool(Preferences.CATEGORY_ADVANCED_SETTINGS, 'formatting', true), isBusy: WebrtcStore.isBusy(), - isFavorite: channel && ChannelUtils.isFavoriteChannel(channel) + isFavorite: channel && ChannelUtils.isFavoriteChannel(channel), + showLeaveChannelModal: false }; } @@ -135,7 +139,13 @@ export default class ChannelHeader extends React.Component { } handleLeave() { - ChannelActions.leaveChannel(this.state.channel.id); + if (this.state.channel.type === Constants.PRIVATE_CHANNEL) { + this.setState({ + showLeaveChannelModal: true + }); + } else { + ChannelActions.leaveChannel(this.state.channel.id); + } } toggleFavorite = (e) => { @@ -219,6 +229,54 @@ export default class ChannelHeader extends React.Component { }); } + hideLeaveChannelModal() { + this.setState({ + showLeaveChannelModal: false + }); + } + + createLeaveChannelModal() { + const title = ( + {this.state.channel.display_name} + }} + /> + ); + + const message = ( + {this.state.channel.display_name} + }} + /> + ); + + const buttonClass = 'btn btn-danger'; + const button = ( + + ); + + return ( + ChannelActions.leaveChannel(this.state.channel.id)} + onCancel={this.hideLeaveChannelModal} + /> + ); + } + render() { const flagIcon = Constants.FLAG_ICON_SVG; const pinIcon = Constants.PIN_ICON; @@ -764,6 +822,8 @@ export default class ChannelHeader extends React.Component { ); } + const leaveChannelModal = this.createLeaveChannelModal(); + return (
{editPurposeModal} {channelMembersModal} + {leaveChannelModal}