@woocommerce/data
Version:
WooCommerce Admin data store and utilities
47 lines (46 loc) • 1.82 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.withSettingsHydration = 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 withSettingsHydration = (group, settings) => (0, compose_1.createHigherOrderComponent)((OriginalComponent) => (props) => {
const settingsRef = (0, element_1.useRef)(settings);
const { startResolution, finishResolution, updateSettingsForGroup, clearIsDirty, } = (0, data_1.useDispatch)(constants_1.STORE_NAME);
const { isResolvingGroup, hasFinishedResolutionGroup } = (0, data_1.useSelect)((select) => {
const { isResolving, hasFinishedResolution } = select(constants_1.STORE_NAME);
return {
isResolvingGroup: isResolving('getSettings', [
group,
]),
hasFinishedResolutionGroup: hasFinishedResolution('getSettings', [group]),
};
}, []);
(0, element_1.useEffect)(() => {
if (!settingsRef.current) {
return;
}
if (!isResolvingGroup && !hasFinishedResolutionGroup) {
startResolution('getSettings', [group]);
updateSettingsForGroup(group, settingsRef.current);
clearIsDirty(group);
finishResolution('getSettings', [group]);
}
}, [
isResolvingGroup,
hasFinishedResolutionGroup,
finishResolution,
updateSettingsForGroup,
startResolution,
clearIsDirty,
]);
return (0, element_1.createElement)(OriginalComponent, { ...props });
}, 'withSettingsHydration');
exports.withSettingsHydration = withSettingsHydration;