This is an automated email from the ASF dual-hosted git repository.

shwstppr pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/main by this push:
     new 127fd9d2f06 UI: Project column in Default View (#8287)
127fd9d2f06 is described below

commit 127fd9d2f06ebb2938b482e95914a32ef788e57e
Author: sato03 <[email protected]>
AuthorDate: Fri Dec 15 09:12:24 2023 -0300

    UI: Project column in Default View (#8287)
    
    The Default View has a projects toggle button that allows users to see 
which resources belong to projects, but there is nothing to indicate which 
project they belong to.
    
    For this reason, a project column was added if the projects button is 
enabled, indicating the name of the project to which the resource belongs.
    
    ---------
    
    Co-authored-by: Henrique Sato <[email protected]>
---
 ui/src/components/view/ListView.vue |  4 ++++
 ui/src/config/section/compute.js    | 44 ++++++++++++++++++++++++++++++++-----
 ui/src/config/section/event.js      | 11 +++++++++-
 ui/src/config/section/image.js      |  6 +++++
 ui/src/config/section/network.js    | 41 ++++++++++++++++++++++++++++++----
 ui/src/config/section/storage.js    | 11 ++++++++--
 ui/src/views/AutogenView.vue        |  3 +++
 7 files changed, 108 insertions(+), 12 deletions(-)

diff --git a/ui/src/components/view/ListView.vue 
b/ui/src/components/view/ListView.vue
index 53c6efb321d..a61f1930f71 100644
--- a/ui/src/components/view/ListView.vue
+++ b/ui/src/components/view/ListView.vue
@@ -330,6 +330,10 @@
         <router-link v-if="record.roleid && $router.resolve('/role/' + 
record.roleid).matched[0].redirect !== '/exception/404'" :to="{ path: '/role/' 
+ record.roleid }">{{ text }}</router-link>
         <span v-else>{{ text }}</span>
       </template>
+      <template v-if="column.key === 'project'">
+        <router-link v-if="$router.resolve('/project/' + 
record.projectid).matched[0].redirect !== '/exception/404'" :to="{ path: 
'/project/' + record.projectid }">{{ text }}</router-link>
+        <span v-else>{{ text }}</span>
+      </template>
       <template v-if="column.key === 'templateversion'">
         <span>  {{ record.version }} </span>
       </template>
diff --git a/ui/src/config/section/compute.js b/ui/src/config/section/compute.js
index b56c8eeead9..4cb9ed8e2ba 100644
--- a/ui/src/config/section/compute.js
+++ b/ui/src/config/section/compute.js
@@ -61,16 +61,18 @@ export default {
         if (store.getters.metrics) {
           fields.push(...metricsFields)
         }
-
         if (store.getters.userInfo.roletype === 'Admin') {
           fields.splice(2, 0, 'instancename')
-          fields.push('account')
           fields.push('hostname')
+          fields.push('account')
         } else if (store.getters.userInfo.roletype === 'DomainAdmin') {
           fields.push('account')
         } else {
           fields.push('serviceofferingname')
         }
+        if (store.getters.listAllProjects) {
+          fields.push('project')
+        }
         fields.push('zonename')
         return fields
       },
@@ -464,8 +466,13 @@ export default {
       columns: () => {
         const fields = ['displayname', 'state', 'name', 'type', 'current', 
'parentName', 'created']
         if (['Admin', 
'DomainAdmin'].includes(store.getters.userInfo.roletype)) {
-          fields.push('domain')
           fields.push('account')
+          if (store.getters.listAllProjects) {
+            fields.push('project')
+          }
+          fields.push('domain')
+        } else if (store.getters.listAllProjects) {
+          fields.push('project')
         }
         return fields
       },
@@ -536,6 +543,9 @@ export default {
         if (['Admin', 'DomainAdmin'].includes(store.userInfo.roletype)) {
           fields.push('account')
         }
+        if (store.listAllProjects) {
+          fields.push('project')
+        }
         if (store.apis.scaleKubernetesCluster.params.filter(x => x.name === 
'autoscalingenabled').length > 0) {
           fields.splice(2, 0, 'autoscalingenabled')
         }
@@ -633,7 +643,13 @@ export default {
       docHelp: 'adminguide/autoscale_without_netscaler.html',
       resourceType: 'AutoScaleVmGroup',
       permission: ['listAutoScaleVmGroups'],
-      columns: ['name', 'state', 'associatednetworkname', 'publicip', 
'publicport', 'privateport', 'minmembers', 'maxmembers', 
'availablevirtualmachinecount', 'account'],
+      columns: (store) => {
+        var fields = ['name', 'state', 'associatednetworkname', 'publicip', 
'publicport', 'privateport', 'minmembers', 'maxmembers', 
'availablevirtualmachinecount', 'account']
+        if (store.listAllProjects) {
+          fields.push('project')
+        }
+        return fields
+      },
       details: ['name', 'id', 'account', 'domain', 'associatednetworkname', 
'associatednetworkid', 'lbruleid', 'lbprovider', 'publicip', 'publicipid', 
'publicport', 'privateport', 'minmembers', 'maxmembers', 
'availablevirtualmachinecount', 'interval', 'state', 'created'],
       related: [{
         name: 'vm',
@@ -737,7 +753,15 @@ export default {
       docHelp: 
'adminguide/virtual_machines.html#changing-the-vm-name-os-or-group',
       resourceType: 'VMInstanceGroup',
       permission: ['listInstanceGroups'],
-      columns: ['name', 'account', 'domain'],
+
+      columns: (store) => {
+        var fields = ['name', 'account']
+        if (store.listAllProjects) {
+          fields.push('project')
+        }
+        fields.push('domain')
+        return fields
+      },
       details: ['name', 'id', 'account', 'domain', 'created'],
       related: [{
         name: 'vm',
@@ -791,7 +815,12 @@ export default {
         var fields = ['name', 'fingerprint']
         if (['Admin', 
'DomainAdmin'].includes(store.getters.userInfo.roletype)) {
           fields.push('account')
+          if (store.getters.listAllProjects) {
+            fields.push('project')
+          }
           fields.push('domain')
+        } else if (store.getters.listAllProjects) {
+          fields.push('project')
         }
         return fields
       },
@@ -941,7 +970,12 @@ export default {
         var fields = ['name', 'type', 'description']
         if (['Admin', 
'DomainAdmin'].includes(store.getters.userInfo.roletype)) {
           fields.push('account')
+          if (store.getters.listAllProjects) {
+            fields.push('project')
+          }
           fields.push('domain')
+        } else if (store.getters.listAllProjects) {
+          fields.push('project')
         }
         return fields
       },
diff --git a/ui/src/config/section/event.js b/ui/src/config/section/event.js
index 5f4b27b88ed..5ab87e86964 100644
--- a/ui/src/config/section/event.js
+++ b/ui/src/config/section/event.js
@@ -15,13 +15,22 @@
 // specific language governing permissions and limitations
 // under the License.
 
+import store from '@/store'
+
 export default {
   name: 'event',
   title: 'label.events',
   icon: 'ScheduleOutlined',
   docHelp: 'adminguide/events.html',
   permission: ['listEvents'],
-  columns: ['level', 'type', 'state', 'description', 'resource', 'username', 
'account', 'domain', 'created'],
+  columns: () => {
+    var fields = ['level', 'type', 'state', 'description', 'resource', 
'username', 'account']
+    if (store.getters.listAllProjects) {
+      fields.push('project')
+    }
+    fields.push(...['domain', 'created'])
+    return fields
+  },
   details: ['username', 'id', 'description', 'resourcetype', 'resourceid', 
'state', 'level', 'type', 'account', 'domain', 'created'],
   searchFilters: ['level', 'domainid', 'account', 'keyword', 'resourcetype'],
   related: [{
diff --git a/ui/src/config/section/image.js b/ui/src/config/section/image.js
index 792e47f021f..7a5d52d1b89 100644
--- a/ui/src/config/section/image.js
+++ b/ui/src/config/section/image.js
@@ -47,6 +47,9 @@ export default {
           fields.push('size')
           fields.push('account')
         }
+        if (store.getters.listAllProjects) {
+          fields.push('project')
+        }
         if (['Admin'].includes(store.getters.userInfo.roletype)) {
           fields.push('templatetype')
           fields.push('order')
@@ -220,6 +223,9 @@ export default {
           fields.push('size')
           fields.push('account')
         }
+        if (store.getters.listAllProjects) {
+          fields.push('project')
+        }
         if (['Admin'].includes(store.getters.userInfo.roletype)) {
           fields.push('order')
         }
diff --git a/ui/src/config/section/network.js b/ui/src/config/section/network.js
index 7d7313ffb25..e1a0e69b57e 100644
--- a/ui/src/config/section/network.js
+++ b/ui/src/config/section/network.js
@@ -34,10 +34,16 @@ export default {
       permission: ['listNetworks'],
       resourceType: 'Network',
       columns: () => {
-        var fields = ['name', 'state', 'type', 'vpcname', 'cidr', 'ip6cidr', 
'broadcasturi', 'domainpath', 'account', 'zonename']
+        var fields = ['name', 'state', 'type', 'vpcname', 'cidr', 'ip6cidr', 
'broadcasturi', 'domainpath']
         if (!isAdmin()) {
           fields = fields.filter(function (e) { return e !== 'broadcasturi' })
         }
+        if (store.getters.listAllProjects) {
+          fields.push('project')
+        } else {
+          fields.push('account')
+        }
+        fields.push('zonename')
         return fields
       },
       details: () => {
@@ -197,7 +203,14 @@ export default {
       docHelp: 
'adminguide/networking_and_traffic.html#configuring-a-virtual-private-cloud',
       permission: ['listVPCs'],
       resourceType: 'Vpc',
-      columns: ['name', 'state', 'displaytext', 'cidr', 'account', 'domain', 
'zonename'],
+      columns: () => {
+        var fields = ['name', 'state', 'displaytext', 'cidr', 'account']
+        if (store.getters.listAllProjects) {
+          fields.push('project')
+        }
+        fields.push(...['domain', 'zonename'])
+        return fields
+      },
       details: ['name', 'id', 'displaytext', 'cidr', 'networkdomain', 
'ip6routes', 'ispersistent', 'redundantvpcrouter', 'restartrequired', 
'zonename', 'account', 'domain', 'dns1', 'dns2', 'ip6dns1', 'ip6dns2', 
'publicmtu'],
       searchFilters: ['name', 'zoneid', 'domainid', 'account', 'tags'],
       related: [{
@@ -334,10 +347,16 @@ export default {
         if (store.getters.userInfo.roletype === 'Admin') {
           fields.splice(2, 0, 'instancename')
           fields.push('account')
+          if (store.getters.listAllProjects) {
+            fields.push('project')
+          }
           fields.push('domain')
           fields.push('hostname')
         } else if (store.getters.userInfo.roletype === 'DomainAdmin') {
           fields.push('account')
+          if (store.getters.listAllProjects) {
+            fields.push('project')
+          }
         } else {
           fields.push('serviceofferingname')
         }
@@ -730,7 +749,14 @@ export default {
       docHelp: 
'adminguide/networking_and_traffic.html#reserving-public-ip-addresses-and-vlans-for-accounts',
       permission: ['listPublicIpAddresses'],
       resourceType: 'PublicIpAddress',
-      columns: ['ipaddress', 'state', 'associatednetworkname', 'vpcname', 
'virtualmachinename', 'allocated', 'account', 'domain', 'zonename'],
+      columns: () => {
+        var fields = ['ipaddress', 'state', 'associatednetworkname', 
'vpcname', 'virtualmachinename', 'allocated', 'account']
+        if (store.getters.listAllProjects) {
+          fields.push('project')
+        }
+        fields.push(...['domain', 'zonename'])
+        return fields
+      },
       details: ['ipaddress', 'id', 'associatednetworkname', 
'virtualmachinename', 'networkid', 'issourcenat', 'isstaticnat', 
'virtualmachinename', 'vmipaddress', 'vlan', 'allocated', 'account', 'domain', 
'zonename'],
       filters: ['allocated', 'reserved', 'free'],
       component: shallowRef(() => 
import('@/views/network/PublicIpResource.vue')),
@@ -1120,7 +1146,14 @@ export default {
       title: 'label.vpncustomergatewayid',
       icon: 'lock-outlined',
       permission: ['listVpnCustomerGateways'],
-      columns: ['name', 'gateway', 'cidrlist', 'ipsecpsk', 'account', 
'domain'],
+      columns: () => {
+        var fields = ['name', 'gateway', 'cidrlist', 'ipsecpsk', 'account']
+        if (store.getters.listAllProjects) {
+          fields.push('project')
+        }
+        fields.push('domain')
+        return fields
+      },
       details: ['name', 'id', 'gateway', 'cidrlist', 'ipsecpsk', 'ikepolicy', 
'ikelifetime', 'ikeversion', 'esppolicy', 'esplifetime', 'dpd', 
'splitconnections', 'forceencap', 'account', 'domain'],
       searchFilters: ['keyword', 'domainid', 'account'],
       resourceType: 'VPNCustomerGateway',
diff --git a/ui/src/config/section/storage.js b/ui/src/config/section/storage.js
index 0fbb930e750..a096067b135 100644
--- a/ui/src/config/section/storage.js
+++ b/ui/src/config/section/storage.js
@@ -49,13 +49,15 @@ export default {
         if (store.getters.metrics) {
           fields.push(...metricsFields)
         }
-
         if (store.getters.userInfo.roletype === 'Admin') {
-          fields.push('account')
           fields.push('storage')
+          fields.push('account')
         } else if (store.getters.userInfo.roletype === 'DomainAdmin') {
           fields.push('account')
         }
+        if (store.getters.listAllProjects) {
+          fields.push('project')
+        }
         fields.push('zonename')
 
         return fields
@@ -320,7 +322,12 @@ export default {
         var fields = ['name', 'state', 'volumename', 'intervaltype', 
'physicalsize', 'created']
         if (['Admin', 
'DomainAdmin'].includes(store.getters.userInfo.roletype)) {
           fields.push('account')
+          if (store.getters.listAllProjects) {
+            fields.push('project')
+          }
           fields.push('domain')
+        } else if (store.getters.listAllProjects) {
+          fields.push('project')
         }
         fields.push('zonename')
         return fields
diff --git a/ui/src/views/AutogenView.vue b/ui/src/views/AutogenView.vue
index 6c9c13dbf77..bf1c42d4c05 100644
--- a/ui/src/views/AutogenView.vue
+++ b/ui/src/views/AutogenView.vue
@@ -879,6 +879,9 @@ export default {
           
this.$store.getters.customColumns[this.$store.getters.userInfo.id][this.$route.path]
 = this.selectedColumns
         } else {
           this.selectedColumns = 
this.$store.getters.customColumns[this.$store.getters.userInfo.id][this.$route.path]
 || this.selectedColumns
+          if (this.$store.getters.listAllProjects && !this.projectView) {
+            this.selectedColumns.push('project')
+          }
           this.updateSelectedColumns()
         }
       }

Reply via email to