Collapse passed provisioning checks (Refs #83)

This commit is contained in:
2026-10-09 11:32:23 -04:00
parent 485a73c422
commit 43c1a32065
4 changed files with 60 additions and 5 deletions
@@ -20,14 +20,15 @@
{#if groups.length}
<ol class="phases">
{#each groups as group (group.key)}
{@const defaultOpen = detail.deployment.state !== 'done' || group.steps.some(step => step.state === 'failed' || step.checks.some(check => check.result !== 'pass'))}
<li class:current={active && (group.state === 'current' || group.state === 'waiting')} class:failed={group.state === 'failed'}>
<details open={expanded[group.key] ?? true}>
<details open={expanded[group.key] ?? defaultOpen}>
<summary
onclick={event => { event.preventDefault(); expanded[group.key] = !(expanded[group.key] ?? true); }}
onclick={event => { event.preventDefault(); expanded[group.key] = !(expanded[group.key] ?? defaultOpen); }}
onkeydown={event => {
if (event.key !== 'Enter' && event.key !== ' ') return;
event.preventDefault();
if (!event.repeat) expanded[group.key] = !(expanded[group.key] ?? true);
if (!event.repeat) expanded[group.key] = !(expanded[group.key] ?? defaultOpen);
}}
>
<span class="phase-icon state-{group.state}" aria-hidden="true">{progressIcons[group.state]}</span>
+3 -1
View File
@@ -125,6 +125,8 @@ export function provisioningOutcome(detail: ProvisioningDetail) {
const { deployment: operation, progress } = detail;
const active = activeProvisioningStates.includes(operation.state);
const failure = ['failed', 'interrupted'].includes(operation.state);
const checksSummary = operation.state === 'done' && progress?.checks.length && progress.checks.every(check => check.result === 'pass')
? `All ${countLabel(progress.checks.length, 'check')} passed` : null;
const headline = operation.state === 'done' ? actionCompleted[operation.action]
: operation.state === 'cancelled' ? `${actionLabels[operation.action]} request cancelled`
: failure ? `${actionLabels[operation.action]} ${operation.state === 'interrupted' ? 'interrupted' : 'failed'}`
@@ -160,7 +162,7 @@ export function provisioningOutcome(detail: ProvisioningDetail) {
else description = operation.action === 'destroy' ? 'Removal is in progress. Confirmed checkpoints and remaining cleanup are recorded below.'
: operation.action === 'rebuild' ? 'The old instance is removed before a fresh instance is created in its reserved slot. Follow each checkpoint below.'
: 'The worker is executing this request and checking its resulting state.';
return { active, headline, description };
return { active, headline, description, checksSummary };
}
/** Accept return context only from the local operation surfaces we expose. */