fix object previews

The `widgetFor` functionality needs to be shared between
the object and list previews, as well as being exposed to
preview template authors, so deriving widget components
within the ObjectPreview is being removed in this commit.
This commit is contained in:
Shawn Erquhart 2017-06-05 20:53:43 -04:00
parent 0589934169
commit d526c27669
2 changed files with 14 additions and 27 deletions

View File

@ -37,10 +37,15 @@ export default class PreviewPane extends React.Component {
if (authorField) this.inferedFields[authorField] = INFERABLE_FIELDS.author;
}
widgetFor = (name) => {
const { fields, entry } = this.props;
const field = fields.find(f => f.get('name') === name);
let value = entry.getIn(['data', field.get('name')]);
widgetFor = (name, fields = this.props.fields, values = this.props.entry.get('data')) => {
let field = fields && fields.find(f => f.get('name') === name);
let value = values && values.get(field.get('name'));
let nestedFields = field.get('fields');
if (nestedFields) {
field = field.set('fields', nestedFields.map(f => this.widgetFor(f.get('name'), nestedFields, value)));
}
const labelledWidgets = ['string', 'text', 'number'];
if (Object.keys(this.inferedFields).indexOf(name) !== -1) {
value = this.inferedFields[name].defaultPreview(value);

View File

@ -2,32 +2,14 @@ import React, { PropTypes, Component } from 'react';
import { resolveWidget } from '../Widgets';
import previewStyle from './defaultPreviewStyle';
export default class ObjectPreview extends Component {
widgetFor = (field) => {
const { value, getAsset } = this.props;
const widget = resolveWidget(field.get('widget'));
return !widget.preview ? null : (
<div key={field.get('name')}>
{React.createElement(widget.preview, {
key: field.get('name'),
value: value && value.get(field.get('name')),
field,
getAsset,
})}
</div>
);
};
render() {
const { field } = this.props;
const fields = field && field.get('fields');
return <div style={previewStyle}>{fields ? fields.map(f => this.widgetFor(f)) : null}</div>;
}
}
const ObjectPreview = ({ field }) => (
<div style={previewStyle}>{(field && field.get('fields')) || null}</div>
);
ObjectPreview.propTypes = {
value: PropTypes.node,
field: PropTypes.node,
getAsset: PropTypes.func.isRequired,
};
export default ObjectPreview;