From a6e75006e6c1cad8d6e59ec1c2316b9755629b02 Mon Sep 17 00:00:00 2001 From: legonzaur Date: Tue, 20 Jun 2023 12:24:33 +0200 Subject: [PATCH] Add multiselection --- src/main.ts | 8 +++-- src/stores/kill.ts | 42 ++++++++++++++++++++----- src/views/PlayerView.vue | 68 +++++++++++++++++++++++++++++++--------- 3 files changed, 92 insertions(+), 26 deletions(-) diff --git a/src/main.ts b/src/main.ts index a2f5c8b..02cf250 100644 --- a/src/main.ts +++ b/src/main.ts @@ -57,12 +57,14 @@ function registerWebSocketKill (data : websocketData) { return objectEqual(filterWithoutPlayer, e.value.filter) })) if (!list) return - if (!(!list.filter.server || list.filter.server === data.servername)) return + if (!(!list.filter.server || list.filter.server.includes(data.servername))) return - const WeaponFilter = (!list.filter.weapon || list.filter.weapon === data.cause_of_death) - const CurrentWeaponFilter = list.filter.weapon === data.attacker_current_weapon + const WeaponFilter = (!list.filter.weapon || list.filter.weapon.includes(data.cause_of_death)) + const CurrentWeaponFilter = list.filter.weapon?.includes(data.attacker_current_weapon) if (!(WeaponFilter || CurrentWeaponFilter)) return + if (!(!list.filter.gamemode || list.filter.gamemode.includes(data.game_mode))) return + if (!list.data[data.victim_id]) { list.data[data.victim_id] = ref({ deaths: 0, diff --git a/src/stores/kill.ts b/src/stores/kill.ts index 248ae5b..184d1b8 100644 --- a/src/stores/kill.ts +++ b/src/stores/kill.ts @@ -3,12 +3,12 @@ import * as assert from 'assert' import { Ref, ref, shallowRef, triggerRef, unref } from 'vue' export interface Filters { - server?: string; + server?: string[]; player?: string; - weapon?: string; - host?: string; - map?: string; - gamemode?: string; + weapon?: string[]; + host?: string[]; + map?: string[]; + gamemode?: string[]; } export function removeNullEntries (a: Filters) { @@ -155,6 +155,8 @@ export const useKillStore = defineStore('kill', { state.weapons.find((e) => objectEqual(unref(e).filter, filters)), getServerList: (state) => (filters: Filters) => state.servers.find((e) => objectEqual(unref(e).filter, filters)), + getGamemodeList: (state) => (filters: Filters) => + state.gamemodes.find((e) => objectEqual(unref(e).filter, filters)), getNSServers: (state) => state.nsServers }, actions: { @@ -167,7 +169,7 @@ export const useKillStore = defineStore('kill', { } fetchWithLoading( 'https://tone.sleepycat.date/v2/client/players?' + - new URLSearchParams(filter as Record), + new URLSearchParams(Object.entries(filter).map(e => [e[1]].flat().map(v => [e[0], v])).flat(1)), (progress) => { if (entry && unref(entry).progress !== 1) { unref(entry).progress = progress @@ -192,7 +194,7 @@ export const useKillStore = defineStore('kill', { fetchWithLoading( 'https://tone.sleepycat.date/v2/client/weapons?' + - new URLSearchParams(filter as Record), + new URLSearchParams(Object.entries(filter).map(e => [e[1]].flat().map(v => [e[0], v])).flat(1)), (progress) => { if (entry && unref(entry).progress !== 1) { unref(entry).progress = progress @@ -216,7 +218,7 @@ export const useKillStore = defineStore('kill', { } fetchWithLoading( 'https://tone.sleepycat.date/v2/client/servers?' + - new URLSearchParams(filter as Record), + new URLSearchParams(Object.entries(filter).map(e => [e[1]].flat().map(v => [e[0], v])).flat(1)), (progress) => { if (entry && unref(entry).progress !== 1) { unref(entry).progress = progress @@ -231,6 +233,30 @@ export const useKillStore = defineStore('kill', { }) return entry }, + fetchGamemodes (filter: Filters) { + filter = removeNullEntries(filter) + let entry = this.gamemodes.find((e) => objectEqual(unref(e).filter, filter)) + if (!entry) { + entry = shallowRef({ filter, data: {} }) + this.gamemodes.push(entry) + } + fetchWithLoading( + 'https://tone.sleepycat.date/v2/client/gamemodes?' + + new URLSearchParams(Object.entries(filter).map(e => [e[1]].flat().map(v => [e[0], v])).flat(1)), + (progress) => { + if (entry && unref(entry).progress !== 1) { + unref(entry).progress = progress + if (progress !== 1) triggerRef(entry) + } + } + ).then(async response => { + if (entry) { + unref(entry).data = Object.fromEntries(Object.entries(await response?.json()).map(e => [e[0], ref(e[1] as Kill)])) + triggerRef(entry) + } + }) + return entry + }, fetchNSServers () { fetch( 'https://northstar.tf/client/servers').then(async response => { diff --git a/src/views/PlayerView.vue b/src/views/PlayerView.vue index 9107ad1..306f63a 100644 --- a/src/views/PlayerView.vue +++ b/src/views/PlayerView.vue @@ -8,11 +8,28 @@ v-model="model.server" :options="sortedServerList" :allow-empty="true" + :close-on-select="false" + :multiple="true" > + + + + + + +
@@ -65,7 +83,7 @@