summaryrefslogtreecommitdiff
path: root/preact/demo/nested-suspense/index.js
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2021-08-23 16:46:06 -0300
committerSebastian <sebasjm@gmail.com>2021-08-23 16:48:30 -0300
commit38acabfa6089ab8ac469c12b5f55022fb96935e5 (patch)
tree453dbf70000cc5e338b06201af1eaca8343f8f73 /preact/demo/nested-suspense/index.js
parentf26125e039143b92dc0d84e7775f508ab0cdcaa8 (diff)
downloadnode-vendor-38acabfa6089ab8ac469c12b5f55022fb96935e5.tar.gz
node-vendor-38acabfa6089ab8ac469c12b5f55022fb96935e5.tar.bz2
node-vendor-38acabfa6089ab8ac469c12b5f55022fb96935e5.zip
added web vendorsHEADmaster
Diffstat (limited to 'preact/demo/nested-suspense/index.js')
-rw-r--r--preact/demo/nested-suspense/index.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/preact/demo/nested-suspense/index.js b/preact/demo/nested-suspense/index.js
new file mode 100644
index 0000000..6c525b3
--- /dev/null
+++ b/preact/demo/nested-suspense/index.js
@@ -0,0 +1,69 @@
+import { createElement, Suspense, lazy, Component } from 'react';
+
+const Loading = function() {
+ return <div>Loading...</div>;
+};
+const Error = function({ resetState }) {
+ return (
+ <div>
+ Error!&nbsp;
+ <a onClick={resetState} href="#">
+ Reset app
+ </a>
+ </div>
+ );
+};
+
+const pause = timeout =>
+ new Promise(d => setTimeout(d, timeout), console.log(timeout));
+
+const DropZone = lazy(() =>
+ pause(Math.random() * 1000).then(() => import('./dropzone.js'))
+);
+const Editor = lazy(() =>
+ pause(Math.random() * 1000).then(() => import('./editor.js'))
+);
+const AddNewComponent = lazy(() =>
+ pause(Math.random() * 1000).then(() => import('./addnewcomponent.js'))
+);
+const GenerateComponents = lazy(() =>
+ pause(Math.random() * 1000).then(() => import('./component-container.js'))
+);
+
+export default class App extends Component {
+ state = { hasError: false };
+
+ static getDerivedStateFromError(error) {
+ // Update state so the next render will show the fallback UI.
+ console.warn(error);
+ return { hasError: true };
+ }
+
+ render() {
+ return this.state.hasError ? (
+ <Error resetState={() => this.setState({ hasError: false })} />
+ ) : (
+ <Suspense fallback={<Loading />}>
+ <DropZone appearance={0} />
+ <Editor title="APP_TITLE">
+ <main>
+ <Suspense fallback={<Loading />}>
+ <GenerateComponents appearance={1} />
+ </Suspense>
+ <AddNewComponent appearance={2} />
+ </main>
+ <aside>
+ <section>
+ <Suspense fallback={<Loading />}>
+ <GenerateComponents appearance={3} />
+ </Suspense>
+ <AddNewComponent appearance={4} />
+ </section>
+ </aside>
+ </Editor>
+
+ <footer>Footer here</footer>
+ </Suspense>
+ );
+ }
+}