@ozmos/viper-react
Version:
React plugin for Viper
425 lines • 16.1 kB
TypeScript
import { type QueryClient, useMutation, useQuery } from "@tanstack/react-query";
type BaseBindings = string[];
type BaseProps = Record<string, {
result: unknown;
bindings: BaseBindings;
}>;
type BaseActions = Record<string, {
args: unknown;
result: unknown;
bindings: BaseBindings;
}>;
type BaseParams = Record<string, string>;
interface BasePageType {
props: BaseProps;
actions: BaseActions;
params: BaseParams;
}
interface BasePage extends BasePageType {
hashes: Record<string, string>;
title?: string | null;
}
interface PageInit {
formatTitle?: (title: string) => string;
queryClient: QueryClient;
}
type HeaderFunction = () => Promise<Record<string, string>>;
type BindOptions<T extends {
bindings: BaseBindings;
}> = T["bindings"]["length"] extends 0 ? {
bind?: never;
} : {
bind: {
[K in T["bindings"][number]]: string | number | null;
};
};
type QueryOptions<T> = Partial<Parameters<typeof useQuery<T>>[0]>;
type QueryStringOptions = {
qs?: Record<string, string | number | unknown[] | null>;
};
type MutationOptions<TResult, TArgs> = Parameters<typeof useMutation<TResult, unknown, TArgs>>[0];
type UseQueryParams<T extends {
bindings: BaseBindings;
result: unknown;
}> = T["bindings"]["length"] extends 0 ? [
options?: QueryOptions<T["result"]> & BindOptions<T> & QueryStringOptions
] : [
options: QueryOptions<T["result"]> & BindOptions<T> & QueryStringOptions
];
type UseMutationParams<T extends {
bindings: BaseBindings;
result: unknown;
args: unknown;
}> = T["bindings"]["length"] extends 0 ? [options?: MutationOptions<T["result"], T["args"]> & BindOptions<T>] : [options: MutationOptions<T["result"], T["args"]> & BindOptions<T>];
type UseFormParams<T extends {
bindings: BaseBindings;
result: unknown;
args: unknown;
}> = T["bindings"]["length"] extends 0 ? [
options?: MutationOptions<T["result"], T["args"]> & {
state: T["args"];
} & BindOptions<T>
] : [
options: MutationOptions<T["result"], T["args"]> & {
state: T["args"];
} & BindOptions<T>
];
type UseFormDataParams<T extends {
bindings: BaseBindings;
result: unknown;
args: unknown;
}> = T["bindings"]["length"] extends 0 ? [
options?: MutationOptions<T["result"], T["args"]> & {
state: T["args"];
files: string[];
} & BindOptions<T>
] : [
options: MutationOptions<T["result"], T["args"]> & {
state: T["args"];
files: string[];
} & BindOptions<T>
];
export declare class Page {
formatTitle: (title: string) => string;
props: Record<string, unknown>;
actions: {};
hashes: Record<string, string>;
queryClient: QueryClient | null;
headerFunctions: HeaderFunction[];
mergeHeaders(func: HeaderFunction): () => void;
getHeaders(): Promise<Record<string, string>>;
updateFromPageJson(json: BasePage): void;
setPageTitle(title: string): void;
}
export declare function ViperProvider({ children, formatTitle, }: {
children: React.ReactNode;
} & PageInit): import("react").JSX.Element;
export declare function reactRouterLoader({ request }: {
request: Request;
}): Promise<{}>;
export declare function usePage<P extends BasePageType>(): {
setPageTitle: (title: string) => void;
params: P["params"];
useQuery<K extends keyof P["props"]>(key: K, ...args: UseQueryParams<P["props"][K]>): {
data: P["props"][K]["result"];
error: Error;
isError: true;
isPending: false;
isLoading: false;
isLoadingError: false;
isRefetchError: true;
isSuccess: false;
isPlaceholderData: false;
status: "error";
dataUpdatedAt: number;
errorUpdatedAt: number;
failureCount: number;
failureReason: Error | null;
errorUpdateCount: number;
isFetched: boolean;
isFetchedAfterMount: boolean;
isFetching: boolean;
isInitialLoading: boolean;
isPaused: boolean;
isRefetching: boolean;
isStale: boolean;
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").NoInfer<P["props"][K]["result"]>, Error>>;
fetchStatus: import("@tanstack/react-query").FetchStatus;
promise: Promise<import("@tanstack/react-query").NoInfer<P["props"][K]["result"]>>;
} | {
data: P["props"][K]["result"];
error: null;
isError: false;
isPending: false;
isLoading: false;
isLoadingError: false;
isRefetchError: false;
isSuccess: true;
isPlaceholderData: false;
status: "success";
dataUpdatedAt: number;
errorUpdatedAt: number;
failureCount: number;
failureReason: Error | null;
errorUpdateCount: number;
isFetched: boolean;
isFetchedAfterMount: boolean;
isFetching: boolean;
isInitialLoading: boolean;
isPaused: boolean;
isRefetching: boolean;
isStale: boolean;
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").NoInfer<P["props"][K]["result"]>, Error>>;
fetchStatus: import("@tanstack/react-query").FetchStatus;
promise: Promise<import("@tanstack/react-query").NoInfer<P["props"][K]["result"]>>;
} | {
data: P["props"][K]["result"];
error: Error;
isError: true;
isPending: false;
isLoading: false;
isLoadingError: true;
isRefetchError: false;
isSuccess: false;
isPlaceholderData: false;
status: "error";
dataUpdatedAt: number;
errorUpdatedAt: number;
failureCount: number;
failureReason: Error | null;
errorUpdateCount: number;
isFetched: boolean;
isFetchedAfterMount: boolean;
isFetching: boolean;
isInitialLoading: boolean;
isPaused: boolean;
isRefetching: boolean;
isStale: boolean;
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").NoInfer<P["props"][K]["result"]>, Error>>;
fetchStatus: import("@tanstack/react-query").FetchStatus;
promise: Promise<import("@tanstack/react-query").NoInfer<P["props"][K]["result"]>>;
} | {
data: P["props"][K]["result"];
error: null;
isError: false;
isPending: true;
isLoading: true;
isLoadingError: false;
isRefetchError: false;
isSuccess: false;
isPlaceholderData: false;
status: "pending";
dataUpdatedAt: number;
errorUpdatedAt: number;
failureCount: number;
failureReason: Error | null;
errorUpdateCount: number;
isFetched: boolean;
isFetchedAfterMount: boolean;
isFetching: boolean;
isInitialLoading: boolean;
isPaused: boolean;
isRefetching: boolean;
isStale: boolean;
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").NoInfer<P["props"][K]["result"]>, Error>>;
fetchStatus: import("@tanstack/react-query").FetchStatus;
promise: Promise<import("@tanstack/react-query").NoInfer<P["props"][K]["result"]>>;
} | {
data: P["props"][K]["result"];
error: null;
isError: false;
isPending: true;
isLoadingError: false;
isRefetchError: false;
isSuccess: false;
isPlaceholderData: false;
status: "pending";
dataUpdatedAt: number;
errorUpdatedAt: number;
failureCount: number;
failureReason: Error | null;
errorUpdateCount: number;
isFetched: boolean;
isFetchedAfterMount: boolean;
isFetching: boolean;
isLoading: boolean;
isInitialLoading: boolean;
isPaused: boolean;
isRefetching: boolean;
isStale: boolean;
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").NoInfer<P["props"][K]["result"]>, Error>>;
fetchStatus: import("@tanstack/react-query").FetchStatus;
promise: Promise<import("@tanstack/react-query").NoInfer<P["props"][K]["result"]>>;
} | {
data: P["props"][K]["result"];
isError: false;
error: null;
isPending: false;
isLoading: false;
isLoadingError: false;
isRefetchError: false;
isSuccess: true;
isPlaceholderData: true;
status: "success";
dataUpdatedAt: number;
errorUpdatedAt: number;
failureCount: number;
failureReason: Error | null;
errorUpdateCount: number;
isFetched: boolean;
isFetchedAfterMount: boolean;
isFetching: boolean;
isInitialLoading: boolean;
isPaused: boolean;
isRefetching: boolean;
isStale: boolean;
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").NoInfer<P["props"][K]["result"]>, Error>>;
fetchStatus: import("@tanstack/react-query").FetchStatus;
promise: Promise<import("@tanstack/react-query").NoInfer<P["props"][K]["result"]>>;
};
useMutation<K extends keyof P["actions"]>(key: K, ...args: UseMutationParams<P["actions"][K]>): import("@tanstack/react-query").UseMutationResult<P["actions"][K]["result"], unknown, P["actions"][K]["args"], unknown>;
useForm<K extends keyof P["actions"]>(key: K, ...args: UseFormParams<P["actions"][K]>): {
mutate(override?: Partial<P["actions"][K]["args"]>): void;
mutateAsync(override?: Partial<P["actions"][K]["args"]>): Promise<P["actions"][K]["result"]>;
reset: () => void;
errors: Record<string, string>;
state: P["actions"][K]["args"];
setState: import("react").Dispatch<import("react").SetStateAction<P["actions"][K]["args"]>>;
data: undefined;
variables: undefined;
error: null;
isError: false;
isIdle: true;
isPending: false;
isSuccess: false;
status: "idle";
context: unknown;
failureCount: number;
failureReason: unknown;
isPaused: boolean;
submittedAt: number;
} | {
mutate(override?: Partial<P["actions"][K]["args"]>): void;
mutateAsync(override?: Partial<P["actions"][K]["args"]>): Promise<P["actions"][K]["result"]>;
reset: () => void;
errors: Record<string, string>;
state: P["actions"][K]["args"];
setState: import("react").Dispatch<import("react").SetStateAction<P["actions"][K]["args"]>>;
data: undefined;
variables: P["actions"][K]["args"];
error: null;
isError: false;
isIdle: false;
isPending: true;
isSuccess: false;
status: "pending";
context: unknown;
failureCount: number;
failureReason: unknown;
isPaused: boolean;
submittedAt: number;
} | {
mutate(override?: Partial<P["actions"][K]["args"]>): void;
mutateAsync(override?: Partial<P["actions"][K]["args"]>): Promise<P["actions"][K]["result"]>;
reset: () => void;
errors: Record<string, string>;
state: P["actions"][K]["args"];
setState: import("react").Dispatch<import("react").SetStateAction<P["actions"][K]["args"]>>;
data: undefined;
error: unknown;
variables: P["actions"][K]["args"];
isError: true;
isIdle: false;
isPending: false;
isSuccess: false;
status: "error";
context: unknown;
failureCount: number;
failureReason: unknown;
isPaused: boolean;
submittedAt: number;
} | {
mutate(override?: Partial<P["actions"][K]["args"]>): void;
mutateAsync(override?: Partial<P["actions"][K]["args"]>): Promise<P["actions"][K]["result"]>;
reset: () => void;
errors: Record<string, string>;
state: P["actions"][K]["args"];
setState: import("react").Dispatch<import("react").SetStateAction<P["actions"][K]["args"]>>;
data: P["actions"][K]["result"];
error: null;
variables: P["actions"][K]["args"];
isError: false;
isIdle: false;
isPending: false;
isSuccess: true;
status: "success";
context: unknown;
failureCount: number;
failureReason: unknown;
isPaused: boolean;
submittedAt: number;
};
useFormData<K extends keyof P["actions"]>(key: K, ...args: UseFormDataParams<P["actions"][K]>): {
mutate(override?: Partial<P["actions"][K]["args"]>): void;
mutateAsync(override?: Partial<P["actions"][K]["args"]>): Promise<P["actions"][K]["result"]>;
reset: () => void;
errors: Record<string, string>;
state: P["actions"][K]["args"];
setState: import("react").Dispatch<import("react").SetStateAction<P["actions"][K]["args"]>>;
data: undefined;
variables: undefined;
error: null;
isError: false;
isIdle: true;
isPending: false;
isSuccess: false;
status: "idle";
context: unknown;
failureCount: number;
failureReason: unknown;
isPaused: boolean;
submittedAt: number;
} | {
mutate(override?: Partial<P["actions"][K]["args"]>): void;
mutateAsync(override?: Partial<P["actions"][K]["args"]>): Promise<P["actions"][K]["result"]>;
reset: () => void;
errors: Record<string, string>;
state: P["actions"][K]["args"];
setState: import("react").Dispatch<import("react").SetStateAction<P["actions"][K]["args"]>>;
data: undefined;
variables: P["actions"][K]["args"];
error: null;
isError: false;
isIdle: false;
isPending: true;
isSuccess: false;
status: "pending";
context: unknown;
failureCount: number;
failureReason: unknown;
isPaused: boolean;
submittedAt: number;
} | {
mutate(override?: Partial<P["actions"][K]["args"]>): void;
mutateAsync(override?: Partial<P["actions"][K]["args"]>): Promise<P["actions"][K]["result"]>;
reset: () => void;
errors: Record<string, string>;
state: P["actions"][K]["args"];
setState: import("react").Dispatch<import("react").SetStateAction<P["actions"][K]["args"]>>;
data: undefined;
error: unknown;
variables: P["actions"][K]["args"];
isError: true;
isIdle: false;
isPending: false;
isSuccess: false;
status: "error";
context: unknown;
failureCount: number;
failureReason: unknown;
isPaused: boolean;
submittedAt: number;
} | {
mutate(override?: Partial<P["actions"][K]["args"]>): void;
mutateAsync(override?: Partial<P["actions"][K]["args"]>): Promise<P["actions"][K]["result"]>;
reset: () => void;
errors: Record<string, string>;
state: P["actions"][K]["args"];
setState: import("react").Dispatch<import("react").SetStateAction<P["actions"][K]["args"]>>;
data: P["actions"][K]["result"];
error: null;
variables: P["actions"][K]["args"];
isError: false;
isIdle: false;
isPending: false;
isSuccess: true;
status: "success";
context: unknown;
failureCount: number;
failureReason: unknown;
isPaused: boolean;
submittedAt: number;
};
};
export {};
//# sourceMappingURL=page.d.ts.map