This is an automated email from the ASF dual-hosted git repository.

piotr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iggy.git


The following commit(s) were added to refs/heads/master by this push:
     new ebd4e3fa9 chore(deps): upgrade to yew 0.22 and yew-router 0.19 (#2467)
ebd4e3fa9 is described below

commit ebd4e3fa9fbb2796e130d56cc80ebe951b252651
Author: Hubert Gruszecki <[email protected]>
AuthorDate: Wed Dec 10 14:21:51 2025 +0100

    chore(deps): upgrade to yew 0.22 and yew-router 0.19 (#2467)
    
    Remove yew-hooks dependency (incompatible with yew 0.22) and implement
    custom use_size hook. Replace use_async with standard yew patterns.
---
 Cargo.lock                                         | 373 +++------------------
 DEPENDENCIES.md                                    |  31 +-
 core/bench/dashboard/frontend/Cargo.toml           |   7 +-
 .../frontend/src/components/chart/single_chart.rs  |   2 +-
 .../frontend/src/components/chart/trend_chart.rs   |   2 +-
 .../selectors/recent_benchmarks_selector.rs        |  53 ++-
 core/bench/dashboard/frontend/src/hooks/mod.rs     |  20 ++
 .../bench/dashboard/frontend/src/hooks/use_size.rs |  75 +++++
 core/bench/dashboard/frontend/src/main.rs          |   1 +
 9 files changed, 186 insertions(+), 378 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index d1d42d46f..8e8525388 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -391,12 +391,6 @@ version = "1.0.100"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
 
-[[package]]
-name = "anymap2"
-version = "0.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c"
-
 [[package]]
 name = "apache-avro"
 version = "0.17.0"
@@ -974,7 +968,7 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef"
 dependencies = [
  "fastrand",
- "gloo-timers 0.3.0",
+ "gloo-timers",
  "tokio",
 ]
 
@@ -1028,7 +1022,7 @@ dependencies = [
  "charming",
  "chrono",
  "getrandom 0.3.4",
- "gloo 0.11.0",
+ "gloo",
  "js-sys",
  "serde_json",
  "thiserror 2.0.17",
@@ -1036,7 +1030,6 @@ dependencies = [
  "wasm-bindgen",
  "web-sys",
  "yew",
- "yew-hooks",
  "yew-router",
 ]
 
@@ -1314,12 +1307,6 @@ dependencies = [
  "syn 2.0.111",
 ]
 
-[[package]]
-name = "boolinator"
-version = "2.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cfa8873f51c92e232f9bac4065cddef41b714152812bfc5f7672ba16d6ef8cd9"
-
 [[package]]
 name = "borsh"
 version = "1.6.0"
@@ -1552,7 +1539,7 @@ dependencies = [
  "handlebars",
  "js-sys",
  "serde",
- "serde-wasm-bindgen 0.6.5",
+ "serde-wasm-bindgen",
  "serde_json",
  "serde_with",
  "wasm-bindgen",
@@ -3556,74 +3543,23 @@ dependencies = [
  "walkdir",
 ]
 
-[[package]]
-name = "gloo"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "28999cda5ef6916ffd33fb4a7b87e1de633c47c0dc6d97905fee1cdaa142b94d"
-dependencies = [
- "gloo-console 0.2.3",
- "gloo-dialogs 0.1.1",
- "gloo-events 0.1.2",
- "gloo-file 0.2.3",
- "gloo-history 0.1.5",
- "gloo-net 0.3.1",
- "gloo-render 0.1.1",
- "gloo-storage 0.2.2",
- "gloo-timers 0.2.6",
- "gloo-utils 0.1.7",
- "gloo-worker 0.2.1",
-]
-
-[[package]]
-name = "gloo"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cd35526c28cc55c1db77aed6296de58677dbab863b118483a27845631d870249"
-dependencies = [
- "gloo-console 0.3.0",
- "gloo-dialogs 0.2.0",
- "gloo-events 0.2.0",
- "gloo-file 0.3.0",
- "gloo-history 0.2.2",
- "gloo-net 0.4.0",
- "gloo-render 0.2.0",
- "gloo-storage 0.3.0",
- "gloo-timers 0.3.0",
- "gloo-utils 0.2.0",
- "gloo-worker 0.4.0",
-]
-
 [[package]]
 name = "gloo"
 version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "d15282ece24eaf4bd338d73ef580c6714c8615155c4190c781290ee3fa0fd372"
 dependencies = [
- "gloo-console 0.3.0",
- "gloo-dialogs 0.2.0",
- "gloo-events 0.2.0",
- "gloo-file 0.3.0",
- "gloo-history 0.2.2",
- "gloo-net 0.5.0",
- "gloo-render 0.2.0",
- "gloo-storage 0.3.0",
- "gloo-timers 0.3.0",
- "gloo-utils 0.2.0",
- "gloo-worker 0.5.0",
-]
-
-[[package]]
-name = "gloo-console"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "82b7ce3c05debe147233596904981848862b068862e9ec3e34be446077190d3f"
-dependencies = [
- "gloo-utils 0.1.7",
- "js-sys",
- "serde",
- "wasm-bindgen",
- "web-sys",
+ "gloo-console",
+ "gloo-dialogs",
+ "gloo-events",
+ "gloo-file",
+ "gloo-history",
+ "gloo-net",
+ "gloo-render",
+ "gloo-storage",
+ "gloo-timers",
+ "gloo-utils",
+ "gloo-worker",
 ]
 
 [[package]]
@@ -3632,23 +3568,13 @@ version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "2a17868f56b4a24f677b17c8cb69958385102fa879418052d60b50bc1727e261"
 dependencies = [
- "gloo-utils 0.2.0",
+ "gloo-utils",
  "js-sys",
  "serde",
  "wasm-bindgen",
  "web-sys",
 ]
 
-[[package]]
-name = "gloo-dialogs"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "67062364ac72d27f08445a46cab428188e2e224ec9e37efdba48ae8c289002e6"
-dependencies = [
- "wasm-bindgen",
- "web-sys",
-]
-
 [[package]]
 name = "gloo-dialogs"
 version = "0.2.0"
@@ -3659,16 +3585,6 @@ dependencies = [
  "web-sys",
 ]
 
-[[package]]
-name = "gloo-events"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "68b107f8abed8105e4182de63845afcc7b69c098b7852a813ea7462a320992fc"
-dependencies = [
- "wasm-bindgen",
- "web-sys",
-]
-
 [[package]]
 name = "gloo-events"
 version = "0.2.0"
@@ -3679,18 +3595,6 @@ dependencies = [
  "web-sys",
 ]
 
-[[package]]
-name = "gloo-file"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a8d5564e570a38b43d78bdc063374a0c3098c4f0d64005b12f9bbe87e869b6d7"
-dependencies = [
- "gloo-events 0.1.2",
- "js-sys",
- "wasm-bindgen",
- "web-sys",
-]
-
 [[package]]
 name = "gloo-file"
 version = "0.3.0"
@@ -3698,28 +3602,12 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "97563d71863fb2824b2e974e754a81d19c4a7ec47b09ced8a0e6656b6d54bd1f"
 dependencies = [
  "futures-channel",
- "gloo-events 0.2.0",
+ "gloo-events",
  "js-sys",
  "wasm-bindgen",
  "web-sys",
 ]
 
-[[package]]
-name = "gloo-history"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "85725d90bf0ed47063b3930ef28e863658a7905989e9929a8708aab74a1d5e7f"
-dependencies = [
- "gloo-events 0.1.2",
- "gloo-utils 0.1.7",
- "serde",
- "serde-wasm-bindgen 0.5.0",
- "serde_urlencoded",
- "thiserror 1.0.69",
- "wasm-bindgen",
- "web-sys",
-]
-
 [[package]]
 name = "gloo-history"
 version = "0.2.2"
@@ -3727,58 +3615,16 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "903f432be5ba34427eac5e16048ef65604a82061fe93789f2212afc73d8617d6"
 dependencies = [
  "getrandom 0.2.16",
- "gloo-events 0.2.0",
- "gloo-utils 0.2.0",
+ "gloo-events",
+ "gloo-utils",
  "serde",
- "serde-wasm-bindgen 0.6.5",
+ "serde-wasm-bindgen",
  "serde_urlencoded",
  "thiserror 1.0.69",
  "wasm-bindgen",
  "web-sys",
 ]
 
-[[package]]
-name = "gloo-net"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a66b4e3c7d9ed8d315fd6b97c8b1f74a7c6ecbbc2320e65ae7ed38b7068cc620"
-dependencies = [
- "futures-channel",
- "futures-core",
- "futures-sink",
- "gloo-utils 0.1.7",
- "http 0.2.12",
- "js-sys",
- "pin-project",
- "serde",
- "serde_json",
- "thiserror 1.0.69",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
-]
-
-[[package]]
-name = "gloo-net"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8ac9e8288ae2c632fa9f8657ac70bfe38a1530f345282d7ba66a1f70b72b7dc4"
-dependencies = [
- "futures-channel",
- "futures-core",
- "futures-sink",
- "gloo-utils 0.2.0",
- "http 0.2.12",
- "js-sys",
- "pin-project",
- "serde",
- "serde_json",
- "thiserror 1.0.69",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
-]
-
 [[package]]
 name = "gloo-net"
 version = "0.5.0"
@@ -3788,7 +3634,7 @@ dependencies = [
  "futures-channel",
  "futures-core",
  "futures-sink",
- "gloo-utils 0.2.0",
+ "gloo-utils",
  "http 0.2.12",
  "js-sys",
  "pin-project",
@@ -3800,16 +3646,6 @@ dependencies = [
  "web-sys",
 ]
 
-[[package]]
-name = "gloo-render"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2fd9306aef67cfd4449823aadcd14e3958e0800aa2183955a309112a84ec7764"
-dependencies = [
- "wasm-bindgen",
- "web-sys",
-]
-
 [[package]]
 name = "gloo-render"
 version = "0.2.0"
@@ -3820,28 +3656,13 @@ dependencies = [
  "web-sys",
 ]
 
-[[package]]
-name = "gloo-storage"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5d6ab60bf5dbfd6f0ed1f7843da31b41010515c745735c970e821945ca91e480"
-dependencies = [
- "gloo-utils 0.1.7",
- "js-sys",
- "serde",
- "serde_json",
- "thiserror 1.0.69",
- "wasm-bindgen",
- "web-sys",
-]
-
 [[package]]
 name = "gloo-storage"
 version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "fbc8031e8c92758af912f9bc08fbbadd3c6f3cfcbf6b64cdf3d6a81f0139277a"
 dependencies = [
- "gloo-utils 0.2.0",
+ "gloo-utils",
  "js-sys",
  "serde",
  "serde_json",
@@ -3850,16 +3671,6 @@ dependencies = [
  "web-sys",
 ]
 
-[[package]]
-name = "gloo-timers"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c"
-dependencies = [
- "js-sys",
- "wasm-bindgen",
-]
-
 [[package]]
 name = "gloo-timers"
 version = "0.3.0"
@@ -3872,19 +3683,6 @@ dependencies = [
  "wasm-bindgen",
 ]
 
-[[package]]
-name = "gloo-utils"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e"
-dependencies = [
- "js-sys",
- "serde",
- "serde_json",
- "wasm-bindgen",
- "web-sys",
-]
-
 [[package]]
 name = "gloo-utils"
 version = "0.2.0"
@@ -3898,42 +3696,6 @@ dependencies = [
  "web-sys",
 ]
 
-[[package]]
-name = "gloo-worker"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "13471584da78061a28306d1359dd0178d8d6fc1c7c80e5e35d27260346e0516a"
-dependencies = [
- "anymap2",
- "bincode 1.3.3",
- "gloo-console 0.2.3",
- "gloo-utils 0.1.7",
- "js-sys",
- "serde",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
-]
-
-[[package]]
-name = "gloo-worker"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "76495d3dd87de51da268fa3a593da118ab43eb7f8809e17eb38d3319b424e400"
-dependencies = [
- "bincode 1.3.3",
- "futures",
- "gloo-utils 0.2.0",
- "gloo-worker-macros",
- "js-sys",
- "pinned",
- "serde",
- "thiserror 1.0.69",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
-]
-
 [[package]]
 name = "gloo-worker"
 version = "0.5.0"
@@ -3942,7 +3704,7 @@ checksum = 
"085f262d7604911c8150162529cefab3782e91adb20202e8658f7275d2aefe5d"
 dependencies = [
  "bincode 1.3.3",
  "futures",
- "gloo-utils 0.2.0",
+ "gloo-utils",
  "gloo-worker-macros",
  "js-sys",
  "pinned",
@@ -5044,9 +4806,9 @@ checksum = 
"e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2"
 
 [[package]]
 name = "implicit-clone"
-version = "0.4.9"
+version = "0.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f8a9aa791c7b5a71b636b7a68207fdebf171ddfc593d9c8506ec4cbc527b6a84"
+checksum = "1689b939ee35e3a075b0834b5672efd43aec8a6e81a1c6002b76a5ca2f211ae0"
 dependencies = [
  "implicit-clone-derive",
  "indexmap 2.12.1",
@@ -7071,23 +6833,6 @@ dependencies = [
  "yansi",
 ]
 
-[[package]]
-name = "prokio"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "03b55e106e5791fa5a13abd13c85d6127312e8e09098059ca2bc9b03ca4cf488"
-dependencies = [
- "futures",
- "gloo 0.8.1",
- "num_cpus",
- "once_cell",
- "pin-project",
- "pinned",
- "tokio",
- "tokio-stream",
- "wasm-bindgen-futures",
-]
-
 [[package]]
 name = "prometheus-client"
 version = "0.24.0"
@@ -8143,17 +7888,6 @@ dependencies = [
  "serde_derive",
 ]
 
-[[package]]
-name = "serde-wasm-bindgen"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e"
-dependencies = [
- "js-sys",
- "serde",
- "wasm-bindgen",
-]
-
 [[package]]
 name = "serde-wasm-bindgen"
 version = "0.6.5"
@@ -9387,6 +9121,23 @@ dependencies = [
  "tokio",
 ]
 
+[[package]]
+name = "tokise"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "decf97738ce15b9e9cc1671ea29b0f6c56538719e1a092d19cc2134bf144e40e"
+dependencies = [
+ "futures",
+ "gloo",
+ "num_cpus",
+ "once_cell",
+ "pin-project",
+ "pinned",
+ "tokio",
+ "tokio-stream",
+ "wasm-bindgen-futures",
+]
+
 [[package]]
 name = "toml"
 version = "0.8.23"
@@ -10884,22 +10635,22 @@ dependencies = [
 
 [[package]]
 name = "yew"
-version = "0.21.0"
+version = "0.22.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5f1a03f255c70c7aa3e9c62e15292f142ede0564123543c1cc0c7a4f31660cac"
+checksum = "3346273ed61b636f5d84e6c696d40f380045b5565b36c5c47f8fc634b8bf5be6"
 dependencies = [
  "console_error_panic_hook",
  "futures",
- "gloo 0.10.0",
+ "gloo",
  "implicit-clone",
  "indexmap 2.12.1",
  "js-sys",
- "prokio",
  "rustversion",
  "serde",
  "slab",
- "thiserror 1.0.69",
+ "thiserror 2.0.17",
  "tokio",
+ "tokise",
  "tracing",
  "wasm-bindgen",
  "wasm-bindgen-futures",
@@ -10907,44 +10658,28 @@ dependencies = [
  "yew-macro",
 ]
 
-[[package]]
-name = "yew-hooks"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "640157ac2d80cf6bf5e7fe4143b90cd6c9ef61c9cb6180f60a50c3074521a142"
-dependencies = [
- "gloo 0.11.0",
- "js-sys",
- "log",
- "serde",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
- "yew",
-]
-
 [[package]]
 name = "yew-macro"
-version = "0.21.0"
+version = "0.22.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "02fd8ca5166d69e59f796500a2ce432ff751edecbbb308ca59fd3fe4d0343de2"
+checksum = "479e94d645dde3749e81d488c1d32987509dd3b8c31650fcf6e3af1f370e913b"
 dependencies = [
- "boolinator",
  "once_cell",
  "prettyplease",
  "proc-macro-error",
  "proc-macro2",
  "quote",
+ "rustversion",
  "syn 2.0.111",
 ]
 
 [[package]]
 name = "yew-router"
-version = "0.18.0"
+version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4ca1d5052c96e6762b4d6209a8aded597758d442e6c479995faf0c7b5538e0c6"
+checksum = "415cb628900ddf1eaf55ebd04163adf1ea80d3f5a9832a876554f9c0fdd4c282"
 dependencies = [
- "gloo 0.10.0",
+ "gloo",
  "js-sys",
  "route-recognizer",
  "serde",
@@ -10959,9 +10694,9 @@ dependencies = [
 
 [[package]]
 name = "yew-router-macro"
-version = "0.18.0"
+version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "42bfd190a07ca8cfde7cd4c52b3ac463803dc07323db8c34daa697e86365978c"
+checksum = "9e87a3ce33434ab66a700edbaf2cc8a417d9b89f00a6fd8216fd6ac83b0e7b1c"
 dependencies = [
  "proc-macro2",
  "quote",
diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md
index 928173763..c81f89d2d 100644
--- a/DEPENDENCIES.md
+++ b/DEPENDENCIES.md
@@ -30,7 +30,6 @@ anstyle-parse: 0.2.7, "Apache-2.0 OR MIT",
 anstyle-query: 1.1.5, "Apache-2.0 OR MIT",
 anstyle-wincon: 3.0.11, "Apache-2.0 OR MIT",
 anyhow: 1.0.100, "Apache-2.0 OR MIT",
-anymap2: 0.13.0, "Apache-2.0 OR MIT",
 apache-avro: 0.17.0, "Apache-2.0",
 arbitrary: 1.4.2, "Apache-2.0 OR MIT",
 arc-swap: 1.7.1, "Apache-2.0 OR MIT",
@@ -107,7 +106,6 @@ bollard-buildkit-proto: 0.7.0, "Apache-2.0",
 bollard-stubs: 1.49.1-rc.28.4.0, "Apache-2.0",
 bon: 3.8.1, "Apache-2.0 OR MIT",
 bon-macros: 3.8.1, "Apache-2.0 OR MIT",
-boolinator: 2.4.0, "Apache-2.0 OR MIT",
 borsh: 1.6.0, "Apache-2.0 OR MIT",
 borsh-derive: 1.6.0, "Apache-2.0",
 brotli: 8.0.2, "BSD-3-Clause AND MIT",
@@ -323,32 +321,17 @@ gherkin: 0.14.0, "Apache-2.0 OR MIT",
 git2: 0.20.3, "Apache-2.0 OR MIT",
 globset: 0.4.18, "MIT OR Unlicense",
 globwalk: 0.9.1, "MIT",
-gloo: 0.8.1, "Apache-2.0 OR MIT",
-gloo: 0.10.0, "Apache-2.0 OR MIT",
 gloo: 0.11.0, "Apache-2.0 OR MIT",
-gloo-console: 0.2.3, "Apache-2.0 OR MIT",
 gloo-console: 0.3.0, "Apache-2.0 OR MIT",
-gloo-dialogs: 0.1.1, "Apache-2.0 OR MIT",
 gloo-dialogs: 0.2.0, "Apache-2.0 OR MIT",
-gloo-events: 0.1.2, "Apache-2.0 OR MIT",
 gloo-events: 0.2.0, "Apache-2.0 OR MIT",
-gloo-file: 0.2.3, "Apache-2.0 OR MIT",
 gloo-file: 0.3.0, "Apache-2.0 OR MIT",
-gloo-history: 0.1.5, "Apache-2.0 OR MIT",
 gloo-history: 0.2.2, "Apache-2.0 OR MIT",
-gloo-net: 0.3.1, "Apache-2.0 OR MIT",
-gloo-net: 0.4.0, "Apache-2.0 OR MIT",
 gloo-net: 0.5.0, "Apache-2.0 OR MIT",
-gloo-render: 0.1.1, "Apache-2.0 OR MIT",
 gloo-render: 0.2.0, "Apache-2.0 OR MIT",
-gloo-storage: 0.2.2, "Apache-2.0 OR MIT",
 gloo-storage: 0.3.0, "Apache-2.0 OR MIT",
-gloo-timers: 0.2.6, "Apache-2.0 OR MIT",
 gloo-timers: 0.3.0, "Apache-2.0 OR MIT",
-gloo-utils: 0.1.7, "Apache-2.0 OR MIT",
 gloo-utils: 0.2.0, "Apache-2.0 OR MIT",
-gloo-worker: 0.2.1, "Apache-2.0 OR MIT",
-gloo-worker: 0.4.0, "Apache-2.0 OR MIT",
 gloo-worker: 0.5.0, "Apache-2.0 OR MIT",
 gloo-worker-macros: 0.1.0, "Apache-2.0 OR MIT",
 governor: 0.10.2, "MIT",
@@ -423,7 +406,7 @@ iggy_connector_stdout_sink: 0.1.0, "Apache-2.0",
 iggy_examples: 0.0.5, "Apache-2.0",
 ignore: 0.4.25, "MIT OR Unlicense",
 impl-more: 0.1.9, "Apache-2.0 OR MIT",
-implicit-clone: 0.4.9, "Apache-2.0 OR MIT",
+implicit-clone: 0.6.0, "Apache-2.0 OR MIT",
 implicit-clone-derive: 0.1.2, "Apache-2.0 OR MIT",
 indexmap: 1.9.3, "Apache-2.0 OR MIT",
 indexmap: 2.12.1, "Apache-2.0 OR MIT",
@@ -622,7 +605,6 @@ proc-macro-error: 1.0.4, "Apache-2.0 OR MIT",
 proc-macro-error-attr: 1.0.4, "Apache-2.0 OR MIT",
 proc-macro2: 1.0.103, "Apache-2.0 OR MIT",
 proc-macro2-diagnostics: 0.10.1, "Apache-2.0 OR MIT",
-prokio: 0.1.0, "Apache-2.0 OR MIT",
 prometheus-client: 0.24.0, "Apache-2.0 OR MIT",
 prometheus-client-derive-encode: 0.5.0, "Apache-2.0 OR MIT",
 prost: 0.14.1, "Apache-2.0",
@@ -715,7 +697,6 @@ semver: 1.0.27, "Apache-2.0 OR MIT",
 send_wrapper: 0.6.0, "Apache-2.0 OR MIT",
 seq-macro: 0.3.6, "Apache-2.0 OR MIT",
 serde: 1.0.228, "Apache-2.0 OR MIT",
-serde-wasm-bindgen: 0.5.0, "MIT",
 serde-wasm-bindgen: 0.6.5, "MIT",
 serde_bytes: 0.11.19, "Apache-2.0 OR MIT",
 serde_core: 1.0.228, "Apache-2.0 OR MIT",
@@ -815,6 +796,7 @@ tokio-rustls: 0.26.4, "Apache-2.0 OR MIT",
 tokio-stream: 0.1.17, "MIT",
 tokio-tungstenite: 0.28.0, "MIT",
 tokio-util: 0.7.17, "MIT",
+tokise: 0.2.0, "Apache-2.0 OR MIT",
 toml: 0.8.23, "Apache-2.0 OR MIT",
 toml: 0.9.8, "Apache-2.0 OR MIT",
 toml_datetime: 0.6.11, "Apache-2.0 OR MIT",
@@ -978,11 +960,10 @@ wyz: 0.5.1, "MIT",
 xattr: 1.6.1, "Apache-2.0 OR MIT",
 yansi: 1.0.1, "Apache-2.0 OR MIT",
 yasna: 0.5.2, "Apache-2.0 OR MIT",
-yew: 0.21.0, "Apache-2.0 OR MIT",
-yew-hooks: 0.3.4, "Apache-2.0 OR MIT",
-yew-macro: 0.21.0, "Apache-2.0 OR MIT",
-yew-router: 0.18.0, "Apache-2.0 OR MIT",
-yew-router-macro: 0.18.0, "Apache-2.0 OR MIT",
+yew: 0.22.0, "Apache-2.0 OR MIT",
+yew-macro: 0.22.0, "Apache-2.0 OR MIT",
+yew-router: 0.19.0, "Apache-2.0 OR MIT",
+yew-router-macro: 0.19.0, "Apache-2.0 OR MIT",
 yoke: 0.8.1, "Unicode-3.0",
 yoke-derive: 0.8.1, "Unicode-3.0",
 zerocopy: 0.8.31, "Apache-2.0 OR BSD-2-Clause OR MIT",
diff --git a/core/bench/dashboard/frontend/Cargo.toml 
b/core/bench/dashboard/frontend/Cargo.toml
index fd1696138..af2c48c4c 100644
--- a/core/bench/dashboard/frontend/Cargo.toml
+++ b/core/bench/dashboard/frontend/Cargo.toml
@@ -42,7 +42,8 @@ web-sys = { version = "0.3", features = [
     "HtmlSelectElement",
     "Clipboard",
     "Navigator",
+    "ResizeObserver",
+    "ResizeObserverEntry",
 ] }
-yew = { version = "0.21", features = ["csr"] }
-yew-hooks = "0.3.4"
-yew-router = "0.18"
+yew = { version = "0.22", features = ["csr"] }
+yew-router = "0.19"
diff --git a/core/bench/dashboard/frontend/src/components/chart/single_chart.rs 
b/core/bench/dashboard/frontend/src/components/chart/single_chart.rs
index 807619880..54ceb1767 100644
--- a/core/bench/dashboard/frontend/src/components/chart/single_chart.rs
+++ b/core/bench/dashboard/frontend/src/components/chart/single_chart.rs
@@ -18,6 +18,7 @@
 use crate::api::fetch_benchmark_report_full;
 use crate::components::chart::{PlotConfig, dispose_chart};
 use crate::components::selectors::measurement_type_selector::MeasurementType;
+use crate::hooks::use_size;
 use bench_report::report::BenchmarkReport;
 use charming::theme::Theme;
 use charming::{Echarts, WasmRenderer};
@@ -26,7 +27,6 @@ use gloo::history::{BrowserHistory, History};
 use uuid::Uuid;
 use yew::platform::spawn_local;
 use yew::prelude::*;
-use yew_hooks::use_size;
 
 type CleanupFn = Box<dyn FnOnce()>;
 
diff --git a/core/bench/dashboard/frontend/src/components/chart/trend_chart.rs 
b/core/bench/dashboard/frontend/src/components/chart/trend_chart.rs
index 0c2649b56..2d12da1e6 100644
--- a/core/bench/dashboard/frontend/src/components/chart/trend_chart.rs
+++ b/core/bench/dashboard/frontend/src/components/chart/trend_chart.rs
@@ -19,12 +19,12 @@ use crate::api::fetch_benchmark_trend;
 use crate::components::chart::plot_trend::create_chart;
 use crate::components::chart::{PlotConfig, PlotType, dispose_chart};
 use crate::components::selectors::measurement_type_selector::MeasurementType;
+use crate::hooks::use_size;
 use crate::state::hardware::use_hardware;
 use charming::Echarts;
 use gloo::console::log;
 use yew::platform::spawn_local;
 use yew::prelude::*;
-use yew_hooks::use_size;
 
 #[derive(Properties, PartialEq)]
 #[allow(dead_code)]
diff --git 
a/core/bench/dashboard/frontend/src/components/selectors/recent_benchmarks_selector.rs
 
b/core/bench/dashboard/frontend/src/components/selectors/recent_benchmarks_selector.rs
index 9a21360a9..240b1fc70 100644
--- 
a/core/bench/dashboard/frontend/src/components/selectors/recent_benchmarks_selector.rs
+++ 
b/core/bench/dashboard/frontend/src/components/selectors/recent_benchmarks_selector.rs
@@ -22,8 +22,8 @@ use crate::{
 use bench_dashboard_shared::BenchmarkReportLight;
 use chrono::{DateTime, Utc};
 use gloo::console::log;
+use yew::platform::spawn_local;
 use yew::prelude::*;
-use yew_hooks::use_async;
 
 /// Format a timestamp string as a human-readable relative time (e.g., "2 
hours ago")
 fn format_relative_time(timestamp_str: &str) -> String {
@@ -58,38 +58,33 @@ pub fn recent_benchmarks_selector(props: 
&RecentBenchmarksSelectorProps) -> Html
     let benchmark_ctx = use_benchmark();
 
     let recent_benchmarks = use_state(Vec::<BenchmarkReportLight>::new);
+    let is_loading = use_state(|| true);
 
-    let fetch_benchmarks = {
+    {
         let recent_benchmarks = recent_benchmarks.clone();
+        let is_loading = is_loading.clone();
         let limit = props.limit;
 
-        use_async(async move {
-            match api::fetch_recent_benchmarks(Some(limit)).await {
-                Ok(mut data) => {
-                    data.sort_by(|a, b| {
-                        let parse_a = 
DateTime::parse_from_rfc3339(&a.timestamp);
-                        let parse_b = 
DateTime::parse_from_rfc3339(&b.timestamp);
-                        match (parse_a, parse_b) {
-                            (Ok(time_a), Ok(time_b)) => time_b.cmp(&time_a),
-                            _ => std::cmp::Ordering::Equal,
-                        }
-                    });
-                    recent_benchmarks.set(data.clone());
-                    Ok(data)
-                }
-                Err(e) => {
-                    log!(format!("Error fetching recent benchmarks: {}", e));
-                    Err(e)
-                }
-            }
-        })
-    };
-
-    {
-        let fetch_benchmarks_effect = fetch_benchmarks.clone();
         use_effect_with((), move |_| {
-            fetch_benchmarks_effect.run();
-            || ()
+            spawn_local(async move {
+                match api::fetch_recent_benchmarks(Some(limit)).await {
+                    Ok(mut data) => {
+                        data.sort_by(|a, b| {
+                            let parse_a = 
DateTime::parse_from_rfc3339(&a.timestamp);
+                            let parse_b = 
DateTime::parse_from_rfc3339(&b.timestamp);
+                            match (parse_a, parse_b) {
+                                (Ok(time_a), Ok(time_b)) => 
time_b.cmp(&time_a),
+                                _ => std::cmp::Ordering::Equal,
+                            }
+                        });
+                        recent_benchmarks.set(data);
+                    }
+                    Err(e) => {
+                        log!(format!("Error fetching recent benchmarks: {}", 
e));
+                    }
+                }
+                is_loading.set(false);
+            });
         });
     }
 
@@ -152,7 +147,7 @@ pub fn recent_benchmarks_selector(props: 
&RecentBenchmarksSelectorProps) -> Html
         <div class="sidebar-tabs">
             <div class="benchmark-list-container close-gap">
                 <div class="benchmark-list-wrapper">
-                if fetch_benchmarks.loading {
+                if *is_loading {
                     <p class="loading-message">{"Loading recent 
benchmarks..."}</p>
                 } else if filtered_benchmarks.is_empty() {
                     <div class="no-search-results">
diff --git a/core/bench/dashboard/frontend/src/hooks/mod.rs 
b/core/bench/dashboard/frontend/src/hooks/mod.rs
new file mode 100644
index 000000000..2958ef8db
--- /dev/null
+++ b/core/bench/dashboard/frontend/src/hooks/mod.rs
@@ -0,0 +1,20 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+mod use_size;
+
+pub use use_size::use_size;
diff --git a/core/bench/dashboard/frontend/src/hooks/use_size.rs 
b/core/bench/dashboard/frontend/src/hooks/use_size.rs
new file mode 100644
index 000000000..95cfa6288
--- /dev/null
+++ b/core/bench/dashboard/frontend/src/hooks/use_size.rs
@@ -0,0 +1,75 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+use std::cell::RefCell;
+use std::rc::Rc;
+use wasm_bindgen::JsCast;
+use wasm_bindgen::closure::Closure;
+use web_sys::{Element, ResizeObserver, ResizeObserverEntry};
+use yew::prelude::*;
+
+type ResizeCallback = Closure<dyn Fn(js_sys::Array)>;
+
+/// Tracks the size of an element using ResizeObserver.
+/// Returns (width, height) in pixels.
+#[hook]
+pub fn use_size(node: NodeRef) -> (u32, u32) {
+    let size = use_state(|| (0_u32, 0_u32));
+
+    {
+        let size = size.clone();
+        use_effect_with(node.clone(), move |node| {
+            let node = node.clone();
+            let observer_handle: Rc<RefCell<Option<ResizeObserver>>> = 
Rc::new(RefCell::new(None));
+            let callback_handle: Rc<RefCell<Option<ResizeCallback>>> = 
Rc::new(RefCell::new(None));
+
+            if let Some(element) = node.cast::<Element>() {
+                // Set initial size
+                size.set((
+                    element.client_width() as u32,
+                    element.client_height() as u32,
+                ));
+
+                let size_clone = size.clone();
+                let callback =
+                    Closure::<dyn Fn(js_sys::Array)>::new(move |entries: 
js_sys::Array| {
+                        if let Some(entry) = 
entries.get(0).dyn_ref::<ResizeObserverEntry>() {
+                            let target = entry.target();
+                            let width = target.client_width() as u32;
+                            let height = target.client_height() as u32;
+                            size_clone.set((width, height));
+                        }
+                    });
+
+                if let Ok(observer) = 
ResizeObserver::new(callback.as_ref().unchecked_ref()) {
+                    observer.observe(&element);
+                    *observer_handle.borrow_mut() = Some(observer);
+                    *callback_handle.borrow_mut() = Some(callback);
+                }
+            }
+
+            move || {
+                if let Some(observer) = observer_handle.borrow_mut().take() {
+                    observer.disconnect();
+                }
+                drop(callback_handle.borrow_mut().take());
+            }
+        });
+    }
+
+    *size
+}
diff --git a/core/bench/dashboard/frontend/src/main.rs 
b/core/bench/dashboard/frontend/src/main.rs
index d8808fba3..5d6f0972a 100644
--- a/core/bench/dashboard/frontend/src/main.rs
+++ b/core/bench/dashboard/frontend/src/main.rs
@@ -19,6 +19,7 @@ mod api;
 mod components;
 mod config;
 mod error;
+mod hooks;
 mod router;
 mod state;
 

Reply via email to