import { useEffect, useState } from "react"; import { House, ShieldCheck, ImagePlus, X } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Separator } from "@/components/ui/separator"; import { Skeleton } from "@/components/ui/skeleton"; import AppBreadcrumb from "@/components/generic/Breadcrumb/AppBreadcrumb"; import { PageMeta } from "@/contexts/MetadataContext"; import { AdminTierPoliciesProvider, useAdminTierPolicies } from "@/contexts/AdminTierPoliciesContext"; import { AssetPickerSheet } from "@/components/generic/AssetPickerSheet"; import { AssetsProvider } from "@/contexts/AdminAssetsContext"; // ─── Badge editor card for a single system badge ────────────────────────────── function SystemBadgeCard({ badge: initialBadge }) { const { saveSystemBadge, loading } = useAdminTierPolicies(); const [badge, setBadge] = useState(initialBadge); // selectedAsset: newly chosen from picker (not yet saved) const [selectedAsset, setSelectedAsset] = useState(null); const [clearAsset, setClearAsset] = useState(false); const [pickerOpen, setPickerOpen] = useState(false); useEffect(() => { setBadge(initialBadge); setSelectedAsset(null); setClearAsset(false); }, [initialBadge]); const currentAsset = clearAsset ? null : (badge.asset ?? null); const displayAsset = selectedAsset ?? currentAsset; const handleSelect = (asset) => { setSelectedAsset(asset); setClearAsset(false); }; const handleClear = () => { setSelectedAsset(null); setClearAsset(true); }; const handleSave = async () => { const payload = { label: badge.label ?? "", description: badge.description ?? "", information: badge.information ?? "", active_from: badge.active_from ?? null, active_until: badge.active_until ?? null, }; if (selectedAsset) { payload.asset_id = selectedAsset.asset_id; } else if (clearAsset) { payload.asset_id = null; } const saved = await saveSystemBadge(badge.key, payload); if (saved) { setBadge(saved); setSelectedAsset(null); setClearAsset(false); } }; return (

{badge.label || badge.key}

{badge.key}
{/* ── Image picker ── */}
{displayAsset ? (
{displayAsset.display_name}
) : (
)}
{displayAsset && ( )}
{displayAsset && (

{displayAsset.display_name}

)}
{/* ── Label / Description / Information ── */}
setBadge((p) => ({ ...p, label: e.target.value }))} />
setBadge((p) => ({ ...p, description: e.target.value }))} />