修复收藏/系统消息/通话记录批次的代码审查问题

- 通话结果"已拒绝"文案按视角区分(拒绝方看到"已拒绝"而非"对方已拒绝")
- 通话记录页补充移动端返回头部与加载失败重试态
- 挂断时按是否已接通传递正确的挂断原因(cancelled)
- 系统消息"全部标为已读"翻页加循环护栏,防止游标卡死;按钮可见性改用真实未读总数
- 收藏批量删除/转发在部分失败时保留失败项以便重试,而非无条件退出多选模式
- 收藏卡片边框/分类文字/侧栏图标颜色token修正
This commit is contained in:
Your Name
2026-09-16 12:54:40 +08:00
parent 97e8d7144f
commit 29a1f1c2fd
5 changed files with 67 additions and 14 deletions
+6 -1
View File
@@ -152,7 +152,12 @@ export const useCallStore = create<CallState>((set, get) => ({
hangUp: () => {
const { topic, seq, callId, connectedAt } = get();
if (topic && seq != null && callId) sendCallHangup(getTinode().getTopic(topic), seq, callId);
// `rejectCall()` right above already covers the callee-declines-before-accepting case, so
// `hangUp()` seeing `!connectedAt` only ever means the CALLER is giving up on their own
// still-ringing outgoing call (manual cancel, or the 60s ring-timeout below firing this same
// function) -- IM-前后端对接文档.md's own wire example for exactly that case is
// `{note event:"hang-up", payload:{reason:"cancelled"}}`, which this never actually sent.
if (topic && seq != null && callId) sendCallHangup(getTinode().getTopic(topic), seq, callId, connectedAt ? undefined : 'cancelled');
leaveCall();
get()._endWithReason(connectedAt ? 'finished' : 'missed');
},