"use client" import { useEffect, 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" interface ManagedTypeOption { id?: number name: string managed: boolean parentId?: number | null } interface UserScopeModalUser { national_id: string name: string role?: string field?: string department?: string team?: string } interface UserScopeModalProps { isOpen: boolean onClose: () => void user: UserScopeModalUser | null fields: ManagedTypeOption[] departments: ManagedTypeOption[] teams: ManagedTypeOption[] onSave: (payload: { userId: string; field: string; department: string; team: string }) => Promise isSaving: boolean } export function UserScopeModal({ isOpen, onClose, user, fields, departments, teams, onSave, isSaving, }: UserScopeModalProps) { const [field, setField] = useState("") const [department, setDepartment] = useState("") const [team, setTeam] = useState("") const noDepartmentValue = "__no_department__" const noTeamValue = "__no_team__" useEffect(() => { if (user && isOpen) { setField(user.field || "") if (user.role === "field_admin") { setDepartment(user.department || noDepartmentValue) } else { setDepartment(user.department || "") } setTeam(user.team || noTeamValue) } }, [user, isOpen]) const selectedFieldId = fields.find((item) => item.name === field)?.id const availableDepartments = selectedFieldId ? departments.filter((item) => item.parentId === selectedFieldId) : departments const selectedDepartmentId = departments.find((item) => item.name === department)?.id const availableTeams = selectedDepartmentId && department !== noDepartmentValue ? teams.filter((item) => item.parentId === selectedDepartmentId) : [] useEffect(() => { if (field && availableDepartments.length > 0) { const hasDepartment = availableDepartments.some((item) => item.name === department) if (!hasDepartment) { setDepartment(user?.role === "field_admin" ? noDepartmentValue : "") setTeam(noTeamValue) } } }, [field, availableDepartments, department]) useEffect(() => { if (department === noDepartmentValue) { setTeam(noTeamValue) return } if (department && availableTeams.length > 0) { const hasTeam = availableTeams.some((item) => item.name === team) if (!hasTeam) { setTeam(noTeamValue) } } }, [department, availableTeams, team]) if (!user) return null const handleSave = async () => { if (!field) return const normalizedDepartment = department === noDepartmentValue ? "" : department const normalizedTeam = team === noTeamValue ? "" : team const scopedDepartment = user.role === "field_admin" ? "" : normalizedDepartment const scopedTeam = user.role === "field_admin" ? "" : normalizedTeam if (user.role !== "field_admin" && !scopedDepartment) return if ((user.role === "team_admin" || user.role === "user") && !scopedTeam) return await onSave({ userId: user.national_id, field, department: scopedDepartment, team: scopedTeam }) } return ( שיוך מחדש למשתמש {user.name} יש לבחור תחום, מסגרת וצוות.
) }