Home Manual Reference Source Repository

backbone-parse-es6-todos-improved/site/js/router/AppRouter.js

'use strict';

import Backbone   from 'backbone';
import eventbus   from 'mainEventbus';

import appState   from 'pathSite/js/models/appState.js';

/**
 * Provides a basic `Backbone.Router` to route between app states: `all`, `active` & `completed`. When a user
 * navigates between these different filter type states `Backbone.history.navigate` is invoked in `App.js->selectFilter`
 * to update the navigation history allowing the user to use the back and forward browser controls to navigate the app.
 * When a filter type is selected it is referenced in the current URL for the web app. If this URL is navigated to and
 * the user is still logged into the app `AppRouter` will set the `AppState` accordingly and `ManageTodosView` will
 * appropriately show the `Items` for the current user given the filter state set below. If a user is not logged in
 * `App.js` renders the login view and `AppRouter` will replace any route matches with no hash tag.
 *
 * Please note that in `App.js->s_INITIALIZE_ROUTES` a default catch all no route callback is specified which handles
 * unmatched routes.
 */
export default class AppRouter extends Backbone.Router
{
   /**
    * Creates the routes delegated to the given methods specified.
    */
   constructor()
   {
      super(
      {
         routes:
         {
            'all': 'all',
            'active': 'active',
            'completed': 'completed'
         }
      });
   }

   /**
    * Handles the `all` route. If the user is logged in then `appState` is set to `all` otherwise the route is
    * replaced in the browser history with no route.
    */
   all()
   {
      if (eventbus.triggerFirst('app:user:is:current'))
      {
         appState.set({ filter: 'all' });
      }
      else
      {
         Backbone.history.navigate('', { replace: true });
      }
   }

   /**
    * Handles the `active` route. If the user is logged in then `appState` is set to `active` otherwise the route is
    * replaced in the browser history with no route.
    */
   active()
   {
      if (eventbus.triggerFirst('app:user:is:current'))
      {
         appState.set({ filter: 'active' });
      }
      else
      {
         Backbone.history.navigate('', { replace: true });
      }
   }

   /**
    * Handles the `completed` route. If the user is logged in then `appState` is set to `completed` otherwise the route
    * is replaced in the browser history with no route.
    */
   completed()
   {
      if (eventbus.triggerFirst('app:user:is:current'))
      {
         appState.set({ filter: 'completed' });
      }
      else
      {
         Backbone.history.navigate('', { replace: true });
      }
   }
}