Add confirm dialog before leaving private channel (#6206)

Этот коммит содержится в:
Ryan Wang
2017-04-25 12:34:21 -04:00
коммит произвёл Corey Hulen
родитель 6c4c706313
Коммит f1668bad15
4 изменённых файлов: 146 добавлений и 8 удалений

Просмотреть файл

@@ -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 = (
<FormattedMessage
id='leave_private_channel_modal.title'
defaultMessage='Leave Private Channel {channel}'
values={{
channel: <b>{this.state.channel.display_name}</b>
}}
/>
);
const 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.showLeaveChannelModal}
title={title}
message={message}
confirmButtonClass={buttonClass}
confirmButton={button}
onConfirm={() => 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 (
<div
id='channel-header'
@@ -876,6 +936,7 @@ export default class ChannelHeader extends React.Component {
</table>
{editPurposeModal}
{channelMembersModal}
{leaveChannelModal}
<RenameChannelModal
show={this.state.showRenameChannelModal}
onHide={this.hideRenameChannelModal}