feat(#1098): replace deployed:hash chip with config link in three-dot menu
Remove the deployed sha plain-text badge from the card head. Add a forge-linked menu item to the three-dot menu instead: 'deployed:abc123def012 ↗' opens agent-configs/<name>/commit/<sha> on the hive forge in a new tab. Only shown when both c.deployed_sha and forgeBase are present. buildAgentMenu now takes forgeBase as second arg; call site passes the same forgeBase computed for nav-strip links. CSS: add text-decoration: none + box-sizing to .agent-menu-item so <a> link items render identically to the <button> items.
This commit is contained in:
parent
d96a924d77
commit
b13a6911b7
2 changed files with 20 additions and 7 deletions
|
|
@ -415,6 +415,8 @@ body.dashboard-shell {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
padding: 0.4em 0.9em;
|
padding: 0.4em 0.9em;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
text-decoration: none;
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
.agent-menu-item:hover {
|
.agent-menu-item:hover {
|
||||||
background: var(--border);
|
background: var(--border);
|
||||||
|
|
|
||||||
|
|
@ -381,7 +381,7 @@ window.marked = marked;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildAgentMenu(c) {
|
function buildAgentMenu(c, forgeBase) {
|
||||||
const wrap = el('div', { class: 'agent-menu' });
|
const wrap = el('div', { class: 'agent-menu' });
|
||||||
const btn = el('button', {
|
const btn = el('button', {
|
||||||
type: 'button',
|
type: 'button',
|
||||||
|
|
@ -444,6 +444,20 @@ window.marked = marked;
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (c.deployed_sha && forgeBase) {
|
||||||
|
const li = el('li', { role: 'presentation' });
|
||||||
|
const a = el('a', {
|
||||||
|
class: 'agent-menu-item',
|
||||||
|
href: `${forgeBase}/agent-configs/${encodeURIComponent(c.name)}/commit/${c.deployed_sha}`,
|
||||||
|
target: '_blank',
|
||||||
|
rel: 'noopener',
|
||||||
|
role: 'menuitem',
|
||||||
|
title: 'deployed config commit on forge',
|
||||||
|
}, `deployed:${c.deployed_sha} ↗`);
|
||||||
|
li.append(a);
|
||||||
|
dropdown.append(menuSep(), li);
|
||||||
|
}
|
||||||
|
|
||||||
btn.addEventListener('click', (e) => {
|
btn.addEventListener('click', (e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
const wasHidden = dropdown.hidden;
|
const wasHidden = dropdown.hidden;
|
||||||
|
|
@ -779,11 +793,8 @@ window.marked = marked;
|
||||||
{}, { noRefresh: true },
|
{}, { noRefresh: true },
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
if (c.deployed_sha) {
|
|
||||||
head.append(el('span',
|
|
||||||
{ class: 'meta', title: 'sha currently locked in /meta/flake.lock' },
|
|
||||||
`deployed:${c.deployed_sha}`));
|
|
||||||
}
|
|
||||||
if (c.pending_reminders && c.pending_reminders > 0) {
|
if (c.pending_reminders && c.pending_reminders > 0) {
|
||||||
head.append(el('span',
|
head.append(el('span',
|
||||||
{
|
{
|
||||||
|
|
@ -838,7 +849,7 @@ window.marked = marked;
|
||||||
// chip in the head row stays — it's a state-hint, not an
|
// chip in the head row stays — it's a state-hint, not an
|
||||||
// action button.
|
// action button.
|
||||||
|
|
||||||
li.append(icon, body, buildAgentMenu(c));
|
li.append(icon, body, buildAgentMenu(c, forgeBase));
|
||||||
ul.append(li);
|
ul.append(li);
|
||||||
}
|
}
|
||||||
root.append(ul);
|
root.append(ul);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue