Commit c260554
authored
Fix InferenceService row click details navigation (#194)
## Problem
Clicking an `InferenceService` name in the KServe UI Endpoints table can
move the browser URL to the details route without rendering the details
page.
In the reported flow, the Central Dashboard parent URL and the KServe
iframe URL both changed to:
```text
/kserve-endpoints/details/<namespace>/<name>
```
However, the iframe still displayed the Endpoints list. The details page
rendered only after refreshing the browser on the same details URL or
opening the details URL directly.
That behavior showed the route, Istio path, Dashboard iframe wrapper,
and backend API path were valid. The failing boundary was the row-click
navigation path in the KServe UI: the URL changed, but the details
component was not activated and the detail SSE request was not opened.
## Root Cause
The Endpoints table name column is an internal link. In the embedded
Dashboard flow, that link can leave the KServe UI in a stale list view
after the URL changes to the details route.
When the page is loaded directly on the details route, the details
component initializes correctly and opens the detail SSE stream:
```text
/kserve-endpoints/api/sse/namespaces/<namespace>/inferenceservices/<name>
```
So the fix makes the embedded Dashboard name-click path use the same
reliable page-load behavior as direct details navigation, while
preserving normal Angular router navigation outside the Dashboard
wrapper.
## Changes
- Intercept `name:link` actions for non-terminating `InferenceService`
rows only for normal primary-button clicks.
- Leave modified clicks and non-primary mouse-button clicks to the
browser so open-in-new-tab/window behavior remains intact.
- Track the existing `NamespaceService.dashboardConnected$` state
instead of applying the page-load workaround to every deployment mode.
- In Dashboard-connected mode, stop the table link event, build the
details URL through Angular router serialization and `LocationStrategy`,
then move the parent Dashboard shell to
`/_/kserve-endpoints/details/<namespace>/<name>` while preserving the
selected namespace query parameter.
- In disconnected standalone mode, preserve Angular `router.navigate()`
behavior for row-name navigation.
- If the parent Dashboard URL cannot be read, fall back to loading the
KServe application details URL directly in the current frame.
- Keep the existing terminating-resource guard, including the snackbar
message.
- Add focused Jest coverage for:
- the name column remaining an internal anchor,
- Dashboard-wrapper details navigation,
- standalone router navigation,
- browser-managed modified clicks,
- parent-location read failure fallback,
- blocked navigation for terminating `InferenceService` rows.
## Validation
Automated checks:
```text
npm run format:check --prefix frontend
npm run lint-check --prefix frontend
npm run test:jest --prefix frontend -- --runInBand
npm run build --prefix frontend
git diff --check
```
Results:
- Format check: passed.
- Angular lint: all files passed.
- Full Jest: 29 suites and 142 tests passed.
- Production frontend build: passed.
- Whitespace check: passed.
Notes:
- Jest still emits existing shallow-test Angular unknown-element
warnings for mocked shared UI components.
- The production build still emits existing CommonJS optimization and
bundle-budget warnings.
Live reduced Kind verification:
- Original image `ghcr.io/kserve/models-web-app:1.0.0`: reproduced the
bug. The first row click changed the parent and iframe URLs to the
details route, but the iframe stayed on the Endpoints list until
refresh.
- Fixed image `local/models-web-app:row-click-fix-v5`: verified the
embedded Dashboard page-load approach. The first row click rendered
`Endpoint details` immediately without refresh, and the detail SSE
request returned HTTP 200.
- The later review follow-up preserves that embedded Dashboard path and
adds automated coverage for standalone navigation and browser-managed
click behavior.
---------
Signed-off-by: danish9039 <danishsiddiqui040@gmail.com>1 parent fd0cddb commit c260554
2 files changed
Lines changed: 278 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
| 16 | + | |
15 | 17 | | |
16 | 18 | | |
17 | 19 | | |
18 | | - | |
| 20 | + | |
| 21 | + | |
19 | 22 | | |
20 | 23 | | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
21 | 27 | | |
22 | 28 | | |
23 | 29 | | |
24 | 30 | | |
25 | 31 | | |
26 | 32 | | |
27 | 33 | | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
28 | 40 | | |
29 | 41 | | |
30 | 42 | | |
| |||
52 | 64 | | |
53 | 65 | | |
54 | 66 | | |
| 67 | + | |
55 | 68 | | |
56 | 69 | | |
57 | 70 | | |
| |||
83 | 96 | | |
84 | 97 | | |
85 | 98 | | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
86 | 116 | | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
87 | 120 | | |
88 | 121 | | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
89 | 138 | | |
90 | 139 | | |
91 | 140 | | |
| |||
99 | 148 | | |
100 | 149 | | |
101 | 150 | | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
102 | 157 | | |
103 | 158 | | |
104 | 159 | | |
| |||
114 | 169 | | |
115 | 170 | | |
116 | 171 | | |
117 | | - | |
| 172 | + | |
118 | 173 | | |
119 | 174 | | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
120 | 185 | | |
121 | 186 | | |
122 | 187 | | |
123 | 188 | | |
124 | 189 | | |
125 | 190 | | |
126 | 191 | | |
| 192 | + | |
127 | 193 | | |
128 | 194 | | |
129 | 195 | | |
| |||
198 | 264 | | |
199 | 265 | | |
200 | 266 | | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
201 | 381 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
2 | 10 | | |
3 | 11 | | |
4 | 12 | | |
| |||
30 | 38 | | |
31 | 39 | | |
32 | 40 | | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
33 | 46 | | |
34 | 47 | | |
35 | 48 | | |
| |||
47 | 60 | | |
48 | 61 | | |
49 | 62 | | |
| 63 | + | |
50 | 64 | | |
51 | 65 | | |
52 | 66 | | |
| |||
79 | 93 | | |
80 | 94 | | |
81 | 95 | | |
| 96 | + | |
| 97 | + | |
82 | 98 | | |
83 | 99 | | |
84 | 100 | | |
85 | 101 | | |
86 | 102 | | |
| 103 | + | |
87 | 104 | | |
88 | 105 | | |
89 | 106 | | |
| |||
231 | 248 | | |
232 | 249 | | |
233 | 250 | | |
234 | | - | |
| 251 | + | |
235 | 252 | | |
236 | 253 | | |
237 | 254 | | |
| |||
246 | 263 | | |
247 | 264 | | |
248 | 265 | | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
249 | 273 | | |
250 | 274 | | |
251 | 275 | | |
252 | 276 | | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
253 | 347 | | |
254 | 348 | | |
255 | 349 | | |
| |||
0 commit comments