mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-06 18:16:38 +08:00
40 lines
894 B
JavaScript
40 lines
894 B
JavaScript
|
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 };
|
||
|
}
|