players from query

This commit is contained in:
Robin Appelman 2023-04-16 15:02:28 +02:00
commit 6ba687d9db
3 changed files with 30 additions and 7 deletions

View file

@ -9,7 +9,7 @@ export interface SteamUser {
} }
export class Api { export class Api {
private base: string; private readonly base: string;
constructor(base: string) { constructor(base: string) {
this.base = base; this.base = base;
@ -36,6 +36,20 @@ export class Api {
return []; return [];
} }
return await this.request('users/search', {query}) as SteamUser[]; const players = await this.request('users/search', {query}) as SteamUser[];
for (let player of players) {
localStorage.setItem(`player.${player.steamid}`, JSON.stringify(player));
}
return players
}
async getPlayer(id: string | number): Promise<SteamUser> {
const cached = localStorage.getItem(`player.${id}`);
if (cached) {
return JSON.parse(cached);
}
const player = await this.request(`users/${id}`, {}) as SteamUser;
localStorage.setItem(`player.${id}`, JSON.stringify(player));
return player;
} }
} }

View file

@ -1,7 +1,7 @@
import {render} from "solid-js/web"; import {render} from "solid-js/web";
import {ready} from "./ready"; import {ready} from "./ready";
import {FilterBar} from "./filterbar" import {FilterBar} from "./filterbar"
import {Api} from "./api"; import {Api, SteamId} from "./api";
let lastFilter = { let lastFilter = {
mode: "", mode: "",
@ -9,21 +9,30 @@ let lastFilter = {
players: [] players: []
}; };
ready(() => { ready(async () => {
const filterBar = document.getElementById('filter-bar'); const filterBar = document.getElementById('filter-bar');
const maps = filterBar.dataset.maps.split(","); const maps = filterBar.dataset.maps.split(",");
const apiBase = filterBar.dataset.apiBase; const apiBase = filterBar.dataset.apiBase;
const api = new Api(apiBase); const api = new Api(apiBase);
const demoListBody = document.querySelector('.demolist tbody'); const demoListBody = document.querySelector('.demolist tbody');
const searchParams = new URLSearchParams(window.location.search); const searchParams = new URLSearchParams(window.location.search);
const steamIds = (searchParams.get("players") || "").split(",").filter(id => id);
console.log(steamIds);
let players = [];
if (steamIds.length) {
players = await Promise.all(steamIds.map(steamId => api.getPlayer(steamId)));
console.log(players);
}
lastFilter = { lastFilter = {
mode: searchParams.get("mode") || "", mode: searchParams.get("mode") || "",
map: searchParams.get("map") || "", map: searchParams.get("map") || "",
players: (searchParams.get("players") || "").split(",") players,
}; };
render(() => <FilterBar maps={maps} api={api} initialFilter={lastFilter} onChange={onFilter.bind(null, api, demoListBody)}/>, filterBar); render(() => <FilterBar maps={maps} api={api} initialFilter={lastFilter}
onChange={onFilter.bind(null, api, demoListBody)}/>, filterBar);
}); });
const filterEq = (a, b) => { const filterEq = (a, b) => {

View file

@ -50,7 +50,7 @@ export const FilterBar = ({maps, api, onChange, initialFilter}: FilterBarProps)
map: "", map: "",
}); });
}}/> }}/>
<Select class="players" onChange={players => setFilterSet({ <Select class="players" initialValue={initialFilter.players} onChange={players => setFilterSet({
...filterSet(), ...filterSet(),
players players
})} multiple placeholder="All Players" format={playerFormat} {...playerOptions} /> })} multiple placeholder="All Players" format={playerFormat} {...playerOptions} />