blob: 77955b311152836610ed8dba1588a5d467f33ef7 [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 Scandolof2c3ed62016-12-15 14:32:50 -080026
27export interface IXosState extends angular.ui.IState {
28 data: IXosCrudData;
29};
30
31const modeldefToTableCfg = (fields: {name: string, type: string}[]): any[] => {
32 const excluded_fields = [
33 'created',
34 'updated',
35 'enacted',
36 'policed',
37 'backend_register',
38 'deleted',
39 'write_protect',
40 'lazy_blocked',
41 'no_sync',
42 'no_policy',
43 'omf_friendly',
44 'enabled'
45 ];
46 const cfg = _.map(fields, (f) => {
47 if (excluded_fields.indexOf(f.name) > -1) {
48 return;
49 }
50 return {
Matteo Scandolo3b3b3b42016-12-15 17:31:53 -080051 label: `${f.name}`, // TODO confert name to label
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080052 prop: f.name
53 };
54 })
55 .filter(v => angular.isDefined(v));
56
57 return cfg;
58};
Matteo Scandolod819c922016-12-02 14:06:14 -080059
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080060angular
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080061 .module('app', [xosCore, xosDataSources, xosViews, 'ui.router', 'ngResource'])
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080062 .config(routesConfig)
63 .config(interceptorConfig)
64 .factory('UserStatusInterceptor', userStatusInterceptor)
65 .factory('CredentialsInterceptor', CredentialsInterceptor)
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080066 .factory('NoHyperlinksInterceptor', NoHyperlinksInterceptor)
67 .component('xos', main)
Matteo Scandolo5655bdc2016-12-16 08:32:15 -080068 .run((
69 ModelDefs: IModeldefsService,
70 RuntimeStates: IRuntimeStatesService,
71 NavigationService: IXosNavigationService,
72 PageTitle: IXosPageTitleService
73 ) => {
74 // Dinamically add a core states
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080075 ModelDefs.get()
76 .then((models: IModeldef[]) => {
77 _.forEach(models, (m: IModeldef) => {
78 const state: IXosState = {
79 parent: 'xos',
Matteo Scandolo3b3b3b42016-12-15 17:31:53 -080080 url: `${m.name.toLowerCase()}s`, // TODO use https://github.com/blakeembrey/pluralize
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080081 component: 'xosCrud',
82 data: {
83 model: m.name,
84 xosTableCfg: {
85 columns: modeldefToTableCfg(m.fields)
86 }
87 }
88 };
89 RuntimeStates.addState(`${m.name.toLowerCase()}s`, state);
90 NavigationService.add({label: `${m.name}s`, url: `${m.name.toLowerCase()}s`});
91 });
92 });
93 });