The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/client/contexts/RouterContext.js

30 lines
1.0 KiB

import { createContext, useContext, useMemo, useCallback } from 'react';
import { useObservableValue } from '../hooks/useObservableValue';
export const RouterContext = createContext({
navigateTo: () => {},
replaceWith: () => {},
getRouteParameter: () => {},
getQueryStringParameter: () => {},
});
export const useRoute = (pathDefinition) => {
const { navigateTo, replaceWith } = useContext(RouterContext);
return useMemo(() => {
const navigate = (...args) => navigateTo(pathDefinition, ...args);
navigate.replacingState = (...args) => replaceWith(pathDefinition, ...args);
return navigate;
}, [navigateTo, replaceWith]);
};
export const useRouteParameter = (name) => {
const { getRouteParameter } = useContext(RouterContext);
return useObservableValue(useCallback((listener) => getRouteParameter(name, listener), [name]));
};
export const useQueryStringParameter = (name) => {
const { getQueryStringParameter } = useContext(RouterContext);
return useObservableValue(useCallback((listener) => getQueryStringParameter(name, listener), [name]));
};