woocommerce/plugins/woocommerce-blocks/assets/js/base/hooks/use-spoken-message.ts

26 lines
644 B
TypeScript

/**
* External dependencies
*/
import { useEffect, renderToString } from '@wordpress/element';
import { speak } from '@wordpress/a11y';
/**
* Custom hook which announces the message with the given politeness, if a
* valid message is provided.
*/
export const useSpokenMessage = (
message: string | React.ReactNode | undefined,
politeness: 'polite' | 'assertive' | undefined
) => {
const spokenMessage =
typeof message === 'string' ? message : renderToString( message );
useEffect( () => {
if ( spokenMessage ) {
speak( spokenMessage, politeness );
}
}, [ spokenMessage, politeness ] );
};
export default useSpokenMessage;