Ported AccessHistoryModal and ActivityLogModal to React-Bootstrap

Этот коммит содержится в:
hmhealey
2015-10-30 10:45:54 -04:00
родитель efa7b8252f
Коммит 1675adcc7a
4 изменённых файлов: 75 добавлений и 108 удалений

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

@@ -1,6 +1,7 @@
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information. // See License.txt for license information.
var Modal = ReactBootstrap.Modal;
var UserStore = require('../stores/user_store.jsx'); var UserStore = require('../stores/user_store.jsx');
var ChannelStore = require('../stores/channel_store.jsx'); var ChannelStore = require('../stores/channel_store.jsx');
var AsyncClient = require('../utils/async_client.jsx'); var AsyncClient = require('../utils/async_client.jsx');
@@ -30,16 +31,23 @@ export default class AccessHistoryModal extends React.Component {
} }
onShow() { onShow() {
AsyncClient.getAudits(); AsyncClient.getAudits();
$(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 300);
if ($(window).width() > 768) {
$(ReactDOM.findDOMNode(this.refs.modalBody)).perfectScrollbar();
}
} }
onHide() { onHide() {
$('#user_settings').modal('show');
this.setState({moreInfo: []}); this.setState({moreInfo: []});
this.props.onModalDismissed();
} }
componentDidMount() { componentDidMount() {
UserStore.addAuditsChangeListener(this.onAuditChange); UserStore.addAuditsChangeListener(this.onAuditChange);
$(ReactDOM.findDOMNode(this.refs.modal)).on('shown.bs.modal', this.onShow); }
componentDidUpdate(prevProps) {
$(ReactDOM.findDOMNode(this.refs.modal)).on('hidden.bs.modal', this.onHide); if (this.props.show && !prevProps.show) {
this.onShow();
}
} }
componentWillUnmount() { componentWillUnmount() {
UserStore.removeAuditsChangeListener(this.onAuditChange); UserStore.removeAuditsChangeListener(this.onAuditChange);
@@ -380,43 +388,23 @@ export default class AccessHistoryModal extends React.Component {
} }
return ( return (
<div> <Modal
<div show={this.props.show}
className='modal fade' onHide={this.onHide}
ref='modal' bsSize='large'
id='access-history' >
tabIndex='-1' <Modal.Header closeButton={true}>
role='dialog' <Modal.Title>{'Access History'}</Modal.Title>
aria-hidden='true' </Modal.Header>
> <Modal.Body ref='modalBody'>
<div className='modal-dialog modal-lg'> {content}
<div className='modal-content'> </Modal.Body>
<div className='modal-header'> </Modal>
<button
type='button'
className='close'
data-dismiss='modal'
aria-label='Close'
>
<span aria-hidden='true'>{'×'}</span>
</button>
<h4
className='modal-title'
id='myModalLabel'
>
{'Access History'}
</h4>
</div>
<div
ref='modalBody'
className='modal-body'
>
{content}
</div>
</div>
</div>
</div>
</div>
); );
} }
} }
AccessHistoryModal.propTypes = {
show: React.PropTypes.bool.isRequired,
onModalDismissed: React.PropTypes.func.isRequired
};

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

@@ -4,6 +4,7 @@
const UserStore = require('../stores/user_store.jsx'); const UserStore = require('../stores/user_store.jsx');
const Client = require('../utils/client.jsx'); const Client = require('../utils/client.jsx');
const AsyncClient = require('../utils/async_client.jsx'); const AsyncClient = require('../utils/async_client.jsx');
const Modal = ReactBootstrap.Modal;
const LoadingScreen = require('./loading_screen.jsx'); const LoadingScreen = require('./loading_screen.jsx');
const Utils = require('../utils/utils.jsx'); const Utils = require('../utils/utils.jsx');
@@ -49,16 +50,23 @@ export default class ActivityLogModal extends React.Component {
} }
onShow() { onShow() {
AsyncClient.getSessions(); AsyncClient.getSessions();
$(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 300);
if ($(window).width() > 768) {
$(ReactDOM.findDOMNode(this.refs.modalBody)).perfectScrollbar();
}
} }
onHide() { onHide() {
$('#user_settings').modal('show');
this.setState({moreInfo: []}); this.setState({moreInfo: []});
this.props.onModalDismissed();
} }
componentDidMount() { componentDidMount() {
UserStore.addSessionsChangeListener(this.onListenerChange); UserStore.addSessionsChangeListener(this.onListenerChange);
$(ReactDOM.findDOMNode(this.refs.modal)).on('shown.bs.modal', this.onShow); }
componentDidUpdate(prevProps) {
$(ReactDOM.findDOMNode(this.refs.modal)).on('hidden.bs.modal', this.onHide); if (this.props.show && !prevProps.show) {
this.onShow();
}
} }
componentWillUnmount() { componentWillUnmount() {
UserStore.removeSessionsChangeListener(this.onListenerChange); UserStore.removeSessionsChangeListener(this.onListenerChange);
@@ -151,44 +159,24 @@ export default class ActivityLogModal extends React.Component {
} }
return ( return (
<div> <Modal
<div show={this.props.show}
className='modal fade' onHide={this.onHide}
ref='modal' bsSize='large'
id='activity-log' >
tabIndex='-1' <Modal.Header closeButton={true}>
role='dialog' <Modal.Title>{'Active Sessions'}</Modal.Title>
aria-hidden='true' </Modal.Header>
> <p className='session-help-text'>{'Sessions are created when you log in with your email and password to a new browser on a device. Sessions let you use Mattermost for up to 30 days without having to log in again. If you want to log out sooner, use the \'Logout\' button below to end a session.'}</p>
<div className='modal-dialog modal-lg'> <Modal.Body ref='modalBody'>
<div className='modal-content'> {content}
<div className='modal-header'> </Modal.Body>
<button </Modal>
type='button'
className='close'
data-dismiss='modal'
aria-label='Close'
>
<span aria-hidden='true'>&times;</span>
</button>
<h4
className='modal-title'
id='myModalLabel'
>
Active Sessions
</h4>
</div>
<p className='session-help-text'>Sessions are created when you log in with your email and password to a new browser on a device. Sessions let you use Mattermost for up to 30 days without having to log in again. If you want to log out sooner, use the 'Logout' button below to end a session.</p>
<div
ref='modalBody'
className='modal-body'
>
{content}
</div>
</div>
</div>
</div>
</div>
); );
} }
} }
ActivityLogModal.propTypes = {
show: React.PropTypes.bool.isRequired,
onModalDismissed: React.PropTypes.func.isRequired
};

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

@@ -3,6 +3,8 @@
var SettingItemMin = require('../setting_item_min.jsx'); var SettingItemMin = require('../setting_item_min.jsx');
var SettingItemMax = require('../setting_item_max.jsx'); var SettingItemMax = require('../setting_item_max.jsx');
var AccessHistoryModal = require('../access_history_modal.jsx');
var ActivityLogModal = require('../activity_log_modal.jsx');
var Client = require('../../utils/client.jsx'); var Client = require('../../utils/client.jsx');
var AsyncClient = require('../../utils/async_client.jsx'); var AsyncClient = require('../../utils/async_client.jsx');
var Constants = require('../../utils/constants.jsx'); var Constants = require('../../utils/constants.jsx');
@@ -18,7 +20,10 @@ export default class SecurityTab extends React.Component {
this.handleClose = this.handleClose.bind(this); this.handleClose = this.handleClose.bind(this);
this.setupInitialState = this.setupInitialState.bind(this); this.setupInitialState = this.setupInitialState.bind(this);
this.state = this.setupInitialState(); const state = this.setupInitialState();
state.showAccessHistoryModal = false;
state.showActivityLogModal = false;
this.state = state;
} }
submitPassword(e) { submitPassword(e) {
e.preventDefault(); e.preventDefault();
@@ -75,12 +80,6 @@ export default class SecurityTab extends React.Component {
updateConfirmPassword(e) { updateConfirmPassword(e) {
this.setState({confirmPassword: e.target.value}); this.setState({confirmPassword: e.target.value});
} }
handleHistoryOpen() {
$('#user_settings').modal('hide');
}
handleDevicesOpen() {
$('#user_settings').modal('hide');
}
handleClose() { handleClose() {
$(ReactDOM.findDOMNode(this)).find('.form-control').each(function resetValue() { $(ReactDOM.findDOMNode(this)).find('.form-control').each(function resetValue() {
this.value = ''; this.value = '';
@@ -253,25 +252,29 @@ export default class SecurityTab extends React.Component {
<div className='divider-dark'/> <div className='divider-dark'/>
<br></br> <br></br>
<a <a
data-toggle='modal'
className='security-links theme' className='security-links theme'
data-target='#access-history'
href='#' href='#'
onClick={this.handleHistoryOpen} onClick={() => this.setState({showAccessHistoryModal: true})}
> >
<i className='fa fa-clock-o'></i>View Access History <i className='fa fa-clock-o'></i>View Access History
</a> </a>
<b> </b> <b> </b>
<a <a
data-toggle='modal'
className='security-links theme' className='security-links theme'
data-target='#activity-log'
href='#' href='#'
onClick={this.handleDevicesOpen} onClick={() => this.setState({showActivityLogModal: true})}
> >
<i className='fa fa-globe'></i>View and Logout of Active Sessions <i className='fa fa-globe'></i>View and Logout of Active Sessions
</a> </a>
</div> </div>
<AccessHistoryModal
show={this.state.showAccessHistoryModal}
onModalDismissed={() => this.setState({showAccessHistoryModal: false})}
/>
<ActivityLogModal
show={this.state.showActivityLogModal}
onModalDismissed={() => this.setState({showActivityLogModal: false})}
/>
</div> </div>
); );
} }

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

@@ -23,8 +23,6 @@ var ChannelMembersModal = require('../components/channel_members.jsx');
var ChannelInviteModal = require('../components/channel_invite_modal.jsx'); var ChannelInviteModal = require('../components/channel_invite_modal.jsx');
var TeamMembersModal = require('../components/team_members.jsx'); var TeamMembersModal = require('../components/team_members.jsx');
var ChannelInfoModal = require('../components/channel_info_modal.jsx'); var ChannelInfoModal = require('../components/channel_info_modal.jsx');
var AccessHistoryModal = require('../components/access_history_modal.jsx');
var ActivityLogModal = require('../components/activity_log_modal.jsx');
var RemovedFromChannelModal = require('../components/removed_from_channel_modal.jsx'); var RemovedFromChannelModal = require('../components/removed_from_channel_modal.jsx');
var RegisterAppModal = require('../components/register_app_modal.jsx'); var RegisterAppModal = require('../components/register_app_modal.jsx');
var ImportThemeModal = require('../components/user_settings/import_theme_modal.jsx'); var ImportThemeModal = require('../components/user_settings/import_theme_modal.jsx');
@@ -156,16 +154,6 @@ function setupChannelPage(props) {
document.getElementById('post_deleted_modal') document.getElementById('post_deleted_modal')
); );
ReactDOM.render(
<AccessHistoryModal />,
document.getElementById('access_history_modal')
);
ReactDOM.render(
<ActivityLogModal />,
document.getElementById('activity_log_modal')
);
ReactDOM.render( ReactDOM.render(
<RemovedFromChannelModal />, <RemovedFromChannelModal />,
document.getElementById('removed_from_channel_modal') document.getElementById('removed_from_channel_modal')