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:
parent
0589934169
commit
d526c27669
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user