"use client"; import { useEffect, useState } from "react"; interface Code { id: string; code: string; usedByUserId: string | null; usedAt: string | null; createdAt: string; createdBy: { username: string }; } export default function AdminCodesPage() { const [codes, setCodes] = useState([]); const [loading, setLoading] = useState(true); const [generating, setGenerating] = useState(false); const [newCode, setNewCode] = useState(""); const [error, setError] = useState(""); const fetchCodes = async () => { setLoading(true); try { const res = await fetch("/api/admin/codes", { credentials: "include" }); if (res.ok) { setCodes(await res.json()); } } catch { // ignore } finally { setLoading(false); } }; useEffect(() => { fetchCodes(); }, []); const handleGenerate = async () => { setGenerating(true); setError(""); setNewCode(""); try { const res = await fetch("/api/admin/codes", { method: "POST", credentials: "include" }); const data = await res.json(); if (!res.ok) { throw new Error(data.error || "Грешка при генерирање"); } setNewCode(data.code); fetchCodes(); } catch (err) { setError(err instanceof Error ? err.message : "Грешка при генерирање"); } finally { setGenerating(false); } }; const handleDelete = async (id: string) => { if (!confirm("Дали сте сигурни?")) return; try { await fetch(`/api/admin/codes/${id}`, { method: "DELETE", credentials: "include" }); fetchCodes(); } catch { // ignore } }; return (

Кодови

{newCode && (

Нов код:

{newCode}

Копирајте го кодот. Ќе биде прикажан само еднаш.

)} {error && (
{error}
)}
{loading ? (

Вчитување...

) : codes.length === 0 ? (

Нема генерирани кодови

) : ( {codes.map((item) => ( ))}
Код Креиран од Креиран Статус Акции
{item.code} {item.createdBy.username} {new Date(item.createdAt).toLocaleDateString("mk-MK")} {item.usedByUserId ? ( Искористен ) : ( Неискористен )} {!item.usedByUserId && ( )}
)}
); }