@gechiui/block-editor
Version:
99 lines (75 loc) • 2.6 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
exports.useBlockEditorAutocompleteProps = useBlockEditorAutocompleteProps;
var _element = require("@gechiui/element");
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _lodash = require("lodash");
var _hooks = require("@gechiui/hooks");
var _components = require("@gechiui/components");
var _blocks = require("@gechiui/blocks");
var _context = require("../block-edit/context");
var _block = _interopRequireDefault(require("../../autocompleters/block"));
/**
* External dependencies
*/
/**
* GeChiUI dependencies
*/
/**
* Internal dependencies
*/
/**
* Shared reference to an empty array for cases where it is important to avoid
* returning a new array reference on every invocation.
*
* @type {Array}
*/
const EMPTY_ARRAY = [];
function useCompleters(_ref) {
let {
completers = EMPTY_ARRAY
} = _ref;
const {
name
} = (0, _context.useBlockEditContext)();
return (0, _element.useMemo)(() => {
let filteredCompleters = completers;
if (name === (0, _blocks.getDefaultBlockName)() || (0, _blocks.getBlockSupport)(name, '__experimentalSlashInserter', false)) {
filteredCompleters = filteredCompleters.concat([_block.default]);
}
if ((0, _hooks.hasFilter)('editor.Autocomplete.completers')) {
// Provide copies so filters may directly modify them.
if (filteredCompleters === completers) {
filteredCompleters = filteredCompleters.map(_lodash.clone);
}
filteredCompleters = (0, _hooks.applyFilters)('editor.Autocomplete.completers', filteredCompleters, name);
}
return filteredCompleters;
}, [completers, name]);
}
function useBlockEditorAutocompleteProps(props) {
return (0, _components.__unstableUseAutocompleteProps)({ ...props,
completers: useCompleters(props)
});
}
/**
* Wrap the default Autocomplete component with one that supports a filter hook
* for customizing its list of autocompleters.
*
* @type {import('react').FC}
*/
function BlockEditorAutocomplete(props) {
return (0, _element.createElement)(_components.Autocomplete, (0, _extends2.default)({}, props, {
completers: useCompleters(props)
}));
}
/**
* @see https://github.com/GeChiUI/gutenberg/blob/HEAD/packages/block-editor/src/components/autocomplete/README.md
*/
var _default = BlockEditorAutocomplete;
exports.default = _default;
//# sourceMappingURL=index.js.map