UNPKG

kibana-with-account

Version:

kibana-with-account is develop based kibana project

146 lines (125 loc) 3.8 kB
/* 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;