Files
Jiayuan Zhang 1a37063bba fix(issues): keep table cell editors open across refreshes; title click opens the issue (MUL-5108) (#5730)
* fix(issues): keep table cell editors open across refreshes; title click opens the issue (MUL-5108)

Table view interaction fixes:

- Cell/header renderers are now stable module-level components reading
  data via table.options.meta. flexRender mounts function cells as
  component types, so the per-render closures rebuilt on every data
  refresh (new childProgressMap / property / actor identities) remounted
  every cell and closed any open picker popup.
- One hoisted editingCellKey drives all cell editors (controlled open),
  and while an editor is open the row structure renders from a frozen
  snapshot (live issue values, frozen order) so window materialization,
  hierarchy assembly, and realtime reorders cannot move or unmount the
  popup's anchor row mid-interaction. Structure catches up on close.
- Clicking an issue title now opens the issue (it previously started
  inline rename despite the link-style hover). Renaming moved to a
  hover pencil affordance; dead space in the title cell navigates too.

Co-authored-by: multica-agent <github@multica.ai>

* fix(issues): address table editor review — blur-click nav, virtual-unmount key release, deterministic test (MUL-5108)

Follow-up to the MUL-5108 table fixes, per code review on PR #5730:

- R1#2 (P1): committing a rename by clicking away also navigated into the
  issue. onBlur flips `editing` off synchronously before the commit-click
  lands, stripping the click-time guard so the click bubbled to row
  navigation. Record whether the gesture began while editing (mousedown,
  before blur) and swallow that click in the capture phase, before it can
  reach the row or the title's open handler. Dead-space clicks while not
  editing still open the issue. New blur-click regression test.

- R1#3 (P2): the hoisted editingCellKey (and the frozen row structure keyed
  off it) never cleared when row virtualization unmounted the anchor cell —
  Base UI does not fire onOpenChange(false) on unmount, so the table stayed
  frozen and the picker silently reopened / dropped the rename draft on
  scroll-back. Add useReleaseEditingCellOnUnmount: an unmount responder that
  releases the key iff the unmounting cell still owns it. Focused tests.

- R1#1 (P1): the new integration test exceeded the 5s default under
  concurrent CI worker load (real-timer gaps between userEvent steps). Drive
  userEvent with delay:null and give the heavy full-mount test explicit
  headroom so it is deterministic.

Co-authored-by: multica-agent <github@multica.ai>

---------

Co-authored-by: Lambda <lambda@multica.ai>
Co-authored-by: multica-agent <github@multica.ai>
2026-07-21 18:47:14 +08:00
..