mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-05 08:59:14 +08:00
♻️ Make generic Accordion more generic
This commit is contained in:
parent
7146163301
commit
1b557f1619
3 changed files with 106 additions and 59 deletions
|
@ -0,0 +1,39 @@
|
|||
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 };
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue