UNPKG

kibana-with-account

Version:

kibana-with-account is develop based kibana project

202 lines (168 loc) 5.28 kB
var React = require('react/addons'); var ControlGroup = require('../../../../components/form/ControlGroup'); var Button = require('../../../../components/form/Button'); var Spinner = require('../../../../components/form/Spinner'); var Actions = require('../../actions/Admin'); var Component = React.createClass({ mixins: [React.addons.LinkedStateMixin], getInitialState: function () { return {}; }, componentWillReceiveProps: function (nextProps) { if (!this.state.hydrated) { this.setState({ hydrated: nextProps.details.hydrated, groups: nextProps.details.groups }); } }, handleNewGroup: function (event) { var newGroup = this.state.newGroup; if (!newGroup) { return; } var newGroupValue; this.props.list.data.forEach(function (group) { if (group._id === newGroup) { newGroupValue = group.name; } }); var nextGroups = this.state.groups || {}; if (nextGroups.hasOwnProperty(newGroup)) { this.setState({error: 'That group already exists.'}); setTimeout(function () { this.setState({error: undefined}); }.bind(this), 2500); } else { nextGroups[newGroup] = newGroupValue; this.setState({groups: nextGroups}); } this.setState({newGroup: ''}); }, handleDeleteGroup: function (key, event) { var nextGroups = this.state.groups; delete nextGroups[key]; this.setState({groups: nextGroups}); }, handleSubmit: function (event) { event.preventDefault(); event.stopPropagation(); Actions.saveGroups({ id: this.props.details._id, groups: this.state.groups }); }, 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 groups = this.state.groups || {}; var groupKeys = Object.keys(groups).sort(function (a, b) { return a.toLowerCase().localeCompare(b.toLowerCase()); }); var groupsUi = groupKeys.map(function (key) { var deleteHandler = this.handleDeleteGroup.bind(this, key); return ( <div key={key} className="input-group"> <input type="text" className="form-control" disabled={true} value={groups[key]} /> <span className="input-group-btn"> <button type="button" className="btn btn-warning" onClick={deleteHandler}> Remove </button> </span> </div> ); }.bind(this)); if (groupKeys.length === 0) { groupsUi = <div> <span className="label label-default"> empty list </span> </div>; } var adminGroups = this.props.list.data; var groupOptions = adminGroups.map(function (group) { return ( <option key={group._id} value={group._id}> {group.name} </option> ); }); formElements = <fieldset> <legend>Groups</legend> {alerts} <ControlGroup label="Add group" hideHelp={true}> <div className="input-group"> <select ref="newGroup" name="newGroup" className="form-control" valueLink={this.linkState('newGroup')}> <option value="">--- select ---</option> {groupOptions} </select> <span className="input-group-btn"> <button ref="newGroupButton" type="button" className="btn btn-default" onClick={this.handleNewGroup}> Add </button> </span> </div> </ControlGroup> <ControlGroup ref="groupContainer" label="Existing groups" hideHelp={true}> {groupsUi} </ControlGroup> <ControlGroup hideLabel={true} hideHelp={true}> <Button type="submit" inputClasses={{'btn-primary': true}} disabled={this.props.data.loading}> Save changes <Spinner space="left" show={this.props.data.loading}/> </Button> </ControlGroup> </fieldset>; } return ( <form onSubmit={this.handleSubmit}> {notice} {formElements} </form> ); } }); module.exports = Component;