blob: f6da7d6549b153fd6bc8593a5654d462f05f7de6 [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 Scandolof6acdbe2016-12-13 10:29:37 -08003import * as angular from 'angular';
Matteo Scandolod819c922016-12-02 14:06:14 -08004
Matteo Scandolof6acdbe2016-12-13 10:29:37 -08005import 'angular-ui-router';
6import 'angular-resource';
7import 'angular-cookies';
8import routesConfig from './routes';
9
10import {main} from './app/main';
Matteo Scandolod819c922016-12-02 14:06:14 -080011
12import './index.scss';
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080013import {xosCore} from './app/core/index';
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080014import {xosDataSources} from './app/datasources/index';
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080015import {xosViews} from './app/views/index';
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080016import {
17 interceptorConfig, userStatusInterceptor, CredentialsInterceptor,
18 NoHyperlinksInterceptor
19} from './interceptors';
20import {IRuntimeStatesService} from './app/core/services/runtime-states';
21import {IModeldefsService, IModeldef} from './app/datasources/rest/modeldefs.rest';
22import {IXosCrudData} from './app/views/crud/crud';
23import * as _ from 'lodash';
24import {IXosNavigationService} from './app/core/services/navigation';
Matteo Scandolo5655bdc2016-12-16 08:32:15 -080025import {IXosPageTitleService} from './app/core/services/page-title';
Matteo Scandolod58d5042016-12-16 16:59:21 -080026import {IXosConfigHelpersService} from './app/core/services/helpers/config.helpers';
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080027
28export interface IXosState extends angular.ui.IState {
29 data: IXosCrudData;
30};
31
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080032angular
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080033 .module('app', [xosCore, xosDataSources, xosViews, 'ui.router', 'ngResource'])
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080034 .config(routesConfig)
35 .config(interceptorConfig)
36 .factory('UserStatusInterceptor', userStatusInterceptor)
37 .factory('CredentialsInterceptor', CredentialsInterceptor)
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080038 .factory('NoHyperlinksInterceptor', NoHyperlinksInterceptor)
39 .component('xos', main)
Matteo Scandolo5655bdc2016-12-16 08:32:15 -080040 .run((
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080041 $location: ng.ILocationService,
42 $state: ng.ui.IStateService,
Matteo Scandolo5655bdc2016-12-16 08:32:15 -080043 ModelDefs: IModeldefsService,
44 RuntimeStates: IRuntimeStatesService,
45 NavigationService: IXosNavigationService,
Matteo Scandolod58d5042016-12-16 16:59:21 -080046 ConfigHelpers: IXosConfigHelpersService,
Matteo Scandolo5655bdc2016-12-16 08:32:15 -080047 PageTitle: IXosPageTitleService
48 ) => {
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080049
50 // save the last visited state before reload
51 const lastRoute = window.location.hash.replace('#', '');
52
Matteo Scandolo5655bdc2016-12-16 08:32:15 -080053 // Dinamically add a core states
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080054 ModelDefs.get()
55 .then((models: IModeldef[]) => {
Matteo Scandolod58d5042016-12-16 16:59:21 -080056 // TODO move in a separate service and test
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080057 _.forEach(models, (m: IModeldef) => {
Matteo Scandoloee655a12016-12-19 15:38:43 -080058 const stateUrl = `/${ConfigHelpers.pluralize(m.name.toLowerCase())}/:id?`;
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080059 const stateName = `xos.core.${ConfigHelpers.pluralize(m.name.toLowerCase())}`;
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080060 const state: IXosState = {
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080061 parent: 'core',
62 url: stateUrl,
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080063 component: 'xosCrud',
Matteo Scandoloee655a12016-12-19 15:38:43 -080064 params: {
65 id: null
66 },
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080067 data: {
68 model: m.name,
Matteo Scandoloee655a12016-12-19 15:38:43 -080069 related: m.relations,
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080070 xosTableCfg: {
Matteo Scandoloee655a12016-12-19 15:38:43 -080071 columns: ConfigHelpers.modeldefToTableCfg(m.fields, stateUrl)
72 },
73 // TODO add form config
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080074 }
75 };
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080076
77 RuntimeStates.addState(stateName, state);
78 NavigationService.add({
79 label: ConfigHelpers.pluralize(m.name),
80 state: stateName,
81 parent: 'xos.core'
82 });
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080083 });
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080084
85 // after setting up dynamic routes, redirect to previous state
86 $location.path(lastRoute);
87 // $state.get().forEach(s => {
Matteo Scandoloee655a12016-12-19 15:38:43 -080088 // console.log(s.name, $state.href(s.name), s);
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080089 // });
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080090 });
91 });