From 8af4b5eabb91df233f0e0f60e8c460e1075907f4 Mon Sep 17 00:00:00 2001 From: davidjumani Date: Wed, 4 Aug 2021 17:50:22 +0530 Subject: [PATCH 1/4] ui: Fetching all records in list* API --- ui/src/api/index.js | 77 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 9 deletions(-) diff --git a/ui/src/api/index.js b/ui/src/api/index.js index 6c4818ae8058..e371bda36391 100644 --- a/ui/src/api/index.js +++ b/ui/src/api/index.js @@ -17,7 +17,7 @@ import { axios } from '@/utils/request' -export function api (command, args = {}, method = 'GET', data = {}) { +export async function api (command, args = {}, method = 'GET', data = {}) { let params = {} args.command = command args.response = 'json' @@ -29,14 +29,73 @@ export function api (command, args = {}, method = 'GET', data = {}) { }) } - return axios({ - params: { - ...args - }, - url: '/', - method, - data: params || {} - }) + const exemptedAPIs = ['listLdapConfigurations', 'listCapabilities', 'listIdps', 'listApis', 'listInfrastructure', 'listAndSwitchSamlAccount'] + + if ('page' in args || exemptedAPIs.includes(command) || !command.startsWith('list')) { + return axios({ + params: { + ...args + }, + url: '/', + method, + data: params || {} + }) + } + + const pagesize = 10 + let page = 1 + let items = [] + let done = false + let response = null + + while (!done) { + args.page = page + args.pagesize = pagesize + await axios({ + params: { + ...args + }, + url: '/', + method, + data: params || {} + }).then(json => { + var responseName + var objectName + for (const key in json) { + if (key.includes('response')) { + responseName = key + break + } + } + for (const key in json[responseName]) { + if (key === 'count') { + continue + } + objectName = key + break + } + if (json[responseName][objectName]) { + items = items.concat(json[responseName][objectName]) + console.log(command, page, responseName, objectName, items.length, json[responseName].count, 'WIP') + } + if (!json[responseName].count || json[responseName].count === items.length || !json[responseName][objectName]) { + console.log(command, page, responseName, objectName, items.length, json[responseName].count, 'DONE') + done = true + json[responseName][objectName] = items + console.log(json) + response = new Promise((resolve) => { + resolve(json) + }) + return + } + page++ + }).catch(error => { + response = new Promise((resolve, reject) => { + reject(error) + }) + }) + } + return response } export function login (arg) { From 70b3a79831dd299d9078bc9783e6617ec5e8c60f Mon Sep 17 00:00:00 2001 From: davidjumani Date: Wed, 4 Aug 2021 19:49:11 +0530 Subject: [PATCH 2/4] ui: Allow searching in dropdowns --- .../components/header/SamlDomainSwitcher.vue | 5 ++ ui/src/components/view/DedicateDomain.vue | 10 ++- ui/src/components/view/FormView.vue | 7 ++- ui/src/components/view/SearchView.vue | 5 ++ ui/src/views/AutogenView.vue | 17 ++++- ui/src/views/auth/Login.vue | 8 ++- ui/src/views/compute/AssignInstance.vue | 46 ++++++++++++-- ui/src/views/compute/AttachIso.vue | 7 ++- ui/src/views/compute/CreateSnapshotWizard.vue | 8 ++- ui/src/views/compute/DeployVM.vue | 17 ++++- ui/src/views/compute/DestroyVM.vue | 7 ++- ui/src/views/compute/InstanceTab.vue | 23 +++++-- ui/src/views/compute/MigrateVMStorage.vue | 7 ++- ui/src/views/compute/backup/FormSchedule.vue | 14 +++++ .../compute/wizard/MultiDiskSelection.vue | 7 ++- .../compute/wizard/MultiNetworkSelection.vue | 7 ++- ui/src/views/iam/AddAccount.vue | 29 +++++++-- ui/src/views/iam/AddLdapAccount.vue | 41 +++++++++--- ui/src/views/iam/AddUser.vue | 29 +++++++-- ui/src/views/iam/ConfigureSamlSsoAuth.vue | 7 ++- ui/src/views/iam/CreateRole.vue | 14 ++++- ui/src/views/iam/DomainActionForm.vue | 12 +++- ui/src/views/iam/EditUser.vue | 8 ++- ui/src/views/iam/ImportRole.vue | 7 ++- ui/src/views/iam/PermissionEditable.vue | 7 ++- .../views/image/RegisterOrUploadTemplate.vue | 28 +++++++-- .../image/UpdateTemplateIsoPermissions.vue | 31 ++++++++-- ui/src/views/infra/AddPrimaryStorage.vue | 62 ++++++++++++++++--- ui/src/views/infra/AddSecondaryStorage.vue | 12 +++- ui/src/views/infra/ClusterAdd.vue | 27 +++++++- ui/src/views/infra/HostAdd.vue | 34 ++++++++-- ui/src/views/infra/MigrateData.vue | 18 +++++- ui/src/views/infra/PodAdd.vue | 7 ++- .../views/infra/network/DedicatedVLANTab.vue | 28 +++++++-- .../views/infra/network/EditTrafficLabel.vue | 7 ++- .../infra/network/IpRangesTabManagement.vue | 6 +- .../views/infra/network/IpRangesTabPublic.vue | 22 ++++++- .../infra/network/IpRangesTabStorage.vue | 6 +- .../infra/network/ServiceProvidersTab.vue | 7 ++- .../network/providers/AddF5LoadBalancer.vue | 7 ++- .../providers/AddNetscalerLoadBalancer.vue | 7 ++- .../network/providers/AddPaloAltoFirewall.vue | 7 ++- .../network/providers/AddSrxFirewall.vue | 7 ++- ui/src/views/infra/zone/StaticInputsForm.vue | 6 +- .../ZoneWizardPhysicalNetworkSetupStep.vue | 20 +++++- .../infra/zone/ZoneWizardZoneDetailsStep.vue | 19 ++++-- ui/src/views/network/AclListRulesTab.vue | 24 ++++++- ui/src/views/network/CreateVlanIpRange.vue | 6 +- ui/src/views/network/CreateVpc.vue | 14 ++++- .../network/CreateVpnCustomerGateway.vue | 49 ++++++++++++--- ui/src/views/network/EgressRulesTab.vue | 10 ++- ui/src/views/network/EnableStaticNat.vue | 14 ++++- ui/src/views/network/FirewallRules.vue | 10 ++- .../network/IngressEgressRuleConfigure.vue | 7 ++- .../views/network/InternalLBAssignVmForm.vue | 6 +- ui/src/views/network/IpAddressesTab.vue | 12 +++- ui/src/views/network/LoadBalancing.vue | 56 ++++++++++++++--- ui/src/views/network/PortForwarding.vue | 22 ++++++- ui/src/views/network/VpcTab.vue | 26 +++++++- ui/src/views/network/VpcTiersTab.vue | 21 ++++++- ui/src/views/offering/AddComputeOffering.vue | 7 ++- ui/src/views/offering/AddDiskOffering.vue | 7 ++- .../views/offering/ImportBackupOffering.vue | 15 ++++- .../project/AddAccountOrUserToProject.vue | 30 ++++++--- ui/src/views/storage/AttachVolume.vue | 7 ++- .../storage/CreateSnapshotFromVMSnapshot.vue | 6 +- ui/src/views/storage/CreateVolume.vue | 13 +++- ui/src/views/storage/FormSchedule.vue | 22 +++++-- ui/src/views/storage/MigrateVolume.vue | 16 ++++- ui/src/views/storage/ResizeVolume.vue | 6 +- .../storage/RestoreAttachBackupVolume.vue | 15 ++++- ui/src/views/storage/UploadLocalVolume.vue | 14 ++++- 72 files changed, 981 insertions(+), 171 deletions(-) diff --git a/ui/src/components/header/SamlDomainSwitcher.vue b/ui/src/components/header/SamlDomainSwitcher.vue index c19319438351..30c158337194 100644 --- a/ui/src/components/header/SamlDomainSwitcher.vue +++ b/ui/src/components/header/SamlDomainSwitcher.vue @@ -22,6 +22,11 @@ :loading="loading" :defaultValue="currentAccount" :value="currentAccount" + showSearch + optionFilterProp="children" + :filterOption="(input, option) => { + return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 + }" @change="changeAccount" @focus="fetchData" > diff --git a/ui/src/components/view/DedicateDomain.vue b/ui/src/components/view/DedicateDomain.vue index 3cdd80434ad9..91634fd801d7 100644 --- a/ui/src/components/view/DedicateDomain.vue +++ b/ui/src/components/view/DedicateDomain.vue @@ -21,7 +21,15 @@

{{ $t('label.domain') }}*

{{ $t('label.required') }}

- + {{ domain.path || domain.name || domain.description }} diff --git a/ui/src/components/view/FormView.vue b/ui/src/components/view/FormView.vue index 020f280b5407..76a16bec69a5 100644 --- a/ui/src/components/view/FormView.vue +++ b/ui/src/components/view/FormView.vue @@ -52,8 +52,11 @@ rules: [{ required: field.required, message: `${this.$t('message.error.select')}` }] }]" :placeholder="field.description" - - > + showSearch + optionFilterProp="children" + :filterOption="(input, option) => { + return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 + }" > {{ opt.name || opt.description }} diff --git a/ui/src/components/view/SearchView.vue b/ui/src/components/view/SearchView.vue index 0c27e400ecf8..fefd573d3f97 100644 --- a/ui/src/components/view/SearchView.vue +++ b/ui/src/components/view/SearchView.vue @@ -56,6 +56,11 @@ v-decorator="[field.name, { initialValue: fieldValues[field.name] || null }]" + showSearch + optionFilterProp="children" + :filterOption="(input, option) => { + return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 + }" :loading="field.loading"> + @change="changeFilter" + showSearch + optionFilterProp="children" + :filterOption="(input, option) => { + return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 + }" > {{ $t('label.all') }} @@ -211,6 +216,11 @@ }]" :placeholder="field.description" :autoFocus="fieldIndex === firstIndex" + showSearch + optionFilterProp="children" + :filterOption="(input, option) => { + return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 + }" > {{ }} @@ -270,6 +280,11 @@ }]" :placeholder="field.description" :autoFocus="fieldIndex === firstIndex" + showSearch + optionFilterProp="children" + :filterOption="(input, option) => { + return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 + }" > {{ opt.name && opt.type ? opt.name + ' (' + opt.type + ')' : opt.name || opt.description }} diff --git a/ui/src/views/auth/Login.vue b/ui/src/views/auth/Login.vue index 6966d5a5b229..620effe66230 100644 --- a/ui/src/views/auth/Login.vue +++ b/ui/src/views/auth/Login.vue @@ -87,7 +87,13 @@ {{ $t('label.login.single.signon') }} - + {{ idp.orgName }} diff --git a/ui/src/views/compute/AssignInstance.vue b/ui/src/views/compute/AssignInstance.vue index 23da3e2e85dd..085c53fae79d 100644 --- a/ui/src/views/compute/AssignInstance.vue +++ b/ui/src/views/compute/AssignInstance.vue @@ -29,7 +29,15 @@

{{ $t('label.accounttype') }}

- + {{ $t('label.account') }} {{ $t('label.project') }} @@ -37,7 +45,15 @@

*{{ $t('label.domain') }}

- + {{ domain.path || domain.name || domain.description }} @@ -47,7 +63,14 @@