kibana-with-account
Version:
kibana-with-account is develop based kibana project
150 lines (124 loc) • 3.97 kB
JSX
var React = require('react/addons');
var ControlGroup = require('../../../../components/form/ControlGroup');
var Spinner = require('../../../../components/form/Spinner');
var Actions = require('../../actions/Account');
var Component = React.createClass({
mixins: [React.addons.LinkedStateMixin],
getInitialState: function () {
return {};
},
componentWillReceiveProps: function (nextProps) {
if (!this.state.hydrated) {
this.setState({
hydrated: nextProps.details.hydrated,
newStatus: nextProps.details.status.current.id
});
}
},
componentWillUnmount: function () {
clearTimeout(this.timeout);
},
handleSubmit: function (event) {
event.preventDefault();
event.stopPropagation();
if (this.state.newStatus === this.props.details.status.current.id) {
this.setState({
error: 'That is the current status.'
});
this.timeout = setTimeout(function () {
this.setState({error: undefined});
}.bind(this), 2500);
return;
}
Actions.newStatus({
id: this.props.details._id,
status: this.state.newStatus
});
},
render: function () {
var alerts = [];
var error = this.props.data.error || this.state.error;
if (this.props.data.success) {
alerts.push(<div key="success" className="alert alert-success">
Success. Changes have been saved.
</div>);
}
else if (error) {
alerts.push(<div key="danger" className="alert alert-danger">
{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 statuses = this.props.list.data;
var statusOptions = statuses.map(function (status) {
return (
<option key={status._id} value={status._id}>
{status.name}
</option>
);
});
var statusData = this.props.details.status;
var history = statusData.log || [];
var statusHistory = history.map(function (status) {
return (
<li key={status.timeCreated} className="list-group-item">
<span
title={status.moment.toString()}
className="badge pull-right">
{status.userCreated.name} - {status.moment.fromNow()}
</span>
{status.name}
</li>
);
});
formElements = <fieldset>
<legend>Status</legend>
{alerts}
<ControlGroup
hideLabel={true}
hasError={this.props.data.hasError.status}
help={this.props.data.help.status}>
<div className="input-group">
<select
ref="newStatus"
name="newStatus"
className="form-control"
valueLink={this.linkState('newStatus')}>
<option value="">--- select ---</option>
{statusOptions}
</select>
<span className="input-group-btn">
<button
ref="newStatusButton"
type="submit"
className="btn btn-default">
Change
<Spinner
space="left"
show={this.props.data.loading}
/>
</button>
</span>
</div>
</ControlGroup>
<ul className="list-group list-group-statuses">
{statusHistory}
</ul>
</fieldset>;
}
return (
<form onSubmit={this.handleSubmit}>
{notice}
{formElements}
</form>
);
}
});
module.exports = Component;