@wordpress/upload-media
Version:
Core media upload logic.
48 lines (47 loc) • 1.53 kB
JavaScript
/**
* WordPress dependencies
*/
import { useState } from '@wordpress/element';
import { useRegistry, createRegistry, RegistryProvider } from '@wordpress/data';
import { createHigherOrderComponent } from '@wordpress/compose';
/**
* Internal dependencies
*/
import { storeConfig } from '../../store';
import { STORE_NAME as mediaUploadStoreName } from '../../store/constants';
import { jsx as _jsx } from "react/jsx-runtime";
function getSubRegistry(subRegistries, registry, useSubRegistry) {
if (!useSubRegistry) {
return registry;
}
let subRegistry = subRegistries.get(registry);
if (!subRegistry) {
subRegistry = createRegistry({}, registry);
subRegistry.registerStore(mediaUploadStoreName, storeConfig);
subRegistries.set(registry, subRegistry);
}
return subRegistry;
}
const withRegistryProvider = createHigherOrderComponent(WrappedComponent => ({
useSubRegistry = true,
...props
}) => {
const registry = useRegistry();
const [subRegistries] = useState(() => new WeakMap());
const subRegistry = getSubRegistry(subRegistries, registry, useSubRegistry);
if (subRegistry === registry) {
return /*#__PURE__*/_jsx(WrappedComponent, {
registry: registry,
...props
});
}
return /*#__PURE__*/_jsx(RegistryProvider, {
value: subRegistry,
children: /*#__PURE__*/_jsx(WrappedComponent, {
registry: subRegistry,
...props
})
});
}, 'withRegistryProvider');
export default withRegistryProvider;
//# sourceMappingURL=with-registry-provider.js.map