1.1.4 - updated user modals
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user