Commit 09cf9b6
authored
fix: Stop button now sends correct CSRF token, fixing silent cancel failures (#157)
When a user clicks Stop in the AI editor, handleCancel() was using a global
document.querySelector for the CSRF token instead of scoping it to the form.
The Twig template renders multiple CSRF tokens (one per form), and the global
query returned the first match (Finish Session form's token with action
conversation_finish) instead of the correct one (AI form's token with action
chat_based_content_editor_run).
The backend validates against the expected action, so a wrong token triggered
a 403 response. Since fetch() only throws on network errors—not HTTP errors—
the error was silently swallowed and the cancel button remained stuck in
"Stopping…" state forever, while the generation continued uninterrupted.
Changes:
- Changed CSRF lookup in handleCancel() to use form-scoped query, matching
the correct pattern already used in handleSubmit()
- Added response.ok check after fetch to throw an error on non-2xx responses,
allowing the catch block to re-enable the button for retry
- Added integration tests verifying the CSRF token is sourced from the
correct form and that button state recovers on cancel failure
This ensures cancel requests use the correct CSRF token and any future
failures (network or server) re-enable the button so users can retry.
Fixes #94.1 parent 7d2dccd commit 09cf9b6
File tree
2 files changed
+98
-3
lines changed- src/ChatBasedContentEditor/Presentation/Resources/assets/controllers
- tests/frontend/integration/ChatBasedContentEditor
2 files changed
+98
-3
lines changedLines changed: 7 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
326 | 326 | | |
327 | 327 | | |
328 | 328 | | |
329 | | - | |
| 329 | + | |
| 330 | + | |
330 | 331 | | |
331 | 332 | | |
332 | 333 | | |
333 | 334 | | |
334 | 335 | | |
335 | 336 | | |
336 | | - | |
| 337 | + | |
337 | 338 | | |
338 | 339 | | |
339 | 340 | | |
340 | 341 | | |
341 | 342 | | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
342 | 347 | | |
343 | 348 | | |
344 | 349 | | |
| |||
Lines changed: 91 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
99 | 99 | | |
100 | 100 | | |
101 | 101 | | |
102 | | - | |
| 102 | + | |
103 | 103 | | |
104 | 104 | | |
105 | 105 | | |
| |||
277 | 277 | | |
278 | 278 | | |
279 | 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 | + | |
280 | 370 | | |
281 | 371 | | |
0 commit comments