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/SessionContext.ts

27 lines
948 B

import { createContext, useCallback, useContext, useMemo } from 'react';
import { useSubscription, Subscription, Unsubscribe } from 'use-subscription';
type SessionContextValue = {
query: (name: string) => Subscription<unknown>;
dispatch: (name: string, value: unknown) => void;
};
export const SessionContext = createContext<SessionContextValue>({
query: () => ({
getCurrentValue: (): undefined => undefined,
subscribe: (): Unsubscribe => (): void => undefined,
}),
dispatch: (): void => undefined,
});
export const useSession = (name: string): unknown => {
const { query } = useContext(SessionContext);
const subscription = useMemo(() => query(name), [query, name]);
return useSubscription(subscription);
};
export const useSessionDispatch = (name: string): ((name: string, value: unknown) => void) => {
const { dispatch } = useContext(SessionContext);
return useCallback((value) => dispatch(name, value), [dispatch, name]);
};