From 50759f129cbaa0341c704b7b70d36643376cc768 Mon Sep 17 00:00:00 2001 From: legonzaur Date: Mon, 1 May 2023 19:35:28 +0200 Subject: [PATCH] add query arguments for filters --- src/components/PlayerList.vue | 13 ++- src/views/PlayerView.vue | 145 ++++++++++++++++++++++++++++------ 2 files changed, 125 insertions(+), 33 deletions(-) diff --git a/src/components/PlayerList.vue b/src/components/PlayerList.vue index 1f28fe2..358914a 100644 --- a/src/components/PlayerList.vue +++ b/src/components/PlayerList.vue @@ -82,16 +82,13 @@ export default defineComponent({ } }, watch: { - players: { - handler (newval: { [key: string]: Player }): void { - if (!newval) return - this.sortingData.direction *= -1 - }, - immediate: true - }, playerHighlighted (newval) { + console.log('newVal') const newElement = this.$refs['player:' + newval] as HTMLElement[] - if (newElement && newElement[0]) { newElement[0].scrollIntoView({ behavior: 'smooth', block: 'center' }) } + // Some hack because of some inconsistency + setTimeout(function () { + if (newElement && newElement[0]) { newElement[0].scrollIntoView({ behavior: 'smooth', block: 'center' }) } + }, 0) } }, updated () { diff --git a/src/views/PlayerView.vue b/src/views/PlayerView.vue index 2894628..3230a10 100644 --- a/src/views/PlayerView.vue +++ b/src/views/PlayerView.vue @@ -12,34 +12,71 @@ --> - + - + - +
- + - + - +
@@ -53,22 +90,37 @@ import { defineComponent } from 'vue' import VueMultiselect from 'vue-multiselect' import 'vue-multiselect/dist/vue-multiselect.css' import weapons from '../stores/weapons.json' +import router from '@/router' export default defineComponent({ name: 'PlayerView', components: { - VueMultiselect, PlayerList, PlayerChart, WeaponChart + VueMultiselect, + PlayerList, + PlayerChart, + WeaponChart }, data () { return { - model: { server: undefined, weapon: undefined } as unknown as { weapon: Weapon | Weapon[] | undefined, server: (Server & { name?: string }) | (Server & { name?: string })[] | undefined }, + model: { server: undefined, weapon: undefined } as unknown as { + weapon: string | undefined; + server: { name?: string } | (Server & { name?: string })[] | undefined; + }, filters: {} as Filters, store: useKillStore(), playerHighlighted: undefined as (Player & { id: string }) | undefined, weaponLocale: weapons as { [key: string]: string } } }, + created () { + let server + if (this.$route.query.server) server = { name: this.$route.query.server?.toString() } + this.model = { + server, + weapon: this.$route.query.weapon?.toString() + } + }, computed: { servers (): { [key: string]: Server } { // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -78,10 +130,15 @@ export default defineComponent({ return data }, groupedServers () { - const hosts = [] as { id: string, servers: (Server & { name?: string })[] }[] + const hosts = [] as { + id: string; + servers: (Server & { name?: string })[]; + }[] Object.entries(this.servers).forEach((e) => { - if (!hosts.find(host => host.id === e[1].host + 'sfdsdfsd')) hosts.push({ id: e[1].host + 'sfdsdfsd', servers: [] as Server[] }) - hosts.find(host => host.id === e[1].host + 'sfdsdfsd')?.servers.push({ name: e[0], ...e[1] }) + if (!hosts.find((host) => host.id === e[1].host + 'sfdsdfsd')) { hosts.push({ id: e[1].host + 'sfdsdfsd', servers: [] as Server[] }) } + hosts + .find((host) => host.id === e[1].host + 'sfdsdfsd') + ?.servers.push({ name: e[0], ...e[1] }) }) return hosts }, @@ -111,7 +168,10 @@ export default defineComponent({ }, sortedPlayerList (): Player[] { if (!this.players) return [] - const players = Object.entries(this.players).map(e => ({ id: e[0], ...e[1] })) + const players = Object.entries(this.players).map((e) => ({ + id: e[0], + ...e[1] + })) return players.sort((a: Player, b: Player) => { if (a.username < b.username) { return -1 @@ -124,12 +184,47 @@ export default defineComponent({ } }, watch: { + players () { + const player = this.$route.query.player?.toString() + if (player && this.playerHighlighted?.id !== player) { + this.highlight_player(player) + } + }, model: { handler (newModel) { this.filters.server = newModel.server?.name this.filters.weapon = newModel.weapon }, deep: true + }, + filters: { + handler (newValue) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { server: _, weapon: _2, ...withoutFilters } = this.$route.query + router.push({ query: { ...newValue, ...withoutFilters } }).then(e => { console.log(e) }) + }, + deep: true + }, + playerHighlighted (newValue, oldValue) { + if (newValue?.id === oldValue?.id) return + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { player: _, ...withoutPlayer } = this.$route.query + router.push({ query: { player: newValue?.id, ...withoutPlayer } }).then(e => { console.log(e) }) + }, + '$route' (to) { + if (this.playerHighlighted?.id !== to.query.player) { + const playerId = to.query.player?.toString() + if (playerId) { + this.highlight_player(playerId) + } + } + if (this.filters.weapon !== to.query.weapon) { + this.model.weapon = to.query.weapon + } + if (this.filters.server !== to.query.server) { + if (to.query.server) this.model.server = { name: to.query.server } + else this.model.server = undefined + } } }, methods: { @@ -147,7 +242,7 @@ export default defineComponent({ +} +