Skip to content

Feature: efcviewer-breadcrumb-webview2 #349

Description

@drmoisan
  • Work Mode: full-feature

Problem / Why

The EfcViewer matching-folders control currently renders folder suggestions as a conventional
indented multi-row tree using BrightIdeasSoftware.TreeListView (QuickFiler/Viewers/EfcViewer.cs,
QuickFiler/Viewers/EfcViewer3.cs, plus their Designer files). The intended design is a single-line
breadcrumb per suggestion anchored at the selected leaf. The current hierarchy is synthesized by
FolderSuggestionTree.BuildFromRows via prefix-matching over the top-ranked suggestion rows, so
expanding a folder does not reveal its real Outlook subfolders. The prediction percentage is also
reported as obscured at runtime even though static column/rect math shows no overlap.

TreeListView (as currently used) does not naturally support single-line breadcrumb rendering with
per-segment double-click collapse, and it is a VSTO/WinForms-hosting-specific investment that would
not carry forward to the planned VSTO migration. The redesign targets WebView2 (HTML/CSS/JS), which
is largely reusable across a post-VSTO UI stack and reuses a dependency already proven in this
codebase (QuickFiler's WebView2 message-body pane, including the cid: fix from feature 326).

Proposed Behavior

Replace the EfcViewer matching-folders TreeListView in both EfcViewer and EfcViewer3 with a
WebView2-hosted HTML/CSS/JS breadcrumb control that:

  1. Renders each suggestion as a single-line breadcrumb Folder -> SubFolder -> Leaf anchored at the
    selected/predicted leaf.
  2. Shows an expand affordance (plus when collapsed, minus when expanded) only on the leaf, and only
    when the leaf has subfolders.
  3. Collapses a row on double-click of a non-leaf segment, hiding everything after that segment and
    showing a plus to re-expand back to the full breadcrumb.
  4. On expand of a segment, lists every real immediate Outlook subfolder of that folder via the
    shared live folder-hierarchy provider from feature 9101 (not prefix-matching over suggestion rows).
  5. Keeps the prediction percentage always fully visible: first capture a runtime reproduction of the
    current obscuring defect, then apply a CSS-based fix.

A JS<->.NET event bridge carries double-click and keyboard (left/right arrow) interaction and routes
the live subfolder query across the WebView2 boundary. The percentage plumbing (feature 324) is reused
as-is; the scoring/ranking algorithm is not changed.

Acceptance Criteria

  • Each EfcViewer suggestion renders as a single-line breadcrumb anchored at the selected leaf in a WebView2-hosted control (both EfcViewer and EfcViewer3).
  • The leaf shows a plus/minus expand affordance only when it has subfolders.
  • Double-clicking a non-leaf segment collapses the row after that segment with a plus to re-expand.
  • Expanding a segment lists every real immediate Outlook subfolder via the 9101 provider.
  • The prediction percentage is always fully visible; a runtime reproduction of the current defect precedes the CSS-based fix.
  • A JS<->.NET bridge carries double-click and left/right-arrow keyboard events and routes the live subfolder query.
  • No third-party WinForms tree/list control and no WPF/ElementHost are introduced; the control is WebView2 (HTML/CSS/JS).
  • No change to the scoring/ranking algorithm; the C# toolchain (csharpier, analyzers, nullable, MSTest) is green and coverage thresholds are met.

Constraints & Risks

  • Depends on issue 9101 (live Outlook folder-hierarchy provider), which is merged before this feature
    during epic execution. This feature consumes 9101's contract (ancestor chain + on-demand real
    immediate subfolders behind an injectable seam) rather than re-deriving hierarchy from suggestion rows.
  • Ruled out: BrightIdeasSoftware.TreeListView (or any third-party WinForms tree/list control) and
    WPF/ElementHost.
  • The live Outlook subfolder query is I/O-bound and must be isolated from pure breadcrumb logic per
    the repository I/O-boundary policy so the core is unit-testable without a live Outlook process.
  • Two parallel non-shared EfcViewer implementations (EfcViewer, EfcViewer3) must both be converted.
  • WinForms/WebView2 host wiring and Designer-generated code are coverage-exempt per policy; testable
    pure logic (breadcrumb model, bridge message shaping) is not exempt and must meet coverage floors.

Test Conditions

  • Unit coverage: breadcrumb model construction from an ancestor chain; collapse/expand state transitions; bridge message serialization/deserialization; segment-children request shaping.
  • Integration scenarios: WebView2 host initialization; JS<->.NET bridge round-trip for double-click, arrow keys, and subfolder query.
  • Runtime reproduction of the percentage-obscuring defect and verification of the CSS fix.

Source

From: docs/features/potential/2026-07-16-efcviewer-breadcrumb-webview2.md

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureFeature request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions