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
-