Skip to content

PR 10 Commits E+F: Remove redesign + multi-select + reusable Checkbox component (closes #525)#556

Closed
jschick04 wants to merge 5 commits into
jschick/modal-coordinator-pr10-bcdfrom
jschick/modal-coordinator-pr10-ef
Closed

PR 10 Commits E+F: Remove redesign + multi-select + reusable Checkbox component (closes #525)#556
jschick04 wants to merge 5 commits into
jschick/modal-coordinator-pr10-bcdfrom
jschick/modal-coordinator-pr10-ef

Conversation

@jschick04
Copy link
Copy Markdown
Collaborator

Database row UX redesign: replaces stop-gap Remove-during-upgrade behavior + extracts reusable Checkbox component. Closes #525.

Commits

Commit E (5599a42d) — Remove flow redesign + multi-select (fully closes #525)

Permanent redesign of Remove flow — replaces Commit B's aria-disabled+click-guard stop-gap on the per-row Remove button:

  • Always-visible per-row Remove (drops slide-reveal)
  • <div role=\"checkbox\" tabindex=\"0\"> per-row multi-select with left-border accent for WCAG 1.4.11
  • Bottom action strip ("X selected" + Clear + Remove)
  • Inline confirmation modal via cascading IInlineAlertSurface (single + bulk)
  • Cancel-then-remove during in-flight upgrade with TCS-per-BatchId + Coordinator.UpgradeStateChanged dual signal + pre-Cancel recheck for gap-completion race + 30s timeout fallback
  • ImportButton fallback in focus-restoration

IsAnyFileUpgrading uses dual-signal (Coordinator.IsUpgradeInFlight(f) || GetUpgradeProgressForEntry(entry) is not null) so Background-scope/import-queued upgrades are also covered. Bulk anchor = MIN pre-removal index (deterministic). Bulk Remove calls ConsumeReopenedAsBaseline() for parity.

Commit F (58eb8fa4) — Reusable Checkbox component + pending-ring removal

Extracted per-row inline <div role=\"checkbox\"> into reusable <Checkbox> component at src/EventLogExpert.UI/Inputs/ (matches Toggle convention: visually-hidden native <input type=\"checkbox\"> in <label> with custom icon via CSS sibling combinator + :has() wrapper cursor). Removed pending blue box-shadow at DatabaseEntryRow.razor.css:203-205 per user complaint. Massive simplification: dropped IAsyncDisposable, IJSRuntime, JS module, _jsModule, _checkboxRef, HandleCheckboxClick, HandleCheckboxKeyDown from DatabaseEntryRow (native input handles Space/Enter/preventDefault for free).

Stack

This PR is the final of three stacked on top of #553. Order:

  1. Settings UI restructure + DatabaseToolsModal extraction with per-row upgrade progress and modal-aware banner cycle #553 (foundation)
  2. PR 10 Commit A: AttentionBanner label + Settings focus ring + inline-alert z-index #554 (polish — Commit A)
  3. PR 10 Commits B+C+D: Per-row upgrade progress + AttentionBanner suppression + Banner cycle in ModalChrome (closes #526) #555 (banners — Commits B+C+D — closes Banner: chevron nav not working and Attention 'Open Settings' shows while Settings is already open #526)
  4. This PR (database row UX — Commits E+F — closes Settings: no per-row spinner when an import-triggered or queued upgrade runs #525)

Tests

  • UI: 321 passing (+11 net since BCD baseline)
  • Runtime: 1009 passing
  • Filtering: 869 passing

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Replaces the prior slide-reveal/aria-disabled Remove flow on the Settings → Manage Databases tab with an always-visible per-row trash button plus a row-level checkbox for multi-select, a sticky bulk action strip, and an inline confirmation modal that supports cancel-then-remove for in-flight upgrades. Also extracts the per-row checkbox into a reusable Checkbox input component mirroring the Toggle convention.

Changes:

  • New Checkbox input (visually-hidden native <input type="checkbox"> + custom icon, sharing InputComponent<bool> aria handling) plus tests.
  • DatabaseEntryRow redesigned: checkbox column, always-visible Remove button, slide-reveal CSS/state removed, FocusRemoveButtonAsync exposed to parent.
  • ManageDatabasesTab adds multi-select state, bulk strip, inline confirm via cascaded IInlineAlertSurface, dual-signal upgrade detection (Coordinator.IsUpgradeInFlight + banner progress), cancel-then-remove with UpgradeBatchCompleted + UpgradeStateChanged TCS wait and 30s timeout, focus restoration with ImportButton fallback, and aria-live selection announcements.

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/EventLogExpert.UI/Inputs/Checkbox.razor(.cs/.css) New reusable checkbox component matching the Toggle pattern.
src/EventLogExpert.UI/Database/DatabaseEntryRow.razor(.cs/.css) Row gains checkbox + always-visible Remove; slide-reveal removed; exposes FocusRemoveButtonAsync.
src/EventLogExpert.UI/DatabaseTools/Tabs/ManageDatabasesTab.razor(.cs/.css) Multi-select, bulk strip, inline confirm, cancel-then-remove wait, focus restoration, live region.
tests/Unit/EventLogExpert.UI.Tests/Inputs/CheckboxTests.cs Aria/value/disabled/icon coverage for new Checkbox.
tests/Unit/EventLogExpert.UI.Tests/Database/DatabaseEntryRowTests.cs Updated to assert always-visible Remove, checkbox aria/state, selected class.
tests/Unit/EventLogExpert.UI.Tests/DatabaseTools/Tabs/ManageDatabasesTabTests.cs Bulk accept/decline, dual-signal labels, baseline consume, strip visibility, live-region updates.
tests/Unit/EventLogExpert.UI.Tests/DatabaseTools/Tabs/FakeInlineAlertSurface.cs Test fake recording inline alert requests with configurable result.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/EventLogExpert.UI/DatabaseTools/Tabs/ManageDatabasesTab.razor.cs Outdated
@jschick04 jschick04 force-pushed the jschick/modal-coordinator-pr10-bcd branch from 76b40a7 to 25f9db8 Compare May 29, 2026 15:26
@jschick04 jschick04 force-pushed the jschick/modal-coordinator-pr10-ef branch 2 times, most recently from c666275 to a15956f Compare May 29, 2026 15:45
@jschick04 jschick04 requested a review from Copilot May 29, 2026 15:50
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 13 changed files in this pull request and generated 2 comments.

Comment thread src/EventLogExpert.UI/DatabaseTools/Tabs/ManageDatabasesTab.razor.cs Outdated
@jschick04 jschick04 force-pushed the jschick/modal-coordinator-pr10-bcd branch from 5a35925 to e3ec101 Compare May 29, 2026 16:15
@jschick04 jschick04 force-pushed the jschick/modal-coordinator-pr10-ef branch from a15956f to 88c0b66 Compare May 29, 2026 16:26
…onfirmation, and trimmed misleading test name
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 13 changed files in this pull request and generated no new comments.

@jschick04
Copy link
Copy Markdown
Collaborator Author

Stack collapsed back into #553 after panel-clean review. All commits from this branch are now part of #553's history (via rebase patch-id auto-skipping and direct cherry-pick equivalence). Closing as superseded — no code loss.

@jschick04 jschick04 closed this May 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants