first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 21:46:42 +03:00
commit 2a5b661443
202 changed files with 49770 additions and 0 deletions

View File

@@ -0,0 +1,122 @@
"use client"
import { useState } from "react"
import { Row } from "@tanstack/react-table"
import { MoreHorizontal, Pencil, Trash, Undo } from "lucide-react"
import { Button } from "@/components/ui/button"
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu"
import { Hero } from "@/types/hero"
import { heroService } from "@/services/heroService"
import { toast } from "sonner"
import { HeroDialog } from "./hero-dialog"
import Swal from "sweetalert2"
interface DataTableRowActionsProps<TData> {
row: Row<TData>
onSuccess: () => void
}
export function HeroRowActions<TData extends Hero>({
row,
onSuccess,
}: DataTableRowActionsProps<TData>) {
const hero = row.original
const [showEditDialog, setShowEditDialog] = useState(false)
const handleDelete = async () => {
const result = await Swal.fire({
title: "Emin misiniz?",
text: "Bu hero silinecek! (Geri alabilirsiniz)",
icon: "warning",
showCancelButton: true,
confirmButtonText: "Evet, sil",
cancelButtonText: "İptal",
})
if (result.isConfirmed) {
try {
await heroService.deleteHero(hero.ID)
toast.success("Hero başarıyla silindi")
onSuccess()
} catch {
toast.error("Silme işlemi başarısız")
}
}
}
const handleRestore = async () => {
const result = await Swal.fire({
title: "Geri yüklemek istiyor musunuz?",
text: "Bu hero tekrar aktif listeye alınacak.",
icon: "question",
showCancelButton: true,
confirmButtonText: "Evet, geri yükle",
cancelButtonText: "İptal",
})
if (result.isConfirmed) {
try {
await heroService.restoreHero(hero.ID)
toast.success("Hero başarıyla geri yüklendi")
onSuccess()
} catch {
toast.error("Geri yükleme işlemi başarısız")
}
}
}
const isDeleted = !!hero.DeletedAt
return (
<>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost" className="h-8 w-8 p-0">
<span className="sr-only">Menüyü </span>
<MoreHorizontal className="h-4 w-4" />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<DropdownMenuLabel>İşlemler</DropdownMenuLabel>
<DropdownMenuItem
onClick={() => navigator.clipboard.writeText(hero.ID.toString())}
>
Hero ID Kopyala
</DropdownMenuItem>
<DropdownMenuSeparator />
{!isDeleted && (
<>
<DropdownMenuItem onClick={() => setShowEditDialog(true)}>
<Pencil className="mr-2 h-3.5 w-3.5" /> Düzenle
</DropdownMenuItem>
<DropdownMenuItem onClick={handleDelete} className="text-red-600">
<Trash className="mr-2 h-3.5 w-3.5" /> Sil
</DropdownMenuItem>
</>
)}
{isDeleted && (
<DropdownMenuItem onClick={handleRestore} className="text-green-600">
<Undo className="mr-2 h-3.5 w-3.5" /> Geri Yükle
</DropdownMenuItem>
)}
</DropdownMenuContent>
</DropdownMenu>
<HeroDialog
open={showEditDialog}
onOpenChange={setShowEditDialog}
hero={hero}
onSuccess={onSuccess}
/>
</>
)
}