fix(ui): Integrate webhooks panel into status panel
All checks were successful
Build and Push Docker Image / build (push) Successful in 27s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 59s
CI / Security audit (push) Successful in 1m21s
CI / Tests & coverage (push) Successful in 1m35s

The webhooks panel was appearing separately from the status panel.
Now it's properly nested inside the status-panel div:

- Moved webhooks-section inside status-panel in HTML
- Updated CSS so nested webhooks looks like a subsection (no double borders)
- Simplified JS toggle logic - webhooks shows/hides automatically with status panel
- Admin users see webhooks inside status panel, collapsed by default
This commit is contained in:
2026-05-19 22:24:15 +01:00
parent 2469c3e3f4
commit e2757768c7
3 changed files with 19 additions and 9 deletions

View File

@@ -772,20 +772,22 @@ async function toggleStatusPanel() {
const panel = document.getElementById('status-panel');
const webhooksSection = document.getElementById('webhooks-section');
if (panel.style.display !== 'none') {
// Close both panels (webhooks is nested, but hide explicitly)
panel.style.display = 'none';
if (webhooksSection) webhooksSection.style.display = 'none';
if (statusRefreshHandle) { clearInterval(statusRefreshHandle); statusRefreshHandle = null; }
return;
}
// Open status panel (contains webhooks nested inside)
panel.style.display = 'block';
// Show webhooks section for admin users (collapsed by default)
if (webhooksSection && isAdmin) {
webhooksSection.style.display = '';
// Ensure webhooks section starts collapsed
webhooksSection.style.display = 'block';
webhookSectionExpanded = false;
document.getElementById('webhooks-content').style.display = 'none';
document.getElementById('webhooks-toggle').classList.remove('expanded');
await fetchWebhookStatus();
} else if (webhooksSection) {
webhooksSection.style.display = 'none';
}
await refreshStatusPanel();
if (statusRefreshHandle) clearInterval(statusRefreshHandle);
@@ -794,8 +796,6 @@ async function toggleStatusPanel() {
function closeStatusPanel() {
document.getElementById('status-panel').style.display = 'none';
const webhooksSection = document.getElementById('webhooks-section');
if (webhooksSection) webhooksSection.style.display = 'none';
if (statusRefreshHandle) { clearInterval(statusRefreshHandle); statusRefreshHandle = null; }
}

View File

@@ -68,10 +68,9 @@
</div>
</header>
<div id="status-panel" class="status-panel" style="display: none;"></div>
<!-- Webhooks Configuration Panel (inline with status) -->
<div class="webhooks-section" id="webhooks-section" style="display: none;">
<div id="status-panel" class="status-panel" style="display: none;">
<!-- Webhooks Configuration Panel (nested inside status) -->
<div class="webhooks-section" id="webhooks-section" style="display: none;">
<div class="webhooks-header" id="webhooks-header">
<h2>⚡ Webhooks Configuration</h2>
<span class="webhooks-toggle" id="webhooks-toggle"></span>
@@ -128,6 +127,7 @@
</div>
</div>
</div>
</div>
<div id="error-message" class="error-message" style="display: none;"></div>

View File

@@ -1528,6 +1528,16 @@ body {
overflow: hidden;
}
/* When nested inside status-panel, remove outer styling and look like a subsection */
.status-panel > .webhooks-section {
background: transparent;
border: none;
border-radius: 0;
box-shadow: none;
margin-bottom: 0;
border-top: 1px solid var(--border);
}
.webhooks-header {
padding: 16px 20px;
background: var(--surface-alt);