From 8f06ffcbbcd6fce1b144b892f78bb84dd2258e2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20Benedek?= Date: Fri, 2 Oct 2026 23:08:28 +0200 Subject: [PATCH] added new option for whitelisting race tags shown on the frontend --- .../kotlin/hu/bme/sch/cmsch/component/race/RaceComponent.kt | 2 ++ frontend/src/api/contexts/config/types.ts | 1 + frontend/src/common-components/CollapsableTableRow.tsx | 6 ++++-- frontend/src/common-components/LeaderboardTable.tsx | 5 ++++- frontend/src/pages/race/components/RaceBoard.tsx | 3 +++ 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/backend/src/main/kotlin/hu/bme/sch/cmsch/component/race/RaceComponent.kt b/backend/src/main/kotlin/hu/bme/sch/cmsch/component/race/RaceComponent.kt index 0590c897..6ad7a470 100644 --- a/backend/src/main/kotlin/hu/bme/sch/cmsch/component/race/RaceComponent.kt +++ b/backend/src/main/kotlin/hu/bme/sch/cmsch/component/race/RaceComponent.kt @@ -46,6 +46,8 @@ class RaceComponent( var visible by BooleanSettingRef(fieldName = "Látható", description = "Bekapcsolt állapotban a toplista megjelenik a felhasználók számára") + var leaderboardTags by StringSettingRef(fieldName = "Toplista címkék", description = "A toplista címkéi, vesszővel elválasztva. Csak a megadott címkékkel rendelkező kategóriák jelennek meg a toplistában.") + var extraCategoriesVisible by BooleanSettingRef(fieldName = "Extra kategóriák láthatóak", description = "Bekapcsolt állapotban az extra kategóriás toplisták is megjelennek") diff --git a/frontend/src/api/contexts/config/types.ts b/frontend/src/api/contexts/config/types.ts index 40cdb22a..c2f3c793 100644 --- a/frontend/src/api/contexts/config/types.ts +++ b/frontend/src/api/contexts/config/types.ts @@ -140,6 +140,7 @@ export interface News { export interface Race { title: string visible: boolean + leaderboardTags: string defaultCategoryDescription: string freestyleCategoryName: string extraCategoriesVisible: boolean diff --git a/frontend/src/common-components/CollapsableTableRow.tsx b/frontend/src/common-components/CollapsableTableRow.tsx index 3ec40826..a7a37de9 100644 --- a/frontend/src/common-components/CollapsableTableRow.tsx +++ b/frontend/src/common-components/CollapsableTableRow.tsx @@ -18,6 +18,7 @@ type CollapsableTableRowProps = { suffix?: string categorized?: boolean showDescription: boolean + tagsShown?: string[] | null } export const CollapsableTableRow = ({ @@ -27,7 +28,8 @@ export const CollapsableTableRow = ({ suffix, showGroup, categorized = false, - showDescription + showDescription, + tagsShown = null }: CollapsableTableRowProps) => { const [isOpen, setIsOpen] = useState(false) const isGroupLink = typeof data.groupId !== 'undefined' @@ -50,7 +52,7 @@ export const CollapsableTableRow = ({
{data.name} - {data.label && } + {data.label && (tagsShown?.includes(data.label) || !tagsShown) && }
{showGroup && ( diff --git a/frontend/src/common-components/LeaderboardTable.tsx b/frontend/src/common-components/LeaderboardTable.tsx index 833970c8..c3868371 100644 --- a/frontend/src/common-components/LeaderboardTable.tsx +++ b/frontend/src/common-components/LeaderboardTable.tsx @@ -13,6 +13,7 @@ type LeaderboardTableProps = { suffix?: string detailed?: boolean categorized?: boolean + tagsShown?: string[] | null } export const LeaderBoardTable = ({ @@ -22,7 +23,8 @@ export const LeaderBoardTable = ({ detailed = false, categorized = false, showDescription = false, - searchEnabled = false + searchEnabled = false, + tagsShown = null }: LeaderboardTableProps) => { const dataWithPosition = useMemo(() => data.map((item, index) => ({ ...item, position: index + 1 })), [data]) @@ -66,6 +68,7 @@ export const LeaderBoardTable = ({ suffix={suffix} categorized={categorized} showDescription={showDescription} + tagsShown={tagsShown} /> ))} diff --git a/frontend/src/pages/race/components/RaceBoard.tsx b/frontend/src/pages/race/components/RaceBoard.tsx index 8a633100..1a2f5950 100644 --- a/frontend/src/pages/race/components/RaceBoard.tsx +++ b/frontend/src/pages/race/components/RaceBoard.tsx @@ -22,6 +22,8 @@ const RaceBoard = ({ data, component, isError, isLoading }: Props) => { if (!component || !component.visible) return if (isError || isLoading || !data) return + const tagsShown = component.leaderboardTags.split(',').map((tag) => tag.trim()) + return (

{data.categoryName}

@@ -37,6 +39,7 @@ const RaceBoard = ({ data, component, isError, isLoading }: Props) => { showGroup={true} suffix="mp" showDescription={showDescription} + tagsShown={tagsShown.length > 0 ? tagsShown : null} />
)