From 55e86a32ab8970342758ac6a9b9c8c1e1b132cea Mon Sep 17 00:00:00 2001 From: Joschua <70809675+selfire1@users.noreply.github.com> Date: Sat, 8 Nov 2025 16:51:13 +1000 Subject: [PATCH 1/8] fix: remove filters string --- app/tipping/group-admin/page.tsx | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/app/tipping/group-admin/page.tsx b/app/tipping/group-admin/page.tsx index a43eff4..185e0c1 100644 --- a/app/tipping/group-admin/page.tsx +++ b/app/tipping/group-admin/page.tsx @@ -80,14 +80,9 @@ export default async function GroupSettings() { -
-
-

Filters

-
- - - -
+ + + ) From d01504aa785ebcca26c88acdee851a0703d96d50 Mon Sep 17 00:00:00 2001 From: Joschua <70809675+selfire1@users.noreply.github.com> Date: Sat, 8 Nov 2025 17:13:25 +1000 Subject: [PATCH 2/8] add option to set overwrite --- .../group-admin/_components/columns.tsx | 24 ++++++- .../_components/create-edit-tip-dialog.tsx | 68 ++++++++++++++++++- .../group-admin/_components/row-action.tsx | 1 + .../group-admin/_utils/create-tip-action.ts | 5 ++ app/tipping/group-admin/_utils/schema.ts | 2 + .../leaderboard/_components/ResultsTable.tsx | 4 +- components/icon/index.ts | 4 ++ css/globals.css | 6 ++ db/schema/schema.ts | 7 +- 9 files changed, 114 insertions(+), 7 deletions(-) diff --git a/app/tipping/group-admin/_components/columns.tsx b/app/tipping/group-admin/_components/columns.tsx index 369dd48..73a83ee 100644 --- a/app/tipping/group-admin/_components/columns.tsx +++ b/app/tipping/group-admin/_components/columns.tsx @@ -9,6 +9,12 @@ import RowAction from './row-action' import { Button } from '@/components/ui/button' import { LucideArrowDown, LucideArrowUp, LucideArrowUpDown } from 'lucide-react' import { RACE_PREDICTION_FIELDS } from '@/constants' +import { Icon } from '@/components/icon' +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from '@/components/ui/tooltip' export const columns: ColumnDef[] = [ { @@ -86,9 +92,23 @@ export const columns: ColumnDef[] = [ }) { switch (overwrite) { case 'countAsCorrect': - return

Correct

+ return ( + + + + + Scored as correct + + ) case 'countAsIncorrect': - return

Incorrect

+ return ( + + + + + Scored as incorrect + + ) default: return

None

diff --git a/app/tipping/group-admin/_components/create-edit-tip-dialog.tsx b/app/tipping/group-admin/_components/create-edit-tip-dialog.tsx index 4b2a384..be8084f 100644 --- a/app/tipping/group-admin/_components/create-edit-tip-dialog.tsx +++ b/app/tipping/group-admin/_components/create-edit-tip-dialog.tsx @@ -1,5 +1,12 @@ 'use client' +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue as ShadSelectValue, +} from '@/components/ui/select' import Alert from '@/components/alert' import { Combobox } from '@/components/combobox' import { ConstructorProps } from '@/components/constructor' @@ -20,7 +27,6 @@ import { FieldGroup, FieldLabel, } from '@/components/ui/field' -import UserAvatar from '@/components/user-avatar' import { RACE_PREDICTION_FIELDS, RacePredictionField } from '@/constants' import { Database } from '@/db/types' import { @@ -31,7 +37,13 @@ import { } from '@/lib/utils/prediction-fields' import { zodResolver } from '@hookform/resolvers/zod' import { isFuture } from 'date-fns' -import { LucideInfo, LucidePlus, LucideTriangleAlert } from 'lucide-react' +import { + LucideCheckCircle, + LucideInfo, + LucidePlus, + LucideTriangleAlert, + LucideXCircle, +} from 'lucide-react' import React from 'react' import { Controller, @@ -45,6 +57,8 @@ import Button from '@/components/button' import { formSchema, Schema } from '../_utils/schema' import { useRouter } from 'next/navigation' import { SelectUser } from './select-user' +import { TIP_OVERWRITE_OPTIONS } from '@/db/schema/schema' +import { Icon } from '@/components/icon' type RaceOption = Pick< Database.Race, @@ -145,6 +159,30 @@ export default function CreateOrEditTipDialog({ + ( + + )} + /> {message && ( ) + function getSelectOptions() { + const options = [ + { + label: 'Normal', + value: 'normal', + }, + { + label: 'Correct', + value: 'countAsCorrect', + className: 'text-success', + icon: Icon.CorrectTip, + }, + { + label: 'Incorrect', + value: 'countAsIncorrect', + className: 'text-destructive', + icon: Icon.IncorrectTip, + }, + ] satisfies ({ + value: (typeof TIP_OVERWRITE_OPTIONS)[number] | 'normal' + label: string + } & Record)[] + + return options + } + function onPositionChange(position: RacePredictionField | undefined) { if (!position) { setTipType('driver') diff --git a/app/tipping/group-admin/_components/row-action.tsx b/app/tipping/group-admin/_components/row-action.tsx index a76114e..1c154ae 100644 --- a/app/tipping/group-admin/_components/row-action.tsx +++ b/app/tipping/group-admin/_components/row-action.tsx @@ -39,6 +39,7 @@ export default function RowAction({ row }: { row: PredictionRow }) { raceId: row.race.id, position: row.position, valueId: row.value.id, + overwriteTo: row.overwrite, }} button={