UNPKG

@woocommerce/data

Version:
43 lines (42 loc) 1.6 kB
/** * External dependencies */ import { createHigherOrderComponent } from '@wordpress/compose'; import { useDispatch, useSelect } from '@wordpress/data'; import { createElement, useRef, useEffect } from '@wordpress/element'; /** * Internal dependencies */ import { STORE_NAME } from './constants'; export const withSettingsHydration = (group, settings) => createHigherOrderComponent((OriginalComponent) => (props) => { const settingsRef = useRef(settings); const { startResolution, finishResolution, updateSettingsForGroup, clearIsDirty, } = useDispatch(STORE_NAME); const { isResolvingGroup, hasFinishedResolutionGroup } = useSelect((select) => { const { isResolving, hasFinishedResolution } = select(STORE_NAME); return { isResolvingGroup: isResolving('getSettings', [ group, ]), hasFinishedResolutionGroup: hasFinishedResolution('getSettings', [group]), }; }, []); 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 createElement(OriginalComponent, { ...props }); }, 'withSettingsHydration');