diff --git a/examples/basic/.babelrc b/examples/basic/.babelrc
new file mode 100644
index 000000000..a03337e8b
--- /dev/null
+++ b/examples/basic/.babelrc
@@ -0,0 +1,10 @@
+{
+ "plugins": [
+ ["module-resolver", {
+ "alias": {
+ "playgrodd": "../../packages/playgrood/build/main",
+ "playgrodd-theme-default": "../../packages/playgrood/build/main/theme/default.js"
+ }
+ }]
+ ]
+}
diff --git a/examples/basic/package.json b/examples/basic/package.json
index e2bf6fb29..019733002 100644
--- a/examples/basic/package.json
+++ b/examples/basic/package.json
@@ -9,6 +9,7 @@
"playgrodd": "^0.0.1"
},
"devDependencies": {
+ "babel-plugin-module-resolver": "^3.1.0",
"babel-preset-react": "^6.24.1"
}
}
diff --git a/packages/playgrood/package.json b/packages/playgrood/package.json
index 31066f853..e3083b8b7 100644
--- a/packages/playgrood/package.json
+++ b/packages/playgrood/package.json
@@ -21,11 +21,13 @@
"dependencies": {
"babel-polyfill": "^6.26.0",
"babylon": "^6.18.0",
+ "create-react-context": "^0.2.1",
"express": "^4.16.3",
"fast-glob": "^2.2.0",
"history": "^4.7.2",
"mkdirp": "^0.5.1",
"parcel-bundler": "^1.6.2",
+ "parcel-plugin-bundle-manifest": "^0.1.0",
"prop-types": "^15.6.1",
"react": "^16.2.0",
"react-dom": "^16.2.0",
@@ -39,6 +41,7 @@
"@types/express": "^4.11.1",
"@types/mkdirp": "^0.5.2",
"@types/node": "^9.4.7",
+ "@types/react": "^16.0.40",
"@types/react-dom": "^16.0.4",
"@types/react-router-dom": "^4.2.5",
"@types/trash": "^4.3.0",
diff --git a/packages/playgrood/src/components/AsyncRoute.tsx b/packages/playgrood/src/components/AsyncRoute.tsx
new file mode 100644
index 000000000..7f35afb6c
--- /dev/null
+++ b/packages/playgrood/src/components/AsyncRoute.tsx
@@ -0,0 +1,42 @@
+import React from 'react'
+import { Route } from 'react-router-dom'
+import { IComponent } from '../utils/components'
+
+export interface IAsyncRouteProps {
+ component: IComponent
+}
+
+export interface IAsyncRouteState {
+ render(): JSX.Element | null
+}
+
+export class AsyncRoute extends React.Component<
+ IAsyncRouteProps,
+ IAsyncRouteState
+> {
+ constructor(props: any, ctx: any) {
+ super(props, ctx)
+
+ this.state = {
+ render: () => null,
+ }
+ }
+
+ async componentDidMount() {
+ const { name } = this.props.component
+ const { importFn } = window.__PLAYGRODD_COMPONENTS__[`${name}`]
+ const { doc: render } = await importFn
+
+ this.setState({ render })
+ }
+
+ render() {
+ return (
+
+ )
+ }
+}
diff --git a/packages/playgrood/src/components/Html.tsx b/packages/playgrood/src/components/Html.tsx
index e1845d82c..efaeac9dd 100644
--- a/packages/playgrood/src/components/Html.tsx
+++ b/packages/playgrood/src/components/Html.tsx
@@ -1,9 +1,9 @@
import * as React from 'react'
-import { IComponent } from '../utils/components'
+import { IComponents } from '../utils/components'
export interface IHtmlProps {
- components: IComponent[]
+ components: IComponents
}
export const Html: React.SFC = ({ components }) => {
@@ -15,12 +15,12 @@ export const Html: React.SFC = ({ components }) => {
playgrodd
-
+