diff --git a/management-ui/src/customcompometns/AdminDeviceDropdown.vue b/management-ui/src/customcompometns/AdminDeviceDropdown.vue
index 9195329..af6f5dc 100644
--- a/management-ui/src/customcompometns/AdminDeviceDropdown.vue
+++ b/management-ui/src/customcompometns/AdminDeviceDropdown.vue
@@ -12,12 +12,8 @@ import { Ellipsis } from 'lucide-vue-next'
import type { Device, Users } from '@/lib/interfaces'
// import { api } from '@/lib/api'
-const props = defineProps<{
- row: Device
- allUsers?: Users[]
- onRowUpdated?: (row: Device, payload: { name: string; userIds: string[] }) => void
- onRowDeleted?: (row: Device) => void
-}>() // ← accept full row
+
+const props = defineProps<{ row: Device; allUsers?: Users[] }>()
const isEditOpen = ref(false)
const isDeleteOpen = ref(false)
@@ -32,13 +28,11 @@ const emit = defineEmits<{
function onDeleteConfirmed() {
// await api.delete(`/devices/${encodeURIComponent(props.row.guid)}`)
isDeleteOpen.value = false
- // emit('refresh')
- props.onRowDeleted?.(props.row)
+ emit('deleted')
}
function onEditConfirm(_payload: { name: string; userIds: string[] }) {
isEditOpen.value = false
- // emit('refresh')
- props.onRowUpdated?.(props.row, _payload)
+ emit('updated', _payload)
}
function onTaskConfirm() {
diff --git a/management-ui/src/customcompometns/AdminTrackerDropdown.vue b/management-ui/src/customcompometns/AdminTrackerDropdown.vue
new file mode 100644
index 0000000..6362f69
--- /dev/null
+++ b/management-ui/src/customcompometns/AdminTrackerDropdown.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+ Rename
+ Tasks
+ Certificates
+ Delete
+
+
+
+
+
+
+
+
diff --git a/management-ui/src/customcompometns/Admincomponent.vue b/management-ui/src/customcompometns/Admincomponent.vue
index 3077630..74dc469 100644
--- a/management-ui/src/customcompometns/Admincomponent.vue
+++ b/management-ui/src/customcompometns/Admincomponent.vue
@@ -3,6 +3,7 @@ import { Tabs, TabsContent, TabsTrigger, TabsList } from '@/components/ui/tabs'
import DataTableNoCheckbox from './DataTableNoCheckbox.vue'
import AdminUserDropdonw from './AdminUserDropdonw.vue'
import AdminDeviceDropdown from './AdminDeviceDropdown.vue'
+import AdminTrackerDropdown from './AdminTrackerDropdown.vue'
import type { Device, Users } from '@/lib/interfaces'
import { Button } from '@/components/ui/button'
import { onBeforeUnmount, onMounted, ref, computed } from 'vue'
@@ -208,8 +209,8 @@ onBeforeUnmount(() => {
:columns="device_columns"
:data="device_data"
:dropdownComponent="AdminDeviceDropdown"
- :onRowUpdated="handleDeviceUpdated"
- :onRowDeleted="handleDeviceDeleted"
+ @row-updated="handleDeviceUpdated"
+ @row-deleted="handleDeviceDeleted"
:dropdownProps="{ allUsers: user_data }"
/>
@@ -218,9 +219,9 @@ onBeforeUnmount(() => {
diff --git a/management-ui/src/customcompometns/EditDeviceDialog.vue b/management-ui/src/customcompometns/EditDeviceDialog.vue
index a517cfa..3f748a7 100644
--- a/management-ui/src/customcompometns/EditDeviceDialog.vue
+++ b/management-ui/src/customcompometns/EditDeviceDialog.vue
@@ -67,11 +67,6 @@ function initFromDevice() {
selectedUserIds.value = [...originalIds.value]
initedForGuid.value = guid.value
- console.log('[EditDeviceDialog:init]', {
- guid: guid.value,
- originalName: originalName.value,
- originalIds: [...originalIds.value],
- })
}
// When dialog opens, initialize once for this guid
@@ -89,16 +84,6 @@ watch(
{ immediate: true }
)
-// If allUsers arrives later AND we haven't successfully initialized for this guid,
-// try again (but only when open).
-// watch(
-// () => props.allUsers,
-// () => {
-// if (props.modelValue && guid.value && initedForGuid.value !== guid.value) {
-// initFromDevice()
-// }
-// }
-// )
// If allUsers arrives later, and we couldn't map on first init, map now.
watch(
@@ -129,17 +114,12 @@ watch(
if (mapped.length > 0) {
originalIds.value = mapped
selectedUserIds.value = [...mapped]
- console.log('[EditDeviceDialog:remap-after-allUsers]', { mapped })
}
}
},
{ immediate: false }
)
-// Just to see live edits from AssignDevice
-watch(selectedUserIds, (v) => {
- console.log('[EditDeviceDialog:selectedUserIds]', [...v])
-}, { deep: true })
// ---------- Save ----------
const saving = ref(false)
@@ -161,11 +141,6 @@ async function onSave() {
errorText.value = null
saving.value = true
try {
- console.log('[EditDeviceDialog:compare]', {
- originalIds: [...originalIds.value],
- selectedUserIds: [...selectedUserIds.value],
- })
-
const ops: Promise[] = []
const nameChanged = changedName()
@@ -195,7 +170,6 @@ async function onSave() {
emit('updated', { name: name.value, userIds: [...selectedUserIds.value] })
emit('update:modelValue', false)
} catch (err: any) {
- console.error('[EditDeviceDialog:onSave] error', err)
errorText.value = err?.response?.data?.message || 'Failed to save changes.'
} finally {
saving.value = false
diff --git a/management-ui/src/customcompometns/EditTrackerDialog.vue b/management-ui/src/customcompometns/EditTrackerDialog.vue
new file mode 100644
index 0000000..f9b0f71
--- /dev/null
+++ b/management-ui/src/customcompometns/EditTrackerDialog.vue
@@ -0,0 +1,216 @@
+
+
+
+
+