feat(frontend): manage Cognito users and groups, and test sign-in
CI / checks (pull_request) Failing after 12m24s

The Cognito panel gains a test sign-in that shows the decoded ID and
access token claims, a groups section, and a per-user panel to enable or
disable, confirm, sign out everywhere, reset or set a password and change
group membership.

Delete confirmations (row and bulk) now say what else goes, driven by
the schema's deleteImpact, and the inspector follows list refreshes
instead of the click-time snapshot.
This commit is contained in:
Zakaria
2026-10-23 17:54:15 -04:00
parent 43f4cae9b5
commit bafe799d00
15 changed files with 773 additions and 16 deletions
@@ -23,6 +23,7 @@ import { StorageObjectBrowser } from "@/components/StorageObjectBrowser";
import { S3BucketWebsitePanel } from "@/components/S3BucketWebsitePanel";
import { ComputePanel, LaunchInstanceForm } from "@/components/ComputePanel";
import { NetworkingPanel } from "@/components/NetworkingPanel";
import { describeDeleteImpact } from "@/lib/deleteImpact";
import { getPath } from "@/lib/resourcePath";
import {
capabilityEnabled,
@@ -574,12 +575,14 @@ export function DynamicResourceView({
const resources = resourcesQuery.data ?? [];
const canCreate = schema.actions.includes("create");
const canDelete = schema.actions.includes("delete");
const deleteImpactText = describeDeleteImpact(schema.deleteImpact, selectedItems);
const isAllSelected =
resources.length > 0 &&
resources.every((r) => selectedItems.some((s) => s.id === r.id));
// Prefer the latest listed copy, so the inspector follows refreshes instead of the click-time snapshot.
const activeSelected =
selected?.cloud === cloud && selected.service === service
? selected
? resources.find((resource) => resource.id === selected.id) ?? selected
: undefined;
const runtimeReachable = cloudStatus?.runtime === "reachable";
const resourceCapabilityInputs =
@@ -744,6 +747,9 @@ export function DynamicResourceView({
{canDelete && (
deleteConfirm ? (
<>
{deleteImpactText && (
<span className="delete-impact" role="status">{deleteImpactText}</span>
)}
<button
className="button danger"
type="button"