import Avatar from "@mui/material/Avatar";
import Box from "@mui/material/Box";
import Button from "@mui/material/Button";
import Stack from "@mui/material/Stack";
import TextField from "@mui/material/TextField";
import Typography from "@mui/material/Typography";
import Alert from "@mui/material/Alert";
import { useCallback, useMemo, useState } from "react";
import { useParams } from "react-router-dom";
import { listOrganizations } from "../api/business.js";
import { useExternalAuth } from "../auth/ExternalAuthProvider.jsx";
import { hasExternalCapability } from "../config/capabilities.js";
import { useExternalI18n } from "../i18n/ExternalI18nProvider.jsx";
import { ExternalPage, ExternalPageState, PagePagination, ResponsiveDataList, StatusChip } from "../shared/PageComponents.jsx";
import { usePagedResource } from "../shared/usePagedResource.js";
const organizationKinds = {
agencies: { capability: "agency:list", titleKey: "organization.agencies" },
bds: { capability: "bd:list", titleKey: "organization.bds" },
"bd-leaders": { capability: "bd-manager:list", titleKey: "organization.bdManagers" },
hosts: { capability: "host:list", titleKey: "organization.hosts" },
managers: { capability: "bd-manager:list", titleKey: "organization.managers" },
"super-admins": { capability: "super-admin:list", titleKey: "organization.superAdmins" },
team: { capability: "team:view", titleKey: "organization.team" }
};
export default function OrganizationPage() {
const { kind = "hosts" } = useParams();
const config = organizationKinds[kind];
const { session } = useExternalAuth();
const { t } = useExternalI18n();
const [keyword, setKeyword] = useState("");
const [query, setQuery] = useState({ keyword: "", page: 1 });
const allowed = Boolean(config && hasExternalCapability(session, config.capability));
const load = useCallback(() => allowed ? listOrganizations(kind, { keyword: query.keyword, page: query.page, page_size: 20 }) : Promise.resolve({ items: [], page: 1, pageSize: 20, total: 0 }), [allowed, kind, query]);
const { data, error, loading, reload } = usePagedResource(load);
const columns = useMemo(() => kind === "team" ? [
{ key: "agency", label: t("organization.agency"), render: (item) => {t("organization.agencyReference", { id: item.id || "-" })}{t("organization.owner")} {item.userId || "-"} },
{ key: "parent", label: t("organization.parentBd"), render: (item) => item.parentBdUserId || "-" },
{ key: "status", label: t("common.status"), render: (item) => }
] : [
{ key: "identity", label: t("organization.member"), render: (item) => {(item.name || item.username || "-").slice(0, 1)}{item.name || item.username || "-"}ID {item.id || "-"}{item.userId && item.userId !== item.id ? ` / ${t("organization.userReference", { id: item.userId })}` : ""} },
{ key: "prettyId", label: t("users.prettyId"), render: (item) => item.prettyId || "-" },
{ key: "country", label: t("organization.country"), render: (item) => item.country || "-" },
{ key: "status", label: t("common.status"), render: (item) => }
], [kind, t]);
if (!config || !allowed) {
return {t("organization.noPermission")};
}
return (
{ event.preventDefault(); setQuery({ keyword, page: 1 }); }}>
setKeyword(event.target.value)} />
{kind === "team" && !loading && !error ? (
{t("organization.bdLeaderCount", { count: data.totalBdLeaders || 0 })}
{t("organization.bdCount", { count: data.totalBds || 0 })}
{t("organization.agencyCount", { count: data.total || data.items.length })}
{data.truncated ? {t("organization.truncated")} : null}
) : null}
{!loading && !error ? <> item.id || index} /> setQuery({ ...query, page })} />> : null}
);
}