@gechiui/block-editor
Version:
67 lines (56 loc) • 2.2 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import { createElement } from "@gechiui/element";
/**
* External dependencies
*/
import classnames from 'classnames';
import { pick } from 'lodash';
/**
* GeChiUI dependencies
*/
import { withFilters } from '@gechiui/components';
import { getBlockDefaultClassName, hasBlockSupport, getBlockType } from '@gechiui/blocks';
import { useContext, useMemo } from '@gechiui/element';
/**
* Internal dependencies
*/
import BlockContext from '../block-context';
/**
* Default value used for blocks which do not define their own context needs,
* used to guarantee that a block's `context` prop will always be an object. It
* is assigned as a constant since it is always expected to be an empty object,
* and in order to avoid unnecessary React reconciliations of a changing object.
*
* @type {{}}
*/
const DEFAULT_BLOCK_CONTEXT = {};
export const Edit = props => {
const {
attributes = {},
name
} = props;
const blockType = getBlockType(name);
const blockContext = useContext(BlockContext); // Assign context values using the block type's declared context needs.
const context = useMemo(() => {
return blockType && blockType.usesContext ? pick(blockContext, blockType.usesContext) : DEFAULT_BLOCK_CONTEXT;
}, [blockType, blockContext]);
if (!blockType) {
return null;
} // `edit` and `save` are functions or components describing the markup
// with which a block is displayed. If `blockType` is valid, assign
// them preferentially as the render value for the block.
const Component = blockType.edit || blockType.save;
if (blockType.apiVersion > 1) {
return createElement(Component, _extends({}, props, {
context: context
}));
} // Generate a class name for the block's editable form
const generatedClassName = hasBlockSupport(blockType, 'className', true) ? getBlockDefaultClassName(name) : null;
const className = classnames(generatedClassName, attributes.className);
return createElement(Component, _extends({}, props, {
context: context,
className: className
}));
};
export default withFilters('editor.BlockEdit')(Edit);
//# sourceMappingURL=edit.js.map