blob: fc75b2f3e07013b5b6323a8f5c3e3c51b8a6c060 [file] [log] [blame]
Matteo Scandolo70bc45f2016-05-06 14:10:11 -07001'use strict';
2
3angular.module('xos.serviceGrid', [
4 'ngResource',
5 'ngCookies',
6 'ui.router',
7 'xos.helpers'
8])
9.config(($stateProvider) => {
10 $stateProvider
11 .state('serviceGrid', {
12 url: '/',
13 template: '<service-grid></service-grid>'
14 })
15 .state('serviceGraph', {
16 url: '/graph',
17 template: '<service-graph></service-graph>'
18 });
19})
20.config(function($httpProvider){
21 $httpProvider.interceptors.push('NoHyperlinks');
22})
23.directive('serviceGrid', function(){
24 return {
25 restrict: 'E',
26 scope: {},
27 bindToController: true,
28 controllerAs: 'vm',
29 templateUrl: 'templates/service-grid.tpl.html',
Matteo Scandoloba678a92016-06-20 17:16:15 -070030 controller: function(Services, ToscaEncoder, _){
Matteo Scandolo70bc45f2016-05-06 14:10:11 -070031
32 this.tableConfig = {
33 columns: [
34 {
35 label: 'Status',
36 prop: 'status',
Matteo Scandolo83369f32016-05-13 10:39:38 -070037 type: 'icon',
38 formatter: item => {
39 let status = parseInt(item.backend_status.match(/^[0-9]/)[0]);
40 switch(status){
41 case 0:
42 return 'time';
43 case 1:
44 return 'ok';
45 case 2:
46 return 'remove';
47 }
48 }
Matteo Scandolo70bc45f2016-05-06 14:10:11 -070049 },
50 {
51 label: 'Name',
52 prop: 'name',
53 link: item => `${item.view_url.replace(/\$[a-z]+\$/, item.id)}`
54 },
55 {
56 label: 'Kind',
57 prop: 'kind'
58 },
59 {
60 label: 'Enabled',
61 prop: 'enabled',
62 type: 'boolean'
63 }
64 ],
65 filter: 'field',
Matteo Scandolo83369f32016-05-13 10:39:38 -070066 order: {
67 field: 'name'
Matteo Scandoloba678a92016-06-20 17:16:15 -070068 },
69 actions: [
70 {
71 label: 'export',
72 icon: 'export',
73 cb: service => {
74 this.tosca = '';
75 ToscaEncoder.serviceToTosca(service)
76 .then(tosca => {
77 this.showFeedback = true;
78 this.tosca = tosca;
79 });
80 }
81 }
82 ]
Matteo Scandolo70bc45f2016-05-06 14:10:11 -070083 };
84
85 // retrieving user list
86 Services.query().$promise
87 .then((services) => {
88 this.services = _.map(services, s => {
89 // parse backend_status string in a boolean for display
Matteo Scandolo206d7482016-05-13 09:26:54 -070090 // NOTE they are not boolean:
91 // - start with 0 = provisioning
92 // - start with 1 = good
93 // - start with 2 = error
Matteo Scandolo70bc45f2016-05-06 14:10:11 -070094 s.status = parseInt(s.backend_status.match(/^[0-9]/)[0]) === 0 ? false : true;
95 return s;
96 })
97 })
98 .catch((e) => {
99 throw new Error(e);
100 });
101 }
102 };
103});