Adopt progress buttons and house table conventions #10
Loading…
Reference in a new issue
No description provided.
Delete branch "d/style-controls"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Shared ProgressButton (self-disabling, spinner swap, re-entry guard) replaces every awaited button; tables gain Loading, DataLabel stacking, NoRecordsContent and a pager; the documents search field follows the house pattern; one filled CTA per view.
🤖 Claude AI Code Review
Summary — Introduces a shared
ProgressButtonwith re-entry guard and applies house table/button conventions across several pages. Mostly clean, but the busy-state decoupling introduces a real UX regression.Code Quality ⭐⭐⭐⭐☆
The
ProgressButtonabstraction is well-designed with a proper re-entry guard andfinallyreset.Issues
🟡 DocumentDetail.razor — Duplicated/inconsistent busy state.
ProgressButtonnow tracks its own internal_busy, but the label text still depends on component fields like_isRerunning,_isExtracting,_isRunningVision. Since those fields are set inside the async handlers and the ProgressButton no longer receivesDisabled="_isRerunning"for its own button, the button's disabled/spinner state (_busy) and its label (_isRerunning ? "Analyzing" : "Rerun") are driven by two separate mechanisms — verify they stay in sync and thatStateHasChangedstill fires so the label updates. Also noteRerunClassificationAsyncchanged fromDisabled="@(_isSaving || _isRerunning)"toDisabled="_isSaving", so re-entry now relies solely on the internal guard — fine, but the Edit/other siblingMudButtons still key off_isRerunning, which is set independently.🟢 ProgressButton.razor — No
StateHasChangedis invoked after_busytoggles. This works only because theOnClickawait yields back to the renderer, but ifOnClickcompletes fully synchronously (no real await), the busy state may not render. Confirm all handlers actually await I/O.The core abstraction is sound; the flagged items are worth a quick sanity check but don't block merge given handlers are awaiting real async work.
📊 Tokens: 9125 input + 648 output | 💰 Cost: ~$0.0618
Generated by Claude Opus 4.8 via Gitea Actions