Files
yaak/apps/yaak-proxy/hooks/useRpcQueryWithEvent.ts
2026-03-12 08:31:05 -07:00

24 lines
866 B
TypeScript

import { type UseQueryOptions, useQueryClient } from '@tanstack/react-query';
import type { RpcEventSchema, RpcSchema } from '@yaakapp-internal/proxy-lib';
import type { Req, Res } from '../lib/rpc';
import { useRpcEvent } from './useRpcEvent';
import { useRpcQuery } from './useRpcQuery';
/**
* Combines useRpcQuery with an event listener that invalidates the query
* whenever the specified event fires, keeping data fresh automatically.
*/
export function useRpcQueryWithEvent<
K extends keyof RpcSchema,
E extends keyof RpcEventSchema & string,
>(cmd: K, payload: Req<K>, event: E, opts?: Omit<UseQueryOptions<Res<K>>, 'queryKey' | 'queryFn'>) {
const queryClient = useQueryClient();
const query = useRpcQuery(cmd, payload, opts);
useRpcEvent(event, () => {
queryClient.invalidateQueries({ queryKey: [cmd, payload] });
});
return query;
}