diff --git a/types/loadable__component/index.d.ts b/types/loadable__component/index.d.ts index 56f5ba7446..b1f232b167 100644 --- a/types/loadable__component/index.d.ts +++ b/types/loadable__component/index.d.ts @@ -1,4 +1,4 @@ -// Type definitions for @loadable/component 5.9 +// Type definitions for @loadable/component 5.10 // Project: https://github.com/smooth-code/loadable-components // Definitions by: Martynas KadiĊĦa // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped @@ -7,36 +7,40 @@ import * as React from 'react'; export interface DefaultImportedComponent

{ - default: React.ComponentType

; + default: React.ComponentType

; } export type DefaultComponent

= React.ComponentType

| DefaultImportedComponent

; -export interface Options { - fallback?: JSX.Element; - ssr?: boolean; +export interface Options { + cacheKey?(props: T): any; + fallback?: JSX.Element; + ssr?: boolean; } export interface LoadableReadyOptions { - namespace?: string; + namespace?: string; } -export type LoadableComponent = React.ComponentType & { preload(props?: T): void }; -export type LoadableLibrary = React.ComponentType<{ - fallback?: JSX.Element; - children?: (module: TModule) => React.ReactNode; - ref?: React.Ref; -}> & - TModule & { preload(props?: object): void }; +export interface LoadableComponentMethods { + preload(props?: T): void; + load(props?: T): Promise>; +} -declare function lib( - loadFn: (props: object) => Promise, - options?: Options -): LoadableLibrary; +export type LoadableComponent = React.ComponentType & LoadableComponentMethods; +export type LoadableLibrary = React.ComponentType<{ + fallback?: JSX.Element; + children?: (module: TModule) => React.ReactNode; + ref?: React.Ref; +}> & + TModule & + LoadableComponentMethods; + +declare function lib(loadFn: (props: object) => Promise, options?: Options): LoadableLibrary; declare function loadableFunc( - loadFn: (props: T) => Promise>, - options?: Options + loadFn: (props: T) => Promise>, + options?: Options ): LoadableComponent; declare const loadable: typeof loadableFunc & { lib: typeof lib }; @@ -44,7 +48,7 @@ declare const loadable: typeof loadableFunc & { lib: typeof lib }; export default loadable; export namespace lazy { - function lib(loadFn: (props: object) => Promise): LoadableLibrary; + function lib(loadFn: (props: object) => Promise): LoadableLibrary; } export function lazy(loadFn: (props: T) => Promise>): LoadableComponent; diff --git a/types/loadable__component/loadable__component-tests.tsx b/types/loadable__component/loadable__component-tests.tsx index 2cadf92218..4a679dfc27 100644 --- a/types/loadable__component/loadable__component-tests.tsx +++ b/types/loadable__component/loadable__component-tests.tsx @@ -12,11 +12,11 @@ function importComponentLoader() { } const lib = { - getTestObj: () => ({ bar: 'bar', foo: 'foo' }) + getTestObj: () => ({ bar: 'bar', foo: 'foo' }), }; function defaultImportLibLoader() { - return new Promise<{ default: typeof lib }>(resolve => resolve(({ default: lib }))); + return new Promise<{ default: typeof lib }>(resolve => resolve({ default: lib })); } function importLibLoader() { @@ -39,11 +39,19 @@ function importLibLoader() { // Should allow passing boolean to `ssr` in options loadable(defaultImportComponentLoader, { ssr: true }); + // Should allow passing function to `cacheKey` in options + loadable(defaultImportComponentLoader, { cacheKey: props => props.foo }); + // Should allow passing `fallback` prop to loadable component loading...} />; // Should allow preloading LoadableComponent.preload(); + + // Should allow force loading + LoadableComponent.load().then(Component => { + ; + }); } // lazy @@ -61,21 +69,22 @@ function importLibLoader() { // Should allow preloading LazyComponent.preload(); + + // Should allow force loading + LazyComponent.load().then(Component => { + ; + }); } // loadable.lib { // Should infer types from module with default export and reflect them in children render prop const LoadableDefaultLibrary = loadable.lib(defaultImportLibLoader); - - {({ default: { getTestObj } }) => getTestObj().foo} - ; + {({ default: { getTestObj } }) => getTestObj().foo}; // Should infer types from module without default export and reflect them in children render prop const LoadableLibrary = loadable.lib(importLibLoader); - - {({ getTestObj }) => getTestObj().foo} - ; + {({ getTestObj }) => getTestObj().foo}; // Should allow passing fallback JSX element loadable.lib(importLibLoader, { fallback:
loading lib...
}); @@ -83,10 +92,11 @@ function importLibLoader() { // Should allow passing boolean to `ssr` in options loadable.lib(defaultImportComponentLoader, { ssr: true }); + // Should allow passing function to `cacheKey` in options + loadable.lib(defaultImportComponentLoader, { cacheKey: props => props.foo }); + // Should allow passing fallback prop - Loading library...}> - {({ getTestObj }) => getTestObj().foo} - ; + Loading library...}>{({ getTestObj }) => getTestObj().foo}; // Should reflect inferred types from module in ref const ref = React.createRef(); @@ -95,26 +105,25 @@ function importLibLoader() { // Should allow preloading LoadableLibrary.preload(); + + // Should allow force loading + LoadableLibrary.load().then(Component => { + ; + }); } // lazy.lib { // Should infer types from module with default export and reflect them in children render prop const LazyDefaultLibrary = lazy.lib(defaultImportLibLoader); - - {({ default: { getTestObj } }) => getTestObj().foo} - ; + {({ default: { getTestObj } }) => getTestObj().foo}; // Should infer types from module without default export and reflect them in children render prop const LazyLibrary = lazy.lib(importLibLoader); - - {({ getTestObj }) => getTestObj().foo} - ; + {({ getTestObj }) => getTestObj().foo}; // Should allow passing fallback prop - Loading library...}> - {({ getTestObj }) => getTestObj().foo} - ; + Loading library...}>{({ getTestObj }) => getTestObj().foo}; // Should reflect inferred types from module in ref const ref = React.createRef(); @@ -123,6 +132,11 @@ function importLibLoader() { // Should allow preloading LazyDefaultLibrary.preload(); + + // Should allow force loading + LazyDefaultLibrary.load().then(Component => { + ; + }); } // loadableReady