1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | import * as React from 'react';
|
9 |
|
10 | export interface DefaultImportedComponent<Props> {
|
11 | default: React.ComponentType<Props>;
|
12 | }
|
13 |
|
14 | export type DefaultComponent<Props> = React.ComponentType<Props> | DefaultImportedComponent<Props>;
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 | export type ComponentResolver<Props, Module = DefaultComponent<Props>> = (
|
23 | module: Module,
|
24 | props: Props,
|
25 | ) => React.ComponentType<Props>;
|
26 |
|
27 | export interface OptionsWithoutResolver<Props> {
|
28 | cacheKey?(props: Props): any;
|
29 | fallback?: JSX.Element | undefined;
|
30 | ssr?: boolean | undefined;
|
31 | }
|
32 |
|
33 | export interface Options<Props, Module = DefaultComponent<Props>> extends OptionsWithoutResolver<Props> {
|
34 | resolveComponent?: ComponentResolver<Props, Module> | undefined;
|
35 | }
|
36 |
|
37 | export interface OptionsWithResolver<Props, Module = DefaultComponent<Props>> extends OptionsWithoutResolver<Props> {
|
38 | resolveComponent: ComponentResolver<Props, Module>;
|
39 | }
|
40 |
|
41 | export interface LoadableReadyOptions {
|
42 | namespace?: string | undefined;
|
43 | }
|
44 |
|
45 | export interface LoadableComponentMethods<Props> {
|
46 | preload(props?: Props): void;
|
47 | load(props?: Props): Promise<React.ComponentType<Props>>;
|
48 | }
|
49 |
|
50 | export interface ExtraComponentProps {
|
51 | fallback?: JSX.Element | undefined;
|
52 | }
|
53 |
|
54 | export type LoadableComponent<Props> = React.ComponentType<Props & ExtraComponentProps> &
|
55 | LoadableComponentMethods<Props>;
|
56 |
|
57 | export interface ExtraClassComponentProps<Component extends React.ComponentClass> extends ExtraComponentProps {
|
58 | ref?: React.LegacyRef<InstanceType<Component>> | undefined;
|
59 | }
|
60 |
|
61 | export type LoadableClassComponent<Component extends React.ComponentClass> = React.ComponentType<
|
62 | React.ComponentProps<Component> & ExtraClassComponentProps<Component>
|
63 | > &
|
64 | LoadableComponentMethods<React.ComponentProps<Component>>;
|
65 |
|
66 | export type LoadableLibrary<Module> = React.ComponentType<{
|
67 | fallback?: JSX.Element | undefined;
|
68 | children?: ((module: Module) => React.ReactNode) | undefined;
|
69 | ref?: React.Ref<Module> | undefined;
|
70 | }> &
|
71 | Module &
|
72 | LoadableComponentMethods<object>;
|
73 |
|
74 | declare function lib<Props, Module>(
|
75 | loadFn: (props: Props) => Promise<Module>,
|
76 | options?: OptionsWithoutResolver<Props>,
|
77 | ): LoadableLibrary<Module>;
|
78 |
|
79 | declare function loadableFunc<Props, Module = DefaultComponent<Props>>(
|
80 | loadFn: (props: Props) => Promise<Module>,
|
81 | options: OptionsWithResolver<Props, Module>,
|
82 | ): LoadableComponent<Props>;
|
83 |
|
84 | declare function loadableFunc<Props>(
|
85 | loadFn: (props: Props) => Promise<DefaultComponent<Props>>,
|
86 | options?: OptionsWithoutResolver<Props>,
|
87 | ): LoadableComponent<Props>;
|
88 |
|
89 | declare function loadableFunc<Component extends React.ComponentClass<any>>(
|
90 | loadFn: (props: React.ComponentProps<Component>) => Promise<Component | { default: Component }>,
|
91 | options?: Options<React.ComponentProps<Component>, Component>,
|
92 | ): LoadableClassComponent<Component>;
|
93 |
|
94 | declare const loadable: typeof loadableFunc & { lib: typeof lib };
|
95 |
|
96 | export default loadable;
|
97 |
|
98 | export namespace lazy {
|
99 | function lib<Module>(loadFn: (props: object) => Promise<Module>): LoadableLibrary<Module>;
|
100 | }
|
101 |
|
102 | export function lazy<Props>(loadFn: (props: Props) => Promise<DefaultComponent<Props>>): LoadableComponent<Props>;
|
103 |
|
104 | export function loadableReady(done?: () => any, options?: LoadableReadyOptions): Promise<void>;
|
105 |
|
\ | No newline at end of file |