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 (
-
+
);
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'],