UNPKG

@ozmos/viper-react

Version:

React plugin for Viper

425 lines 16.1 kB
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