"use client" import * as React from "react" import { toast } from "sonner" import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, } from "@/components/ui/sheet" import { Button } from "@/components/ui/button" import { Loader, Plus, Minus, Users } from "lucide-react" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Badge } from "@/components/ui/badge" import { AssginedUserTable } from "../userTable/assignedUsers-table" import { assignUsersToRole, removeUsersFromRole } from "@/lib/users/service" import { RoleView } from "@/db/schema/users" export interface ManageRoleSheetProps extends React.ComponentPropsWithRef { role: RoleView | null // 현재 구조에 맞춰 allUsersPromises 사용 allUsersPromises: Promise<[{ data: any[]; pageCount: number }]> } export function ManageRoleSheet({ role, allUsersPromises, ...props }: ManageRoleSheetProps) { const [isUpdatePending, startUpdateTransition] = React.useTransition() const [selectedUserIds, setSelectedUserIds] = React.useState([]) const [activeTab, setActiveTab] = React.useState("assign") function handleSelectedChange(ids: number[]) { setSelectedUserIds(ids) } async function handleAssign() { if (!role || selectedUserIds.length === 0) { toast.error("선택된 사용자가 없습니다.") return } startUpdateTransition(async () => { const { data, error } = await assignUsersToRole(role.id, selectedUserIds) if (error) { toast.error(error) return } setSelectedUserIds([]) // 선택 초기화 toast.success(data?.message || `${selectedUserIds.length}명의 사용자가 "${role.name}" 롤에 할당되었습니다.`) // 작업 완료 후 시트를 닫지 않고 유지 (계속 작업할 수 있도록) }) } async function handleRemove() { if (!role || selectedUserIds.length === 0) { toast.error("선택된 사용자가 없습니다.") return } startUpdateTransition(async () => { const { data, error } = await removeUsersFromRole(role.id, selectedUserIds) if (error) { toast.error(error) return } setSelectedUserIds([]) // 선택 초기화 toast.success(data?.message || `${selectedUserIds.length}명의 사용자가 "${role.name}" 롤에서 제거되었습니다.`) }) } // 탭 변경시 선택 초기화 React.useEffect(() => { setSelectedUserIds([]) }, [activeTab]) // 롤 변경시 선택 초기화 React.useEffect(() => { setSelectedUserIds([]) setActiveTab("assign") // 기본적으로 assign 탭으로 리셋 }, [role?.id]) // 시트가 닫힐 때 상태 초기화 React.useEffect(() => { if (!props.open) { setSelectedUserIds([]) setActiveTab("assign") } }, [props.open]) return ( Manage "{role?.name}" Role
Currently assigned: {role?.user_count || 0} users
{role?.description}
Assign Users Remove Users
Select users to assign to this role:
Select users to remove from this role:
{activeTab === "assign" ? ( ) : ( )}
) }