filter clear

This commit is contained in:
Robin Appelman 2023-04-16 13:32:28 +02:00
commit 28782ff609
6 changed files with 77 additions and 31 deletions

42
Cargo.lock generated
View file

@ -1583,7 +1583,7 @@ dependencies = [
[[package]] [[package]]
name = "jsx-dom-expressions" name = "jsx-dom-expressions"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/icewind1991/swc-plugin-jsx-dom-expressions?branch=main#ee9ada1edaa3d03e6d447009b72b11846aa53aa9" source = "git+https://github.com/icewind1991/swc-plugin-jsx-dom-expressions?branch=event#c1d74d1dfb69a28a114854f18973c0848945855c"
dependencies = [ dependencies = [
"html-escape", "html-escape",
"serde", "serde",
@ -3588,9 +3588,9 @@ dependencies = [
[[package]] [[package]]
name = "swc" name = "swc"
version = "0.260.20" version = "0.260.22"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4dee06dc12f7dc271136e64741ae3998c88a341854083561b18913701c9d62e8" checksum = "d532de929cc1827ed29a577ff9e8f4ca35cffa26223eda26a2993d0090645689"
dependencies = [ dependencies = [
"ahash", "ahash",
"anyhow", "anyhow",
@ -3651,9 +3651,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_bundler" name = "swc_bundler"
version = "0.213.14" version = "0.213.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0665ca9473bdf0e2f4b487ee17d7e9411704188b520dbcb6fd7f39e5821120c2" checksum = "898fdbc4f307a6c3dbf9b51fbcc7935be1860959f847b03671d67d4ed8635b7a"
dependencies = [ dependencies = [
"ahash", "ahash",
"anyhow", "anyhow",
@ -3754,9 +3754,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_core" name = "swc_core"
version = "0.75.20" version = "0.75.22"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f087f9c1f06bf7b2ad6303bd7362614653e381f3bb3b35f20d658663245e9993" checksum = "c055b088e0c1ccb5797b1f7b135d2afecbe8386755c0f0967d079ca65d446ed2"
dependencies = [ dependencies = [
"once_cell", "once_cell",
"swc_atoms", "swc_atoms",
@ -3881,9 +3881,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_minifier" name = "swc_ecma_minifier"
version = "0.180.14" version = "0.180.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c612f2e47407dc85b6e9d31d41b180f08c411c39369909c9fe9978842698e08" checksum = "954cd73cfd3477ddf69c67e7a797aaffe053aaa3ff0087d6696d3c942c868634"
dependencies = [ dependencies = [
"ahash", "ahash",
"arrayvec 0.7.2", "arrayvec 0.7.2",
@ -3936,9 +3936,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_preset_env" name = "swc_ecma_preset_env"
version = "0.194.12" version = "0.194.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ae58e6cd5c1357acf8f4dd6d6d7a2ea5f4ac990b16614e027f6e73f1c58f378" checksum = "b2328e4d269345cc638077a4a04bc630e70ad3ad34b05f89186da6c87aa71cb4"
dependencies = [ dependencies = [
"ahash", "ahash",
"anyhow", "anyhow",
@ -3973,9 +3973,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_transforms" name = "swc_ecma_transforms"
version = "0.217.12" version = "0.217.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5351d89ecd20766be49ccf4487ece353d59e40c3f8c4710a50135d3e60558acf" checksum = "c22012722f4fddf1ccc9855c04e1887a11824cecf46c27fff16de56a3daeec3b"
dependencies = [ dependencies = [
"swc_atoms", "swc_atoms",
"swc_common", "swc_common",
@ -4069,9 +4069,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_transforms_module" name = "swc_ecma_transforms_module"
version = "0.169.12" version = "0.169.13"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4468531ece48e59ea178611c8432bb33e84e16be1a51b018d8dc9d2897ab2173" checksum = "aa808a92ea3bc645d2021c63d54c4a440b43a2686bc6f3344f87c9ce9cf888ff"
dependencies = [ dependencies = [
"Inflector", "Inflector",
"ahash", "ahash",
@ -4097,9 +4097,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_transforms_optimization" name = "swc_ecma_transforms_optimization"
version = "0.186.12" version = "0.186.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e941093cf985814f193052bf1539da35833f494b3d7da83171c8146b9b71e593" checksum = "db5fb60aa2e6c5c4f401ace0a8ac9ed21fa130d8f9918e22a9cf87a7c31f456d"
dependencies = [ dependencies = [
"ahash", "ahash",
"dashmap", "dashmap",
@ -4142,9 +4142,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_transforms_react" name = "swc_ecma_transforms_react"
version = "0.172.12" version = "0.172.13"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "635b4e9950932dd16d8f7054ff73e6aa8b31feb3f327f4b64ca81942feae06e8" checksum = "524bf7df90558cc643a3f367c79e9b476b81b92990dc5df3c31febbd7110875a"
dependencies = [ dependencies = [
"ahash", "ahash",
"base64 0.13.1", "base64 0.13.1",
@ -4194,9 +4194,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_transforms_typescript" name = "swc_ecma_transforms_typescript"
version = "0.176.12" version = "0.176.13"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06be13a5b51382dc3072f7103ffd1540f7d29c9063150f28f57bdf30d20e1fd9" checksum = "72b9b4384e78d27819237123b161c439d6fbb75ff55da532e6df809ebc73cf48"
dependencies = [ dependencies = [
"serde", "serde",
"swc_atoms", "swc_atoms",

View file

@ -20,7 +20,7 @@ swc_ecma_transforms_base = { version = "0.126.10" }
swc_ecma_transforms_typescript = { version = "0.176.12" } swc_ecma_transforms_typescript = { version = "0.176.12" }
swc_ecma_visit = { version = "0.89.4" } swc_ecma_visit = { version = "0.89.4" }
anyhow = "1.0.70" anyhow = "1.0.70"
jsx-dom-expressions = { version = "0.1", git = "https://github.com/icewind1991/swc-plugin-jsx-dom-expressions", branch = "main" } jsx-dom-expressions = { version = "0.1", git = "https://github.com/icewind1991/swc-plugin-jsx-dom-expressions", branch = "event" }
#jsx-dom-expressions = { version = "0.1", path = "../../../../rust/swc-plugin-jsx-dom-expressions" } #jsx-dom-expressions = { version = "0.1", path = "../../../../rust/swc-plugin-jsx-dom-expressions" }
rand = "0.8.5" rand = "0.8.5"
fnv = "1.0.7" fnv = "1.0.7"

View file

@ -13,17 +13,29 @@ ready(() => {
render(() => <FilterBar maps={maps} api={api} onChange={onFilter.bind(null, api, demoListBody)}/>, filterBar); render(() => <FilterBar maps={maps} api={api} onChange={onFilter.bind(null, api, demoListBody)}/>, filterBar);
}); });
let lastFilter = {
mode: "",
map: "",
players: []
};
const filterEq = (a, b) => {
return (a.mode || "") === (b.mode || "")
&& (a.map || "") === (b.map || "")
&& a.players.length === b.players.length && b.players.every(player => a.players.includes(player))
}
const onFilter = async (api, demoListBody, filter) => { const onFilter = async (api, demoListBody, filter) => {
if (!(filter.mode || filter.map || filter.players.length)) { if (filterEq(lastFilter, filter)) {
return; return;
} }
lastFilter = filter;
let queryParams = new URLSearchParams({ let queryParams = new URLSearchParams({
players: filter.players.map(player => player.id).join(','), players: filter.players.map(player => player.id).join(','),
mode: filter.mode.toLowerCase(), mode: (filter.mode || "").toLowerCase(),
map: filter.map, map: filter.map || "",
}); });
console.log(queryParams);
const response = await fetch("/fragments/demo-list?" + queryParams); const response = await fetch("/fragments/demo-list?" + queryParams);
document.querySelector('.demolist tbody').innerHTML = await response.text(); document.querySelector('.demolist tbody').innerHTML = await response.text();
} }

View file

@ -16,6 +16,8 @@ export const FilterBar = ({maps, api, onChange}: FilterBarProps) => {
const playerOptions = createAsyncOptions(search => api.searchPlayer(search)); const playerOptions = createAsyncOptions(search => api.searchPlayer(search));
const playerFormat = player => player.name; const playerFormat = player => player.name;
const [initialMode, setInitialMode] = createSignal("", {equals: false});
const [initialMap, setInitialMap] = createSignal("", {equals: false});
const [filterSet, setFilterSet] = createSignal({ const [filterSet, setFilterSet] = createSignal({
mode: "", mode: "",
@ -28,18 +30,40 @@ export const FilterBar = ({maps, api, onChange}: FilterBarProps) => {
<Select class="mode" onChange={mode => setFilterSet({ <Select class="mode" onChange={mode => setFilterSet({
...filterSet(), ...filterSet(),
mode mode
})} placeholder="All Types" {...modes} /> })} initialValue={initialMode()} placeholder="All Types" {...modes} />
<Reset reset={() => {
setInitialMode("");
onChange({
...filterSet(),
mode: "",
});
}}/>
<Select class="maps" onChange={map => setFilterSet({ <Select class="maps" onChange={map => setFilterSet({
...filterSet(), ...filterSet(),
map map
})} placeholder="All Maps" {...mapOptions} /> })} initialValue={initialMap()} placeholder="All Maps" {...mapOptions} />
<Reset reset={() => {
setInitialMap("");
console.log({
...filterSet(),
map: "",
});
onChange({
...filterSet(),
map: "",
});
}}/>
<Select class="players" onChange={players => setFilterSet({ <Select class="players" onChange={players => setFilterSet({
...filterSet(), ...filterSet(),
players players
})} multiple placeholder="All Players" format={playerFormat} {...playerOptions} /> })} multiple placeholder="All Players" format={playerFormat} {...playerOptions} />
</div>; </div>;
} }
export const Reset = ({reset}) => {
return <button onMouseDown={reset} class="reset">X</button>;
}
export interface FilterSet { export interface FilterSet {
mode: string, mode: string,
map: string, map: string,

View file

@ -393,7 +393,7 @@ where
impl Filter { impl Filter {
fn is_empty(&self) -> bool { fn is_empty(&self) -> bool {
self.mode != GameMode::default() self.mode == GameMode::default()
&& self.map.is_empty() && self.map.is_empty()
&& self.before.is_none() && self.before.is_none()
&& self.players.is_empty() && self.players.is_empty()

View file

@ -56,6 +56,7 @@
width: 150px; width: 150px;
& .solid-select-control { & .solid-select-control {
border-right: none;
border-top-right-radius: 0; border-top-right-radius: 0;
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
} }
@ -66,7 +67,6 @@
& .solid-select-control { & .solid-select-control {
border-right: none; border-right: none;
border-left: none;
border-radius: 0; border-radius: 0;
} }
} }
@ -79,4 +79,14 @@
border-bottom-left-radius: 0; border-bottom-left-radius: 0;
} }
} }
& .reset {
border-left: none;
border-right: none;
border-bottom: var(--text-secondary) 1px solid;
border-top: var(--text-secondary) 1px solid;
padding: 0 10px;
outline: none;
background: transparent;
}
} }