From 9603149814d2c87d56fbb520b37d51792b619b6a Mon Sep 17 00:00:00 2001 From: Vadim Dalecky Date: Sun, 4 Mar 2018 18:32:42 +0000 Subject: [PATCH] feat: add primitive version of component --- src/Async/__story__/story.tsx | 18 ++++++++++++++++ src/Async/index.ts | 40 +++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 src/Async/__story__/story.tsx create mode 100644 src/Async/index.ts diff --git a/src/Async/__story__/story.tsx b/src/Async/__story__/story.tsx new file mode 100644 index 00000000..36129dcf --- /dev/null +++ b/src/Async/__story__/story.tsx @@ -0,0 +1,18 @@ +import {createElement as h} from 'react'; +import {storiesOf} from '@storybook/react'; +import {action} from '@storybook/addon-actions'; +import {linkTo} from '@storybook/addon-links'; +import {Async} from '..'; +import ShowDocs from '../../../.storybook/ShowDocs' + +async function * coroutine1() { + yield

Loding...

; + + await new Promise(resolve => setTimeout(resolve, 1000)); + + yield
LOADED
; +} + +storiesOf('Util/Async', module) + // .add('Documentation', () => h(ShowDocs, {md: require('../../../docs/en/Async.md')})) + .add('Basic example', () => ) diff --git a/src/Async/index.ts b/src/Async/index.ts new file mode 100644 index 00000000..5d5c4c66 --- /dev/null +++ b/src/Async/index.ts @@ -0,0 +1,40 @@ +import {Component} from 'react'; + +export interface IAsyncProps { + iterator; +} + +export interface IAsyncState { + child: React.ReactChild; +} + +export class Async extends Component { + state = { + child: null, + }; + + mounted = false; + + componentDidMount () { + this.mounted = true; + this.iterate(); + } + + componentWillUnmount () { + this.mounted = false; + } + + async iterate () { + for await (const child of this.props.iterator) { + if (!this.mounted) { + break; + } + + this.setState({child}); + } + } + + render () { + return this.state.child; + } +}