feat: add warning message when disabling a device that have not been detached in the backend (#675)

* feat: add wanring message when disabling a device that haven not been detached in the backend

Signed-off-by: Jack Yu <jack.yu@suse.com>

* fix: remove unused en-us key

Signed-off-by: Jack Yu <jack.yu@suse.com>

---------

Signed-off-by: Jack Yu <jack.yu@suse.com>
This commit is contained in:
Jack Yu
2026-01-26 14:07:28 +08:00
committed by GitHub
parent 0647600e88
commit 0781bde188
10 changed files with 109 additions and 1 deletions
@@ -144,6 +144,12 @@ export default class PCIDevice extends SteveModel {
// 'disable' passthrough deletes claim
// backend should return error if device is in use
async disablePassthrough() {
if (!this.allowDisable) {
this.showDetachWarning();
return;
}
try {
if (!this.claimedByMe) {
throw new Error(this.$rootGetters['i18n/t']('harvester.pci.cantUnclaim', { name: escapeHtml(this.metadata.name) }));
@@ -169,4 +175,20 @@ export default class PCIDevice extends SteveModel {
get groupByDevice() {
return this.status?.description;
}
showDetachWarning() {
this.$dispatch('growl/warning', {
title: this.$rootGetters['i18n/t']('harvester.pci.detachWarning.title'),
message: this.$rootGetters['i18n/t']('harvester.pci.detachWarning.message'),
timeout: 5000
}, { root: true });
}
get allowDisable() {
return this._allowDisable;
}
set allowDisable(value) {
this._allowDisable = value;
}
}
@@ -133,6 +133,12 @@ export default class USBDevice extends SteveModel {
// 'disable' passthrough deletes claim
// backend should return error if device is in use
async disablePassthrough() {
if (!this.allowDisable) {
this.showDetachWarning();
return;
}
try {
if (!this.claimedByMe) {
throw new Error(this.$rootGetters['i18n/t']('harvester.usb.cantUnclaim', { name: escapeHtml(this.metadata.name) }));
@@ -158,4 +164,20 @@ export default class USBDevice extends SteveModel {
get groupByDevice() {
return this.status?.description;
}
showDetachWarning() {
this.$dispatch('growl/warning', {
title: this.$rootGetters['i18n/t']('harvester.usb.detachWarning.title'),
message: this.$rootGetters['i18n/t']('harvester.usb.detachWarning.message'),
timeout: 5000
}, { root: true });
}
get allowDisable() {
return this._allowDisable;
}
set allowDisable(value) {
this._allowDisable = value;
}
}
@@ -100,6 +100,12 @@ export default class VGpuDevice extends SteveModel {
}
async disableVGpu() {
if (!this.allowDisable) {
this.showDetachWarning();
return;
}
const { vGPUTypeName, enabled } = this.spec;
try {
@@ -126,4 +132,20 @@ export default class VGpuDevice extends SteveModel {
get vGpuAvailableTypes() {
return this.status?.availableTypes ? Object.keys(this.status.availableTypes) : [];
}
showDetachWarning() {
this.$dispatch('growl/warning', {
title: this.$rootGetters['i18n/t']('harvester.vgpu.detachWarning.title'),
message: this.$rootGetters['i18n/t']('harvester.vgpu.detachWarning.message'),
timeout: 5000
}, { root: true });
}
get allowDisable() {
return this._allowDisable;
}
set allowDisable(value) {
this._allowDisable = value;
}
}