RocketChat/Rocket.Chat

View on GitHub
packages/ui-contexts/src/hooks/useCurrentRoutePath.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { useCallback, useContext } from 'react';
import { useSyncExternalStore } from 'use-sync-external-store/shim';

import { RouterContext } from '../RouterContext';

export const useCurrentRoutePath = () => {
    const router = useContext(RouterContext);

    const getSnapshot = useCallback(() => {
        const name = router.getRouteName();
        return name
            ? router.buildRoutePath({
                    name,
                    params: router.getRouteParameters(),
                    search: router.getSearchParameters(),
              })
            : undefined;
    }, [router]);

    return useSyncExternalStore(router.subscribeToRouteChange, getSnapshot);
};