Dinamically generate views for CORE Models
Change-Id: Ib1d042f366f916c2ba8513ee62014e7256ceb53d
diff --git a/src/index.ts b/src/index.ts
index c654e52..bdb09ab 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -11,15 +11,83 @@
import './index.scss';
import {xosCore} from './app/core/index';
-import {xosRest} from './app/datasources/index';
+import {xosDataSources} from './app/datasources/index';
import {xosViews} from './app/views/index';
-import {interceptorConfig, userStatusInterceptor, CredentialsInterceptor} from './interceptors';
+import {
+ interceptorConfig, userStatusInterceptor, CredentialsInterceptor,
+ NoHyperlinksInterceptor
+} from './interceptors';
+import {IRuntimeStatesService} from './app/core/services/runtime-states';
+import {IModeldefsService, IModeldef} from './app/datasources/rest/modeldefs.rest';
+import {IXosCrudData} from './app/views/crud/crud';
+import * as _ from 'lodash';
+import {IXosNavigationService} from './app/core/services/navigation';
+
+export interface IXosState extends angular.ui.IState {
+ data: IXosCrudData;
+};
+
+const modeldefToTableCfg = (fields: {name: string, type: string}[]): any[] => {
+ const excluded_fields = [
+ 'created',
+ 'updated',
+ 'enacted',
+ 'policed',
+ 'backend_register',
+ 'deleted',
+ 'write_protect',
+ 'lazy_blocked',
+ 'no_sync',
+ 'no_policy',
+ 'omf_friendly',
+ 'enabled'
+ ];
+ const cfg = _.map(fields, (f) => {
+ if (excluded_fields.indexOf(f.name) > -1) {
+ return;
+ }
+ return {
+ label: `${f.name}`,
+ prop: f.name
+ };
+ })
+ .filter(v => angular.isDefined(v));
+
+ return cfg;
+};
angular
- .module('app', [xosCore, xosRest, xosViews, 'ui.router', 'ngResource'])
+ .module('app', [xosCore, xosDataSources, xosViews, 'ui.router', 'ngResource'])
.config(routesConfig)
.config(interceptorConfig)
.factory('UserStatusInterceptor', userStatusInterceptor)
.factory('CredentialsInterceptor', CredentialsInterceptor)
- .component('xos', main);
+ .factory('NoHyperlinksInterceptor', NoHyperlinksInterceptor)
+ .component('xos', main)
+ .run((ModelDefs: IModeldefsService, RuntimeStates: IRuntimeStatesService, NavigationService: IXosNavigationService) => {
+ // Dinamically add a state
+ RuntimeStates.addState('test', {
+ parent: 'xos',
+ url: 'test',
+ template: 'Test State'
+ });
+ ModelDefs.get()
+ .then((models: IModeldef[]) => {
+ _.forEach(models, (m: IModeldef) => {
+ const state: IXosState = {
+ parent: 'xos',
+ url: `${m.name.toLowerCase()}s`,
+ component: 'xosCrud',
+ data: {
+ model: m.name,
+ xosTableCfg: {
+ columns: modeldefToTableCfg(m.fields)
+ }
+ }
+ };
+ RuntimeStates.addState(`${m.name.toLowerCase()}s`, state);
+ NavigationService.add({label: `${m.name}s`, url: `${m.name.toLowerCase()}s`});
+ });
+ });
+ });