dashboard: single save-all button for the permissions page
Replace the per-row save buttons on the P3RM1SS10NS tab with one
page-level "save all (N agents)" button covering both the capabilities
and tool-groups matrices.
Toggling cells stages edits in the DOM; each checkbox carries its
render-time baseline (data-baseline). On save we diff against the
baseline and POST only the perm-types that actually changed per agent
to the new combined endpoint:
POST /api/permissions { changes: [ { agent, tool_groups?, capabilities? } ] }
An omitted field leaves that perm-type untouched (no commit, no diff);
an included array fully replaces it. The backend coalesces caps + groups
for one agent into a single rebuild — no more double-rebuild when an
operator changes both for the same agent. The batch is atomic: on a
clean 200 the bar shows queued -> rebuilding and re-fetches (resetting
baselines); on any validation error nothing is applied and an error note
is shown.
Live capabilities_changed / tool_groups_changed re-renders are skipped
while the section has unsaved edits so a half-finished edit set is not
clobbered; the tab-activation and post-save re-fetches are the recovery
paths.
Pairs with the hive-c0re combined-PermPayload half (damocles).
This commit is contained in:
parent
df96c21b0c
commit
4297436d94
4 changed files with 208 additions and 91 deletions
|
|
@ -804,9 +804,6 @@ footer .banner-thin {
|
|||
.cap-col {
|
||||
min-width: 5em;
|
||||
}
|
||||
.cap-save-col {
|
||||
min-width: 4em;
|
||||
}
|
||||
.cap-agent-name {
|
||||
color: var(--fg);
|
||||
font-weight: 600;
|
||||
|
|
@ -817,11 +814,6 @@ footer .banner-thin {
|
|||
height: 1em;
|
||||
accent-color: var(--purple);
|
||||
}
|
||||
.cap-save-btn {
|
||||
font-size: 0.78em;
|
||||
padding: 0.2em 0.6em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.cap-row:hover td {
|
||||
background: var(--bg-elev);
|
||||
}
|
||||
|
|
@ -837,12 +829,34 @@ footer .banner-thin {
|
|||
.tg-table thead th { background: var(--bg-elev); color: var(--muted); letter-spacing: 0.05em; white-space: nowrap; }
|
||||
.tg-agent-col { text-align: left !important; min-width: 8em; }
|
||||
.tg-group-col { min-width: 5em; }
|
||||
.tg-save-col { min-width: 4em; }
|
||||
.tg-agent-name { color: var(--fg); font-weight: 600; }
|
||||
.tg-cb { cursor: pointer; width: 1em; height: 1em; accent-color: var(--purple); }
|
||||
.tg-save-btn { font-size: 0.78em; padding: 0.2em 0.6em; white-space: nowrap; }
|
||||
.tg-row:hover td { background: var(--bg-elev); }
|
||||
|
||||
/* ─── permissions save bar (save-all) ──────────────────────────────
|
||||
One page-level save button for the whole P3RM1SS10NS tab. Sticks to
|
||||
the bottom of the pane so it stays reachable while scrolling a long
|
||||
agent×perm matrix. Disabled (dim) until an edit makes the page dirty;
|
||||
the (N agents) count in the label reflects how many agents will
|
||||
rebuild. `#perm-save-note` carries the transient rebuilding/error
|
||||
line beside it. */
|
||||
.perm-save-bar {
|
||||
position: sticky;
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.8em;
|
||||
margin-top: 1em;
|
||||
padding: 0.7em 0;
|
||||
background: var(--bg);
|
||||
border-top: 1px solid var(--border);
|
||||
}
|
||||
.perm-save-bar .btn:disabled {
|
||||
opacity: 0.45;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
.perm-save-err { color: var(--red); }
|
||||
|
||||
/* ─── scheduled prompts tab ────────────────────────────────────────
|
||||
Creation form at the top, list of queued schedule cards below. */
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue