insomnia/app/ui/components/viewers/ResponseRaw.js

58 lines
1.2 KiB
JavaScript
Raw Normal View History

import React, {PureComponent, PropTypes} from 'react';
import {debounce} from '../../../common/misc';
2016-09-10 02:51:24 +00:00
class ResponseRaw extends PureComponent {
// Use a timeout so it doesn't block the UI
_update = debounce(value => this._setTextAreaValue(value));
_setTextAreaValue (value) {
// Bail if we're not mounted
if (!this._textarea) {
return;
}
this._textarea.value = value;
2016-09-10 02:51:24 +00:00
}
componentDidUpdate () {
this._update(this.props.value)
}
componentDidMount () {
this._update(this.props.value)
}
shouldComponentUpdate (nextProps) {
for (let key in nextProps) {
if (nextProps.hasOwnProperty(key)) {
if (nextProps[key] !== this.props[key]) {
return true;
}
}
}
return false;
}
render () {
const {fontSize} = this.props;
return (
<textarea
ref={n => this._textarea = n}
placeholder="..."
className="force-wrap scrollable wide tall selectable monospace pad no-resize"
readOnly={true}
defaultValue=""
style={{fontSize}}>
</textarea>
);
}
}
ResponseRaw.propTypes = {
value: PropTypes.string.isRequired,
fontSize: PropTypes.number
};
export default ResponseRaw;