Skip to content

Instantly share code, notes, and snippets.

@alshdavid
Last active May 12, 2019 06:08
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 alshdavid/128bc0f8a11194b1d98ac1b9a8a7fcf1 to your computer and use it in GitHub Desktop.
Save alshdavid/128bc0f8a11194b1d98ac1b9a8a7fcf1 to your computer and use it in GitHub Desktop.
import React from 'react'
import * as crayon from 'crayon'
import * as react from 'crayon/react'
import * as transition from 'crayon/transition'
const TabA = () => <div>Tab A</div>
const TabB = () => <div>Tab B</div>
export const Items = (nav) => () => {
const [ tabs, setTabs ] = react.useRouter('tab-view', (tabs, selector) => {
tabs.use(transition.loader(selector))
tabs.use(crayon.animate({
duration: 500
}))
tabs.path('/items/tab-a',
crayon.animate([{ from: '/**', name: transition.slideLeft }]),
(req, res) => res.mount(() => <TabA />)
)
tabs.path('/items/tab-b',
crayon.animate([{ from: '/**', name: transition.slideRight }]),
(req, res) => res.mount(() => <TabB />)
)
})
return <main>
<nav>
<button
onClick={() => nav.back()}>
&gt; Back
</button>
</nav>
<section
ref={setTabs}>
</section>
<div className="toolbar">
<button
onClick={() => tabs.navigate('/items/tab-a')}>
Tab A
</button>
<button
onClick={() => tabs.navigate('/items/tab-b')}>
Tab B
</button>
</div>
</main>
}
import { useMemo, useState } from "react";
import { Router, create } from "../router";
import * as react from "./react";
export const useRouter = (name, handlers) => {
const [ ref, setRef ] = useState()
const [ nav, setNav ] = useState()
useMemo(() => {
if (nav || !ref) {
return
}
const router = create()
router.use(react.router(ref, 'tab-view'))
handlers(router, '.'+ name)
router.load()
setNav(router)
return () => router.destroy()
}, [ref])
return [ nav, setRef ]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment