Files
mamad-app/app/change-password/page.tsx
2025-06-22 00:01:22 +03:00

138 lines
4.6 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 type React from "react"
import { useState, useEffect } from "react"
import { useRouter } from "next/navigation"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { Alert, AlertDescription } from "@/components/ui/alert"
export default function ChangePasswordPage() {
const [currentPassword, setCurrentPassword] = useState("")
const [newPassword, setNewPassword] = useState("")
const [confirmPassword, setConfirmPassword] = useState("")
const [error, setError] = useState("")
const [loading, setLoading] = useState(false)
const [user, setUser] = useState<any>(null)
const router = useRouter()
useEffect(() => {
const userData = localStorage.getItem("user")
if (!userData) {
router.push("/login")
return
}
setUser(JSON.parse(userData))
}, [router])
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault()
setLoading(true)
setError("")
if (newPassword !== confirmPassword) {
setError("הסיסמאות החדשות אינן תואמות")
setLoading(false)
return
}
if (newPassword.length < 6) {
setError("הסיסמה החדשה חייבת להכיל לפחות 6 תווים")
setLoading(false)
return
}
try {
const response = await fetch("/api/auth/change-password", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
nationalId: user.national_id,
currentPassword,
newPassword,
}),
})
const data = await response.json()
if (response.ok) {
// Update user data
const updatedUser = { ...user, must_change_password: false }
localStorage.setItem("user", JSON.stringify(updatedUser))
router.push("/dashboard")
} else {
setError(data.error || "שגיאה בשינוי סיסמה")
}
} catch (err) {
setError("שגיאה בחיבור לשרת")
} finally {
setLoading(false)
}
}
if (!user) return null
return (
<div className="min-h-screen flex items-center justify-center bg-gray-50" dir="rtl">
<Card className="w-full max-w-md">
<CardHeader className="text-center">
<CardTitle className="text-2xl font-bold">שינוי סיסמה</CardTitle>
<CardDescription>
{user.must_change_password ? "הסיסמה אופסה או לא שונתה, ויש לשנותה על מנת להמשיך." : "שינוי סיסמה"}
</CardDescription>
</CardHeader>
<CardContent>
<form onSubmit={handleSubmit} className="space-y-4">
<div className="space-y-2">
<Label htmlFor="currentPassword">סיסמה נוכחית</Label>
<Input
id="currentPassword"
type="password"
value={currentPassword}
onChange={(e) => setCurrentPassword(e.target.value)}
placeholder="הזן סיסמה נוכחית"
required
/>
</div>
<div className="space-y-2">
<Label htmlFor="newPassword">סיסמה חדשה</Label>
<Input
id="newPassword"
type="password"
value={newPassword}
onChange={(e) => setNewPassword(e.target.value)}
placeholder="הזן סיסמה חדשה (לפחות 6 תווים)"
required
minLength={6}
/>
</div>
<div className="space-y-2">
<Label htmlFor="confirmPassword">אישור סיסמה חדשה</Label>
<Input
id="confirmPassword"
type="password"
value={confirmPassword}
onChange={(e) => setConfirmPassword(e.target.value)}
placeholder="הזן שוב את הסיסמה החדשה"
required
minLength={6}
/>
</div>
{error && (
<Alert variant="destructive">
<AlertDescription>{error}</AlertDescription>
</Alert>
)}
<Button type="submit" className="w-full" disabled={loading}>
{loading ? "משנה סיסמה..." : "שנה סיסמה"}
</Button>
</form>
</CardContent>
</Card>
</div>
)
}