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 })); }