Skip to content

Commit

Permalink
fix: restore async behaviour, fixes #141
Browse files Browse the repository at this point in the history
  • Loading branch information
theKashey committed Sep 13, 2019
1 parent a62bc5d commit ad822d4
Show file tree
Hide file tree
Showing 11 changed files with 65 additions and 58 deletions.
59 changes: 39 additions & 20 deletions example/app.tsx
@@ -1,22 +1,41 @@
import * as React from 'react';
import {Component} from 'react';
import {GHCorner} from 'react-gh-corner';
import {AppWrapper} from './styled';
export interface AppState {

import * as React from "react";

import imported, {lazy, LazyBoundary} from "../src";

const deferImport = (promise: Promise<any>) => new Promise(resolve => setTimeout(() => resolve(promise), 2000));

const Lazy = () => <div>I AM LAZY</div>;


const ReactLazy = React.lazy(() => deferImport({default: Lazy}));
const ImportedLazy = lazy(() => deferImport({default: Lazy}));
const Imported = imported(() => deferImport({default: Lazy}));
const ImportedLoading = imported(() => deferImport({default: Lazy}), { LoadingComponent: () => "imported is loading"});

function App() {
return (
<div className="App">
<h1>Lazy Loading</h1>
<ul>
<li>
<React.Suspense fallback={<div>Loading (React)</div>}>
<ReactLazy/>
</React.Suspense>
</li>
<li>
<LazyBoundary fallback={<div>Loading (Imported)</div>}>
<ImportedLazy/>
</LazyBoundary>
</li>
<li>
<Imported/>
</li>
<li>
<ImportedLoading/>
</li>
</ul>
</div>
);
}
const repoUrl = 'https://github.com/zzarcon/';
export default class App extends Component <{}, AppState> {
state: AppState = {

}

render() {
return (
<AppWrapper>
<GHCorner openInNewTab href={repoUrl} />
Example!
</AppWrapper>
)
}
}
export default App;
16 changes: 0 additions & 16 deletions example/styled.ts

This file was deleted.

16 changes: 0 additions & 16 deletions example/utils.ts

This file was deleted.

4 changes: 2 additions & 2 deletions package.json
Expand Up @@ -70,11 +70,11 @@
"dist/es2015/index.js",
"dist/es2015/boot.js"
],
"limit": "3.3 KB"
"limit": "3.4 KB"
},
{
"path": "dist/es2015/index.js",
"limit": "3 KB"
"limit": "3.1 KB"
},
{
"path": "dist/es2015/boot.js",
Expand Down
3 changes: 3 additions & 0 deletions src/Component.tsx
Expand Up @@ -24,6 +24,9 @@ function ImportedComponent<P, K>(props: ComponentOptions<P, K>): ReactElement |
}

if (loading) {
if (props.async) {
throw loadable.resolution;
}
return props.LoadingComponent
? <props.LoadingComponent {...props.forwardProps} />
: null;
Expand Down
3 changes: 2 additions & 1 deletion src/HOC.tsx
Expand Up @@ -36,6 +36,7 @@ function loader<P, K = P>(
onError={options.onError}

render={options.render}
async={options.async}

forwardProps={props || {}}
forwardRef={ref}
Expand All @@ -51,7 +52,7 @@ function loader<P, K = P>(
Imported.done = loadable.resolution;

return Imported;
};
}

export function lazy<T>(importer: LazyImport<T>): React.FC<T> {
if (isBackend) {
Expand Down
3 changes: 3 additions & 0 deletions src/boot.ts
Expand Up @@ -2,13 +2,16 @@ import {rehydrateMarks} from './marks';
import {done as whenComponentsReady, assignImportedComponents} from './loadable';
import {setConfiguration} from './config';
import {injectLoadableTracker} from './trackers/globalTracker';
import {loadByChunkname} from './loadByChunkName';


export {
rehydrateMarks,
whenComponentsReady,
assignImportedComponents,

loadByChunkname,

setConfiguration,

injectLoadableTracker,
Expand Down
3 changes: 3 additions & 0 deletions src/index.ts
Expand Up @@ -13,6 +13,7 @@ import {setConfiguration} from './config';
import {remapImports} from './helpers';

import {useImported, useLoadable, useLazy} from './useImported';
import {loadByChunkname} from './loadByChunkName';

export {
printDrainHydrateMarks,
Expand All @@ -23,6 +24,8 @@ export {
dryRender,
assignImportedComponents,

loadByChunkname,

ComponentLoader,
loadableResource,

Expand Down
9 changes: 9 additions & 0 deletions src/loadByChunkName.ts
@@ -0,0 +1,9 @@
import {markMeta} from "./loadable";

export const loadByChunkname = (chunkName: string) => (
Promise.all(
markMeta
.filter(meta => meta.chunkName === chunkName)
.map(meta => meta.loadable.load())
)
);
6 changes: 3 additions & 3 deletions src/loadable.ts
Expand Up @@ -180,8 +180,8 @@ export const dryRender = (renderFunction: () => void) => {

export const markMeta: MarkMeta[] = [];

const assignMetaData = (mark: Mark, chunkName: string, fileName: string) => {
markMeta.push({mark, chunkName, fileName});
const assignMetaData = (mark: Mark, loadable: Loadable<any>, chunkName: string, fileName: string) => {
markMeta.push({mark, loadable, chunkName, fileName});
};

type ImportedDefinition = [Promised<any>, string, string]
Expand All @@ -194,7 +194,7 @@ export const assignImportedComponents = (set: Array<ImportedDefinition>) => {
marks.forEach(mark => REJECTED_MARKS.add(mark))
}
const loadable = toLoadable(imported[0]);
assignMetaData(loadable.mark, imported[1], imported[2]);
assignMetaData(loadable.mark, loadable, imported[1], imported[2]);
});

if (countBefore === LOADABLE_SIGNATURE.size) {
Expand Down
1 change: 1 addition & 0 deletions src/types.ts
Expand Up @@ -24,6 +24,7 @@ export type Defaultable<P> = P | Default<P>;
export type DefaultImport<T> = () => Promise<Defaultable<T>>

export interface MarkMeta {
loadable: Loadable<any>;
mark: Mark;
chunkName: string;
fileName: string;
Expand Down

0 comments on commit ad822d4

Please sign in to comment.