mirror of
https://codeberg.org/demostf/frontend.git
synced 2026-06-03 18:24:12 +02:00
filter clear
This commit is contained in:
parent
ea7d0c5e42
commit
28782ff609
6 changed files with 77 additions and 31 deletions
42
Cargo.lock
generated
42
Cargo.lock
generated
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue