From 4f6bccea18587564dcae184f60ac1a07985b13a8 Mon Sep 17 00:00:00 2001 From: Ivan Date: Tue, 21 Jul 2026 16:20:02 -0500 Subject: [PATCH] feat: update outbound message status handling with method-aware icons and titles, update localization for delivery statuses --- meshchatx.rsm | Bin 160163 -> 160163 bytes .../messages/ConversationMessageEntry.vue | 26 ++++++------ .../messages/ConversationViewer.vue | 35 +++++++++++++++++ meshchatx/src/frontend/locales/de.json | 2 + meshchatx/src/frontend/locales/en.json | 2 + meshchatx/src/frontend/locales/es.json | 2 + meshchatx/src/frontend/locales/fi.json | 2 + meshchatx/src/frontend/locales/fr.json | 2 + meshchatx/src/frontend/locales/it.json | 2 + meshchatx/src/frontend/locales/nl.json | 2 + meshchatx/src/frontend/locales/ru.json | 2 + meshchatx/src/frontend/locales/zh.json | 2 + ...onViewer.outboundPropagationStatus.test.js | 37 ++++++++++++++++++ 13 files changed, 104 insertions(+), 12 deletions(-) diff --git a/meshchatx.rsm b/meshchatx.rsm index 0417f775e9cdafc683af29e0080457ead182901e..8e4a39fd86e685cfd274261966611cc767106336 100644 GIT binary patch delta 1061 zcmX|=&x_Vo6vlgpf|(j?paClh#LyUsxc8iU?>TqT__j!eHZ{94sC&=7Ck-35TGS?j zRuK~R4PG+HLMT_EDM+MZzvvH$TqPLNCalG*G=x0ki>|+y=RD8zdA`T4%pJQjH-7!u z4KMw;XXDuyu08eZ?xT-=d)Kh#o@YM(Y5Ai^-@$+O{)Do_u`2gE3aNWyZpt>b6e&Qk008+cHd;v^$(7WJ{ez}bV98@BLifw3Nd;`)r#I^eUuV1c}JzVUJ5Xl05}}{=HXj% zJNxRBuf4f{_1;#P6M$3K?5fXpASxwRhD=1xg&-ZYr2w2M#fV9L!&ZWK=*aRuGWGYe znOrW36FchcwLs@;{h)Hqy-<#=fLJt=#E53Lr(k%JqKQ*Qq~Y@MTVWT**fL{H){J@Z z3N-|)FnOS20v&s^PqkJk5t4&igrjq*mcSXs%k7+VJKvbbBy7G0si8rRW-^tOxOSI} znKgf01t?*L+t@U4O_v85^oF6?%4a*RFSKd9SK>avvUZ+)*-f*oTve}s3=yL z_~zI{iy4fmk#Vgl$Z+E7l@FJ>SFKJEQew>I3tcws(OSLq-aQz zLutLZ24oAn<8ZQXX*9dNleLwtCy|Odik&sODWM1iu53fenW@`kxO&9g);Ai8npMFv zJpbjC>zUt|MkoIoqt!(*i2)Fs1{7Y8(_^yViL*~oBSBWl1!6#9ZW`CEnpzQZesXxj S%;Mygg_(sje?KtuUAYO?z)J)G delta 1062 zcmYL|PiS356vllKB$1RxaG|k_fL0AcI_J#4b2iP}s0G2L%j%gqGqI&cT8k7!OTmSk zD(OSss*BK#MJkqBgNv3_q~M}p!7jwCjDKhgZp4*ZJZU5@F84Bb=9};PelzDbr_OCo z4R60JOV{sxyRfuxb#wa9#f^=%-Cvx)`}N6{Qy<>=@$v_6Kf7@D;B)DZ+4(nC*ZRj# zeRS}VD-S+&d|y8Q>75(TPhNOnW%$_K(!2EiKRvtz+%KN|HJo(#CpX}N5*Gpg4 ziOoar{P6lK7f+nNvRIR3A4>F;iYiJLtxg=dRH&s&u7%=i@F5XKbOl@F-lXKfwjhj8 zJvo>?vp#p}y{q$sMH`kBoCmEoKd|}?&|Tx4Vz5yUsVM{%C1l|)6|_TB_5ke4X!X|K zk^5$9^!L^2OLObfeOPjfk+e&pq)<`|(#;f#&zww~YHAK+jF2L7Nsz#kG6_%tU;OCk zXOEB9pBYS!Pd`1F+}|DK=Im#~(sIfLQ_LYl_sj^Ifv~xTox5g&noN*e=|bwUh0(Q* zC+>?KXv+(S-+FWTVedT00*XBXcko#yJC0Z|_^1HET5#ZMPKl})O_~cM+omN3Zt;J6 zubRij)T<(OalLX-F4YH$R46v8+FO?L^@u%VRTEpYWjMz)OP@_lEM2M!(I7Hpw|#@v$YzBtqnT>!~d4P3U$ zd - + - + { expect(wrapper.vm.outboundSentStatusTitle(null)).toBe(""); }); + it("outboundBubbleStatusTitle uses delivered and method-aware copy", () => { + const wrapper = mountViewer(); + expect(wrapper.vm.outboundBubbleStatusTitle({ method: "direct", state: "delivered" })).toBe( + "messages.outbound_delivered" + ); + expect(wrapper.vm.outboundBubbleStatusTitle({ method: "propagated", state: "delivered" })).toBe( + "messages.outbound_delivered_propagated" + ); + expect(wrapper.vm.outboundBubbleStatusTitle({ method: "propagated", state: "sent" })).toBe( + "messages.outbound_on_propagation_node" + ); + expect(wrapper.vm.outboundBubbleStatusTitle({ method: "paper", state: "sent" })).toBe( + "messages.outbound_sent_network" + ); + expect(wrapper.vm.outboundBubbleStatusTitle(null)).toBe(""); + }); + + it("outboundBubbleStatusIconName maps method and state to icons", () => { + const wrapper = mountViewer(); + expect(wrapper.vm.outboundBubbleStatusIconName({ method: "direct", state: "sent" })).toBe("check"); + expect(wrapper.vm.outboundBubbleStatusIconName({ method: "direct", state: "delivered" })).toBe("check-all"); + expect(wrapper.vm.outboundBubbleStatusIconName({ method: "opportunistic", state: "sent" })).toBe("check"); + expect(wrapper.vm.outboundBubbleStatusIconName({ method: "opportunistic", state: "delivered" })).toBe( + "check-all" + ); + expect(wrapper.vm.outboundBubbleStatusIconName({ method: "propagated", state: "sent" })).toBe("email-outline"); + expect(wrapper.vm.outboundBubbleStatusIconName({ method: "propagated", state: "delivered" })).toBe( + "email-check-outline" + ); + expect(wrapper.vm.outboundBubbleStatusIconName({ method: "paper", state: "sent" })).toBe("note-outline"); + expect(wrapper.vm.outboundBubbleStatusIconName({ method: "paper", state: "delivered" })).toBe( + "note-check-outline" + ); + expect(wrapper.vm.outboundBubbleStatusIconName({ method: "direct", state: "unknown" })).toBe("check"); + expect(wrapper.vm.outboundBubbleStatusIconName(null)).toBe("check"); + }); + it("outboundTransferProgressPercent and label track resource transfer", () => { const wrapper = mountViewer(); expect(wrapper.vm.outboundTransferProgressPercent({ state: "sending", progress: 42.5 })).toBe(43);