fix(iwooos): render structured cockpit loading state
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m56s
CD Pipeline / build-and-deploy (push) Successful in 15m3s
AWOOOI Harbor 110 Local Repair / workflow-shape (push) Successful in 3s
AWOOOI Harbor 110 Local Repair / harbor-110-local-repair (push) Successful in 21s
CD Pipeline / post-deploy-checks (push) Successful in 3m3s

This commit is contained in:
ogt
2026-07-14 19:37:01 +08:00
parent dbf8d0255e
commit 6960d39197

View File

@@ -70,6 +70,7 @@ type Copy = {
failedCollectors: string;
failedCollectorsUnavailable: string;
sameRunMissing: string;
loading: string;
unavailable: string;
refresh: string;
};
@@ -120,6 +121,7 @@ const COPY: Record<"zh" | "en", Copy> = {
failedCollectors: "失敗 Collector",
failedCollectorsUnavailable: "失敗原因待安全分類",
sameRunMissing: "尚無同 run 閉環證據",
loading: "正在載入資安控制平面",
unavailable: "Live readback 無法取得",
refresh: "重新整理資安控制平面",
},
@@ -168,6 +170,7 @@ const COPY: Record<"zh" | "en", Copy> = {
failedCollectors: "Failed collectors",
failedCollectorsUnavailable: "Failure detail awaiting safe classification",
sameRunMissing: "No same-run closure evidence",
loading: "Loading security control plane",
unavailable: "Live readback unavailable",
refresh: "Refresh security control plane",
},
@@ -1016,7 +1019,38 @@ export function SecurityAssetControlPlaneCockpit({
</div>
</div>
) : (
<div className="h-64 animate-pulse bg-[#ebe8df]" />
<div
className="space-y-px bg-[#d8d3c7] p-px"
role="status"
aria-label={copy.loading}
>
<span className="sr-only">{copy.loading}</span>
<div className="grid grid-cols-3 gap-px lg:grid-cols-6">
{Array.from({ length: 6 }, (_, index) => (
<div
key={index}
className="h-16 animate-pulse bg-white px-3 py-3"
aria-hidden="true"
>
<div className="h-2 w-3/5 bg-[#e5e1d7]" />
<div className="mt-3 h-4 w-2/5 bg-[#d8d3c7]" />
</div>
))}
</div>
<div className="grid gap-px sm:grid-cols-2">
{Array.from({ length: 2 }, (_, index) => (
<div
key={index}
className="h-24 animate-pulse bg-[#f8f7f3] p-3"
aria-hidden="true"
>
<div className="h-2 w-1/3 bg-[#d8d3c7]" />
<div className="mt-3 h-2 w-full bg-[#e5e1d7]" />
<div className="mt-2 h-2 w-4/5 bg-[#e5e1d7]" />
</div>
))}
</div>
</div>
)}
</section>
);