UNPKG

kibana-with-account

Version:

kibana-with-account is develop based kibana project

214 lines (182 loc) 6.1 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, permissions: nextProps.details.permissions }); } }, handleNewPermission: function (event) { var newPermission = this.refs.newPermission.getDOMNode().value.trim(); if (!newPermission) { return; } var nextPermissions = this.state.permissions || {}; if (nextPermissions.hasOwnProperty(newPermission)) { this.setState({error: 'That permission already exists.'}); setTimeout(function () { this.setState({error: undefined}); }.bind(this), 2500); } else { nextPermissions[newPermission] = true; this.setState({permissions: nextPermissions}); } this.setState({newPermission: ''}); }, onEnterNewPermission: function (event) { if (event.which === 13) { event.preventDefault(); event.stopPropagation(); this.handleNewPermission(event); } }, handleTogglePermission: function (key, event) { var nextPermissions = this.state.permissions; nextPermissions[key] = !nextPermissions[key]; this.setState({permissions: nextPermissions}); }, handleDeletePermission: function (key, event) { var nextPermissions = this.state.permissions; delete nextPermissions[key]; this.setState({permissions: nextPermissions}); }, handleSubmit: function (event) { event.preventDefault(); event.stopPropagation(); Actions.savePermissions({ id: this.props.details._id, permissions: this.state.permissions }); }, 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 permissions = this.state.permissions || {}; var permissionKeys = Object.keys(permissions).sort(function (a, b) { return a.toLowerCase().localeCompare(b.toLowerCase()); }); var permissionsUi = permissionKeys.map(function (key) { var deleteHandler = this.handleDeletePermission.bind(this, key); var toggleHandler = this.handleTogglePermission.bind(this, key); var toggleIcon; if (permissions[key]) { toggleIcon = <i className="fa fa-toggle-on"></i>; } else { toggleIcon = <i className="fa fa-toggle-off"></i>; } return ( <div key={key} className="input-group"> <input type="text" name="newPermission" className="form-control" disabled={true} value={key} /> <span className="input-group-btn"> <button type="button" className="btn btn-default" onClick={toggleHandler}> {toggleIcon} </button> <button type="button" className="btn btn-warning" onClick={deleteHandler}> Remove </button> </span> </div> ); }.bind(this)); if (permissionKeys.length === 0) { permissionsUi = <div> <span className="label label-default"> empty list </span> </div>; } formElements = <fieldset> <legend>Permissions</legend> {alerts} <ControlGroup label="Add permission" hideHelp={true}> <div className="input-group"> <input ref="newPermission" type="text" name="newPermission" className="form-control" placeholder="" onKeyDown={this.onEnterNewPermission} valueLink={this.linkState('newPermission')} /> <span className="input-group-btn"> <button ref="newPermissionButton" type="button" className="btn btn-default" onClick={this.handleNewPermission}> Add </button> </span> </div> </ControlGroup> <ControlGroup ref="permissionContainer" label="Existing permissions" hideHelp={true}> {permissionsUi} </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;