()
| 515 | const guestRpcCall: JsonRpcCall = (method, params) => baseRpcCall(`/guest/${method}`, params); |
| 516 | |
| 517 | async function loadVMList() { |
| 518 | try { |
| 519 | const request: VmmTypes.IStatusRequest = { |
| 520 | brief: true, |
| 521 | keyword: searchQuery.value || undefined, |
| 522 | page: currentPage.value, |
| 523 | page_size: pageSize.value, |
| 524 | }; |
| 525 | const data = await vmmRpc.status(request); |
| 526 | totalVMs.value = data.total || data.vms.length; |
| 527 | hasMorePages.value = data.vms.length === pageSize.value && totalVMs.value > currentPage.value * pageSize.value; |
| 528 | |
| 529 | const previousVmMap = new Map<string, VmListItem>(vms.value.map((vmItem: VmListItem) => [vmItem.id, vmItem])); |
| 530 | vms.value = (data.vms as VmListItem[]).map((vm) => { |
| 531 | const previousVm = previousVmMap.get(vm.id); |
| 532 | if (previousVm) { |
| 533 | return { |
| 534 | ...vm, |
| 535 | configuration: previousVm.configuration, |
| 536 | appCompose: previousVm.appCompose, |
| 537 | }; |
| 538 | } |
| 539 | return vm; |
| 540 | }); |
| 541 | |
| 542 | config.value = { portMappingEnabled: data.port_mapping_enabled }; |
| 543 | |
| 544 | if (expandedVMs.value.size > 0) { |
| 545 | await refreshExpandedVMs(); |
| 546 | } |
| 547 | } catch (error) { |
| 548 | recordError('error loading vm list', error); |
| 549 | } |
| 550 | } |
| 551 | |
| 552 | async function refreshExpandedVMs() { |
| 553 | try { |
no test coverage detected