Code Monkey home page Code Monkey logo

smart-routes's Introduction

Smart Routes PRs Welcome

A framework agnostic simple and lightweight way to create and reuse routes on web apps.

IMPORTANT: This isn't a router like vue-router or react-router. Smart Routes just brings a simplified and safer way to declare and reuse routes.

Motivation

As our web application grow, its amount of routes grows too. Apps with 20, 30, 40 and more routes variations can be really messy to deal with, even more when we add dynamic routing.

That kind of thing came with some problems like:

  • Links leading to unexpected route;
  • Send parameter to a not parameterized route;
  • Non intelligible routes names;
  • Work around to apply parameters;
  • Forget to replace a link when an entirely route needs to be changed.

A routes single source of truth allows to better organize your routes, better use them and prevent routing mistakes.

Install

npm

npm install smart-routes

yarn

yarn add smart-routes

Basic usage

Import Route from the package

import { Route } from 'smart-routes';

Crete your route

const routes = {
  user: new Route('/user')
}

Defining route

<Route path={routes.user().path} component={SomeComponent} />

Link like this

// Leads to /user
<Link to={routes.user().path}> 
  // ...
</Link>

Route parameters

const routes = {
  user: new Route('/user', ':userId')
}
//  `routes.user().path` leads to /user/:userId
<Route path={routes.user().path} component={SomeComponent} />
const someUserId = 123;

// Leads to /user/123
<Link to={routes.user(someUserId).exec()}>
  // ...
</Link>

Subroutes

const routes = {
  user: new Route('/user', {
    info: new Route('/info')
  })
}
<Route path={routes.user().info().path} component={SomeComponent} />
// Leads to /user/info
<Link to={routes.user().info().path}> 
  // ...
</Link>

Complete example

const routes = {
  user: new Route('user', ':userId', {
    info: new Route('info'),
    cart: new Route('cart', {
      item: new Route('item', ':itemId')
    })
  })
}
//  /user/:userId
<Route path={routes.user().path} component={SomeComponent} />

//  /user/:userId/info
<Route path={routes.user().info().path} component={SomeComponent1} />

//  /user/:userId/cart
<Route path={routes.user().cart().path} component={SomeComponent2} />

//  /user/:userId/cart/item/:itemId
<Route path={routes.user().cart().item().path} component={SomeComponent3} />
//  Leads to /user/123
<Link to={routes.user(123).path}> 
  ...
</Link>

//  Leads to /user/123/info
<Link to={routes.user(123).info().path}> 
  ...
</Link>

//  Leads to /user/123/cart
<Link to={routes.user(123).cart().path}> 
  ...
</Link>

// Leads to /user/123/cart/item/456
<Link to={routes.user(123).cart().item(456).path}> 
  ...
</Link>

smart-routes's People

Contributors

alecell avatar carlosfrodrigues avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.