diff --git a/frontend/src/components/TableFilter/CutOffRating.tsx b/frontend/src/components/TableFilter/CutOffRating.tsx index f2373b2a..376b4d79 100644 --- a/frontend/src/components/TableFilter/CutOffRating.tsx +++ b/frontend/src/components/TableFilter/CutOffRating.tsx @@ -1,4 +1,11 @@ -import { getRatingColor, getSeasonRankImageFromRating } from '@/utils/table'; +import { getRatingColor, getSeasonRankImageFromRating } from "@/utils/table"; +import { useSearchParams } from "react-router-dom"; +import { getFromSearchParams } from "../DataTable"; +import { useEffect, useState } from "react"; +import { + SEARCH_PARAM_TO_FULL_SPEC, + SEARCH_PARAM_TO_SPEC, +} from "@/constants/filterSchema"; interface IProps { bracket: string; @@ -6,35 +13,87 @@ interface IProps { } const ratingRewardMap = { - '3v3': 'ARENA_3v3', - rbg: 'BATTLEGROUNDS/alliance', + "3v3": "ARENA_3v3", + rbg: "BATTLEGROUNDS/alliance", }; const CutOffText = ({ bracket, statistic }: IProps) => { + const [searchParams] = useSearchParams(); + const [selectedSpecs, setSelectedSpecs] = useState( + getFromSearchParams(searchParams, "specs") + ); const rankOneTitleColor = getRatingColor(true); - const rewards = statistic?.cutoffs?.rewards; - const spotWithNoAlts = statistic?.cutoffs?.spotWithNoAlts - const cutOffRating = rewards?.[ratingRewardMap[bracket]]; - const spotsWithNoAlts = spotWithNoAlts?.[ratingRewardMap[bracket]]; + const spotWithNoAlts = statistic?.cutoffs?.spotWithNoAlts; - return ( - - {bracket === '3v3' - ? `Verdant Gladiator: Dragonflight Season 3 - Rating: ${cutOffRating}. Spots: ${spotsWithNoAlts}` - : `Hero of the Alliance & Horde: Verdant - Rating: ${cutOffRating}. Spots: ${spotsWithNoAlts}`} - - ); + useEffect(() => { + setSelectedSpecs(getFromSearchParams(searchParams, "specs")); + }, [searchParams]); + + if (bracket === "rbg" || bracket === "3v3") { + const cutOffRating = rewards?.[ratingRewardMap[bracket]]; + const spotsWithNoAlts = spotWithNoAlts?.[ratingRewardMap[bracket]]; + return ( + + {bracket === "3v3" + ? `Verdant Gladiator - Rating: ${cutOffRating}. Spots: ${spotsWithNoAlts}` + : `Hero: Verdant - Rating: ${cutOffRating}. Spots: ${spotsWithNoAlts}`} + + ); + } else if (bracket === "shuffle" && selectedSpecs.length == 1) { + const specName = SEARCH_PARAM_TO_FULL_SPEC[selectedSpecs[0]]; + const key = `SHUFFLE/${SEARCH_PARAM_TO_SPEC[selectedSpecs[0]]}`; + const cutOffRating = rewards?.[key]; + const spotsWithNoAlts = spotWithNoAlts?.[key]; + return ( + + {`Verdant Legend for ${specName} - Rating: ${cutOffRating}. Spots: ${spotsWithNoAlts}`} + + ); + } else if (bracket === "shuffle" && selectedSpecs.length == 0) { + return ( + + Select the spec filter to see the cutoff rating + + ); + } else if (bracket === "shuffle" && selectedSpecs.length > 1) { + return ( + + Select only one spec to see the cutoff rating + + ); + } else { + return
; + } }; const CutOffRating = ({ bracket, statistic }: IProps) => { - if (!statistic?.cutoffs?.rewards?.ARENA_3v3 || !['rbg', '3v3'].includes(bracket)) { + if ( + !statistic?.cutoffs?.rewards?.ARENA_3v3 || + !["shuffle", "rbg", "3v3"].includes(bracket) + ) { return
; } return (
- Season Rank + Season Rank
); diff --git a/frontend/src/constants/filterSchema.ts b/frontend/src/constants/filterSchema.ts index 0e7db397..aeeab5e0 100644 --- a/frontend/src/constants/filterSchema.ts +++ b/frontend/src/constants/filterSchema.ts @@ -14,6 +14,91 @@ export const CRESTS_AND_SPECS = { 13: ['devastationevoker', 'preservationevoker', 'augmentationevoker'], }; +export const SEARCH_PARAM_TO_SPEC = { + 'afflictionwarlock': 'affliction', + 'demonologywarlock': 'demonology', + 'destructionwarlock': 'destruction', + 'arcanemage': 'arcane', + 'firemage': 'fire', + 'frostmage': 'frostm', + 'armswarrior': 'arms', + 'furywarrior': 'fury', + 'protectionwarrior': 'protection', + 'assassinationrogue': 'assassination', + 'outlawrogue': 'outlaw', + 'subtletyrogue': 'subtlety', + 'balancedruid': 'balance', + 'feraldruid': 'feral', + 'guardiandruid': 'guardian', + 'restorationdruid': 'restodruid', + 'beastmasteryhunter': 'beastmastery', + 'marksmanshiphunter': 'marksmanship', + 'survivalhunter': 'survival', + 'disciplinepriest': 'discipline', + 'holypriest': 'holypri', + 'shadowpriest': 'shadow', + 'blooddeathknight': 'blood', + 'frostdeathknight': 'frostd', + 'unholydeathknight': 'unholy', + 'elementalshaman': 'elemental', + 'enhancementshaman': 'enhancement', + 'restorationshaman': 'restosham', + 'holypaladin': 'holypala', + 'protectionpaladin': 'protection', + 'retributionpaladin': 'retribution', + 'brewmastermonk': 'brewmaster', + 'windwalkermonk': 'windwalker', + 'mistweavermonk': 'mistweaver', + 'havocdemonhunter': 'havoc', + 'vengeancedemonhunter': 'vengeance', + 'devastationevoker': 'devastation', + 'preservationevoker': 'preservation', + 'augmentationevoker': 'augmentation', +}; + +export const SEARCH_PARAM_TO_FULL_SPEC = { + 'afflictionwarlock': 'Affliction Warlock', + 'demonologywarlock': 'Demonology Warlock', + 'destructionwarlock': 'Destruction Warlock', + 'arcanemage': 'Arcane Mage', + 'firemage': 'Fire Mage', + 'frostmage': 'Frost Mage', + 'armswarrior': 'Arms Warrior', + 'furywarrior': 'Fury Warrior', + 'protectionwarrior': 'Protection Warrior', + 'assassinationrogue': 'Assassination Rogue', + 'outlawrogue': 'Outlaw Rogue', + 'subtletyrogue': 'Subtlety Rogue', + 'balancedruid': 'Balance Druid', + 'feraldruid': 'Feral Druid', + 'guardiandruid': 'Guardian Druid', + 'restorationdruid': 'Restoration Druid', + 'beastmasteryhunter': 'Beast Mastery Hunter', + 'marksmanshiphunter': 'Marksmanship Hunter', + 'survivalhunter': 'Survival Hunter', + 'disciplinepriest': 'Discipline Priest', + 'holypriest': 'Holy Priest', + 'shadowpriest': 'Shadow Priest', + 'blooddeathknight': 'Blood Death Knight', + 'frostdeathknight': 'Frost Death Knight', + 'unholydeathknight': 'Unholy Death Knight', + 'elementalshaman': 'Elemental Shaman', + 'enhancementshaman': 'Enhancement Shaman', + 'restorationshaman': 'Restoration Shaman', + 'holypaladin': 'Holy Paladin', + 'protectionpaladin': 'Protection Paladin', + 'retributionpaladin': 'Retribution Paladin', + 'brewmastermonk': 'Brewmaster Monk', + 'windwalkermonk': 'Windwalker Monk', + 'mistweavermonk': 'Mistweaver Monk', + 'havocdemonhunter': 'Havoc Demon Hunter', + 'vengeancedemonhunter': 'Vengeance Demon Hunter', + 'devastationevoker': 'Devastation Evoker', + 'preservationevoker': 'Preservation Evoker', + 'augmentationevoker': 'Augmentation Evoker', +}; + + export const CLASS_AND_SPECS = { Warrior: ['Arms', 'Fury', 'Protection'], Paladin: ['Holy', 'Protection', 'Retribution'],