UNPKG

@woocommerce/data

Version:
41 lines (40 loc) 1.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.withNavigationHydration = void 0; /** * External dependencies */ const compose_1 = require("@wordpress/compose"); const data_1 = require("@wordpress/data"); const element_1 = require("@wordpress/element"); /** * Internal dependencies */ const constants_1 = require("./constants"); /** * Higher-order component used to hydrate navigation data. * * @param {Object} data Data object with menu items and site information. * @param {MenuItem[]} data.menuItems Menu items to hydrate. */ const withNavigationHydration = (data) => (0, compose_1.createHigherOrderComponent)((OriginalComponent) => (props) => { const shouldHydrate = (0, data_1.useSelect)((select) => { if (!data) { return; } const { isResolving, hasFinishedResolution } = select(constants_1.STORE_NAME); return (!isResolving('getMenuItems') && !hasFinishedResolution('getMenuItems')); }); const { startResolution, finishResolution, setMenuItems } = (0, data_1.useDispatch)(constants_1.STORE_NAME); (0, element_1.useEffect)(() => { if (!shouldHydrate) { return; } startResolution('getMenuItems', []); setMenuItems(data.menuItems); finishResolution('getMenuItems', []); }, [shouldHydrate]); return (0, element_1.createElement)(OriginalComponent, { ...props }); }, 'withNavigationHydration'); exports.withNavigationHydration = withNavigationHydration;