Skip to content
This repository was archived by the owner on Aug 14, 2018. It is now read-only.

Commit b02ca7f

Browse files
committed
Update prototypes and added client
1 parent 957e0df commit b02ca7f

File tree

5 files changed

+76
-8
lines changed

5 files changed

+76
-8
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ node_modules
33
resolve.js
44
Resolver.js
55
index.js
6+
client.js
67

78
!src/*

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-esc-resolver",
3-
"version": "1.0.0",
3+
"version": "1.1.1",
44
"description": "Easy to use Client and Server Resolver",
55
"homepage": "https://github.com/TriPSs/react-esc-resolver",
66
"bugs": {
@@ -29,7 +29,8 @@
2929
"react-dom": "^15.0.0"
3030
},
3131
"peerDependencies": {
32-
"react": "^0.14.6 || ^15.0.0-0",
33-
"react-dom": "^0.14.6 || ^15.0.0-0"
32+
"react": "^15.0.0-0",
33+
"react-dom": "^15.0.0-0",
34+
"prop-types": "^15.5.10"
3435
}
3536
}

src/Resolver.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React from 'react'
2+
import PropTypes from 'prop-types'
23
import ReactDOM from 'react-dom'
34
import { renderToStaticMarkup } from 'react-dom/server'
45

@@ -8,11 +9,11 @@ const IS_CLIENT = 'ReactResolver.IS_CLIENT'
89
export default class Resolver extends React.Component {
910

1011
static childContextTypes = {
11-
resolver: React.PropTypes.object
12+
resolver: PropTypes.object
1213
}
1314

1415
static contextTypes = {
15-
resolver: React.PropTypes.object
16+
resolver: PropTypes.object
1617
}
1718

1819
static defaultProps = {
@@ -23,9 +24,9 @@ export default class Resolver extends React.Component {
2324
static displayName = 'Resolver'
2425

2526
static propTypes = {
26-
children: React.PropTypes.func.isRequired,
27-
props : React.PropTypes.object,
28-
resolve : React.PropTypes.object
27+
children: PropTypes.func.isRequired,
28+
props : PropTypes.object,
29+
resolve : PropTypes.object
2930
}
3031

3132
static renderClient = function (render, node) {

src/client.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import React from 'react'
2+
import PropTypes from 'prop-types'
3+
4+
import Resolver from './Resolver'
5+
6+
export default function client(Loader) {
7+
return function clientDecorator(Component) {
8+
return class ClientResolver extends React.Component {
9+
10+
static displayName = 'ClientResolver'
11+
12+
static childContextTypes = {
13+
resolver: PropTypes.instanceOf(Resolver),
14+
}
15+
16+
static contextTypes = {
17+
resolver: PropTypes.instanceOf(Resolver),
18+
}
19+
20+
constructor(props, context) {
21+
super(props, context)
22+
23+
this.queue = []
24+
this.state = {
25+
bypass: process.env.NODE_ENV === 'test',
26+
loaded: false,
27+
server: isServer,
28+
}
29+
}
30+
31+
componentDidMount() {
32+
this.setState({ server: false }, () => Promise.all(this.queue).then(() => this.setState({ loaded: true })))
33+
}
34+
35+
enqueue = (promise) => {
36+
this.queue.push(promise)
37+
38+
return promise
39+
}
40+
41+
render() {
42+
const { bypass, loaded, server } = this.state
43+
44+
const loader = Loader ? <Loader /> : null
45+
46+
if (bypass || loaded || server) {
47+
return <Component {...this.props} />
48+
}
49+
50+
return (
51+
<div>
52+
{loader}
53+
54+
<div style={{ display: 'none' }}>
55+
<Resolver onResolve={this.enqueue}>
56+
{(resolved) => <Component {...this.props} {...resolved} />}
57+
</Resolver>
58+
</div>
59+
</div>
60+
)
61+
}
62+
}
63+
}
64+
}

src/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export { default as resolve } from './resolve'
2+
export { default as client } from './client'
23
export { default as Resolver } from './Resolver'

0 commit comments

Comments
 (0)