routes.js 7.53 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 { AdminSettingsController }          from '/imports/client/views/org/admin/settings/index'
//
import { AdminUsersModule }                 from '/imports/client/views/org/admin/users/module/index'
import { AdminUsersListController }         from '/imports/client/views/org/admin/users/list/index'
import { StudentDataController }            from '/imports/client/views/org/admin/users/students/index'
import { staffViewController }              from '/imports/client/views/org/admin/users/staff/index'
import { ParentViewController }             from '/imports/client/views/org/admin/users/parents/index'

//Admin mail
import { AdminMailModule }                  from '/imports/client/views/org/admin/mailbox/module/index'
import { AdminInboxController }             from '/imports/client/views/org/admin/mailbox/inbox/index'
import { AdminComposeMailController }       from '/imports/client/views/org/admin/mailbox/compose/index'
import { AdminSentMailController }          from '/imports/client/views/org/admin/mailbox/sent/index'
import { AdminImportantMailController }     from '/imports/client/views/org/admin/mailbox/important/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="settings"          path="/settings"                        component = { AdminSettingsController } />
      <Route name="users"            exact={true} path = "/users"                         component = {AdminUsersModule}>
        <IndexRoute                                                           component = {AdminUsersListController} />
        <Route name="students"        path = "/users/students"                component = {StudentDataController} />
        <Route name="staff"           path = "/users/staff"                   component = {staffViewController} />
        <Route name="parents"         path = "/users/parents"                 component = {ParentViewController} />
      </Route>
      <Route name="mail"              path = "/mail"                          component = {AdminMailModule}>
        <IndexRoute                                                           component = {AdminInboxController} />
        <Route name="mail-compose"    path = "/mail/compose"                  component = {AdminComposeMailController} />
        <Route name="mail-sent"       path = "/mail/sent"                     component = {AdminSentMailController} />
        <Route name="mail-important"  path = "/mail/important"                component = {AdminImportantMailController} />
      </Route>
      <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();
});