import Checkbox from "@mui/material/Checkbox";
import CircularProgress from "@mui/material/CircularProgress";
import { useMemo } from "react";
import { Button } from "@/shared/ui/Button.jsx";
import styles from "@/features/external-admin-users/external-admin-users.module.css";
import {
updatePermissionGroup,
updatePermissionSelection,
} from "@/features/external-admin-users/permissionSelection.js";
export { updatePermissionSelection } from "@/features/external-admin-users/permissionSelection.js";
export function ExternalAdminPermissionSelector({
catalog = [],
disabled = false,
error = "",
loading = false,
onChange,
onRetry,
value = [],
}) {
const groups = useMemo(() => groupCatalog(catalog), [catalog]);
const knownCodes = useMemo(() => catalog.map((permission) => permission.code), [catalog]);
const selected = useMemo(() => new Set(value), [value]);
const selectedCount = knownCodes.filter((code) => selected.has(code)).length;
if (loading) {
return (
加载权限目录
);
}
if (error) {
return (
{error}
{onRetry ? : null}
);
}
return (
已选 {selectedCount} / {knownCodes.length} 项
{groups.length ? (
{groups.map((group) => {
const groupCodes = group.items.map((permission) => permission.code);
const groupSelectedCount = groupCodes.filter((code) => selected.has(code)).length;
return (
{group.name}
{group.items.map((permission) => {
return (
);
})}
);
})}
) : (
当前无可配置权限
)}
);
}
function groupCatalog(catalog) {
const groups = new Map();
catalog.forEach((permission) => {
const groupName = permission.group || "其他";
if (!groups.has(groupName)) {
groups.set(groupName, []);
}
groups.get(groupName).push(permission);
});
return [...groups].map(([name, items]) => ({ items, name }));
}