@wordpress/components
Version:
UI components for WordPress.
45 lines (40 loc) • 997 B
text/typescript
/**
* WordPress dependencies
*/
import { useCallback } from '@wordpress/element';
/**
* Internal dependencies
*/
import { useContextSystem, WordPressComponentProps } from '../../ui/context';
import Button from '../../button';
import useNavigator from '../use-navigator';
import type { NavigatorBackButtonHookProps } from '../types';
export function useNavigatorBackButton(
props: WordPressComponentProps< NavigatorBackButtonHookProps, 'button' >
) {
const {
onClick,
as = Button,
goToParent: goToParentProp = false,
...otherProps
} = useContextSystem( props, 'NavigatorBackButton' );
const { goBack, goToParent } = useNavigator();
const handleClick: React.MouseEventHandler< HTMLButtonElement > =
useCallback(
( e ) => {
e.preventDefault();
if ( goToParentProp ) {
goToParent();
} else {
goBack();
}
onClick?.( e );
},
[ goToParentProp, goToParent, goBack, onClick ]
);
return {
as,
onClick: handleClick,
...otherProps,
};
}