blob: e79899d7a7f620ba6b4ca353627b2da7bc15b795 [file] [log] [blame]
Matteo Scandolob4b74a82017-01-12 13:12:26 -08001import {ModeldefsService, IModeldef} from '../../../datasources/rest/modeldefs.rest';
2import {IXosConfigHelpersService} from './config.helpers';
3import {IRuntimeStatesService} from '../runtime-states';
4import {NavigationService} from '../navigation';
5import {IXosState} from '../../../../index';
6import * as _ from 'lodash';
7import IPromise = angular.IPromise;
8
9export interface IXosModelSetupService {
10 setup(): IPromise<null>;
11}
12
13export class ModelSetup {
Matteo Scandolofc170992017-01-12 18:20:24 -080014 static $inject = ['$rootScope', '$q', 'ModelDefs', 'ConfigHelpers', 'RuntimeStates', 'NavigationService'];
Matteo Scandolob4b74a82017-01-12 13:12:26 -080015
16 constructor(
Matteo Scandolofc170992017-01-12 18:20:24 -080017 private $rootScope: ng.IScope,
Matteo Scandolob4b74a82017-01-12 13:12:26 -080018 private $q: ng.IQService,
19 private ModelDefs: ModeldefsService,
20 private ConfigHelpers: IXosConfigHelpersService,
21 private RuntimeStates: IRuntimeStatesService,
22 private NavigationService: NavigationService
23 ) {
24
25 }
26
27 public setup(): IPromise<null> {
28 const d = this.$q.defer();
29 this.ModelDefs.get()
30 .then((models: IModeldef[]) => {
31 _.forEach(models, (m: IModeldef) => {
32 const stateUrl = `/${this.ConfigHelpers.pluralize(m.name.toLowerCase())}/:id?`;
33 const stateName = `xos.core.${this.ConfigHelpers.pluralize(m.name.toLowerCase())}`;
34 const state: IXosState = {
35 parent: 'core',
36 url: stateUrl,
37 component: 'xosCrud',
38 params: {
39 id: null
40 },
41 data: {
42 model: m.name,
43 related: m.relations,
44 xosTableCfg: this.ConfigHelpers.modelToTableCfg(m, stateUrl),
45 xosFormCfg: this.ConfigHelpers.modelToFormCfg(m)
46 }
47 };
48
49 this.RuntimeStates.addState(stateName, state);
50 this.NavigationService.add({
51 label: this.ConfigHelpers.pluralize(m.name),
52 state: stateName,
53 parent: 'xos.core'
54 });
55 });
Matteo Scandolo17bf8242017-01-23 17:30:39 -080056
Matteo Scandolob4b74a82017-01-12 13:12:26 -080057 d.resolve();
58 })
59 .catch(d.reject);
60
61 return d.promise;
62 }
63}