next-safe-action-query
Version:
Type-safe server actions with built-in validation for Next.js
28 lines • 2 kB
TypeScript
import { type QueryKey, type UseQueryOptions, useQuery } from "@tanstack/react-query";
import type { InferSafeActionFnInput, InferSafeActionFnResult, SafeActionFn } from "next-safe-action";
import type { HookSafeActionFn } from "next-safe-action/hooks";
export declare class SafeActionError extends Error {
readonly type: "server" | "validation" | "network";
readonly details?: unknown | undefined;
constructor(message: string, type: "server" | "validation" | "network", details?: unknown | undefined);
}
export interface UseSafeActionQueryOptions<TData, TInput> extends Omit<UseQueryOptions<TData, SafeActionError>, "queryKey" | "queryFn"> {
actionInput: TInput;
onServerError?: (error: Error) => void;
onValidationErrors?: (errors: string[]) => void;
onNetworkError?: (error: Error) => void;
onSuccess?: (data: TData) => void;
onError?: (error: Error) => void;
}
export type SafeActionQueryOptionsWithOutInput<TAction extends SafeActionFn<any, any, any, any, any>> = Omit<UseSafeActionQueryOptions<InferSafeActionFnResult<TAction>["data"], InferSafeActionFnInput<TAction>["clientInput"]>, "actionInput">;
/**
* Generic hook for using Next Safe Actions with TanStack Query
* Properly infers types from the safe action function
* Supports actions with or without bind arguments
*/
export declare function useSafeActionQuery<TAction extends HookSafeActionFn<any, any, any, TData>, TData = InferSafeActionFnResult<TAction>["data"], TInput = InferSafeActionFnInput<TAction>["clientInput"]>(queryKey: QueryKey, action: TAction, options: UseSafeActionQueryOptions<TData, TInput>): SafeActionQueryResult<TData>;
export type SafeActionQueryResult<TData> = ReturnType<typeof useQuery<TData, SafeActionError>>;
export type { QueryKey } from "@tanstack/react-query";
export type { InferSafeActionFnInput, InferSafeActionFnResult, SafeActionFn, } from "next-safe-action";
export type { HookSafeActionFn } from "next-safe-action/hooks";
//# sourceMappingURL=index.d.ts.map