From fafcff16a9cf13fc6c252011b2bc4310930786fd Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Sat, 24 Oct 2026 17:23:05 +0300 Subject: [PATCH] Show map win rates in match profile map preferences (#3469) --- app/components/elements/ChipRadio.tsx | 3 + app/db/seed/factories/MapResultFactory.ts | 23 + .../match-profile/core/MapWinRates.test.ts | 99 ++++ .../match-profile/core/MapWinRates.ts | 113 ++++ .../PlayerStatRepository.server.test.ts | 43 ++ .../PlayerStatRepository.server.ts | 22 + .../MapModePreferencesField.module.css | 485 ++++++++++++++++++ .../components/MapModePreferencesField.tsx | 475 +++++++++++++++-- .../settings/components/MatchProfileTab.tsx | 2 + .../components/ModeMapPoolPicker.module.css | 47 -- .../settings/components/ModeMapPoolPicker.tsx | 53 +- .../PreferenceRadioGroup.module.css | 35 -- .../components/PreferenceRadioGroup.tsx | 84 --- .../settings/loaders/settings.server.ts | 17 +- .../2026-10-24-map-preferences-win-rates.md | 9 + e2e/helpers/factories.ts | 1 + .../settings/map-mode-preferences-field.ts | 43 +- e2e/settings.spec.ts | 65 ++- e2e/team.spec.ts | 11 +- locales/en/common.json | 1 - locales/en/settings.json | 12 + locales/es-ES/common.json | 1 - locales/fr-EU/common.json | 1 - scripts/benchmark-db/cases.ts | 6 + 24 files changed, 1365 insertions(+), 286 deletions(-) create mode 100644 app/db/seed/factories/MapResultFactory.ts create mode 100644 app/features/match-profile/core/MapWinRates.test.ts create mode 100644 app/features/match-profile/core/MapWinRates.ts create mode 100644 app/features/settings/components/MapModePreferencesField.module.css delete mode 100644 app/features/settings/components/PreferenceRadioGroup.module.css delete mode 100644 app/features/settings/components/PreferenceRadioGroup.tsx create mode 100644 changelog/2026-10-24-map-preferences-win-rates.md diff --git a/app/components/elements/ChipRadio.tsx b/app/components/elements/ChipRadio.tsx index e2b21bdfc..169811fd9 100644 --- a/app/components/elements/ChipRadio.tsx +++ b/app/components/elements/ChipRadio.tsx @@ -5,6 +5,7 @@ interface SendouChipRadioGroupProps { orientation?: "horizontal" | "vertical"; wrap?: boolean; className?: string; + "aria-label"?: string; } interface SendouChipRadioProps { @@ -20,6 +21,7 @@ export function SendouChipRadioGroup({ orientation = "horizontal", wrap = false, className, + "aria-label": ariaLabel, }: SendouChipRadioGroupProps) { return (
+ {t("settings:matchProfile.maps.winRatesExplanation")} +
+ ) : null} +
+ {t(`game-misc:STAGE_${stageId}`)}
+
+ ))}
+