blob: 6a276d95a795fa946d54697bc586448c17f2faf2 [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 {
14 static $inject = ['$q', 'ModelDefs', 'ConfigHelpers', 'RuntimeStates', 'NavigationService'];
15
16 constructor(
17 private $q: ng.IQService,
18 private ModelDefs: ModeldefsService,
19 private ConfigHelpers: IXosConfigHelpersService,
20 private RuntimeStates: IRuntimeStatesService,
21 private NavigationService: NavigationService
22 ) {
23
24 }
25
26 public setup(): IPromise<null> {
27 const d = this.$q.defer();
28 this.ModelDefs.get()
29 .then((models: IModeldef[]) => {
30 _.forEach(models, (m: IModeldef) => {
31 const stateUrl = `/${this.ConfigHelpers.pluralize(m.name.toLowerCase())}/:id?`;
32 const stateName = `xos.core.${this.ConfigHelpers.pluralize(m.name.toLowerCase())}`;
33 const state: IXosState = {
34 parent: 'core',
35 url: stateUrl,
36 component: 'xosCrud',
37 params: {
38 id: null
39 },
40 data: {
41 model: m.name,
42 related: m.relations,
43 xosTableCfg: this.ConfigHelpers.modelToTableCfg(m, stateUrl),
44 xosFormCfg: this.ConfigHelpers.modelToFormCfg(m)
45 }
46 };
47
48 this.RuntimeStates.addState(stateName, state);
49 this.NavigationService.add({
50 label: this.ConfigHelpers.pluralize(m.name),
51 state: stateName,
52 parent: 'xos.core'
53 });
54 });
55
56 d.resolve();
57 })
58 .catch(d.reject);
59
60 return d.promise;
61 }
62}