@wordpress/components
Version:
UI components for WordPress.
41 lines (36 loc) • 1.02 kB
text/typescript
/**
* WordPress dependencies
*/
import { useMemo, useContext } from '@wordpress/element';
import { useObservableValue } from '@wordpress/compose';
/**
* Internal dependencies
*/
import SlotFillContext from './slot-fill-context';
import type {
SlotFillBubblesVirtuallyFillRef,
SlotFillBubblesVirtuallySlotRef,
FillProps,
SlotKey,
} from '../types';
export default function useSlot( name: SlotKey ) {
const registry = useContext( SlotFillContext );
const slot = useObservableValue( registry.slots, name );
const api = useMemo(
() => ( {
updateSlot: ( fillProps: FillProps ) =>
registry.updateSlot( name, fillProps ),
unregisterSlot: ( ref: SlotFillBubblesVirtuallySlotRef ) =>
registry.unregisterSlot( name, ref ),
registerFill: ( ref: SlotFillBubblesVirtuallyFillRef ) =>
registry.registerFill( name, ref ),
unregisterFill: ( ref: SlotFillBubblesVirtuallyFillRef ) =>
registry.unregisterFill( name, ref ),
} ),
[ name, registry ]
);
return {
...slot,
...api,
};
}