修复发送好友申请后个人资料页仍显示可点击的"添加好友"按钮
现象:搜索陌生人->进入资料页->点"添加好友"->发送验证留言成功后, 无论是验证页800ms后的自动跳转、还是手动点返回,回到这个人的资料页时 仍然显示"添加好友"主按钮(本应显示"好友申请正在等待验证"提示文案), 且这个按钮此时仍可点击,会打开验证页再次发起一次申请(配合后端 好友申请不去重的缺口——新增44——实际造成同一个人收到多条重复申请)。 根因:发送成功后 Verification 组件把 profile-seed 缓存的 relationship patch 成了 pending_outbound,但没有同步更新 capabilities.can_add_friend ——Profile 组件判断是否展示"添加好友"按钮的 canAdd 变量读的是 profile.capabilities.can_add_friend,不是 relationship 本身,遗留的 can_add_friend:true(原样来自发送前的搜索结果种子缓存)导致按钮继续显示。 修复:发送成功后 patch 缓存时把 capabilities.can_add_friend 一并设为 false,和 relationship 保持同步。 验证:真实浏览器操作,两个全新注册账号之间,搜索->进入资料页->添加好友 ->发送验证留言,自动跳转回资料页后正确显示"好友申请正在等待验证", "添加好友"按钮消失,无法重复发起申请。 第14+轮最小粒度测试 Ch3-4 发现(好友申请气泡状态机场景)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
552c891cc3
commit
51e0fc420f
@@ -366,7 +366,17 @@ function Verification({uid, onToast}) {
|
||||
// Patch the seed Profile will re-read on remount -- its own background getUserProfile refresh
|
||||
// can't do this for us, since a stranger-turned-pending peer still fails that gated endpoint
|
||||
// the exact same way a stranger does (server only exempts an established "friend").
|
||||
writeCachedData('profile-seed:' + uid, {...(readCachedData('profile-seed:' + uid) || {}), relationship: 'pending_outbound'});
|
||||
// Must also flip capabilities.can_add_friend to false here, not just relationship: Profile's
|
||||
// canAdd render check (contact-management-view.jsx ~line 444) reads capabilities.can_add_friend,
|
||||
// not relationship, directly. Leaving the stale can_add_friend:true (copied verbatim from the
|
||||
// pre-request search-result seed) meant Profile kept showing an active "添加好友" button after
|
||||
// a request was already sent -- confirmed live: send request, navigate back to this profile
|
||||
// (the verification screen's own auto-redirect 800ms later, or its back button, both land here),
|
||||
// and the button was still clickable, capable of firing a second, backend-undeduped request
|
||||
// (see 新增44 in the backend issue list) purely because of this front-end staleness.
|
||||
const priorSeed = readCachedData('profile-seed:' + uid) || {};
|
||||
writeCachedData('profile-seed:' + uid, {...priorSeed, relationship: 'pending_outbound',
|
||||
capabilities: {...priorSeed.capabilities, can_add_friend: false}});
|
||||
window.setTimeout(() => navigate('group-member-profile', uid), 800);
|
||||
}).catch(err => onToast(err.message || '发送失败')).finally(() => setSending(false));
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user