"use client"; import { useState, useEffect } from "react"; import { useSession } from "next-auth/react"; import { useDictionary } from "@/components/DictionaryContext"; interface User { id: string; name: string; email: string; role: string; domains: string[]; telegramId?: string; password?: string; } export default function UsersPage() { const [users, setUsers] = useState([]); const [loading, setLoading] = useState(true); const [search, setSearch] = useState(""); const [isModalOpen, setIsModalOpen] = useState(false); const [editingUser, setEditingUser] = useState(null); const { data: session } = useSession(); // Form state const [formData, setFormData] = useState({ name: "", email: "", password: "", role: "DOMAIN_ADMIN", domains: "", telegramId: "" }); const [saving, setSaving] = useState(false); const dict = useDictionary(); const fetchUsers = async () => { setLoading(true); try { const res = await fetch("/api/users"); const data = await res.json(); setUsers(Array.isArray(data) ? data : []); } catch (e) { console.error(e); } finally { setLoading(false); } }; useEffect(() => { fetchUsers(); }, []); const openAddModal = () => { setEditingUser(null); setFormData({ name: "", email: "", password: "", role: "DOMAIN_ADMIN", domains: "", telegramId: "" }); setIsModalOpen(true); }; const openEditModal = (user: User) => { setEditingUser(user); setFormData({ name: user.name || "", email: user.email, password: user.password || "", role: user.role, domains: user.domains.join(", "), telegramId: user.telegramId || "" }); setIsModalOpen(true); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setSaving(true); try { const url = editingUser ? `/api/users/${editingUser.id}` : "/api/users"; const method = editingUser ? "PATCH" : "POST"; const payload = { ...formData, domains: formData.domains.split(",").map(d => d.trim()).filter(Boolean) }; const res = await fetch(url, { method, headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }); if (res.ok) { setIsModalOpen(false); fetchUsers(); } } catch (e) { console.error(e); } finally { setSaving(false); } }; const handleDelete = async (id: string) => { if (!confirm("Bu kullanıcıyı silmek istediğinize emin misiniz?")) return; try { const res = await fetch(`/api/users/${id}`, { method: "DELETE" }); if (res.ok) fetchUsers(); } catch (e) { console.error(e); } }; const filtered = users.filter( (u) => u.name?.toLowerCase().includes(search.toLowerCase()) || u.email.toLowerCase().includes(search.toLowerCase()) ); return ( <>

{dict.users.title}

{dict.users.subtitle}

Kullanıcı Yönetimi
{dict.users.info}
setSearch(e.target.value)} />
{loading ? (
) : filtered.length === 0 ? (
{dict.users.noUsers}
) : ( {filtered.map((u) => ( ))}
{dict.users.username} {dict.users.role} {dict.users.domains} Telegram ID
{u.name ? u.name[0]?.toUpperCase() : "?"}
{u.name}
{u.email}
{u.role === "SUPER_ADMIN" ? `★ ${dict.users.superAdmin}` : dict.users.domainAdmin} {u.domains.includes("*") ? ( {dict.users.allDomains} ) : (
{u.domains.map((d) => ( {d} ))}
)}
{u.telegramId || "-"}
)}
{isModalOpen && (

{editingUser ? dict.users.editUser : dict.users.addUser}

setFormData({...formData, name: e.target.value})} required />
setFormData({...formData, email: e.target.value})} required />
setFormData({...formData, password: e.target.value})} required={!editingUser} />
{session?.user?.role === "SUPER_ADMIN" ? (
) : (
)}
setFormData({...formData, telegramId: e.target.value})} />
{session?.user?.role === "SUPER_ADMIN" ? (
setFormData({...formData, domains: e.target.value})} />
) : (
)}
)} ); } function PlusIcon() { return ; } function SearchIcon() { return ; } function UsersIcon() { return ; } function InfoIcon() { return ; } function TrashIcon() { return ; } function EditIcon() { return ; }