@shopify/react-async
Version:
Tools for creating powerful, asynchronously-loaded React components
38 lines • 1.81 kB
TypeScript
import type { ReactElement, ReactNode } from 'react';
import type { Resolver } from '@shopify/async';
import type { IfAllOptionalKeys, NoInfer } from '@shopify/useful-types';
export declare enum AssetTiming {
None = 1,
NextPage = 2,
CurrentPage = 3,
Immediate = 4
}
export interface AsyncHookTarget<T, PreloadOptions extends object, PrefetchOptions extends object, KeepFreshOptions extends object> {
readonly resolver: Resolver<T>;
usePreload(...props: IfAllOptionalKeys<PreloadOptions, [
NoInfer<PreloadOptions>?
], [
NoInfer<PreloadOptions>
]>): () => void;
usePrefetch(...props: IfAllOptionalKeys<PrefetchOptions, [
NoInfer<PrefetchOptions>?
], [
NoInfer<PrefetchOptions>
]>): () => void;
useKeepFresh(...props: IfAllOptionalKeys<KeepFreshOptions, [
NoInfer<KeepFreshOptions>?
], [
NoInfer<KeepFreshOptions>
]>): () => void;
}
export interface AsyncComponentType<T, Props extends object, PreloadOptions extends object, PrefetchOptions extends object, KeepFreshOptions extends object> extends AsyncHookTarget<T, PreloadOptions, PrefetchOptions, KeepFreshOptions> {
(props: Props): ReactElement<Props>;
Preload(props: PreloadOptions): React.ReactElement<{}> | null;
Prefetch(props: PrefetchOptions): React.ReactElement<{}> | null;
KeepFresh(props: KeepFreshOptions): React.ReactElement<{}> | null;
renderLoading: ((props: Props) => ReactNode) | undefined;
}
export type PreloadOptions<T> = T extends AsyncHookTarget<any, infer U, any, any> ? U : never;
export type PrefetchOptions<T> = T extends AsyncHookTarget<any, any, infer U, any> ? U : never;
export type KeepFreshOptions<T> = T extends AsyncHookTarget<any, any, any, infer U> ? U : never;
//# sourceMappingURL=types.d.ts.map