From facddcb9a724e139075e36a6d605e089b1247caf Mon Sep 17 00:00:00 2001 From: Andy Lee Date: Fri, 31 Jul 2026 14:03:27 +0800 Subject: [PATCH] feat: add selected all | clear all actions for selected VM Signed-off-by: Andy Lee --- .../components/vm-migration/SelectVmsStep.vue | 66 +++++++++++++++++-- pkg/harvester/l10n/en-us.yaml | 1 + 2 files changed, 63 insertions(+), 4 deletions(-) diff --git a/pkg/harvester/components/vm-migration/SelectVmsStep.vue b/pkg/harvester/components/vm-migration/SelectVmsStep.vue index 6ec93f03..cd55be06 100644 --- a/pkg/harvester/components/vm-migration/SelectVmsStep.vue +++ b/pkg/harvester/components/vm-migration/SelectVmsStep.vue @@ -94,7 +94,7 @@ const showSelectAllBanner = computed(() => { const theadElement = computed(() => sortableTableRef.value?.$el?.querySelector('thead')); -const headers = [ +const headers = ref([ { name: 'vmName', labelKey: 'harvester.addons.vmMigration.selectVms.columns.vmName', @@ -139,7 +139,7 @@ const headers = [ subLabel: t('harvester.addons.vmMigration.generic.identifier'), width: 200, }, -]; +]); const buildTableRows = () => { return discoveredVMs.value.map((vm) => { @@ -190,6 +190,7 @@ const buildTableRows = () => { return { _original: vm, _key: vm.id || vm.vmId || vm.metadata?.name, + selectedSort: selectedVMIds.value.has(vm.id) ? 0 : 1, vmName: vm.name || vm.metadata?.name || '-', vmId: vm.id || vm.vmId || vm.metadata?.name || '-', os: vm.guestName || vm.guestOS || vm.os || '-', @@ -243,6 +244,29 @@ const clearSelection = () => { }); }; +// Re-sorts the table so currently-selected VMs appear on the first pages. +const showSelectedFirst = () => { + if (selectedVMIds.value.size === 0) { + return; + } + + tableRows.value.forEach((row) => { + row.selectedSort = selectedVMIds.value.has(row._original?.id) ? 0 : 1; + }); + + headers.value = headers.value.map((h) => ( + h.name === 'vmName' ? { ...h, sort: ['selectedSort', 'vmName'] } : h + )); + + nextTick(() => { + const table = sortableTableRef.value; + + if (table) { + table.page = 1; + } + }); +}; + const selectAllVMs = () => { allVMsSelected.value = true; selectedVMIds.value = new Set(discoveredVMs.value.map((vm) => vm.id)); @@ -450,7 +474,24 @@ init();

{{ t('harvester.addons.vmMigration.selectVms.availableVms') }}

- {{ selectedCount }} {{ t('harvester.addons.vmMigration.selectVms.selected') }} + + + {{ selectedCount }} {{ t('harvester.addons.vmMigration.selectVms.selected') }} + + +