Initial commit

This commit is contained in:
2025-06-22 00:01:22 +03:00
parent fd70166cf6
commit 033b80bfad
153 changed files with 26874 additions and 1 deletions

View File

@@ -0,0 +1,92 @@
"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>
)
}