useIsFullscreen.tsx 696 B

1234567891011121314151617181920212223242526
  1. import {useEffect, useState} from 'react';
  2. import screenfull from 'screenfull';
  3. /**
  4. * Returns true of _any_ dom node is fullscreen right now.
  5. *
  6. * This hook converts `screenfull.isFullscreen` into a stateful value you can use
  7. * as part of your component render method.
  8. */
  9. export default function useIsFullscreen() {
  10. const [isFullscreen, setIsFullscreen] = useState(screenfull.isFullscreen);
  11. useEffect(() => {
  12. if (!screenfull.isEnabled) {
  13. return () => {};
  14. }
  15. const onChange = () => {
  16. setIsFullscreen(!isFullscreen);
  17. };
  18. screenfull.on('change', onChange);
  19. return () => screenfull.off('change', onChange);
  20. }, [isFullscreen]);
  21. return isFullscreen;
  22. }