PLT-11 adding config for logs to UI
Этот коммит содержится в:
@@ -1,14 +1,12 @@
|
||||
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
|
||||
// See License.txt for license information.
|
||||
|
||||
var Navbar = require('../../components/navbar.jsx');
|
||||
var AdminSidebar = require('./admin_sidebar.jsx');
|
||||
var AdminStore = require('../../stores/admin_store.jsx');
|
||||
var AsyncClient = require('../../utils/async_client.jsx');
|
||||
var LoadingScreen = require('../loading_screen.jsx');
|
||||
|
||||
var EmailSettingsTab = require('./email_settings.jsx');
|
||||
var JobsSettingsTab = require('./jobs_settings.jsx');
|
||||
var LogSettingsTab = require('./log_settings.jsx');
|
||||
var LogsTab = require('./logs.jsx');
|
||||
|
||||
@@ -51,12 +49,10 @@ export default class AdminController extends React.Component {
|
||||
if (this.state.config != null) {
|
||||
if (this.state.selected === 'email_settings') {
|
||||
tab = <EmailSettingsTab config={this.state.config} />;
|
||||
} else if (this.state.selected === 'job_settings') {
|
||||
tab = <JobsSettingsTab config={this.state.config} />;
|
||||
} else if (this.state.selected === 'logs') {
|
||||
tab = <LogsTab />;
|
||||
} else if (this.state.selected === 'log_settings') {
|
||||
tab = <LogSettingsTab config={this.state.config} />;
|
||||
} else if (this.state.selected === 'logs') {
|
||||
tab = <LogsTab />;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,7 +68,6 @@ export default class AdminController extends React.Component {
|
||||
/>
|
||||
<div className='inner__wrap channel__wrap'>
|
||||
<div className='row header'>
|
||||
<Navbar teamDisplayName='Admin Console' />
|
||||
</div>
|
||||
<div className='row main'>
|
||||
<div
|
||||
|
||||
102
web/react/components/admin_console/admin_navbar_dropdown.jsx
Обычный файл
102
web/react/components/admin_console/admin_navbar_dropdown.jsx
Обычный файл
@@ -0,0 +1,102 @@
|
||||
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
|
||||
// See License.txt for license information.
|
||||
|
||||
var Utils = require('../../utils/utils.jsx');
|
||||
var Client = require('../../utils/client.jsx');
|
||||
var TeamStore = require('../../stores/team_store.jsx');
|
||||
|
||||
var Constants = require('../../utils/constants.jsx');
|
||||
|
||||
function getStateFromStores() {
|
||||
return {currentTeam: TeamStore.getCurrent()};
|
||||
}
|
||||
|
||||
export default class AdminNavbarDropdown extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.blockToggle = false;
|
||||
|
||||
this.handleLogoutClick = this.handleLogoutClick.bind(this);
|
||||
|
||||
this.state = getStateFromStores();
|
||||
}
|
||||
|
||||
handleLogoutClick(e) {
|
||||
e.preventDefault();
|
||||
Client.logout();
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
$(React.findDOMNode(this.refs.dropdown)).on('hide.bs.dropdown', () => {
|
||||
this.blockToggle = true;
|
||||
setTimeout(() => {
|
||||
this.blockToggle = false;
|
||||
}, 100);
|
||||
});
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
$(React.findDOMNode(this.refs.dropdown)).off('hide.bs.dropdown');
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<ul className='nav navbar-nav navbar-right'>
|
||||
<li
|
||||
ref='dropdown'
|
||||
className='dropdown'
|
||||
>
|
||||
<a
|
||||
href='#'
|
||||
className='dropdown-toggle'
|
||||
data-toggle='dropdown'
|
||||
role='button'
|
||||
aria-expanded='false'
|
||||
>
|
||||
<span
|
||||
className='dropdown__icon'
|
||||
dangerouslySetInnerHTML={{__html: Constants.MENU_ICON}}
|
||||
/>
|
||||
</a>
|
||||
<ul
|
||||
className='dropdown-menu'
|
||||
role='menu'
|
||||
>
|
||||
<li>
|
||||
<a
|
||||
href={Utils.getWindowLocationOrigin() + '/' + this.state.currentTeam.name}
|
||||
>
|
||||
{'Switch to ' + this.state.currentTeam.display_name}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href='#'
|
||||
onClick={this.handleLogoutClick}
|
||||
>
|
||||
{'Logout'}
|
||||
</a>
|
||||
</li>
|
||||
<li className='divider'></li>
|
||||
<li>
|
||||
<a
|
||||
target='_blank'
|
||||
href='/static/help/help.html'
|
||||
>
|
||||
{'Help'}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
target='_blank'
|
||||
href='/static/help/report_problem.html'
|
||||
>
|
||||
{'Report a Problem'}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
|
||||
// See License.txt for license information.
|
||||
|
||||
var SidebarHeader = require('../sidebar_header.jsx');
|
||||
var AdminSidebarHeader = require('./admin_sidebar_header.jsx');
|
||||
|
||||
export default class AdminSidebar extends React.Component {
|
||||
constructor(props) {
|
||||
@@ -14,7 +14,8 @@ export default class AdminSidebar extends React.Component {
|
||||
};
|
||||
}
|
||||
|
||||
handleClick(name) {
|
||||
handleClick(name, e) {
|
||||
e.preventDefault();
|
||||
this.props.selectTab(name);
|
||||
}
|
||||
|
||||
@@ -27,46 +28,13 @@ export default class AdminSidebar extends React.Component {
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
// $('.nav__menu-item').on('click', function clickme(e) {
|
||||
// e.preventDefault();
|
||||
// $(this).closest('.sidebar--collapsable').find('.nav__menu-item').removeClass('active');
|
||||
// $(this).addClass('active');
|
||||
// $(this).closest('.sidebar--collapsable').find('.nav__sub-menu').addClass('hide');
|
||||
// $(this).next('.nav__sub-menu').removeClass('hide');
|
||||
// });
|
||||
|
||||
// $('.nav__sub-menu a').on('click', function clickme(e) {
|
||||
// e.preventDefault();
|
||||
// $(this).closest('.nav__sub-menu').find('a').removeClass('active');
|
||||
// $(this).addClass('active');
|
||||
// });
|
||||
|
||||
// $('.nav__sub-menu-item').on('click', function clickme(e) {
|
||||
// e.preventDefault();
|
||||
// $(this).closest('.sidebar--collapsable').find('.nav__inner-menu').addClass('hide');
|
||||
// $(this).closest('li').next('li').find('.nav__inner-menu').removeClass('hide');
|
||||
// $(this).closest('li').next('li').find('.nav__inner-menu li:first a').addClass('active');
|
||||
// });
|
||||
|
||||
// $('.nav__inner-menu a').on('click', function clickme() {
|
||||
// $(this).closest('.nav__inner-menu').closest('li').prev('li').find('a').addClass('active');
|
||||
// });
|
||||
|
||||
// $('.nav__sub-menu .menu__close').on('click', function close() {
|
||||
// var menuItem = $(this).closest('li');
|
||||
// menuItem.next('li').remove();
|
||||
// menuItem.remove();
|
||||
// });
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className='sidebar--left sidebar--collapsable'>
|
||||
<div>
|
||||
<SidebarHeader
|
||||
teamDisplayName='Admin Console'
|
||||
teamType='I'
|
||||
/>
|
||||
<AdminSidebarHeader />
|
||||
<ul className='nav nav-pills nav-stacked'>
|
||||
<li>
|
||||
<ul className='nav nav__sub-menu'>
|
||||
@@ -74,7 +42,7 @@ export default class AdminSidebar extends React.Component {
|
||||
<a
|
||||
href='#'
|
||||
className={this.isSelected('email_settings')}
|
||||
onClick={this.handleClick.bind(null, 'email_settings')}
|
||||
onClick={this.handleClick.bind(this, 'email_settings')}
|
||||
>
|
||||
{'Email Settings'}
|
||||
</a>
|
||||
@@ -83,7 +51,7 @@ export default class AdminSidebar extends React.Component {
|
||||
<a
|
||||
href='#'
|
||||
className={this.isSelected('log_settings')}
|
||||
onClick={this.handleClick.bind(null, 'log_settings')}
|
||||
onClick={this.handleClick.bind(this, 'log_settings')}
|
||||
>
|
||||
{'Log Settings'}
|
||||
</a>
|
||||
@@ -92,20 +60,11 @@ export default class AdminSidebar extends React.Component {
|
||||
<a
|
||||
href='#'
|
||||
className={this.isSelected('logs')}
|
||||
onClick={this.handleClick.bind(null, 'logs')}
|
||||
onClick={this.handleClick.bind(this, 'logs')}
|
||||
>
|
||||
{'Logs'}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href='#'
|
||||
className={this.isSelected('job_settings')}
|
||||
onClick={this.handleClick.bind(null, 'job_settings')}
|
||||
>
|
||||
{'Job Settings'}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
|
||||
// See License.txt for license information.
|
||||
|
||||
var NavbarDropdown = require('./navbar_dropdown.jsx');
|
||||
var UserStore = require('../stores/user_store.jsx');
|
||||
var AdminNavbarDropdown = require('./admin_navbar_dropdown.jsx');
|
||||
var UserStore = require('../../stores/user_store.jsx');
|
||||
|
||||
export default class SidebarHeader extends React.Component {
|
||||
constructor(props) {
|
||||
@@ -12,13 +12,18 @@ export default class SidebarHeader extends React.Component {
|
||||
|
||||
this.state = {};
|
||||
}
|
||||
toggleDropdown() {
|
||||
|
||||
toggleDropdown(e) {
|
||||
e.preventDefault();
|
||||
|
||||
if (this.refs.dropdown.blockToggle) {
|
||||
this.refs.dropdown.blockToggle = false;
|
||||
return;
|
||||
}
|
||||
|
||||
$('.team__header').find('.dropdown-toggle').dropdown('toggle');
|
||||
}
|
||||
|
||||
render() {
|
||||
var me = UserStore.getCurrentUser();
|
||||
var profilePicture = null;
|
||||
@@ -45,23 +50,11 @@ export default class SidebarHeader extends React.Component {
|
||||
{profilePicture}
|
||||
<div className='header__info'>
|
||||
<div className='user__name'>{'@' + me.username}</div>
|
||||
<div className='team__name'>{this.props.teamDisplayName}</div>
|
||||
<div className='team__name'>{'System Console'}</div>
|
||||
</div>
|
||||
</a>
|
||||
<NavbarDropdown
|
||||
ref='dropdown'
|
||||
teamType={this.props.teamType}
|
||||
/>
|
||||
<AdminNavbarDropdown ref='dropdown' />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
SidebarHeader.defaultProps = {
|
||||
teamDisplayName: global.window.config.SiteName,
|
||||
teamType: ''
|
||||
};
|
||||
SidebarHeader.propTypes = {
|
||||
teamDisplayName: React.PropTypes.string,
|
||||
teamType: React.PropTypes.string
|
||||
};
|
||||
}
|
||||
@@ -1,183 +0,0 @@
|
||||
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
|
||||
// See License.txt for license information.
|
||||
|
||||
export default class Jobs extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.state = {
|
||||
};
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className='wrapper--fixed'>
|
||||
<h3>{' ************** JOB Settings'}</h3>
|
||||
<form
|
||||
className='form-horizontal'
|
||||
role='form'
|
||||
>
|
||||
<div className='form-group'>
|
||||
<label
|
||||
className='control-label col-sm-4'
|
||||
htmlFor='email'
|
||||
>
|
||||
{'Bypass Email: '}
|
||||
<a
|
||||
href='#'
|
||||
data-trigger='hover click'
|
||||
data-toggle='popover'
|
||||
data-position='bottom'
|
||||
data-content={'Here\'s some more help text inside a popover for the Bypass Email field just to show how popovers look.'}
|
||||
>
|
||||
{'(?)'}
|
||||
</a>
|
||||
</label>
|
||||
<div className='col-sm-8'>
|
||||
<label className='radio-inline'>
|
||||
<input
|
||||
type='radio'
|
||||
name='byPassEmail'
|
||||
value='option1'
|
||||
/>
|
||||
{'True'}
|
||||
</label>
|
||||
<label className='radio-inline'>
|
||||
<input
|
||||
type='radio'
|
||||
name='byPassEmail'
|
||||
value='option2'
|
||||
/>
|
||||
{'False'}
|
||||
</label>
|
||||
<p className='help-text'>{'This is some sample help text for the Bypass Email field'}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className='form-group'>
|
||||
<label
|
||||
className='control-label col-sm-4'
|
||||
htmlFor='smtpUsername'
|
||||
>
|
||||
{'SMTP Username:'}
|
||||
</label>
|
||||
<div className='col-sm-8'>
|
||||
<input
|
||||
type='email'
|
||||
className='form-control'
|
||||
id='smtpUsername'
|
||||
placeholder='Enter your SMTP username'
|
||||
value=''
|
||||
/>
|
||||
<div className='help-text'>
|
||||
<div className='alert alert-warning'><i className='fa fa-warning'></i>{' This is some error text for the Bypass Email field'}</div>
|
||||
</div>
|
||||
<p className='help-text'>{'This is some sample help text for the SMTP username field'}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className='panel-group'
|
||||
id='accordion'
|
||||
role='tablist'
|
||||
aria-multiselectable='true'
|
||||
>
|
||||
<div className='panel panel-default'>
|
||||
<div
|
||||
className='panel-heading'
|
||||
role='tab'
|
||||
id='headingOne'
|
||||
>
|
||||
<h3 className='panel-title'>
|
||||
<a
|
||||
className='collapsed'
|
||||
role='button'
|
||||
data-toggle='collapse'
|
||||
data-parent='#accordion'
|
||||
href='#collapseOne'
|
||||
aria-expanded='true'
|
||||
aria-controls='collapseOne'
|
||||
>
|
||||
{'Advanced Settings '}
|
||||
<i className='fa fa-plus'></i>
|
||||
<i className='fa fa-minus'></i>
|
||||
</a>
|
||||
</h3>
|
||||
</div>
|
||||
<div
|
||||
id='collapseOne'
|
||||
className='panel-collapse collapse'
|
||||
role='tabpanel'
|
||||
aria-labelledby='headingOne'
|
||||
>
|
||||
<div className='panel-body'>
|
||||
<div className='form-group'>
|
||||
<label
|
||||
className='control-label col-sm-4'
|
||||
htmlFor='feedbackUsername'
|
||||
>
|
||||
{'Apple push server:'}
|
||||
</label>
|
||||
<div className='col-sm-8'>
|
||||
<input
|
||||
type='text'
|
||||
className='form-control'
|
||||
id='feedbackUsername'
|
||||
placeholder='Enter your Apple push server'
|
||||
value=''
|
||||
/>
|
||||
<p className='help-text'>{'This is some sample help text for the Apple push server field'}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className='form-group'>
|
||||
<label
|
||||
className='control-label col-sm-4'
|
||||
htmlFor='feedbackUsername'
|
||||
>
|
||||
{'Apple push certificate public:'}
|
||||
</label>
|
||||
<div className='col-sm-8'>
|
||||
<input
|
||||
type='text'
|
||||
className='form-control'
|
||||
id='feedbackUsername'
|
||||
placeholder='Enter your public apple push certificate'
|
||||
value=''
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className='form-group'>
|
||||
<label
|
||||
className='control-label col-sm-4'
|
||||
htmlFor='feedbackUsername'
|
||||
>
|
||||
{'Apple push certificate private:'}
|
||||
</label>
|
||||
<div className='col-sm-8'>
|
||||
<input
|
||||
type='text'
|
||||
className='form-control'
|
||||
id='feedbackUsername'
|
||||
placeholder='Enter your private apple push certificate'
|
||||
value=''
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='form-group'>
|
||||
<div className='col-sm-12'>
|
||||
<button
|
||||
type='submit'
|
||||
className='btn btn-primary'
|
||||
>
|
||||
{'Save'}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
Ссылка в новой задаче
Block a user