woocommerce-paypal-payments/modules/ppcp-settings/resources/js/hooks/useAccordionState.js

40 lines
894 B
JavaScript
Raw Normal View History

import { useEffect, useState } from '@wordpress/element';
const checkIfCurrentTab = ( id ) => {
return id && window.location.hash === `#${ id }`;
};
const determineInitialState = ( id, initiallyOpen ) => {
if ( initiallyOpen !== null ) {
return initiallyOpen;
}
return checkIfCurrentTab( id );
};
export function useAccordionState( { id = '', initiallyOpen = null } ) {
const [ isOpen, setIsOpen ] = useState(
determineInitialState( id, initiallyOpen )
);
useEffect( () => {
const handleHashChange = () => {
if ( checkIfCurrentTab( id ) ) {
setIsOpen( true );
}
};
window.addEventListener( 'hashchange', handleHashChange );
return () => {
window.removeEventListener( 'hashchange', handleHashChange );
};
}, [ id ] );
const toggleOpen = ( ev ) => {
setIsOpen( ! isOpen );
ev?.preventDefault();
return false;
};
return { isOpen, toggleOpen };
}