@gechiui/components
Version:
UI components for GeChiUI.
35 lines (28 loc) • 685 B
JavaScript
// @ts-nocheck
/**
* GeChiUI dependencies
*/
import { useContext, useState, useEffect } from '@gechiui/element';
/**
* Internal dependencies
*/
import SlotFillContext from './context';
/**
* React hook returning the active slot given a name.
*
* @param {string} name Slot name.
* @return {Object} Slot object.
*/
const useSlot = ( name ) => {
const { getSlot, subscribe } = useContext( SlotFillContext );
const [ slot, setSlot ] = useState( getSlot( name ) );
useEffect( () => {
setSlot( getSlot( name ) );
const unsubscribe = subscribe( () => {
setSlot( getSlot( name ) );
} );
return unsubscribe;
}, [ name ] );
return slot;
};
export default useSlot;