forked from theKashey/react-imported-component
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodule.d.ts
75 lines (50 loc) · 2.42 KB
/
module.d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
declare module 'react-imported-component' {
import {StatelessComponent, ComponentType, ReactNode, Component, Ref} from "react";
interface DefaultImportedComponent<P> {
default: ComponentType<P>;
}
type DefaultComponent<P> = ComponentType<P> | DefaultImportedComponent<P>;
type LoadableComponentState = 'loading' | 'done' | 'error';
type ComponentRenderOption<P, K> = (Component: P, State: LoadableComponentState, props: K) => ReactNode;
type AdditionalHOC<T> = {
preload(): Promise<T>;
done: Promise<T>;
}
type ComponentOptions<P, K, RenderComponent = ComponentType<P>> = {
LoadingComponent?: ComponentType<any>,
ErrorComponent?: ComponentType<any>,
exportPicker?: (a: any) => any,
onError?: (a: any) => any,
render?: ComponentRenderOption<RenderComponent, K>
async?: boolean;
forwardProps?: P;
forwardRef?: Ref<P>;
}
type HOCType<P, K> = ComponentType<K> & AdditionalHOC<DefaultComponent<P>>;
interface HOC {
<P, K = P>(loader: () => Promise<DefaultComponent<P>>, options?: ComponentOptions<P, K>): HOCType<P, K>;
<P, K = P>(loader: () => Promise<P>, options?: ComponentOptions<P, K, P> & { render: ComponentRenderOption<P, K> }): HOCType<P, K>;
}
const importedComponent: HOC;
interface ImportedComponents {
[index: number]: () => Promise<DefaultComponent<any>>;
}
type LoadableResource<P> = {};
export type IComponentLoaderProps<P, K> =
ComponentOptions<P, K> & {
loadable: LoadableResource<P> | Promise<DefaultComponent<P>>
};
export class ComponentLoader<T, K> extends Component<IComponentLoaderProps<T, K>> {
}
export const ImportedStream: StatelessComponent<{ takeUID: (streamId: number) => any }>;
export default importedComponent;
export function lazy<P>(loader: () => Promise<DefaultComponent<P>>): HOCType<P, {}>;
export function printDrainHydrateMarks(streamId?: number): string;
export function drainHydrateMarks(streamId?: number): Array<string>;
export function rehydrateMarks(marks?: Array<string>): Promise<void>;
export function whenComponentsReady(): Promise<void>;
export function dryRender(renderFunction: () => any): Promise<void>;
export function assignImportedComponents(importedComponents: ImportedComponents): void;
export function loadableResource<P>(loader: () => Promise<DefaultComponent<P>>): LoadableResource<P>;
export function setConfiguration(config: { SSR?: boolean, hot?: boolean }): void;
}