1.1.4 - updated user modals

This commit is contained in:
2026-01-16 23:44:13 +02:00
parent a5e9072b9d
commit 458a78795d
16 changed files with 288 additions and 109 deletions

View File

@@ -15,6 +15,7 @@ interface ManagedTypeOption {
interface UserScopeModalUser {
national_id: string
name: string
role?: string
field?: string
department?: string
team?: string
@@ -44,12 +45,18 @@ export function UserScopeModal({
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 || "")
setDepartment(user.department || "")
setTeam(user.team || "")
if (user.role === "field_admin") {
setDepartment(user.department || noDepartmentValue)
} else {
setDepartment(user.department || "")
}
setTeam(user.team || noTeamValue)
}
}, [user, isOpen])
@@ -58,25 +65,30 @@ export function UserScopeModal({
? departments.filter((item) => item.parentId === selectedFieldId)
: departments
const selectedDepartmentId = departments.find((item) => item.name === department)?.id
const availableTeams = selectedDepartmentId
? teams.filter((item) => item.parentId === selectedDepartmentId)
: teams
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("")
setTeam("")
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("")
setTeam(noTeamValue)
}
}
}, [department, availableTeams, team])
@@ -84,8 +96,16 @@ export function UserScopeModal({
if (!user) return null
const handleSave = async () => {
if (!field || !department || !team) return
await onSave({ userId: user.national_id, field, department, team })
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 (
@@ -104,7 +124,7 @@ export function UserScopeModal({
<div className="space-y-2">
<Select value={field} onValueChange={setField}>
<SelectTrigger dir="rtl">
<SelectValue placeholder="בחרו תחום" />
<SelectValue placeholder="??? ????" />
</SelectTrigger>
<SelectContent dir="rtl">
{fields.map((item) => (
@@ -119,7 +139,7 @@ export function UserScopeModal({
<div className="space-y-2">
<Select value={department} onValueChange={setDepartment}>
<SelectTrigger dir="rtl">
<SelectValue placeholder="בחרו מסגרת" />
<SelectValue placeholder="??? ?????" />
</SelectTrigger>
<SelectContent dir="rtl">
{availableDepartments.map((item) => (
@@ -127,6 +147,9 @@ export function UserScopeModal({
{item.name}
</SelectItem>
))}
{user.role === "field_admin" && (
<SelectItem value={noDepartmentValue}>??? ?????</SelectItem>
)}
</SelectContent>
</Select>
</div>
@@ -134,7 +157,7 @@ export function UserScopeModal({
<div className="space-y-2">
<Select value={team} onValueChange={setTeam}>
<SelectTrigger dir="rtl">
<SelectValue placeholder="בחרו צוות" />
<SelectValue placeholder="??? ????" />
</SelectTrigger>
<SelectContent dir="rtl">
{availableTeams.map((item) => (
@@ -142,6 +165,7 @@ export function UserScopeModal({
{item.name}
</SelectItem>
))}
<SelectItem value={noTeamValue}>ללא צוות</SelectItem>
</SelectContent>
</Select>
</div>
@@ -153,7 +177,12 @@ export function UserScopeModal({
<Button
onClick={handleSave}
className="w-full"
disabled={isSaving || !field || !department || !team}
disabled={
isSaving ||
!field ||
(user.role !== "field_admin" && !department) ||
((user.role === "team_admin" || user.role === "user") && !team)
}
>
{isSaving ? "שומר..." : "שמירה"}
</Button>