Stop tool windows losing and leaking member-typed content

Fixkamo-internal
Shipped
4 أغسطس 2026 في 3:03 م UTC
صاحب البلاغ
kamo
Commit
16e5cd5

Follow-up to the popup-window persistence work. Each of these was verified against real code first; three of the original reports turned out to be wrong or overstated and were corrected rather than implemented. Content that leaked between conversations (correctness AND confidentiality): - TicketChat kept one `input` across ticket tabs, and handleSend posts to whichever sessionGuid is active — a path to sending one customer's text into another customer's ticket. Now stashes per-ticket drafts. - AiChatInput carried text and staged images into whatever conversation the member switched to. Same stash-and-restore, rather than a blunt reset that would trade a leak for content loss. Content destroyed by an unmount: - Softphone CRM tab, SMS chat tab (attachment + search) and the support ticket creation form were conditional renders, so switching tabs discarded whatever was typed. Kept mounted and hidden (SMS lifts state instead — a display:none subtree reports scrollHeight 0 and would pin its textarea to 0px). - Toggling the meeting button off unmounted MeetingComposer and binned the form. Destructive gestures and silent drops: - The hexhead throw-to-remove goal closed whatever window it scored on, which could bin a minimized compose window with an unsent draft. Closing is now vetoable via a cancelable `tool:requestClose`; MessageTool refuses while it holds unsent content and the throw scores as a miss. - "Save Draft" reported success while discarding attachments. The drafts endpoint takes a JSON EmailSendRequest with no attachment field, so the fix is to say so instead of pretending. NOT changed: htmlBody stays the raw body (the template wrapper is applied at send; storing it wrapped risks a double-wrap), and **************** stay out — verified inert, the draft builders in EmailService never emit those headers. - RecipientField cleared the input unconditionally, so pressing Enter on a mistyped address erased it. Pending text now also rides in the draft, so a reload cannot swallow a half-typed address. - HexHeadPopover's "Email" sent { to, recipientName }, a shape MessageTool never reads, so compose opened with no recipient at all. - A chat relocation dispatched tool:close with no windowId (a no-op in the store) then opened a second window, stranding the typed message. It now re-points the existing window with tool:patchProps. - A member's explicit From-address choice was clobbered when the async alias fetch landed, so they could send from the wrong identity. Not implemented — reported but verified NOT a defect: the template-scope editor rebuild does not lose body text (the parent owns it); it costs caret position and undo history only.

جميع التغييرات

مثل ما ترى الشحن؟?

كل واحد من هذه تحديثات الأراضي في مكان عملك تلقائيا. ابدأوا بالمجان وشاهدوها تنمو بعد أسبوع.

ابدأوا حراً للأبدخصخصة الفيو