diff options
Diffstat (limited to 'lib/TextareaAutosize.js')
-rw-r--r-- | lib/TextareaAutosize.js | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/lib/TextareaAutosize.js b/lib/TextareaAutosize.js index 07d447b..822dcbc 100644 --- a/lib/TextareaAutosize.js +++ b/lib/TextareaAutosize.js @@ -3,7 +3,10 @@ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var React = require('react'), - autosize = require('autosize'); + autosize = require('autosize'), + UPDATE = 'autosize:update', + DESTROY = 'autosize:destroy', + RESIZED = 'autosize:resized'; var TextareaAutosize = React.createClass({ displayName: 'TextareaAutosize', @@ -21,13 +24,30 @@ var TextareaAutosize = React.createClass({ componentDidMount: function componentDidMount() { autosize(this.refs.textarea.getDOMNode()); if (this.props.onResize) { - this.refs.textarea.getDOMNode().addEventListener('autosize:resized', this.props.onResize); + this.refs.textarea.getDOMNode().addEventListener(RESIZED, this.props.onResize); } }, componentWillUnmount: function componentWillUnmount() { if (this.props.onResize) { - this.refs.textarea.getDOMNode().removeEventListener('autosize:resized'); + this.refs.textarea.getDOMNode().removeEventListener(RESIZED); + } + this.dispatchEvent(DESTROY); + }, + + dispatchEvent: function dispatchEvent(EVENT_TYPE) { + var _this = this; + + var event = document.createEvent('Event'); + event.initEvent(EVENT_TYPE, true, false); + setTimeout(function () { + return _this.refs.textarea.getDOMNode().dispatchEvent(event); + }); + }, + + getValue: function getValue(props) { + if (props) { + return props.valueLink ? props.valueLink.value : props.value; } }, @@ -37,6 +57,12 @@ var TextareaAutosize = React.createClass({ _extends({}, this.props, { ref: 'textarea' }), this.props.children ); + }, + + componentWillReceiveProps: function componentWillReceiveProps(nextProps) { + if (this.getValue(nextProps) !== this.getValue(this.props)) { + this.dispatchEvent(UPDATE); + } } }); |