diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json
index 0a5598c32..4d3def2db 100644
--- a/src/i18n/locales/en.json
+++ b/src/i18n/locales/en.json
@@ -359,6 +359,7 @@
"close": "Close",
"code_not_present": "Code not present",
"code_not_reachable": "Code not reachable",
+ "collection_projects": "Collection Projects",
"collectionLogic": "Project Collection Logic",
"collection_indicator_tooltip": "Collection project with values calculated based on children.",
"comment": "Comment",
diff --git a/src/plugins/table.js b/src/plugins/table.js
index bd3b95274..d7476ad30 100644
--- a/src/plugins/table.js
+++ b/src/plugins/table.js
@@ -6,6 +6,7 @@ import 'bootstrap';
import 'jquery-treegrid/js/jquery.treegrid.min.js';
import 'bootstrap-table/dist/bootstrap-table.js';
import 'bootstrap-table/dist/extensions/treegrid/bootstrap-table-treegrid.min.js';
+import 'bootstrap-table/dist/extensions/defer-url/bootstrap-table-defer-url.js';
import BootstrapTable from 'bootstrap-table/dist/bootstrap-table-vue.esm.js';
Vue.component('BootstrapTable', BootstrapTable);
diff --git a/src/router/index.js b/src/router/index.js
index 3f66346dc..3caf680c1 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -10,7 +10,7 @@ const DefaultContainer = () => import('@/containers/DefaultContainer');
// Views
const Dashboard = () => import('@/views/Dashboard');
-const ProjectList = () => import('@/views/portfolio/projects/ProjectList');
+const ProjectListView = () => import('@/views/portfolio/projects/ProjectListView');
const TagList = () => import('@/views/portfolio/tags/TagList.vue');
const ComponentSearch = () =>
import('@/views/portfolio/components/ComponentSearch');
@@ -130,7 +130,7 @@ function configRoutes() {
{
path: 'projects',
name: 'Projects',
- component: ProjectList,
+ component: ProjectListView,
meta: {
title: i18n.t('message.projects'),
i18n: 'message.projects',
@@ -144,6 +144,7 @@ function configRoutes() {
alias: [
'projects/:uuid/overview',
'projects/:uuid/components',
+ 'projects/:uuid/collectionprojects',
'projects/:uuid/services',
'projects/:uuid/dependencyGraph',
'projects/:uuid/findings',
diff --git a/src/shared/common.js b/src/shared/common.js
index fb294b253..03dc8d517 100644
--- a/src/shared/common.js
+++ b/src/shared/common.js
@@ -407,7 +407,11 @@ $common.componentClassifierLabelFormatter = (i18n) => {
*/
$common.componentClassifierLabelProjectUrlFormatter = (i18n) => {
return function (value) {
- let url = '../projects/?classifier=' + value;
+ // if column defines a routerFunc returning the router we use a more robust solution
+ let url = !this.routerFunc ?
+ '../projects/?classifier=' + value :
+ this.routerFunc().resolve({name: 'Projects', query: {'classifier': value}}).href;
+
switch (value) {
case 'APPLICATION':
case 'FRAMEWORK':
diff --git a/src/views/portfolio/projects/Project.vue b/src/views/portfolio/projects/Project.vue
index 014895c50..71a5805a6 100644
--- a/src/views/portfolio/projects/Project.vue
+++ b/src/views/portfolio/projects/Project.vue
@@ -71,6 +71,7 @@
{{ project.version }}
+
{{ $t('message.inactive').toUpperCase() }}
@@ -220,7 +221,7 @@
style="border-left: 0; border-right: 0; border-top: 0"
/>
-
+
{{ $t('message.components') }}
{{ totalComponents }}
-
+
{{ $t('message.services') }}
+ > {{ $t('message.collection_projects') }}
+
+
+
+ {{ $t('message.services') }}
{{ totalServices }}
-
+
{{ $t('message.dependency_graph') }}
{{
@@ -259,7 +270,7 @@
@@ -285,7 +296,7 @@
+
+
+
+
diff --git a/src/views/portfolio/projects/ProjectList.vue b/src/views/portfolio/projects/ProjectList.vue
index 36dbe5ede..6a4dd0d4f 100644
--- a/src/views/portfolio/projects/ProjectList.vue
+++ b/src/views/portfolio/projects/ProjectList.vue
@@ -1,6 +1,5 @@
-