0.1.1 ā€¢ Published 3 years ago

callbag-router v0.1.1

Weekly downloads
14
License
MIT
Repository
github
Last release
3 years ago

callbag-router

tests coverage version

Routing for single-page applications, using Callbags.

  • Integrates with callbag-jsx
  • Can be used independently though (or with other UI libraries and frameworks)
  • Supports normal routing and hash-based routing (all routes start with #) out of the box
  • You can plug in your own routing environment, for use outside of browser
  • Supports glob route matching, i.e. **/hellow
  • Supports route parameters, i.e. /hellow/:name
  • Supports relative navigation, i.e. navigate('../wherever')
npm i callbag-router

šŸ‘‰ Use with callbag-jsx:

import { Route } from 'callbag-router'
import { pipe, map } from 'callbag-common'
import { makeRenderer } from 'callbag-jsx'

const renderer = makeRenderer()
renderer.render(
  <>
    <Route
      path='/hellow/:name'
      component={params => <div>Hellow {params.name}!</div>}
    />
    <Route path='/goodbye' component={() => <div>GoodBye!</div>}/>
  </>
).on(document.body)

šŸ‘‰ Navigate around:

import { navigate } from 'callbag-router'

// --> navigates to /hellow/world
navigate('/hellow/world')

// --> navigates to /hellow?name=World
navigate('/hellow', {
  query: {
    name: 'World'
  }
})

// --> navigates to /hellow/World
navigate('hellow/:name', {
  route: {
    name: 'World'
  }
})

// --> navigates to /hellow/john
navigate('../john')

šŸ‘‰ Listen to query parameter changes:

import { query } from 'callbag-router'
import { pipe, subscribe } from 'callbag-common'

pipe(
  query(),
  subscribe(console.log)     // --> logs an object of query parameters
)

šŸ‘‰ Update query parameters:

import { query, navigate } from 'callbag-router'
import { pipe, subscribe } from 'callbag-common'

navigate('hellow')
query().sub('name').set('world')    // --> set query parameter `name` to 'world'

šŸ‘‰ Manually listen to route changes:

import { match } from 'callbag-router'
import { pipe, subscribe } from 'callbag-common'

pipe(
  match('hellow/**'),                 // --> matches `/hellow/x`, `/hellow/x/y/z`, etc.
  subscribe(matched => {
    if (matched) {
      console.log('Hellow there!')
    }
  })
)

šŸ‘‰ Hash-based routing:

import { initialize } from 'callbag-router'
import { BrowserHashRoutingEnvironment } from 'callbag-router/browser'

initialize({
  environment: new BrowserHashRoutingEnvironment()
})

Contribution

Play nice and respectful. Useful commands for development:

git clone https://github.com/loreanvictor/callbag-router.git
npm i               # --> install dependencies
npm start           # --> serve samples/index.tsx on localhost:3000
npm test            # --> run tests
npm run cov:view    # --> view coverage

0.1.0

3 years ago

0.1.1

3 years ago

0.0.6

3 years ago

0.0.5

3 years ago

0.0.4

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago