diff --git a/admin/slices/agent/peer/components/peer/Delegations.vue b/admin/slices/agent/peer/components/peer/Delegations.vue
index 6211f3ef..4f4da467 100644
--- a/admin/slices/agent/peer/components/peer/Delegations.vue
+++ b/admin/slices/agent/peer/components/peer/Delegations.vue
@@ -212,7 +212,7 @@ function toggle(id: string) {
-
+
·
{{ duration(row.durationMs) }}
();
const emit = defineEmits<{ 'update:open': [value: boolean]; connected: [] }>();
@@ -64,8 +68,14 @@ watch(
},
);
-async function select(candidate: IAgentPeerCandidate) {
- if (candidate.connected) return;
+async function toggle(candidate: IAgentPeerCandidate) {
+ if (candidate.connected || connecting.value) return;
+ if (selected.value?.id === candidate.id) {
+ selected.value = null;
+ preview.value = null;
+ error.value = null;
+ return;
+ }
selected.value = candidate;
preview.value = null;
error.value = null;
@@ -114,8 +124,8 @@ function statusVariant(status: string) {
Add peer
- Agents on this ranch this one isn't connected to yet. Connecting is
- one-way.
+ Agents on this ranch this one isn't connected to yet. Click an agent
+ to read its card, then connect.
@@ -142,7 +152,7 @@ function statusVariant(status: string) {
selected?.id === candidate.id ? 'bg-muted/60' : '',
]"
:disabled="candidate.connected"
- @click="select(candidate)"
+ @click="toggle(candidate)"
>
@@ -159,7 +169,46 @@ function statusVariant(status: string) {
connected
+
+
+ Info
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ connecting ? 'Connecting…' : `Connect «${candidate.name}»`
+ }}
+
+
+
{{ error }}
+
@@ -169,27 +218,6 @@ function statusVariant(status: string) {
No unconnected agents left on this ranch.
-
-
-
-
-
-
-
-
-
-
- {{ connecting ? 'Connecting…' : `Connect «${selected.name}»` }}
-
-
-
-
- {{ error }}
diff --git a/admin/slices/agent/peer/components/peer/Row.vue b/admin/slices/agent/peer/components/peer/Row.vue
index f3ce52ba..f5fc0850 100644
--- a/admin/slices/agent/peer/components/peer/Row.vue
+++ b/admin/slices/agent/peer/components/peer/Row.vue
@@ -183,11 +183,8 @@ const failReason = computed(() => {
Advertises nothing — this agent has no way to tell when to ask it.
-
- card read
-
+
+ card read
diff --git a/admin/slices/common/components/date/TimeAgoInline.vue b/admin/slices/common/components/date/TimeAgoInline.vue
new file mode 100644
index 00000000..0b142675
--- /dev/null
+++ b/admin/slices/common/components/date/TimeAgoInline.vue
@@ -0,0 +1,19 @@
+
+