diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index c6f7c44224e..607263d2f4f 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -2128,7 +2128,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe } } - final Filter searchFilter = new Filter(IPAddressVO.class, "address", false, cmd.getStartIndex(), cmd.getPageSizeVal()); + final Filter searchFilter = new Filter(IPAddressVO.class, "address", false, null, null); final SearchBuilder sb = _publicIpAddressDao.createSearchBuilder(); Long domainId = null; Boolean isRecursive = null; @@ -2214,7 +2214,10 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe sc2.setParameters("ids", freeAddrIds.toArray()); addrs.addAll(_publicIpAddressDao.search(sc2, searchFilter)); // Allocated + Free } - + List wPagination = com.cloud.utils.StringUtils.applyPagination(addrs, cmd.getStartIndex(), cmd.getPageSizeVal()); + if (wPagination != null) { + return new Pair, Integer>(wPagination, addrs.size()); + } return new Pair<>(addrs, addrs.size()); } diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 178f2550c56..4a775bd3a9f 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -659,7 +659,7 @@ "label.credit": "Credit", "label.crosszones": "Cross Zones", "label.currency": "Currency", -"label.current": "isCurrent", +"label.current": "Current", "label.currentpassword": "Current Password", "label.custom": "Custom", "label.custom.disk.offering": "Custom Disk Offering", diff --git a/ui/src/components/view/ListView.vue b/ui/src/components/view/ListView.vue index b940da5978e..5faa135e0b4 100644 --- a/ui/src/components/view/ListView.vue +++ b/ui/src/components/view/ListView.vue @@ -232,6 +232,9 @@ + + + {{ $toLocaleDate(text) }} diff --git a/ui/src/components/widgets/Status.vue b/ui/src/components/widgets/Status.vue index beffeb4e0bf..3be4c59e693 100644 --- a/ui/src/components/widgets/Status.vue +++ b/ui/src/components/widgets/Status.vue @@ -103,6 +103,7 @@ export default { case 'Successfully Installed': case 'ReadWrite': case 'True': + case 'true': case 'Up': case 'enabled': case 'PowerOn': @@ -116,6 +117,7 @@ export default { case 'Down': case 'Error': case 'False': + case 'false': case 'Stopped': case 'PowerOff': case 'failed': diff --git a/ui/src/utils/sort.js b/ui/src/utils/sort.js index 4934c887b35..b2f3d5451ca 100644 --- a/ui/src/utils/sort.js +++ b/ui/src/utils/sort.js @@ -23,7 +23,7 @@ function filterNumber (value) { } function stringComparator (a, b) { - return a.localeCompare(b) + return a.toString().localeCompare(b.toString()) } function numericComparator (a, b) { diff --git a/ui/src/views/AutogenView.vue b/ui/src/views/AutogenView.vue index bfd5ba11401..f1cf48b971b 100644 --- a/ui/src/views/AutogenView.vue +++ b/ui/src/views/AutogenView.vue @@ -1208,15 +1208,15 @@ export default { if (param.name !== key) { continue } - if (!input === undefined || input === null || + if (input === undefined || input === null || (input === '' && !['updateStoragePool', 'updateHost', 'updatePhysicalNetwork', 'updateDiskOffering', 'updateNetworkOffering'].includes(action.api))) { if (param.type === 'boolean') { params[key] = false } break } - if (!input && input !== 0 && !['tags'].includes(key)) { - continue + if (input === '' && !['tags'].includes(key)) { + break } if (action.mapping && key in action.mapping && action.mapping[key].options) { params[key] = action.mapping[key].options[input] diff --git a/ui/src/views/network/CreateSharedNetworkForm.vue b/ui/src/views/network/CreateSharedNetworkForm.vue index 7dd8e1a3f73..1de8693a7c6 100644 --- a/ui/src/views/network/CreateSharedNetworkForm.vue +++ b/ui/src/views/network/CreateSharedNetworkForm.vue @@ -73,7 +73,7 @@ :filterOption="(input, option) => { return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 }" - :loading="zoneLoading" + :loading="formPhysicalNetworkLoading" :placeholder="this.$t('label.physicalnetworkid')" @change="val => { this.handlePhysicalNetworkChange(this.formPhysicalNetworks[val]) }"> @@ -469,57 +469,67 @@ export default { this.fetchPhysicalNetworkData() }, fetchPhysicalNetworkData () { + this.formSelectedPhysicalNetwork = {} + this.formPhysicalNetworks = [] if (this.physicalNetworks != null) { this.formPhysicalNetworks = this.physicalNetworks - if (this.arrayHasItems(this.formPhysicalNetworks)) { - this.form.setFieldsValue({ - physicalnetworkid: 0 - }) - this.handlePhysicalNetworkChange(this.formPhysicalNetworks[0]) - } + this.selectFirstPhysicalNetwork() } else { if (this.selectedZone === null || this.selectedZone === undefined) { return } - const params = {} - params.zoneid = this.selectedZone.id - this.formPhysicalNetworksLoading = true + const promises = [] + const params = { + zoneid: this.selectedZone.id + } + this.formPhysicalNetworkLoading = true api('listPhysicalNetworks', params).then(json => { - this.formPhysicalNetworks = [] var networks = json.listphysicalnetworksresponse.physicalnetwork if (this.arrayHasItems(networks)) { - for (const i in networks) { - this.addPhysicalNetworkForGuestTrafficType(networks[i]) + for (const network of networks) { + promises.push(this.addPhysicalNetworkForGuestTrafficType(network)) } } else { this.formPhysicalNetworkLoading = false } }).finally(() => { + if (this.arrayHasItems(promises)) { + Promise.all(promises).catch(error => { + this.$notifyError(error) + }).finally(() => { + this.formPhysicalNetworkLoading = false + this.selectFirstPhysicalNetwork() + }) + } }) } }, + selectFirstPhysicalNetwork () { + if (this.arrayHasItems(this.formPhysicalNetworks)) { + this.form.setFieldsValue({ + physicalnetworkid: 0 + }) + this.handlePhysicalNetworkChange(this.formPhysicalNetworks[0]) + } + }, addPhysicalNetworkForGuestTrafficType (physicalNetwork) { const params = {} params.physicalnetworkid = physicalNetwork.id - api('listTrafficTypes', params).then(json => { - var trafficTypes = json.listtraffictypesresponse.traffictype - if (this.arrayHasItems(trafficTypes)) { - for (const i in trafficTypes) { - if (trafficTypes[i].traffictype === 'Guest') { - this.formPhysicalNetworks.push(physicalNetwork) - break + return new Promise((resolve, reject) => { + api('listTrafficTypes', params).then(json => { + var trafficTypes = json.listtraffictypesresponse.traffictype + if (this.arrayHasItems(trafficTypes)) { + for (const type of trafficTypes) { + if (type.traffictype === 'Guest') { + this.formPhysicalNetworks.push(physicalNetwork) + break + } } } - } else { - this.formPhysicalNetworkLoading = false - } - }).finally(() => { - if (this.formPhysicalNetworks.length > 0 && this.isObjectEmpty(this.formSelectedPhysicalNetwork)) { - this.form.setFieldsValue({ - physicalnetworkid: 0 - }) - this.handlePhysicalNetworkChange(this.formPhysicalNetworks[0]) - } + resolve() + }).catch(error => { + reject(error) + }) }) }, handlePhysicalNetworkChange (physicalNet) {