import React, { Component, PropTypes } from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { resolveWidget } from '../Widgets'; import styles from './ControlPane.css'; function isHidden(field) { return field.get('widget') === 'hidden'; } export default class ControlPane extends Component { controlFor(field) { const { entry, getMedia, onChange, onAddMedia, onRemoveMedia } = this.props; const widget = resolveWidget(field.get('widget')); const fieldName = field.get('name'); const fieldDefaultValue = field.get('default'); const value = entry.getIn(['data', fieldName], fieldDefaultValue); if (entry.size === 0 || entry.get('partial') === true) return null; return (
{ React.createElement(widget.control, { field, value, onChange: val => onChange(entry.setIn(['data', fieldName], val)), onAddMedia, onRemoveMedia, getMedia, }) }
); } render() { const { collection, fields } = this.props; if (!collection || !fields) { return null; } return (
{ fields.map((field) => { if (isHidden(field)) { return null; } return
{this.controlFor(field)}
; }) }
); } } ControlPane.propTypes = { collection: ImmutablePropTypes.map.isRequired, entry: ImmutablePropTypes.map.isRequired, fields: ImmutablePropTypes.list.isRequired, getMedia: PropTypes.func.isRequired, onAddMedia: PropTypes.func.isRequired, onChange: PropTypes.func.isRequired, onRemoveMedia: PropTypes.func.isRequired, };