UNPKG

@woocommerce/data

Version:
43 lines (42 loc) 1.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.withOptionsHydration = exports.useOptionsHydration = 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"); const useOptionsHydration = (data) => { const shouldHydrate = (0, data_1.useSelect)((select) => { const { isResolving, hasFinishedResolution } = select(constants_1.STORE_NAME); if (!data) { return {}; } return Object.fromEntries(Object.keys(data).map((name) => { const hydrate = !isResolving('getOption', [name]) && !hasFinishedResolution('getOption', [name]); return [name, hydrate]; })); }, []); const { startResolution, finishResolution, receiveOptions } = (0, data_1.useDispatch)(constants_1.STORE_NAME); (0, element_1.useEffect)(() => { Object.entries(shouldHydrate).forEach(([name, hydrate]) => { if (hydrate) { startResolution('getOption', [name]); receiveOptions({ [name]: data[name] }); finishResolution('getOption', [name]); } }); }, [shouldHydrate]); }; exports.useOptionsHydration = useOptionsHydration; const withOptionsHydration = (data) => (0, compose_1.createHigherOrderComponent)((OriginalComponent) => (props) => { (0, exports.useOptionsHydration)(data); return (0, element_1.createElement)(OriginalComponent, { ...props }); }, 'withOptionsHydration'); exports.withOptionsHydration = withOptionsHydration;