@wordpress/components
Version:
UI components for WordPress.
55 lines (46 loc) • 1.11 kB
JavaScript
/**
* WordPress dependencies
*/
import { useCallback, useContext, useMemo } from '@wordpress/element';
/**
* Internal dependencies
*/
import SlotFillContext from './slot-fill-context';
export default function useSlot( name ) {
const registry = useContext( SlotFillContext );
const slot = registry.slots[ name ] || {};
const slotFills = registry.fills[ name ];
const fills = useMemo( () => slotFills || [], [ slotFills ] );
const updateSlot = useCallback(
( fillProps ) => {
registry.updateSlot( name, fillProps );
},
[ name, registry.updateSlot ]
);
const unregisterSlot = useCallback(
( slotRef ) => {
registry.unregisterSlot( name, slotRef );
},
[ name, registry.unregisterSlot ]
);
const registerFill = useCallback(
( fillRef ) => {
registry.registerFill( name, fillRef );
},
[ name, registry.registerFill ]
);
const unregisterFill = useCallback(
( fillRef ) => {
registry.unregisterFill( name, fillRef );
},
[ name, registry.unregisterFill ]
);
return {
...slot,
updateSlot,
unregisterSlot,
fills,
registerFill,
unregisterFill,
};
}