@wordpress/block-editor
Version:
71 lines (58 loc) • 2.28 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = BlockNavigationTree;
var _element = require("@wordpress/element");
var _components = require("@wordpress/components");
var _i18n = require("@wordpress/i18n");
var _branch = _interopRequireDefault(require("./branch"));
var _context = require("./context");
var _useBlockNavigationDropZone = _interopRequireDefault(require("./use-block-navigation-drop-zone"));
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
/**
* Wrap `BlockNavigationRows` with `TreeGrid`. BlockNavigationRows is a
* recursive component (it renders itself), so this ensures TreeGrid is only
* present at the very top of the navigation grid.
*
* @param {Object} props Components props.
* @param {boolean} props.__experimentalFeatures Flag to enable experimental features.
* @param {boolean} props.__experimentalPersistentListViewFeatures Flag to enable features for the Persistent List View experiment.
*/
function BlockNavigationTree({
__experimentalFeatures,
__experimentalPersistentListViewFeatures,
...props
}) {
let {
ref: treeGridRef,
target: blockDropTarget
} = (0, _useBlockNavigationDropZone.default)();
const isMounted = (0, _element.useRef)(false);
(0, _element.useEffect)(() => {
isMounted.current = true;
}, []);
if (!__experimentalFeatures) {
blockDropTarget = undefined;
}
const contextValue = (0, _element.useMemo)(() => ({
__experimentalFeatures,
__experimentalPersistentListViewFeatures,
blockDropTarget,
isTreeGridMounted: isMounted.current
}), [__experimentalFeatures, __experimentalPersistentListViewFeatures, blockDropTarget, isMounted.current]);
return (0, _element.createElement)(_components.__experimentalTreeGrid, {
className: "block-editor-block-navigation-tree",
"aria-label": (0, _i18n.__)('Block navigation structure'),
ref: treeGridRef
}, (0, _element.createElement)(_context.BlockNavigationContext.Provider, {
value: contextValue
}, (0, _element.createElement)(_branch.default, props)));
}
//# sourceMappingURL=tree.js.map