diff --git a/src/api/offstylesApi.ts b/src/api/offstylesApi.ts index ebd8954..57c990e 100644 --- a/src/api/offstylesApi.ts +++ b/src/api/offstylesApi.ts @@ -104,6 +104,7 @@ class OffstylesApi extends Api { break; case 'player': params.append("steamid", filter.scope.steamid); + if (filter.scope.wr !== undefined) params.append("wr", filter.scope.wr.toString()); break; case 'globals': if (filter.scope.recent) params.append("recent", "true"); diff --git a/src/components/MapDetails.vue b/src/components/MapDetails.vue index aa83031..4ce8328 100644 --- a/src/components/MapDetails.vue +++ b/src/components/MapDetails.vue @@ -36,7 +36,7 @@ }; }); - const filterChanged = async (name: 'style' | 'sort' | 'best' | 'has_replay' | 'invalidated', value: string | number | boolean | undefined) => { + const filterChanged = async (name: 'style' | 'sort' | 'best' | 'has_replay' | 'wr' | 'invalidated', value: string | number | boolean | undefined) => { await router.replace({ query: urlParams.updateMany({ [name]: value }) }); }; diff --git a/src/components/PlayerDetails.vue b/src/components/PlayerDetails.vue index 056e074..f47e57c 100644 --- a/src/components/PlayerDetails.vue +++ b/src/components/PlayerDetails.vue @@ -50,6 +50,7 @@ sort: (q.sort as SortOrder) || 'Newest', best: q.best !== undefined ? q.best === 'true' : true, hasReplay: q.has_replay === 'true', + wr: q.wr === 'true', invalidated: q.invalidated !== undefined ? q.invalidated === 'true' : undefined, }; }); @@ -212,7 +213,7 @@ } }; - const filterChanged = async (name: 'style' | 'sort' | 'best' | 'has_replay' | 'invalidated', value: string | number | boolean | undefined) => { + const filterChanged = async (name: 'style' | 'sort' | 'best' | 'has_replay' | 'wr' | 'invalidated', value: string | number | boolean | undefined) => { await router.replace({ query: urlParams.updateMany({ [name]: value }) }); }; @@ -283,6 +284,8 @@ :sort="currentFilter.sort" :best="currentFilter.best" :hasReplay="currentFilter.hasReplay" + :wr="currentFilter.wr" + :showWr="true" :invalidated="currentFilter.invalidated" :styleOptions="playerStyleOptions" @filter-Changed="filterChanged" diff --git a/src/components/TimesFilterBar.vue b/src/components/TimesFilterBar.vue index 345b9df..8e73769 100644 --- a/src/components/TimesFilterBar.vue +++ b/src/components/TimesFilterBar.vue @@ -9,7 +9,7 @@ import { useModerationStore } from '@/stores/moderation'; type InvalidatedChoice = 'hide' | 'mix' | 'only'; - type FilterKey = 'style' | 'sort' | 'best' | 'has_replay' | 'invalidated'; + type FilterKey = 'style' | 'sort' | 'best' | 'has_replay' | 'wr' | 'invalidated'; const SORT_OPTIONS: SortOrder[] = ['Fastest', 'Slowest', 'Newest', 'Oldest']; const INVALIDATED_OPTIONS: { value: InvalidatedChoice, label: string }[] = [ @@ -23,6 +23,8 @@ sort: SortOrder, best: boolean, hasReplay: boolean, + wr?: boolean, + showWr?: boolean, invalidated: boolean | undefined, styleOptions: number[], }>(); @@ -62,6 +64,11 @@ emit('filter-Changed', 'has_replay', checked ? true : undefined); }; + const wrChanged = (event: Event) => { + const checked = (event.target as HTMLInputElement).checked; + emit('filter-Changed', 'wr', checked ? true : undefined); + }; + const invalidatedChanged = (value: InvalidatedChoice) => { const mapped = value === 'hide' ? undefined : value === 'only'; emit('filter-Changed', 'invalidated', mapped); @@ -116,6 +123,11 @@ Has replay + +