26 lines
644 B
TypeScript
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;
|