Files
mamad-app/components/role-management-modal.tsx
2025-06-22 00:01:22 +03:00

93 lines
3.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use client"
import { useState } from "react"
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog"
import { Button } from "@/components/ui/button"
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
import { Alert, AlertDescription } from "@/components/ui/alert"
import { type User, type UserRole, ROLE_NAMES, ROLE_HIERARCHY } from "@/types/user"
interface RoleManagementModalProps {
isOpen: boolean
onClose: () => void
user: User | null
adminRole: UserRole
onRoleChange: (userId: string, newRole: UserRole) => void
}
export function RoleManagementModal({ isOpen, onClose, user, adminRole, onRoleChange }: RoleManagementModalProps) {
const [selectedRole, setSelectedRole] = useState("")
const [loading, setLoading] = useState(false)
if (!user) return null
const adminLevel = ROLE_HIERARCHY[adminRole] || 0
const availableRoles = (Object.entries(ROLE_NAMES) as [UserRole, string][]).filter(([role]) => {
const roleLevel = ROLE_HIERARCHY[role] || 0
return roleLevel < adminLevel
})
const handleRoleChange = async () => {
if (!selectedRole) return
setLoading(true)
try {
await onRoleChange(user.national_id, selectedRole as UserRole)
onClose()
} catch (error) {
console.error("Error changing role:", error)
} finally {
setLoading(false)
}
}
return (
<Dialog open={isOpen} onOpenChange={onClose}>
<DialogContent className="max-w-md" dir="rtl">
<DialogHeader>
<DialogTitle>שינוי תפקיד - {user.name}</DialogTitle>
<DialogDescription>בחר תפקיד חדש עבור המשתמש</DialogDescription>
</DialogHeader>
<div className="space-y-4">
<div className="bg-gray-50 p-3 rounded">
<p className="text-sm text-gray-600">תפקיד נוכחי:</p>
<p className="font-semibold">{ROLE_NAMES[user.role] || user.role}</p>
</div>
<div className="space-y-2">
<label className="text-sm font-medium">תפקיד חדש:</label>
<Select value={selectedRole} onValueChange={setSelectedRole}>
<SelectTrigger>
<SelectValue placeholder="בחר תפקיד" />
</SelectTrigger>
<SelectContent>
{availableRoles.map(([role, name]) => (
<SelectItem key={role} value={role}>
{name}
</SelectItem>
))}
</SelectContent>
</Select>
</div>
{selectedRole && (
<Alert>
<AlertDescription>המשתמש יקבל הרשאות של {ROLE_NAMES[selectedRole as UserRole]}</AlertDescription>
</Alert>
)}
<div className="flex gap-2 justify-end">
<Button variant="outline" onClick={onClose}>
ביטול
</Button>
<Button onClick={handleRoleChange} disabled={!selectedRole || loading}>
{loading ? "משנה..." : "שנה תפקיד"}
</Button>
</div>
</div>
</DialogContent>
</Dialog>
)
}