Skip to content

kahlil/cycle-router

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cycle Router

This is the first (that I know of) router built from the ground up with Cycle.js in mind. Stands on the shoulders of battle-tested libraries switch-path for route matching and rackt/history for dealing with the History API.

Would you like to try it out?!

$ npm install cycle-router

Very Basic Example

** PLEASE read the tests to get the best idea of how this library can/does work **

I'll hopefully get time to make some more.

import {run} from '@cycle/core'
import {makeDOMDriver, h} from '@cycle/dom'
import {makeRouterDriver, createLocation} from 'cycle-router'

const routes = {
  '/': 'Home',
  '/route': 'Somewhere Else'
}

function Component(sources) {
  const vtree$ = sources.router.define(routes)
    .flatMap(({path, value, fullPath, /*routeDefinitions,*/ props$}) => {
      return props$.map(props => {
        return h('div', {}, {
          h('h1', `Location: ${path}`), // <h1>Location: /route</h1>
          h('h4', `Value: ${value}`), // <h4>Value: Somewhere Else</h4>
          h('span', `Props`: props.color), // <span>Props: #000000</span>
          h('span', `fullPath: ${fullPath}`) // <span>fullPath: /nested/route</span>
        })
      })
    })
  return {
    DOM: vtree$,
  }
}

function main(sources) {
  const props$ = Rx.Observable.just({color: '#000000'})
  const nestedRoute$ = sources.router.path('/nested', props$)

  const vTree$ = Component({router: nestedRoute$, ...sources}).DOM

  return {
    DOM: vTree$,
    router: Rx.Observable.just(createLocation('/nested/route'))
  }
}

run(main, {
  DOM: makeDOMDriver('.container'),
  router: makeRouterDriver({hash: true})
})

API

makeRouterDriver(options)
import {makeRouterDriver} from 'cycle-router'

Arguments :

  • (options) :: Object
    • hash :: Boolean - Use hash for routing
    • All options for creating a history object from rackt/history

returns :

  • routerDriver(history$) :: function
routerDriver(history$)

Arguments :

  • history$ :: Rx.Observable

    returns : RouterObject :: Object

    RouterObject
    • Keys
      • namespace :: Array - Array of pathnames

      • observable :: Rx.observable<(Location> - An observable of the current Location filtered from the namespace

      • path(path [, props$]) :: Function -

        • Arguments
          • path :: string (Required) - a string used to append to the namespace
          • props$ :: Rx.observable (options) - and obervable props$ to be passed along
        • Returns (RouterObject)
      • define(routeDefinition[, props$]) :: Function -

        • Arguments
          • routeDefinition :: Object<Route: any> - An object of routes for values and any kind of value. see switch-path for more information
          • props$ :: Rx.Observable - An optional props observable
        • Returns
          • Rx.Observable - and Observable containing a collection with the current path and value from the switchPath() function. fullPath - the entire path being matched and routeDefinitions for access to the defined routes. props$ and Rx.Observable. props$ is inherited from the last .path() if not defined directly.
          • props$ :: Rx.Observable - Observable of any sort of props to pass around

          • createLocation(options)
            createHref(options)
            import {createLocation, createHref} from 'cycle-router'

            Please see the rackt/history docs

About

Cycle.js Router Driver

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 96.2%
  • HTML 3.8%