application/metaproperties/editortext-meta-property.js
import React from 'react';
import Codemirror from 'react-codemirror';
import Subheader from 'material-ui/Subheader';
require('codemirror/mode/htmlmixed/htmlmixed');
class EditortextMetaProperty extends React.Component {
constructor(props) {
super(props);
this.displayName = 'EditortextMetaProperty';
}
rando() {
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
let str = [];
for (let i=0; i<5; i++) {
str.push(chars.charAt(Math.floor(Math.random() * chars.length)));
}
return str.join('');
}
shouldComponentUpdate(nextProps, nextState) {
if (nextProps.value != this.props.value) {
return true;
}
if (nextProps.disabled != this.props.disabled) {
return true;
}
return false;
}
handleEditorChange(val) {
const propName = this.props.name;
let fakeEvent = {
target: {
getAttribute: function() {
return propName;
},
value: val
}
};
this.props.onChange(fakeEvent);
}
render() {
const cmOptions = {
lineNumbers: true,
mode: 'htmlmixed'
};
const name = this.props.name ? this.props.name : 'textfield_' + this.rando();
return (
<div>
<Subheader>{this.props.floatingLabelText}</Subheader>
<Codemirror
ref={name}
value={this.props.value}
onChange={this.handleEditorChange.bind(this)}
options={cmOptions} />
</div>
);
}
}
export default EditortextMetaProperty;