Files
piratepoet/assets/js/src/form/fields/select.jsx

77 lines
1.7 KiB
JavaScript

import React from 'react';
import _ from 'underscore';
const FormFieldSelect = React.createClass({
render() {
if (this.props.field.values === undefined) {
return false;
}
let filter = false;
let placeholder = false;
let sortBy = false;
if (this.props.field.placeholder !== undefined) {
placeholder = (
<option value="">{ this.props.field.placeholder }</option>
);
}
if (this.props.field['filter'] !== undefined) {
filter = this.props.field.filter;
}
if (_.isFunction(this.props.field.sortBy)) {
sortBy = this.props.field.sortBy;
}
let keys;
if (sortBy) {
// Extract keys from sorted [key, value] select value pairs, sorted by
// provided sorting order.
keys =
_.map(
_.sortBy(
_.pairs(this.props.field.values),
item => sortBy(item[0], item[1])
),
item => item[0]
);
} else {
keys = Object.keys(this.props.field.values);
}
const options = keys.map(
(value, index) => {
if (filter !== false && filter(this.props.item, value) === false) {
return;
}
return (
<option
key={'option-' + index}
value={value}>
{ this.props.field.values[value] }
</option>
);
}
);
return (
<select
name={this.props.field.name}
id={'field_' + this.props.field.name}
value={this.props.item[this.props.field.name]}
onChange={this.props.onValueChange}
{...this.props.field.validation}
>
{placeholder}
{options}
</select>
);
},
});
module.exports = FormFieldSelect;