blob: c23c075cf774ebfaa10dd2edcd4dcac27a599a75 [file] [log] [blame]
Matteo Scandolof6acdbe2016-12-13 10:29:37 -08001/// <reference path="../typings/index.d.ts" />
Matteo Scandolod819c922016-12-02 14:06:14 -08002
Matteo Scandolo266907e2016-12-20 13:41:42 -08003
Matteo Scandolof6acdbe2016-12-13 10:29:37 -08004import * as angular from 'angular';
Matteo Scandolod819c922016-12-02 14:06:14 -08005
Matteo Scandolof6acdbe2016-12-13 10:29:37 -08006import 'angular-ui-router';
7import 'angular-resource';
8import 'angular-cookies';
9import routesConfig from './routes';
10
11import {main} from './app/main';
Matteo Scandolod819c922016-12-02 14:06:14 -080012
13import './index.scss';
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080014import {xosCore} from './app/core/index';
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080015import {xosDataSources} from './app/datasources/index';
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080016import {xosViews} from './app/views/index';
Matteo Scandolo266907e2016-12-20 13:41:42 -080017import {xosTemplate} from './app/template/index';
18
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080019import {
20 interceptorConfig, userStatusInterceptor, CredentialsInterceptor,
21 NoHyperlinksInterceptor
22} from './interceptors';
23import {IRuntimeStatesService} from './app/core/services/runtime-states';
24import {IModeldefsService, IModeldef} from './app/datasources/rest/modeldefs.rest';
25import {IXosCrudData} from './app/views/crud/crud';
26import * as _ from 'lodash';
27import {IXosNavigationService} from './app/core/services/navigation';
Matteo Scandolo5655bdc2016-12-16 08:32:15 -080028import {IXosPageTitleService} from './app/core/services/page-title';
Matteo Scandolod58d5042016-12-16 16:59:21 -080029import {IXosConfigHelpersService} from './app/core/services/helpers/config.helpers';
Matteo Scandolo99fface2016-12-21 15:37:23 -080030import {StyleConfig} from './app/config/style.config';
Matteo Scandolobac22452017-01-03 16:35:32 -080031import {IXosResourceService} from './app/datasources/rest/model.rest';
Matteo Scandolo04964232017-01-07 12:53:46 -080032import {IXosAuthService} from './app/datasources/rest/auth.rest';
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080033
34export interface IXosState extends angular.ui.IState {
35 data: IXosCrudData;
36};
37
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080038angular
Matteo Scandolo266907e2016-12-20 13:41:42 -080039 .module('app', [
40 xosCore,
41 xosDataSources,
42 xosViews,
43 'ui.router',
44 'ngResource',
45 xosTemplate // template module
46 ])
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080047 .config(routesConfig)
48 .config(interceptorConfig)
49 .factory('UserStatusInterceptor', userStatusInterceptor)
50 .factory('CredentialsInterceptor', CredentialsInterceptor)
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080051 .factory('NoHyperlinksInterceptor', NoHyperlinksInterceptor)
52 .component('xos', main)
Matteo Scandolo266907e2016-12-20 13:41:42 -080053 .run(function($rootScope: ng.IRootScopeService, $transitions: any) {
Matteo Scandolo99fface2016-12-21 15:37:23 -080054 $rootScope['favicon'] = `./app/images/brand/${StyleConfig.favicon}`;
Matteo Scandolo266907e2016-12-20 13:41:42 -080055 $transitions.onSuccess({ to: '**' }, (transtion) => {
56 if (transtion.$to().name === 'login') {
57 $rootScope['class'] = 'blank';
58 }
59 else {
60 $rootScope['class'] = '';
61 }
62 });
63 })
Matteo Scandolo5655bdc2016-12-16 08:32:15 -080064 .run((
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080065 $location: ng.ILocationService,
66 $state: ng.ui.IStateService,
Matteo Scandolo5655bdc2016-12-16 08:32:15 -080067 ModelDefs: IModeldefsService,
Matteo Scandolobac22452017-01-03 16:35:32 -080068 ModelRest: IXosResourceService,
Matteo Scandolo5655bdc2016-12-16 08:32:15 -080069 RuntimeStates: IRuntimeStatesService,
70 NavigationService: IXosNavigationService,
Matteo Scandolod58d5042016-12-16 16:59:21 -080071 ConfigHelpers: IXosConfigHelpersService,
Matteo Scandolo04964232017-01-07 12:53:46 -080072 AuthService: IXosAuthService,
73 $transitions: any,
Matteo Scandolobac22452017-01-03 16:35:32 -080074 toastr: ng.toastr.IToastrService,
Matteo Scandolo5655bdc2016-12-16 08:32:15 -080075 PageTitle: IXosPageTitleService
76 ) => {
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080077
Matteo Scandolo04964232017-01-07 12:53:46 -080078 // check the user login
79 $transitions.onSuccess({ to: '**' }, (transtion) => {
80 if (!AuthService.getUser()) {
81 $state.go('login');
82 }
83 });
84
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080085 // save the last visited state before reload
86 const lastRoute = window.location.hash.replace('#', '');
87
Matteo Scandolo5655bdc2016-12-16 08:32:15 -080088 // Dinamically add a core states
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080089 ModelDefs.get()
90 .then((models: IModeldef[]) => {
Matteo Scandolo80c3a652017-01-06 10:48:31 -080091 // TODO move in a separate service and test (StateConfig service in Core)
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080092 _.forEach(models, (m: IModeldef) => {
Matteo Scandoloee655a12016-12-19 15:38:43 -080093 const stateUrl = `/${ConfigHelpers.pluralize(m.name.toLowerCase())}/:id?`;
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080094 const stateName = `xos.core.${ConfigHelpers.pluralize(m.name.toLowerCase())}`;
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080095 const state: IXosState = {
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080096 parent: 'core',
97 url: stateUrl,
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080098 component: 'xosCrud',
Matteo Scandoloee655a12016-12-19 15:38:43 -080099 params: {
100 id: null
101 },
Matteo Scandolof2c3ed62016-12-15 14:32:50 -0800102 data: {
103 model: m.name,
Matteo Scandoloee655a12016-12-19 15:38:43 -0800104 related: m.relations,
Matteo Scandolo80c3a652017-01-06 10:48:31 -0800105 xosTableCfg: ConfigHelpers.modelToTableCfg(m, stateUrl),
106 xosFormCfg: ConfigHelpers.modelToFormCfg(m)
Matteo Scandolof2c3ed62016-12-15 14:32:50 -0800107 }
108 };
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -0800109
110 RuntimeStates.addState(stateName, state);
111 NavigationService.add({
112 label: ConfigHelpers.pluralize(m.name),
113 state: stateName,
114 parent: 'xos.core'
115 });
Matteo Scandolof2c3ed62016-12-15 14:32:50 -0800116 });
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -0800117
118 // after setting up dynamic routes, redirect to previous state
119 $location.path(lastRoute);
Matteo Scandolof2c3ed62016-12-15 14:32:50 -0800120 });
121 });
Matteo Scandolo80c3a652017-01-06 10:48:31 -0800122