diff --git a/webclient-vue/src/features/areas/pages/AreaDetailPage.vue b/webclient-vue/src/features/areas/pages/AreaDetailPage.vue
index c2e0694..6da2843 100644
--- a/webclient-vue/src/features/areas/pages/AreaDetailPage.vue
+++ b/webclient-vue/src/features/areas/pages/AreaDetailPage.vue
@@ -121,16 +121,22 @@
-
+ >
+
Description
{{ device.description }}
@@ -147,16 +151,22 @@
-
+ >
+
{{ removeDialogMessage }}
+
+ {{ removeError }}
+
+
+ Cancel
+
+ Remove
+
+
+
@@ -175,7 +185,6 @@
GnAlert,
GnTable,
GnSelect,
- GnConfirmDialog,
} from "gnexus-ui-kit/vue";
import AppEmptyState from "../../../components/feedback/AppEmptyState.vue";
import AppErrorState from "../../../components/feedback/AppErrorState.vue";
@@ -221,6 +230,9 @@
const showRemoveDialog = ref(false);
const removeDialogMessage = ref("");
+const removeLoading = ref(false);
+const removeError = ref("");
+const rebootError = ref("");
const channelColumns = [
{ key: "channel", label: "Channel" },
@@ -291,18 +303,36 @@
function remove() {
if (!device.value) return;
removeDialogMessage.value = `Are you sure you want to remove device "${device.value.name || device.value.alias}"?`;
+ removeError.value = "";
showRemoveDialog.value = true;
}
async function submitRemove() {
const id = deviceId.value;
- await devicesStore.removeDevice(id);
+ removeLoading.value = true;
+ removeError.value = "";
+
+ const result = await devicesStore.removeDevice(id);
+ removeLoading.value = false;
+
+ if (!result.ok) {
+ removeError.value = result.error?.message || "Failed to remove device";
+ return;
+ }
+
+ showRemoveDialog.value = false;
router.push({ name: "devices" });
}
-function reboot() {
+async function reboot() {
if (!device.value) return;
- devicesStore.rebootDevice(device.value.id);
+ rebootError.value = "";
+
+ const result = await devicesStore.rebootDevice(device.value.id);
+
+ if (!result.ok) {
+ rebootError.value = result.error?.message || "Failed to reboot device";
+ }
}
async function loadStatus() {
diff --git a/webclient-vue/src/features/scripts/pages/ScriptDetailPage.vue b/webclient-vue/src/features/scripts/pages/ScriptDetailPage.vue
index c6f994f..9dbc287 100644
--- a/webclient-vue/src/features/scripts/pages/ScriptDetailPage.vue
+++ b/webclient-vue/src/features/scripts/pages/ScriptDetailPage.vue
@@ -334,12 +334,26 @@
const id = scriptId.value;
if (!id) return;
+ let result;
if (isAction.value) {
- await scriptsStore.setActionState(id, enabled);
+ result = await scriptsStore.setActionState(id, enabled);
} else if (isRegular.value) {
- await scriptsStore.setRegularState(id, enabled);
+ result = await scriptsStore.setRegularState(id, enabled);
} else if (isScope.value) {
- await scriptsStore.setScopeState(id, enabled);
+ result = await scriptsStore.setScopeState(id, enabled);
+ }
+
+ if (result && !result.ok) {
+ resultAlert.value = {
+ variant: "danger",
+ title: `Failed to ${enabled ? "enable" : "disable"} ${script.value?.alias || id}`,
+ message: result.error?.message || "Unknown error",
+ };
+ } else if (result) {
+ resultAlert.value = {
+ variant: "success",
+ title: `${enabled ? "Enabled" : "Disabled"} ${script.value?.alias || id}`,
+ };
}
}