kongadmin
Version:
Kong admin GUI
474 lines (466 loc) • 19.2 kB
JavaScript
/**
* Simple service to return configuration for generic list. This service contains only
* getter methods that all list views uses in Boilerplate frontend application.
*
* So generally you change these getter methods and changes are affected to all list
* views on application.
*
* @todo text translations
*/
(function () {
'use strict';
angular.module('frontend.core.services')
.factory('ListConfig', [
'_', 'DialogService','$log','AuthService',
function factory(_, DialogService,$log, AuthService) {
/**
* List title item configuration.
*
* @type {{
* author: *[],
* book: *[]
* }}
*/
var titleItems = {
api: [
{
title: 'name',
column: 'name',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'upstream url',
column: 'upstream_url',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'created',
column: 'created_at',
sortable: true,
}
],
target: [
{
title: '',
column: '',
width: 1
},
{
title: 'target',
column: 'target',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'weight',
column: 'weight'
},
{
title: 'created',
column: 'created_at',
sortable: true,
}
],
upstream: [
{
title: '',
column: '',
width: 1
},
{
title: 'name',
column: 'name',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'slots',
column: 'slots'
},
{
title: 'created',
column: 'created_at',
sortable: true,
},
{
title: '',
column: '',
width: 1
},
],
kongnode: [
{
title: '',
column: '',
width: 1
},
{
title: '',
column: '',
width: 1
},
{
title: 'name',
column: 'name',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'kong admin url',
column: 'kong_admin_url',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'api key',
column: 'kong_api_key',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'kong version',
column: 'kong_version'
},
{
title: 'created',
column: 'createdAt',
sortable: true,
},
],
consumer: [
{
title: '',
width: 1
},
{
title: 'username',
column: 'username',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'custom_id',
column: 'custom_id',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'created',
column: 'created_at',
sortable: true,
},
{
title: '',
hide : !AuthService.hasPermission('consumers','delete'),
column: false,
width: 1
},
],
user: [
//{
// title: '#',
// width : 1
//},
{
title: '',
column: '',
width: 1
},
{
title: 'username',
column: 'username',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'first name',
column: 'firstName',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'last name',
column: 'lastName',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'created',
column: 'createdAt',
sortable: true,
},
{
title: 'updated',
column: 'updatedAt',
sortable: true,
},
{
title: '',
hide : !AuthService.hasPermission('users','delete'),
column: '',
width: 1
},
],
snapshot: [
//{
// title: 'id',
// column: 'id',
// searchable: true,
// sortable: true,
// inSearch: true,
// inTitle: true
//},
{
title: 'name',
column: 'name',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'kong version',
column: 'kong_version',
searchable: true,
sortable: true,
inTitle: true
},
{
title: 'created at',
column: 'createdAt',
sortable: true,
inTitle: true
}
],
plugin: [
{
title: 'Name',
column: 'name',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'API',
column: 'api_id',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'Consumer',
column: 'consumer_id',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'Created',
column: 'created_at',
class: 'col-xs-2',
searchable: false,
sortable: false,
inSearch: false,
inTitle: true
}
],
certificate: [
{
title: 'id',
column: 'id',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'snis',
column: 'snis',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'Created',
column: 'created_at',
class: 'col-xs-2',
searchable: false,
sortable: false,
inSearch: false,
inTitle: true
}
],
userlogin: [
{
title: 'IP-address',
column: 'ip',
class: 'col-xs-2',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'Browser',
column: 'browser',
class: 'col-xs-2',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'Operating System',
column: 'os',
class: 'col-xs-2',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'Username',
column: false,
class: 'col-xs-2',
searchable: false,
sortable: false,
inSearch: false,
inTitle: true
},
{
title: 'Login time',
column: 'createdAt',
class: 'col-xs-4',
searchable: false,
sortable: true,
inSearch: false,
inTitle: true
}
],
"cluster.nodes": [
{
title: 'Status',
column: 'status',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'Name',
column: 'name',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
},
{
title: 'Address',
column: 'address',
searchable: true,
sortable: true,
inSearch: true,
inTitle: true
}
]
};
return {
getConfig: function getConfig(property, model) {
return {
itemCount: 0,
items: [],
itemsFetchSize: 4294967295,
itemsPerPage: 25,
titleItems: this.getTitleItems(property),
itemsPerPageOptions: [10, 25, 50, 100],
currentPage: 1,
sort: {
column: 'created_at',
direction: true,
},
filters: {
searchWord: '',
columns: this.getTitleItems(property)
},
where: {},
loading: true,
loaded: false,
handleErrors : function(err) {
model.scope.errors = {}
if(err.data && err.data.body) {
Object.keys(err.data.body).forEach(function(key){
model.scope.errors[key] = err.data.body[key]
})
}
},
changeSort: function changeSort(item) {
var sort = model.scope.sort;
if (sort.column === item.column) {
sort.direction = !sort.direction;
} else {
sort.column = item.column;
sort.direction = true;
}
},
deleteItem: function deleteItem($index, item) {
DialogService.prompt(
"Confirm", "Really want to delete the selected item?",
['No don\'t', 'Yes! delete it'],
function accept() {
model.delete(item.id || item.name)
.then(function (res) {
model.scope.items.data.splice(model.scope.items.data.indexOf(item), 1);
},function(err){
$log.error("ListConfigService : Model delete failed => ",err)
})
}, function decline() {
})
}
};
},
/**
* Getter method for lists title items. These are defined in the 'titleItems'
* variable.
*
* @param {String} model Name of the model
*
* @returns {Array}
*/
getTitleItems: function getTitleItems(model) {
return _.isUndefined(titleItems[model]) ? [] : titleItems[model];
}
};
}
])
;
}());