RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/views/room/hooks/useIsVisible.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { useDebouncedState, useSafely } from '@rocket.chat/fuselage-hooks';
import { useCallback } from 'react';

export const useIsVisible = () => {
    const [menuVisibility, setMenuVisibility] = useSafely(useDebouncedState(!!window.DISABLE_ANIMATION, 100));

    const callbackRef = useCallback(
        (node: HTMLElement | null) => {
            if (!node) {
                return;
            }
            const observer = new IntersectionObserver((entries) => {
                entries.forEach((entry) => {
                    setMenuVisibility(entry.isIntersecting);
                });
            });

            observer.observe(node);
        },
        [setMenuVisibility],
    );

    return [callbackRef, menuVisibility] as const;
};