Moved table config in a service

Change-Id: Ide54d7489894535cacaa4b2d839b7bc7eb23e5e4
diff --git a/src/app/core/services/helpers/config.helpers.ts b/src/app/core/services/helpers/config.helpers.ts
index 9b8d63c..332c60c 100644
--- a/src/app/core/services/helpers/config.helpers.ts
+++ b/src/app/core/services/helpers/config.helpers.ts
@@ -1,15 +1,18 @@
 import * as _ from 'lodash';
 import * as pluralize from 'pluralize';
-import {IXosTableColumn} from '../../table/table';
+import {IXosTableColumn, IXosTableCfg} from '../../table/table';
+import {IModeldef} from '../../../datasources/rest/modeldefs.rest';
 
 export interface IXosModelDefsField {
   name: string;
   type: string;
+  validators?: any;
 }
 
 export interface IXosConfigHelpersService {
   excluded_fields: string[];
-  modeldefToColumnsCfg(fields: IXosModelDefsField[], baseUrl: string): any[]; // TODO use a proper interface
+  modelToTableCfg(model: IModeldef, baseUrl: string): IXosTableCfg;
+  modelFieldsToColumnsCfg(fields: IXosModelDefsField[], baseUrl: string): IXosTableColumn[]; // TODO use a proper interface
   pluralize(string: string, quantity?: number, count?: boolean): string;
   toLabel(string: string, pluralize?: boolean): string;
   toLabels(string: string[], pluralize?: boolean): string[];
@@ -34,7 +37,9 @@
     'password'
   ];
 
-  constructor() {
+  constructor(
+    private toastr: ng.toastr.IToastrService
+  ) {
     pluralize.addIrregularRule('xos', 'xosses');
     pluralize.addPluralRule(/slice$/i, 'slices');
   }
@@ -64,7 +69,38 @@
     return this.capitalizeFirst(string);
   }
 
-  modeldefToColumnsCfg(fields: IXosModelDefsField[], baseUrl: string): IXosTableColumn[] {
+  modelToTableCfg(model: IModeldef, baseUrl: string): IXosTableCfg {
+    const cfg = {
+      columns: this.modelFieldsToColumnsCfg(model.fields, baseUrl),
+      filter: 'fulltext',
+      order: {field: 'id', reverse: false},
+      actions: [
+        {
+          label: 'delete',
+          icon: 'remove',
+          color: 'red',
+          cb: (item) => {
+            let obj = angular.copy(item);
+
+            item.$delete()
+              .then((res) => {
+                if (res.status === 404) {
+                  // TODO understand why it does not go directly in catch
+                  throw new Error();
+                }
+                this.toastr.info(`${model.name} ${obj.name} succesfully deleted`);
+              })
+              .catch(() => {
+                this.toastr.error(`Error while deleting ${obj.name}`);
+              });
+          }
+        }
+      ]
+    };
+    return cfg;
+  }
+
+  modelFieldsToColumnsCfg(fields: IXosModelDefsField[], baseUrl: string): IXosTableColumn[] {
 
     const columns =  _.map(fields, (f) => {
       if (this.excluded_fields.indexOf(f.name) > -1) {