netlify-cms-core
Version:
Netlify CMS core application, see netlify-cms package for the main distribution.
39 lines (34 loc) • 849 B
JavaScript
import { fromJS } from 'immutable';
import { isFunction } from 'lodash';
const catchesNothing = /.^/;
function bind(fn) {
return isFunction(fn) && fn.bind(null);
}
export default function createEditorComponent(config) {
const {
id = null,
label = 'unnamed component',
icon = 'exclamation-triangle',
type = 'shortcode',
widget = 'object',
pattern = catchesNothing,
fields = [],
fromBlock,
toBlock,
toPreview,
...remainingConfig
} = config;
return {
id: id || label.replace(/[^A-Z0-9]+/gi, '_'),
label,
type,
icon,
widget,
pattern,
fromBlock: bind(fromBlock) || (() => ({})),
toBlock: bind(toBlock) || (() => 'Plugin'),
toPreview: bind(toPreview) || (!widget && (bind(toBlock) || (() => 'Plugin'))),
fields: fromJS(fields),
...remainingConfig,
};
}