"use client"; import { Check, ChevronDown, Search } from "lucide-react"; import { useDeferredValue, useEffect, useMemo, useState } from "react"; import { usePathname } from "next/navigation"; import { useTranslation } from "react-i18next"; import { AdminSubnavBar, } from "@/components/admin/admin-subnav"; import { buttonVariants } from "@/components/ui/button"; import { useAdminSiteCodeOptions } from "@/hooks/use-admin-site-code-options"; import { adminHasAnyPermission } from "@/lib/admin-permissions"; import { PRD_INTEGRATION_ACCESS_ANY } from "@/lib/admin-prd"; import { Input } from "@/components/ui/input"; import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; import { ScrollArea } from "@/components/ui/scroll-area"; import { useAdminProfile } from "@/stores/admin-session"; import { useAgentManagementSiteStore } from "@/stores/agent-management-site"; import { cn } from "@/lib/utils"; export function AgentsSubnav(): React.ReactElement { const { t } = useTranslation("agents"); const pathname = usePathname(); const profile = useAdminProfile(); const { sites: siteOptions } = useAdminSiteCodeOptions(); const adminSiteId = useAgentManagementSiteStore((s) => s.adminSiteId); const setAdminSiteId = useAgentManagementSiteStore((s) => s.setAdminSiteId); const [sitePickerOpen, setSitePickerOpen] = useState(false); const [siteKeyword, setSiteKeyword] = useState(""); const deferredKeyword = useDeferredValue(siteKeyword); const canSwitchSite = profile?.is_super_admin === true || adminHasAnyPermission(profile?.permissions, [...PRD_INTEGRATION_ACCESS_ANY]); useEffect(() => { if (adminSiteId !== null || siteOptions.length === 0) { return; } const boundSiteId = profile?.agent?.admin_site_id; if (boundSiteId != null) { setAdminSiteId(boundSiteId); return; } setAdminSiteId(siteOptions[0]?.id ?? null); }, [adminSiteId, profile?.agent?.admin_site_id, setAdminSiteId, siteOptions]); const selectSiteId = adminSiteId ?? siteOptions[0]?.id ?? null; const selectedSite = useMemo(() => { const site = siteOptions.find((item) => item.id === selectSiteId); return site ?? null; }, [selectSiteId, siteOptions]); const filteredSites = useMemo(() => { const normalized = deferredKeyword.trim().toLowerCase(); if (normalized === "") { return siteOptions; } return siteOptions.filter((site) => site.name.toLowerCase().includes(normalized)); }, [deferredKeyword, siteOptions]); const siteSelector = pathname !== "/admin/agents/list" && canSwitchSite && siteOptions.length > 0 && selectSiteId !== null ? ( {selectedSite?.name ?? t("lineFilter", { defaultValue: "一级代理" })} {selectedSite?.code ?? ""}
setSiteKeyword(event.target.value)} placeholder={t("siteSearch", { defaultValue: "搜索站点名称" })} className="pl-9" />
{filteredSites.map((site) => { const active = site.id === selectSiteId; return ( ); })} {filteredSites.length === 0 ? (
{t("common:states.empty", { defaultValue: "暂无数据" })}
) : null}
) : null; return (

{t("title", { defaultValue: "代理管理" })}

); }