kibana-with-account
Version:
kibana-with-account is develop based kibana project
146 lines (125 loc) • 3.8 kB
JSX
/* global window */
var React = require('react/addons');
var ReactRouter = require('react-router');
var ControlGroup = require('../../../../components/form/ControlGroup');
var TextControl = require('../../../../components/form/TextControl');
var Button = require('../../../../components/form/Button');
var Spinner = require('../../../../components/form/Spinner');
var Actions = require('../../actions/Admin');
var LinkedState = React.addons.LinkedStateMixin;
var Link = ReactRouter.Link;
var Component = React.createClass({
mixins: [LinkedState],
getInitialState: function () {
return {};
},
componentWillReceiveProps: function (nextProps) {
if (!this.state.hydrated) {
this.setState({
hydrated: nextProps.details.hydrated,
user: nextProps.details.user
});
}
},
handleSubmit: function (event) {
event.preventDefault();
event.stopPropagation();
if (this.props.details.user) {
Actions.unlinkUser({
id: this.props.details._id
});
this.setState({username: ''});
}
else {
Actions.linkUser({
id: this.props.details._id,
username: this.state.username
});
}
},
onConfirm: function (event) {
if (!window.confirm('Are you sure?')) {
event.preventDefault();
event.stopPropagation();
}
},
render: function () {
var alerts = [];
if (this.props.data.success) {
alerts.push(<div key="success" className="alert alert-success">
Success. Changes have been saved.
</div>);
}
else if (this.props.data.error) {
alerts.push(<div key="danger" className="alert alert-danger">
{this.props.data.error}
</div>);
}
var notice;
if (!this.props.details.hydrated) {
notice = <div className="alert alert-info">
Loading data...
</div>;
}
var formElements;
if (this.props.details.hydrated) {
var isLinked = Boolean(this.props.details.user);
var username;
if (isLinked) {
username = <ControlGroup label="Username">
<div className="input-group">
<input
type="text"
className="form-control"
disabled={true}
value={this.props.details.user.name}
/>
<span className="input-group-btn">
<Link
to="userDetails"
params={{id: this.props.details.user.id}}
className="btn btn-default">
View
</Link>
</span>
</div>
</ControlGroup>;
}
else {
username = <TextControl
name="username"
label="Username"
hasError={this.props.data.hasError.username}
valueLink={this.linkState('username')}
help={this.props.data.help.username}
disabled={this.props.data.loading}
/>;
}
formElements = <fieldset>
<legend>User</legend>
{alerts}
{username}
<ControlGroup hideLabel={true} hideHelp={true}>
<Button
type="submit"
inputClasses={{
'btn-primary': !isLinked,
'btn-danger': isLinked
}}
onClick={isLinked ? this.onConfirm : undefined}
disabled={this.props.data.loading}>
{isLinked ? 'Unlink user' : 'Link user'}
<Spinner space="left" show={this.props.data.loading}/>
</Button>
</ControlGroup>
</fieldset>;
}
return (
<form onSubmit={this.handleSubmit}>
{notice}
{formElements}
</form>
);
}
});
module.exports = Component;