summaryrefslogtreecommitdiff
path: root/preact/demo/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'preact/demo/index.js')
-rw-r--r--preact/demo/index.js187
1 files changed, 187 insertions, 0 deletions
diff --git a/preact/demo/index.js b/preact/demo/index.js
new file mode 100644
index 0000000..72c58ee
--- /dev/null
+++ b/preact/demo/index.js
@@ -0,0 +1,187 @@
+import { createElement, render, Component, Fragment } from 'preact';
+// import renderToString from 'preact-render-to-string';
+import './style.scss';
+import { Router, Link } from 'preact-router';
+import Pythagoras from './pythagoras';
+import Spiral from './spiral';
+import Reorder from './reorder';
+import Todo from './todo';
+import Fragments from './fragments';
+import Context from './context';
+import installLogger from './logger';
+import ProfilerDemo from './profiler';
+import KeyBug from './key_bug';
+import StateOrderBug from './stateOrderBug';
+import PeopleBrowser from './people';
+import StyledComp from './styled-components';
+import { initDevTools } from 'preact/devtools/src/devtools';
+import { initDebug } from 'preact/debug/src/debug';
+import DevtoolsDemo from './devtools';
+import SuspenseDemo from './suspense';
+import Redux from './redux';
+import TextFields from './textFields';
+import ReduxBug from './reduxUpdate';
+import SuspenseRouterBug from './suspense-router';
+import NestedSuspenseBug from './nested-suspense';
+import Contenteditable from './contenteditable';
+import { MobXDemo } from './mobx';
+
+let isBenchmark = /(\/spiral|\/pythagoras|[#&]bench)/g.test(
+ window.location.href
+);
+if (!isBenchmark) {
+ // eslint-disable-next-line no-console
+ console.log('Enabling devtools and debug');
+ initDevTools();
+ initDebug();
+}
+
+// mobx-state-tree fix
+window.setImmediate = setTimeout;
+
+class Home extends Component {
+ render() {
+ return (
+ <div>
+ <h1>Hello</h1>
+ </div>
+ );
+ }
+}
+
+class DevtoolsWarning extends Component {
+ onClick = () => {
+ window.location.reload();
+ };
+
+ render() {
+ return (
+ <button onClick={this.onClick}>
+ Start Benchmark (disables devtools)
+ </button>
+ );
+ }
+}
+
+class App extends Component {
+ render({ url }) {
+ return (
+ <div class="app">
+ <header>
+ <nav>
+ <Link href="/" activeClassName="active">
+ Home
+ </Link>
+ <Link href="/reorder" activeClassName="active">
+ Reorder
+ </Link>
+ <Link href="/spiral" activeClassName="active">
+ Spiral
+ </Link>
+ <Link href="/pythagoras" activeClassName="active">
+ Pythagoras
+ </Link>
+ <Link href="/todo" activeClassName="active">
+ ToDo
+ </Link>
+ <Link href="/fragments" activeClassName="active">
+ Fragments
+ </Link>
+ <Link href="/key_bug" activeClassName="active">
+ Key Bug
+ </Link>
+ <Link href="/profiler" activeClassName="active">
+ Profiler
+ </Link>
+ <Link href="/context" activeClassName="active">
+ Context
+ </Link>
+ <Link href="/devtools" activeClassName="active">
+ Devtools
+ </Link>
+ <Link href="/empty-fragment" activeClassName="active">
+ Empty Fragment
+ </Link>
+ <Link href="/people" activeClassName="active">
+ People Browser
+ </Link>
+ <Link href="/state-order" activeClassName="active">
+ State Order
+ </Link>
+ <Link href="/styled-components" activeClassName="active">
+ Styled Components
+ </Link>
+ <Link href="/redux" activeClassName="active">
+ Redux
+ </Link>
+ <Link href="/mobx" activeClassName="active">
+ MobX
+ </Link>
+ <Link href="/suspense" activeClassName="active">
+ Suspense / lazy
+ </Link>
+ <Link href="/textfields" activeClassName="active">
+ Textfields
+ </Link>
+ <Link href="/reduxBug/1" activeClassName="active">
+ Redux Bug
+ </Link>
+ <Link href="/suspense-router" activeClassName="active">
+ Suspense Router Bug
+ </Link>
+ <Link href="/nested-suspense" activeClassName="active">
+ Nested Suspense Bug
+ </Link>
+ <Link href="/contenteditable" activeClassName="active">
+ contenteditable
+ </Link>
+ </nav>
+ </header>
+ <main>
+ <Router url={url}>
+ <Home path="/" />
+ <StateOrderBug path="/state-order" />
+ <Reorder path="/reorder" />
+ <div path="/spiral">
+ {!isBenchmark ? <DevtoolsWarning /> : <Spiral />}
+ </div>
+ <div path="/pythagoras">
+ {!isBenchmark ? <DevtoolsWarning /> : <Pythagoras />}
+ </div>
+ <Todo path="/todo" />
+ <Fragments path="/fragments" />
+ <ProfilerDemo path="/profiler" />
+ <KeyBug path="/key_bug" />
+ <Context path="/context" />
+ <DevtoolsDemo path="/devtools" />
+ <SuspenseDemo path="/suspense" />
+ <EmptyFragment path="/empty-fragment" />
+ <PeopleBrowser path="/people/:user?" />
+ <StyledComp path="/styled-components" />
+ <Redux path="/redux" />
+ <MobXDemo path="/mobx" />
+ <TextFields path="/textfields" />
+ <ReduxBug path="/reduxBug/:start" />
+ <SuspenseRouterBug path="/suspense-router" />
+ <NestedSuspenseBug path="/nested-suspense" />
+ <Contenteditable path="/contenteditable" />
+ </Router>
+ </main>
+ </div>
+ );
+ }
+}
+
+function EmptyFragment() {
+ return <Fragment />;
+}
+
+// document.body.innerHTML = renderToString(<App url={location.href.match(/[#&]ssr/) ? undefined : '/'} />);
+// document.body.firstChild.setAttribute('is-ssr', 'true');
+
+installLogger(
+ String(localStorage.LOG) === 'true' || location.href.match(/logger/),
+ String(localStorage.CONSOLE) === 'true' || location.href.match(/console/)
+);
+
+render(<App />, document.body);