Skip to content

Instantly share code, notes, and snippets.

@aduth
Created June 8, 2018 14:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aduth/46eaf09e0ad7ac1a66cd518058d434d0 to your computer and use it in GitHub Desktop.
Save aduth/46eaf09e0ad7ac1a66cd518058d434d0 to your computer and use it in GitHub Desktop.
WordPress Async Components
class AsyncComponent extends Component {
constructor() {
super( ...arguments );
this.state = {
component: null,
};
}
componentWillMount() {
this.startResolution();
}
async startResolution() {
const component = await this.resolve();
this.setState( () => ( { component } ) );
}
render() {
if ( this.state.component ) {
return <this.state.component { ...this.props } />;
}
return <div className="components-async-component__placeholder" />;
}
}
class ScriptDependency extends AsyncComponent {
resolve() {
return new Promise( ( resolve, reject ) => {
const script = document.createElement( 'script' );
script.src = this.props.src;
script.onload = resolve;
script.onerror = reject;
document.head.appendChild( script );
} );
}
}
import { CodeEditor } from '@wordpress/components';
// Effectively (transformed by Babel):
//
// import { ScriptDependency } from '@wordpress/components';
// const _wordpress_components_CodeEditor_dependency = window._wpSiteURL + '/wp-admin/wp-admin/load-scripts.php?load=wp-codemirror,code-editor,htmlhint,htmlhint-kses,csslint,jshint';
// const CodeEditor = ( { ...props } ) => <ScriptDependency src={ _wordpress_components_CodeEditor_dependency } />;
[ "@wordpress/babel-plugin-component-dependency", {
"siteURLSource": "_wpSiteURL",
"dependencies": {
"@wordpress/components": {
"CodeEditor": [
"wp-codemirror",
"code-editor",
"htmlhint",
"htmlhint-kses",
"csslint",
"jshint"
]
}
}
} ]
wp_add_inline_script(
'wp-components',
sprintf( 'window._wpSiteURL = %s;', json_encode( site_url() )
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment