diff --git a/webclient-vue/src/composables/useAreaAssign.js b/webclient-vue/src/composables/useAreaAssign.js index 2059797..8893adb 100644 --- a/webclient-vue/src/composables/useAreaAssign.js +++ b/webclient-vue/src/composables/useAreaAssign.js @@ -16,9 +16,13 @@ const assignLoading = ref(false); const assignError = ref(""); + const unassignLoading = ref(false); + const unassignError = ref(""); + function openAssign(currentAreaId) { selectedAreaId.value = currentAreaId ? String(currentAreaId) : ""; assignError.value = ""; + unassignError.value = ""; showAssignModal.value = true; } @@ -41,13 +45,35 @@ return result; } + async function submitUnassignCore(itemId, unassignFn) { + if (!itemId || !unassignFn) { + return; + } + unassignLoading.value = true; + unassignError.value = ""; + + const result = await unassignFn(itemId); + unassignLoading.value = false; + + if (!result.ok) { + unassignError.value = result.error?.message || "Failed to unassign"; + return result; + } + + showAssignModal.value = false; + return result; + } + return { areaOptions, showAssignModal, selectedAreaId, assignLoading, assignError, + unassignLoading, + unassignError, openAssign, submitAssignCore, + submitUnassignCore, }; } diff --git a/webclient-vue/src/features/areas/pages/AreaDetailPage.vue b/webclient-vue/src/features/areas/pages/AreaDetailPage.vue index 2a55d2a..36eb8e2 100644 --- a/webclient-vue/src/features/areas/pages/AreaDetailPage.vue +++ b/webclient-vue/src/features/areas/pages/AreaDetailPage.vue @@ -106,16 +106,25 @@ :options="parentAreaOptions" icon="ph-map-trifold" /> -
- {{ assignError }} +
+ {{ assignError || unassignError }}