// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import ConfirmModal from '../confirm_modal.jsx'; const Modal = ReactBootstrap.Modal; import SettingsSidebar from '../settings_sidebar.jsx'; import UserSettings from './user_settings.jsx'; export default class UserSettingsModal extends React.Component { constructor(props) { super(props); this.handleShow = this.handleShow.bind(this); this.handleHide = this.handleHide.bind(this); this.handleHidden = this.handleHidden.bind(this); this.handleCollapse = this.handleCollapse.bind(this); this.handleConfirm = this.handleConfirm.bind(this); this.handleCancelConfirmation = this.handleCancelConfirmation.bind(this); this.deactivateTab = this.deactivateTab.bind(this); this.closeModal = this.closeModal.bind(this); this.collapseModal = this.collapseModal.bind(this); this.updateTab = this.updateTab.bind(this); this.updateSection = this.updateSection.bind(this); this.state = { active_tab: 'general', active_section: '', showConfirmModal: false, enforceFocus: true }; this.requireConfirm = false; } componentDidMount() { if (this.props.show) { this.handleShow(); } } componentDidUpdate(prevProps) { if (this.props.show && !prevProps.show) { this.handleShow(); } } handleShow() { if ($(window).width() > 768) { $(ReactDOM.findDOMNode(this.refs.modalBody)).perfectScrollbar(); $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 200); } else { $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 50); } } // Called when the close button is pressed on the main modal handleHide() { if (this.requireConfirm) { this.afterConfirm = () => this.handleHide(); this.showConfirmModal(); return false; } this.deactivateTab(); this.props.onModalDismissed(); } // called after the dialog is fully hidden and faded out handleHidden() { this.setState({ active_tab: 'general', active_section: '' }); } // Called to hide the settings pane when on mobile handleCollapse() { $(ReactDOM.findDOMNode(this.refs.modalBody)).closest('.modal-dialog').removeClass('display--content'); this.deactivateTab(); this.setState({ active_tab: '', active_section: '' }); } handleConfirm() { this.setState({ showConfirmModal: false, enforceFocus: true }); this.requireConfirm = false; if (this.afterConfirm) { this.afterConfirm(); this.afterConfirm = null; } } handleCancelConfirmation() { this.setState({ showConfirmModal: false, enforceFocus: true }); this.afterConfirm = null; } showConfirmModal(afterConfirm) { this.setState({ showConfirmModal: true, enforceFocus: false }); if (afterConfirm) { this.afterConfirm = afterConfirm; } } // Called to let settings tab perform cleanup before being closed deactivateTab() { const activeTab = this.refs.userSettings.getActiveTab(); if (activeTab && activeTab.deactivate) { activeTab.deactivate(); } } // Called by settings tabs when their close button is pressed closeModal() { if (this.requireConfirm) { this.showConfirmModal(this.closeModal); } else { this.handleHide(); } } // Called by settings tabs when their back button is pressed collapseModal() { if (this.requireConfirm) { this.showConfirmModal(this.collapseModal); } else { this.handleCollapse(); } } updateTab(tab, skipConfirm) { if (!skipConfirm && this.requireConfirm) { this.showConfirmModal(() => this.updateTab(tab, true)); } else { this.deactivateTab(); this.setState({ active_tab: tab, active_section: '' }); } } updateSection(section, skipConfirm) { if (!skipConfirm && this.requireConfirm) { this.showConfirmModal(() => this.updateSection(section, true)); } else { this.setState({active_section: section}); } } render() { var tabs = []; tabs.push({name: 'general', uiName: 'General', icon: 'glyphicon glyphicon-cog'}); tabs.push({name: 'security', uiName: 'Security', icon: 'glyphicon glyphicon-lock'}); tabs.push({name: 'notifications', uiName: 'Notifications', icon: 'glyphicon glyphicon-exclamation-sign'}); tabs.push({name: 'appearance', uiName: 'Appearance', icon: 'glyphicon glyphicon-wrench'}); if (global.window.mm_config.EnableOAuthServiceProvider === 'true') { tabs.push({name: 'developer', uiName: 'Developer', icon: 'glyphicon glyphicon-th'}); } if (global.window.mm_config.EnableIncomingWebhooks === 'true' || global.window.mm_config.EnableOutgoingWebhooks === 'true') { tabs.push({name: 'integrations', uiName: 'Integrations', icon: 'glyphicon glyphicon-transfer'}); } tabs.push({name: 'display', uiName: 'Display', icon: 'glyphicon glyphicon-eye-open'}); tabs.push({name: 'advanced', uiName: 'Advanced', icon: 'glyphicon glyphicon-list-alt'}); return ( {'Account Settings'}
this.setState({enforceFocus})} setRequireConfirm={(requireConfirm) => this.requireConfirm = requireConfirm} />
); } } UserSettingsModal.propTypes = { show: React.PropTypes.bool.isRequired, onModalDismissed: React.PropTypes.func.isRequired };