Files
daphnis/components/scoreplaylog/colums.tsx
2024-09-05 15:57:26 -04:00

185 lines
5.9 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 { ColumnDef } from "@tanstack/react-table";
import { Button } from "@/components/ui/button";
import { ArrowUpDown, Badge } from "lucide-react";
import { chuni_score_playlog } from "@/prisma/schemas/artemis/generated/artemis";
import { chuni_static_music } from "@/prisma/schemas/artemis/generated/artemis";
import { getDifficultyText, getGrade } from "@/lib/helpers";
import ActionsCell from "./moreAction";
import ImageCell from "./image";
type chunithm = chuni_score_playlog &
chuni_static_music & { playCount: number };
export const columns: ColumnDef<chunithm>[] = [
{
accessorKey: "title",
header: "Title",
cell: ({ row }) => {
return (
<div className="text-bold flex items-center">
<ImageCell jacketPath={row.original.jacketPath!} />
<div className="ml-2 flex flex-col">
<span>{row.original.title}</span>
<div className="bold mt-2 w-32 rounded-sm bg-primary pl-1 text-primary-foreground">
Rating: {(row.original.playerRating! / 100).toFixed(2)}
</div>
</div>
</div>
);
},
},
{
accessorKey: "score",
header: ({ column }) => {
return (
<Button variant="ghost">
Score
<ArrowUpDown className="ml-2 h-4 w-4" />
</Button>
);
},
cell: ({ row }) => {
// for the love of all that is holy redo this later or be forced to drink from the chalice
const skillId = row.original.skillId;
const isClear = row.original.isClear;
let isSuccessText = "";
if (isClear === 1 && skillId === 100010) {
isSuccessText = "Limit Break";
} else if (isClear === 1 && skillId === 100011) {
isSuccessText = "Limit Break++";
} else if (isClear === 1 && skillId === 100012) {
isSuccessText = "Limit Break+++";
} else if (isClear === 1 && skillId === 100013) {
isSuccessText = "Campaign";
} else if (isClear === 1 && skillId === 101000) {
isSuccessText = "Guard ã€<C3A3>SUNã€";
} else if (isClear === 1 && skillId === 101001) {
isSuccessText = "Boost ã€<C3A3>SUNã€";
} else if (isClear === 1 && skillId === 101002) {
isSuccessText = "Combo ã€<C3A3>SUNã€";
} else if (isClear === 1 && skillId === 101003) {
isSuccessText = "A-Guilty ã€<C3A3>SUNã€";
} else if (isClear === 1 && skillId === 101004) {
isSuccessText = "Judge ã€<C3A3>SUNã€";
} else if (isClear === 1 && skillId === 101005) {
isSuccessText = "Judge++ ã€<C3A3>SUNã€";
} else if (isClear === 1 && skillId === 101006) {
isSuccessText = "Emblem ã€<C3A3>SUNã€";
} else if (isClear === 1 && skillId === 101007) {
isSuccessText = "Emblem++ ã€<C3A3>SUNã€";
} else if (isClear === 1 && skillId === 101008) {
isSuccessText = "Absolute++ã€<C3A3>SUNã€";
} else if (isClear === 1 && skillId === 102000) {
isSuccessText = "Guardã€<C3A3>LMNã€";
} else if (isClear === 1 && skillId === 102001) {
isSuccessText = "Boost ã€<C3A3>LMNã€";
} else if (isClear === 1 && skillId === 102002) {
isSuccessText = "Comboã€<C3A3>LMNã€";
} else if (isClear === 1 && skillId === 102003) {
isSuccessText = "A-Guiltyã€<C3A3>LMNã€";
} else if (isClear === 1 && skillId === 102004) {
isSuccessText = "Judge ã€<C3A3>LMNã€";
} else if (isClear === 1 && skillId === 102005) {
isSuccessText = "Judge++ã€<C3A3>LMNã€";
} else if (isClear === 1 && skillId === 102006) {
isSuccessText = "Emblemã€<C3A3>LMNã€";
} else if (isClear === 1 && skillId === 102007) {
isSuccessText = "Emblem++ã€<C3A3>LMNã€";
} else if (isClear === 1 && skillId === 102008) {
isSuccessText = "Absolute++ ã€<C3A3>LMNã€";
} else if (isClear === 1 && skillId === 102009) {
isSuccessText = "Catastropyã€<C3A3>LMNã€";
} else if (isClear === 1 && skillId === 800003) {
isSuccessText = "Clear";
} else if (isClear === 0) {
isSuccessText = "Failed";
} else if (isClear === 1) {
isSuccessText = "Clear";
} else {
isSuccessText = isClear?.toString() ?? "";
}
return (
<div>
{row.original.score?.toLocaleString()}
<div className="mt-2 w-40 rounded-sm bg-primary pl-2 text-primary-foreground">
{isSuccessText}
</div>
<div
className={`mt-2 w-40 rounded-sm pl-2 ${
row.original.isNewRecord
? "bg-primary text-primary-foreground"
: "invisible"
}`}
>
<span>New!!</span>
</div>
</div>
);
},
},
{
accessorKey: "grade",
header: "Grade",
cell: ({ row }) => (
<div className="font-medium"> {getGrade(row.original.score ?? 0)}</div>
),
},
{
accessorKey: "userPlayDate",
header: ({ column }) => {
return (
<Button
variant="ghost"
onClick={() => column.toggleSorting(column.getIsSorted() === "asc")}
>
Date
<ArrowUpDown className="ml-2 h-4 w-4" />
</Button>
);
},
},
{
accessorKey: "difficulty",
header: "Difficulty",
cell: ({ row }) => (
<div className="font-medium">
{row.original.level}
<br />
{getDifficultyText(row.original.chartId)}
</div>
),
},
{
accessorKey: "FC / AJ",
header: "FC / AJ",
cell: ({ row }) => (
<div className="font-medium">
{!row.original.isAllJustice && row.original.isFullCombo && (
<span>Full Combo</span>
)}
{row.original.isAllJustice && <span>All Justice</span>}
</div>
),
},
{
accessorKey: "Attempts",
header: "Attempts",
cell: ({ row }) => (
<div className="font-medium">{row.original.playCount}</div>
),
},
// for fixing react-hooks/rules-of-hooks
{
id: "actions",
header: () => <div className="pl-2 text-left">More</div>,
cell: ({ row }) => <ActionsCell row={row} />,
},
];