@renegade-fi/react
Version:
React library for Renegade
60 lines (51 loc) • 2.09 kB
text/typescript
"use client";
import type { Evaluate, GetBackOfQueueWalletErrorType } from "@renegade-fi/core";
import {
type GetBackOfQueueWalletData,
type GetBackOfQueueWalletOptions,
type GetBackOfQueueWalletQueryFnData,
type GetBackOfQueueWalletQueryKey,
getBackOfQueueWalletQueryOptions,
} from "@renegade-fi/core/query";
import { useQueryClient } from "@tanstack/react-query";
import type { ConfigParameter, QueryParameter } from "../types/properties.js";
import { type UseQueryReturnType, useQuery } from "../utils/query.js";
import { useConfig } from "./useConfig.js";
import { useStatus } from "./useStatus.js";
import { useWalletWebsocket } from "./useWalletWebSocket.js";
export type UseBackOfQueueWalletParameters<selectData = GetBackOfQueueWalletData> = Evaluate<
GetBackOfQueueWalletOptions &
ConfigParameter &
QueryParameter<
GetBackOfQueueWalletQueryFnData,
GetBackOfQueueWalletErrorType,
selectData,
GetBackOfQueueWalletQueryKey
>
>;
export type UseBackOfQueueWalletReturnType<selectData = GetBackOfQueueWalletData> =
UseQueryReturnType<selectData, GetBackOfQueueWalletErrorType>;
export function useBackOfQueueWallet<selectData = GetBackOfQueueWalletData>(
parameters: UseBackOfQueueWalletParameters<selectData> = {},
): UseBackOfQueueWalletReturnType<selectData> {
const { filterDefaults, query = {} } = parameters;
const config = useConfig(parameters);
const status = useStatus(parameters);
const queryClient = useQueryClient();
const options = getBackOfQueueWalletQueryOptions(config, {
...parameters,
filterDefaults,
});
const enabled = Boolean(
status === "in relayer" && config?.state.seed && (query.enabled ?? true),
);
useWalletWebsocket({
enabled,
onUpdate: (wallet) => {
if (wallet && queryClient && options.queryKey) {
queryClient.setQueryData(options.queryKey, wallet);
}
},
});
return useQuery({ ...query, ...options, enabled });
}