react-xeditable
Version:
X-Editable for React
52 lines (42 loc) • 1.82 kB
JSX
;
var React = require('react');
var Button = require('react-bootstrap').Button;
var OverlayTrigger = require('react-bootstrap').OverlayTrigger;
var Popover = require('react-bootstrap').Popover;
var Input = require('react-bootstrap').Input;
var ButtonToolbar = require('react-bootstrap').ButtonToolbar;
var EditableTextField = React.createClass({
save: function() {
this.props.onUpdate(this.props.name, this.refs.input.getValue());
this.refs.overlay.hide();
},
cancel: function() {
this.refs.overlay.hide();
},
submit: function(event) {
event.preventDefault();
this.save();
},
render: function() {
var empty = this.props.value === "";
var linkText = empty ? 'Empty' : this.props.value;
var linkClass = empty ? 'editable-click editable-empty' : 'editable-click';
var popover =
<Popover>
<form className='form-inline' onSubmit={this.submit}>
<Input type='text' ref='input' placeholder='Empty' className='input-sm' defaultValue={this.props.value}>
<ButtonToolbar className='editable-buttons'>
<Button bsStyle='primary' className='btn-sm' onClick={this.save}><i className='glyphicon glyphicon-ok'></i></Button>
<Button bsStyle='default' className='btn-sm' onClick={this.cancel}><i className='glyphicon glyphicon-remove'></i></Button>
</ButtonToolbar>
</Input>
</form>
</Popover>;
return (
<OverlayTrigger ref='overlay' trigger='click' rootClose={true} placement='bottom' overlay={popover}>
<a href='javascript:;' className={linkClass}>{linkText}</a>
</OverlayTrigger>
);
}
});
module.exports = EditableTextField;