The card on leads — assignees, timeline authors, history and ticket agents

Featurekamo-internal
Shipped
September 18, 2026 at 3:29 AM UTC
Author
Kamo
Commit
78c10e0

Every place the lead screens name a member (staff) now opens that member's card. Ids are the string member ids the data already carries. - Lead view: the Assignment card's agent (the page's assignedLeadMemberId). AgentSelector and the lead-lock UI are untouched. - Leads grid: the Agent column (assignedTeamMember.id), hover only: it is a grid cell. - Softphone CRM: the "Assigned to" tile (assignedTeamMember.id). - Communications timeline, the member on our side of each entry (entry.memberId): a note's title and avatar (MemberChip replaces the hand-drawn MUI Avatar, same 20px), an outbound chat's title, the member in a call's and an outbound text's subtitle, an outbound email's sender. Titles are translated sentences, so the whole title is the trigger. The lead on the other side stays plain: inbound chat rows carry no member id, and on an inbound email memberId is who received it, not the sender shown. The shell switches pointer events off across the title column so the row is one click target; the names opt back in, as LeadRefChip does. A call or email that expands keeps its name hover-only and the shell passes the name's click on, so the row still expands. - Support ticket list: the assigned agent (assignedAgentId), hover only: the cell assigns or opens the ticket. Its Assign/Reassign tooltip moves beside the name so it no longer covers the card. - Leads history: every member in a line (memberId, fromMemberId, byMemberId). A line can name two members inside one translated sentence, so it is formatted with a marker in each member's place and split on the markers: the words stay the locale's own, in its order, and no message changed. - Manage credits: the member column's profile link (memberId), hover only so the link keeps its click. - Reserved opportunities: the primary agent (primaryAgentMemberId). A removed member (no name) stays "Unknown agent". - Lead history tab: the "Changed by" column (actor.memberId). It is drawn by the shared EntityHistoryPanel, so the account history gets the card too. Left plain: - Ticket requester: the public contact form files its tickets under the org's SYSTEM member without isPublicChat, so requestorId is not reliably the person asking. TicketHeader names the agent only inside MemberPickerDialog. - Reserved opportunities' "Reassigned from" / "Filed by" captions and ManageReservationDialog's subtitle: names inside sentences that carry their own tooltip or head a dialog. The primary-agent and commission-split rows (ManageReservationDialog, CommissionSplitEditor) are pickers. - Lead history's old/new values for the assignee field: renderValue returns text. - The lead view's task assignee: a free string with no id.

All changes

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing