Skip to content

Instantly share code, notes, and snippets.

@u007
Last active April 6, 2017 16:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save u007/c94ed05769e4998f555de7d4d2df2262 to your computer and use it in GitHub Desktop.
Save u007/c94ed05769e4998f555de7d4d2df2262 to your computer and use it in GitHub Desktop.
react and select2
//taming select2
import React, { Component, PropTypes } from 'react'
import { connect } from 'react-redux'
var input = null
class SelectFieldComponent extends Component {
componentDidMount() {
//UserRoleForm.onRendered()
const dom = $(input)
dom.select2(Object.assign({}, global.select2Config))
dom.on("change",(e) => {
if(this.props.onChange) {
console.log("change")
this.props.onChange(e, this.props.name, dom.val())
}
})
dom.val(this.props.value)
dom.trigger("change.select2")
}
componentDidUpdate() {
const dom = $(input)
dom.val(this.props.value)
dom.trigger("change.select2")
}
render() {
const props = this.props
const emptyLabel = props.placeholder ? props.placeholder : '\u00A0'
let optionsDom = [(<option value="" key={0}>{emptyLabel}</option>)]
if(props.options) {
for(var c=0; c < props.options.length; c++) {
optionsDom.push(<option value={props.options[c].id} key={'o'+c}>{props.options[c].label}</option>)
}
}
let inputDom = (<select ref={(i) => input = i} name={name} className={inputClass}>
{optionsDom}
</select>)
const errorDom = props.errors[name] ? (<div className="alert alert-danger">
{props.errors[name].join(", ")}</div>): (<div></div>)
inputDom = hasLabel ? ( <div className={"col-md-"+fieldCols}>
{inputDom}{errorDom}
</div>): (<div>{inputDom}{errorDom}</div>)
const wrapperClass = row ? "row form-group": "form-group"
return (
<div className={wrapperClass}>
{labelDom}
{inputDom}
</div>)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment