feat: add multi-user admin panel and featured partners toggle on home page

This commit is contained in:
AyrisAI
2026-05-17 13:48:05 +03:00
parent 36e98a3883
commit 0504f12f5b
29 changed files with 1110 additions and 182 deletions

View File

@@ -1,8 +1,8 @@
"use client";
import { useState } from "react";
import { Trash2, Save, Edit2, X } from "lucide-react";
import { updatePartner } from "../../actions";
import { Trash2, Save, Edit2, X, Star } from "lucide-react";
import { updatePartner, togglePartnerFeatured } from "../../actions";
import { useRouter } from "next/navigation";
import Image from "next/image";
@@ -11,6 +11,7 @@ export default function PartnerRow({ partner, onDelete }: { partner: any, onDele
const [name, setName] = useState(partner.name);
const [displayOrder, setDisplayOrder] = useState(partner.display_order);
const [isLoading, setIsLoading] = useState(false);
const [isFeatured, setIsFeatured] = useState(partner.is_featured);
const router = useRouter();
const handleSave = async () => {
@@ -25,6 +26,18 @@ export default function PartnerRow({ partner, onDelete }: { partner: any, onDele
}
};
const handleToggleFeatured = async () => {
const nextState = !isFeatured;
setIsFeatured(nextState);
const res = await togglePartnerFeatured(partner.id, nextState);
if (res.success) {
router.refresh();
} else {
setIsFeatured(!nextState);
alert("Öne çıkarma durumu güncellenemedi");
}
};
return (
<tr className="hover:bg-white/[0.02] transition-colors border-b border-white/10 last:border-0">
<td className="px-6 py-4">
@@ -73,6 +86,19 @@ export default function PartnerRow({ partner, onDelete }: { partner: any, onDele
<div className="font-bold text-white tracking-wide">{partner.name}</div>
)}
</td>
<td className="px-6 py-4">
<button
onClick={handleToggleFeatured}
className={`flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs font-bold transition-all ${
isFeatured
? "bg-yellow-500/10 text-yellow-500 hover:bg-yellow-500/20"
: "bg-white/5 text-white/20 hover:text-white/60 hover:bg-white/10"
}`}
>
<Star className={`w-4 h-4 ${isFeatured ? "fill-yellow-500" : ""}`} />
{isFeatured ? "Öne Çıkarıldı" : "Öne Çıkar"}
</button>
</td>
<td className="px-6 py-4 text-right">
<div className="flex justify-end items-center gap-2">
{isEditing ? (