2.0.1 • Published 9 years ago

cycle-route v2.0.1

Weekly downloads
2
License
MIT
Repository
github
Last release
9 years ago

Cycle Route

A simple router factory that takes a static map of route => label and returns a function that maps a path to a route object.

It was created to be used with cycle-pushstate-driver but is a generic URL mapper that can be as a helper in any routing engine.

Install

npm install cycle-route

API

makeRouter(routes)

Takes as input a map from route definition to route name and returns a router function. cycle-route uses routington so it accepts all route definitions that routington accepts and adds a * route to define the default route.

Format of route object

{
  path: '/',         // this is the input path
  name: 'home',      // this is the value from the routes map
  params: {}         // this are the matched params
}

Usage

Basics:

import { makeRouter } from 'cycle-route'

const router = makeRouter({
  '/': 'home',
  '/foo/:bar': 'foo',
  '*': 'notfound'          // default route
})

router('/')

Cycle.js use case:

import { makePushStateDriver } from 'cycle-pushstate-driver'
import { makeRouter } from 'cycle-route'
import routes from 'routes'

const router = makeRouter(routes)

function main({ DOM, Path }) {
  const Route = Path
    .map(router)

  const homeRequests = home({ Route })
  const fooRequests = foo({ Route })
  const barRequests = bar({ Route })

  const localLinkClick$ = DOM.select('a').events('click')
    .filter(e => e.currentTarget.host === global.location.host)

  const navigate$ = DOM.select('a').events('click')
    .map(e => e.currentTarget.pathname)

  const vtree$ = Rx.Observable.combineLatest(
    Route, homeRequests.DOM, fooRequests.DOM, barRequests.DOM,
    (route, homePage, fooPage, barPage) => {
      const pages = {
        'home': homePage,
        'foo': fooPage,
        'bar': barPage
      }
      return pages[route.name]
    }
  )

  return {
    DOM: vtree$,
    Path: navigate$,
    PreventDefault: localLinkClick$
  };
}
2.0.1

9 years ago

2.0.0

9 years ago

1.0.3

9 years ago

1.0.2

9 years ago

1.0.1

9 years ago

1.0.0

9 years ago