routes.js 5.93 KB
/* eslint-disable max-len */

import React                                from 'react';
import { render }                           from 'react-dom';
import { Router, Route,
  IndexRoute, browserHistory }              from 'react-router';
import { Meteor }                           from 'meteor/meteor';
import { Users }                          from '/imports/collections/users/index';

/**
 * General Components
 */
import NotFound                             from '/imports/client/views/org/NotFound';

/**
 * Org Components
 */
import { EnterModule }                    from '/imports/client/views/org/enter/module/index';


import { AdminAppModule }                   from '/imports/client/views/org/admin/app/module/Index';
import { DashboardController }              from '/imports/client/views/org/admin/dashboard/index';
import { Orgs }                             from '/imports/collections/orgs/index';
import { importCsvController }              from '/imports/client/views/org/importCsv/index'

//admin
import { StudentDataController }            from '/imports/client/views/org/admin/students/index'
import { staffViewController }              from '/imports/client/views/org/admin/staff/index'
import { ParentViewController }             from '/imports/client/views/org/admin/parents/index'
import { AdminSettingsController }          from '/imports/client/views/org/admin/settings/index'
//students

//teachers

//parents

/**
 * Invalid Org Components
 */

/**
There are three types of routes
1)getOrgRoutes: all the routes that should be present for a registered org
2)getInvalidOrgRoute: all the routes where someone tries to enter a subdomain which hasn't been registered yet (404 mostly :D)
3)getNonOrgRoutes: all routes linked to normal site, ie signing up a new org. CHeking out demo and everything internal
**/
const getOrgAdminRoutes = () => (
  <Router history={ browserHistory }>
    <Route path="/"                                                           component={ AdminAppModule }>
      <IndexRoute name="index"                                                component={ DashboardController } />
      <Route name="import"            path="/import"                          component={ importCsvController } />
      <Route name="student"           path="/students"                        component={ StudentDataController } />
      <Route name="staff"             path="/staff"                           component={ staffViewController } />
      <Route name="parent"            path="/parents"                         component={ ParentViewController } />
      <Route name="settings"          path="/settings"                        component={ AdminSettingsController } />
      <Route path="*"                                                         component={ NotFound } />
    </Route>
  </Router>
)
const getOrgNonLoggedInRoutes = () => (
  <Router history={ browserHistory }>
    <Route path="/"                                                           component={ EnterModule }>
      <Route path="*"                                                         component={ NotFound } />
    </Route>
  </Router>
)

const getInvalidOrgRoute = () => (
  <Router history={ browserHistory }>
    <Route path="/"                                                           component={ App }>
      <IndexRoute name="index"                                                component={ NotFound } />
      <Route path="*"                                                         component={ NotFound } />
    </Route>
  </Router>
)


/**
 * NonOrg Components
 */
import Signup                               from '/imports/client/views/nonOrg/enter/SignupView';
import { NonOrgApp }                        from '/imports/client/layouts/NonOrgApp';
import {NonOrgAppModule}                    from '/imports/client/views/nonOrg/app/module/Index';

const getNonOrgRoutes = () => (
  <Router history={ browserHistory }>
    <Route path="/"                                                           component={ NonOrgApp }>
      <IndexRoute name="index"                                                component={ NonOrgAppModule } />
      <Route name="signup"            path="/signup"                          component={ Signup } />
      <Route path="*"                                                         component={ NotFound } />
    </Route>
  </Router>
)

//Authenticate function to give access to users only
const authenticate = (nextState, replace) => {
  if (!Meteor.loggingIn() && !Meteor.userId()) {
    replace({
      pathname: '/login',
      state: { nextPathname: nextState.location.pathname },
    });
  }
};


/**

**/
const detectOrg = () => {
  orgSlug = "";
  //www.app.ydapp.in
  //
  var hostnameArray = document.location.hostname.split( "." );
  //['www','app', 'ydapp','in'];
  if(hostnameArray[0] !== "www"){
    if((hostnameArray[1]==='localhost'||hostnameArray[1]==='ydapp')){
      orgSlug = hostnameArray[0];
    }
  }else{
    if((hostnameArray[2]==='localhost'||hostnameArray[2]==='ydapp')){
      orgSlug = hostnameArray[1];
    }
  }

  if(orgSlug!==""){
    console.log(orgSlug);
    Meteor.call('checkExistingOrg', {slug:orgSlug}, function(err, res) {
      console.log(err);
      console.log(res);

      if(res){
        Session.set('orgId', res._id);
        Session.set('orgSlug', orgSlug);
        if(Meteor.loggingIn() || Meteor.userId()){
          userRole = _.find(res.users, {userId: Meteor.user()._id}).role;
          Session.set('userRole', userRole);
          if(userRole=='ADMIN'){
            render(getOrgAdminRoutes(),document.getElementById('app'));
          }else{

          }
        }else{
          render(getOrgNonLoggedInRoutes(),document.getElementById('app'));
        }
      }else{
        render(getInvalidOrgRoute(),document.getElementById('app'));
      }
    });
  }else{
    render(getNonOrgRoutes(),document.getElementById('app'));
  }
}
const checkSlug = (nextState, replace) => {
  orgId = Session.get('orgId');
}


Meteor.startup(() => {
  detectOrg();
});