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

Commit

Permalink
Update prototypes and added client
Browse files Browse the repository at this point in the history
  • Loading branch information
TriPSs committed May 15, 2017
1 parent 957e0df commit b02ca7f
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 8 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@ node_modules
resolve.js
Resolver.js
index.js
client.js

!src/*
7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "react-esc-resolver",
"version": "1.0.0",
"version": "1.1.1",
"description": "Easy to use Client and Server Resolver",
"homepage": "https://github.com/TriPSs/react-esc-resolver",
"bugs": {
Expand Down Expand Up @@ -29,7 +29,8 @@
"react-dom": "^15.0.0"
},
"peerDependencies": {
"react": "^0.14.6 || ^15.0.0-0",
"react-dom": "^0.14.6 || ^15.0.0-0"
"react": "^15.0.0-0",
"react-dom": "^15.0.0-0",
"prop-types": "^15.5.10"
}
}
11 changes: 6 additions & 5 deletions src/Resolver.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import React from 'react'
import PropTypes from 'prop-types'
import ReactDOM from 'react-dom'
import { renderToStaticMarkup } from 'react-dom/server'

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

static childContextTypes = {
resolver: React.PropTypes.object
resolver: PropTypes.object
}

static contextTypes = {
resolver: React.PropTypes.object
resolver: PropTypes.object
}

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

static propTypes = {
children: React.PropTypes.func.isRequired,
props : React.PropTypes.object,
resolve : React.PropTypes.object
children: PropTypes.func.isRequired,
props : PropTypes.object,
resolve : PropTypes.object
}

static renderClient = function (render, node) {
Expand Down
64 changes: 64 additions & 0 deletions src/client.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import React from 'react'
import PropTypes from 'prop-types'

import Resolver from './Resolver'

export default function client(Loader) {
return function clientDecorator(Component) {
return class ClientResolver extends React.Component {

static displayName = 'ClientResolver'

static childContextTypes = {
resolver: PropTypes.instanceOf(Resolver),
}

static contextTypes = {
resolver: PropTypes.instanceOf(Resolver),
}

constructor(props, context) {
super(props, context)

this.queue = []
this.state = {
bypass: process.env.NODE_ENV === 'test',
loaded: false,
server: isServer,
}
}

componentDidMount() {
this.setState({ server: false }, () => Promise.all(this.queue).then(() => this.setState({ loaded: true })))
}

enqueue = (promise) => {
this.queue.push(promise)

return promise
}

render() {
const { bypass, loaded, server } = this.state

const loader = Loader ? <Loader /> : null

if (bypass || loaded || server) {
return <Component {...this.props} />
}

return (
<div>
{loader}

<div style={{ display: 'none' }}>
<Resolver onResolve={this.enqueue}>
{(resolved) => <Component {...this.props} {...resolved} />}
</Resolver>
</div>
</div>
)
}
}
}
}
1 change: 1 addition & 0 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export { default as resolve } from './resolve'
export { default as client } from './client'
export { default as Resolver } from './Resolver'

0 comments on commit b02ca7f

Please sign in to comment.