import { useEffect, useState } from 'react'; import { X, Check, Loader2 } from 'lucide-react'; import { Badge } from '@shared/components/ui/badge'; import { fetchRoles, assignUserRoles, type RoleWithPermissions, type AdminUser } from '@/services/adminApi'; import { getRoleBadgeStyle } from '@shared/constants/userRoles'; interface Props { user: AdminUser; onClose: () => void; onSaved: () => void; } export function UserRoleAssignDialog({ user, onClose, onSaved }: Props) { const [roles, setRoles] = useState([]); const [selected, setSelected] = useState>(new Set()); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); useEffect(() => { fetchRoles() .then((r) => { setRoles(r); const cur = new Set(); for (const role of r) { if (user.roles.includes(role.roleCd)) cur.add(role.roleSn); } setSelected(cur); }) .finally(() => setLoading(false)); }, [user]); const toggle = (sn: number) => { setSelected((prev) => { const next = new Set(prev); if (next.has(sn)) next.delete(sn); else next.add(sn); return next; }); }; const handleSave = async () => { setSaving(true); try { await assignUserRoles(user.userId, Array.from(selected)); onSaved(); onClose(); } catch (e: unknown) { alert('실패: ' + (e instanceof Error ? e.message : 'unknown')); } finally { setSaving(false); } }; return (
e.stopPropagation()}>
역할 배정
{user.userAcnt} ({user.userNm}) - 다중 역할 가능 (OR 합집합)
{loading &&
} {!loading && roles.map((r) => { const isSelected = selected.has(r.roleSn); return ( ); })}
); }