- Shipped
- August 30, 2026 at 11:24 PM UTC
- Author
- Kamo
- Commit
- faac02e
The lead view keeps its tab selection in the URL — `tab` for the main tab, `commsTab` for the Communications sub-tab — and a header quick action sets both: "Text" means the Communications tab, Texts sub-tab. It did that with two calls, setTab then setCommsTab, and each built its update from the searchParams value its own render had closed over. Back-to-back in one click handler React has not re-rendered in between, so the second was computed from a query string that had never seen the first and, being a replace, wrote over it. Setting commsTab un-set tab, and Text, Chat and Note looked like they did nothing at all. Both params now fold into one navigation through withLeadViewTabs, which is a pure function over the query string and therefore testable without a router. The unsaved-changes guard moves into the single setter with them, so one click asks once rather than once per param it happens to touch.