From 18ce4150aec208bf7c19cdffcdfbd0ccf818da85 Mon Sep 17 00:00:00 2001 From: vishesh92 Date: Fri, 9 Oct 2026 17:56:45 +0530 Subject: [PATCH] UI: Add domain column to list views and fix VPC/network form issues --- .../vpc/CreatePrivateGatewayByAdminCmd.java | 2 +- ui/src/config/section/compute.js | 6 ++ ui/src/config/section/image.js | 2 + ui/src/config/section/storage.js | 17 +++- ui/src/style/ant-overwrite/ant-form.less | 6 ++ .../network/CreateIsolatedNetworkForm.vue | 3 +- ui/src/views/network/CreateL2NetworkForm.vue | 3 +- .../views/network/CreateSharedNetworkForm.vue | 3 +- ui/src/views/network/CreateVpc.vue | 3 +- ui/src/views/network/PortForwarding.vue | 2 +- ui/src/views/network/StaticRoutesTab.vue | 2 +- ui/src/views/network/UpdateNetwork.vue | 3 +- ui/src/views/network/VpcTab.vue | 82 +++++++++++++++---- ui/src/views/network/VpcTiersTab.vue | 2 +- 14 files changed, 108 insertions(+), 28 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayByAdminCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayByAdminCmd.java index 09f0d21d9dfd..f41ff54effec 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayByAdminCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayByAdminCmd.java @@ -47,7 +47,7 @@ public class CreatePrivateGatewayByAdminCmd extends CreatePrivateGatewayCmd impl description = "The Physical Network ID the network belongs to") private Long physicalNetworkId; - @Parameter(name = ApiConstants.VLAN, type = CommandType.STRING, description = "The network implementation uri for the private gateway") + @Parameter(name = ApiConstants.VLAN, type = CommandType.STRING, description = "The network implementation uri for the private gateway. Can't be specified along with associatednetworkid") private String broadcastUri; @Parameter(name = ApiConstants.BYPASS_VLAN_OVERLAP_CHECK, type = CommandType.BOOLEAN, description = "When true bypasses VLAN id/range overlap check during private gateway creation") diff --git a/ui/src/config/section/compute.js b/ui/src/config/section/compute.js index 7c2c9f09eae4..d8d014d9eda0 100644 --- a/ui/src/config/section/compute.js +++ b/ui/src/config/section/compute.js @@ -83,8 +83,10 @@ export default { fields.splice(2, 0, 'instancename') fields.push('hostname') fields.push('account') + fields.push('domain') } else if (store.getters.userInfo.roletype === 'DomainAdmin') { fields.push('account') + fields.push('domain') } else { fields.push('serviceofferingname') } @@ -582,6 +584,7 @@ export default { var fields = ['name', 'state', 'clustertype', 'size', 'cpunumber', 'memory', 'kubernetesversionname'] if (['Admin', 'DomainAdmin'].includes(store.userInfo.roletype)) { fields.push('account') + fields.push('domain') } if (store.listAllProjects) { fields.push('project') @@ -897,6 +900,9 @@ export default { searchFilters: ['name', 'zoneid', 'domainid', 'account'], columns: (store) => { var fields = ['name', 'state', 'associatednetworkname', 'publicip', 'publicport', 'privateport', 'minmembers', 'maxmembers', 'availablevirtualmachinecount', 'account'] + if (['Admin', 'DomainAdmin'].includes(store.userInfo.roletype)) { + fields.push('domain') + } if (store.listAllProjects) { fields.push('project') } diff --git a/ui/src/config/section/image.js b/ui/src/config/section/image.js index bae4a40c9a8d..a3ae1ac8e950 100644 --- a/ui/src/config/section/image.js +++ b/ui/src/config/section/image.js @@ -48,6 +48,7 @@ export default { if (['Admin', 'DomainAdmin'].includes(store.getters.userInfo.roletype)) { fields.push('size') fields.push('account') + fields.push('domain') } if (store.getters.listAllProjects) { fields.push('project') @@ -225,6 +226,7 @@ export default { if (['Admin', 'DomainAdmin'].includes(store.getters.userInfo.roletype)) { fields.push('size') fields.push('account') + fields.push('domain') } if (store.getters.listAllProjects) { fields.push('project') diff --git a/ui/src/config/section/storage.js b/ui/src/config/section/storage.js index 75bdfd4d5fa6..d905e245328d 100644 --- a/ui/src/config/section/storage.js +++ b/ui/src/config/section/storage.js @@ -54,8 +54,10 @@ export default { if (store.getters.userInfo.roletype === 'Admin') { fields.push('storage') fields.push('account') + fields.push('domain') } else if (store.getters.userInfo.roletype === 'DomainAdmin') { fields.push('account') + fields.push('domain') } if (store.getters.listAllProjects) { fields.push('project') @@ -625,7 +627,18 @@ export default { title: 'label.buckets', icon: 'funnel-plot-outlined', permission: ['listBuckets'], - columns: ['name', 'state', 'objectstore', 'size', 'account'], + columns: () => { + var fields = ['name', 'state', 'objectstore', 'size', 'account'] + if (['Admin', 'DomainAdmin'].includes(store.getters.userInfo.roletype)) { + if (store.getters.listAllProjects) { + fields.push('project') + } + fields.push('domain') + } else if (store.getters.listAllProjects) { + fields.push('project') + } + return fields + }, details: ['id', 'name', 'state', 'objectstore', 'size', 'url', 'accesskey', 'usersecretkey', 'account', 'domain', 'created', 'quota', 'encryption', 'versioning', 'objectlocking', 'policy'], tabs: [ { @@ -695,8 +708,10 @@ export default { if (store.getters.userInfo.roletype === 'Admin') { fields.push('storage') fields.push('account') + fields.push('domain') } else if (store.getters.userInfo.roletype === 'DomainAdmin') { fields.push('account') + fields.push('domain') } if (store.getters.listAllProjects) { fields.push('project') diff --git a/ui/src/style/ant-overwrite/ant-form.less b/ui/src/style/ant-overwrite/ant-form.less index 882724b8ecc3..d603fa419a12 100644 --- a/ui/src/style/ant-overwrite/ant-form.less +++ b/ui/src/style/ant-overwrite/ant-form.less @@ -26,3 +26,9 @@ .ant-select-open .ant-select-arrow .ant-select-suffix:not(.anticon-search) svg { transform: rotateZ(-180deg); } + +// Wrap long option labels instead of truncating them with an ellipsis +.ant-select-dropdown.select-wrap-options .ant-select-item-option-content { + white-space: normal; + word-break: break-word; +} diff --git a/ui/src/views/network/CreateIsolatedNetworkForm.vue b/ui/src/views/network/CreateIsolatedNetworkForm.vue index 75ac30359e98..5c6440144e4f 100644 --- a/ui/src/views/network/CreateIsolatedNetworkForm.vue +++ b/ui/src/views/network/CreateIsolatedNetworkForm.vue @@ -91,8 +91,9 @@ }" :loading="networkOfferingLoading" :placeholder="apiParams.networkofferingid.description" + dropdownClassName="select-wrap-options" @change="val => { handleNetworkOfferingChange(networkOfferings[val]) }"> - + {{ opt.displaytext || opt.name || opt.description }} diff --git a/ui/src/views/network/CreateL2NetworkForm.vue b/ui/src/views/network/CreateL2NetworkForm.vue index 66e6a0403f30..96b09e884575 100644 --- a/ui/src/views/network/CreateL2NetworkForm.vue +++ b/ui/src/views/network/CreateL2NetworkForm.vue @@ -87,8 +87,9 @@ }" :loading="networkOfferingLoading" :placeholder="apiParams.networkofferingid.description" + dropdownClassName="select-wrap-options" @change="val => { handleNetworkOfferingChange(networkOfferings[val]) }"> - + {{ opt.displaytext || opt.name || opt.description }} diff --git a/ui/src/views/network/CreateSharedNetworkForm.vue b/ui/src/views/network/CreateSharedNetworkForm.vue index cb84efea743e..7ec748e88be2 100644 --- a/ui/src/views/network/CreateSharedNetworkForm.vue +++ b/ui/src/views/network/CreateSharedNetworkForm.vue @@ -234,8 +234,9 @@ }" :loading="networkOfferingLoading" :placeholder="apiParams.networkofferingid.description" + dropdownClassName="select-wrap-options" @change="val => { handleNetworkOfferingChange(networkOfferings[val]) }"> - + {{ opt.displaytext || opt.name || opt.description }} diff --git a/ui/src/views/network/CreateVpc.vue b/ui/src/views/network/CreateVpc.vue index 2b66f79b387d..a251b113a383 100644 --- a/ui/src/views/network/CreateVpc.vue +++ b/ui/src/views/network/CreateVpc.vue @@ -102,8 +102,9 @@ :filterOption="(input, option) => { return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 }" + dropdownClassName="select-wrap-options" @change="handleVpcOfferingChange" > - + {{ offering.name }} diff --git a/ui/src/views/network/PortForwarding.vue b/ui/src/views/network/PortForwarding.vue index ffa89e5b5814..07879d70f65d 100644 --- a/ui/src/views/network/PortForwarding.vue +++ b/ui/src/views/network/PortForwarding.vue @@ -124,7 +124,7 @@