@woocommerce/data
Version:
WooCommerce Admin data store and utilities
43 lines (42 loc) • 1.73 kB
JavaScript
;
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;