|
|
@@ -22,6 +22,8 @@ function App(): JSX.Element {
|
|
|
const { isLoggedIn, token, currentUserId, currentUserName, handleLogin, handleLogout } = useAuth()
|
|
|
const [activeTab, setActiveTab] = useState<'chat' | 'contact' | 'browser'>('chat')
|
|
|
const prevActiveTabRef = useRef<'chat' | 'contact' | 'browser'>(activeTab)
|
|
|
+ /** 从通讯录详情「发消息」切到消息 tab 时跳过当次 fetchContacts,避免覆盖刚插入的本地会话 */
|
|
|
+ const skipFetchContactsOnChatFromContactRef = useRef(false)
|
|
|
const [activeContactId, setActiveContactId] = useState<number | null>(null)
|
|
|
const activeContactIdRef = useRef(activeContactId)
|
|
|
const [selectedContactDetail, setSelectedContactDetail] = useState<UserContact | null>(null)
|
|
|
@@ -118,6 +120,11 @@ function App(): JSX.Element {
|
|
|
useEffect(() => {
|
|
|
const prev = prevActiveTabRef.current
|
|
|
if (activeTab === 'chat' && prev !== 'chat' && token) {
|
|
|
+ if (skipFetchContactsOnChatFromContactRef.current) {
|
|
|
+ skipFetchContactsOnChatFromContactRef.current = false
|
|
|
+ prevActiveTabRef.current = activeTab
|
|
|
+ return
|
|
|
+ }
|
|
|
void fetchContacts().then(() => refreshUnreadCount())
|
|
|
}
|
|
|
prevActiveTabRef.current = activeTab
|
|
|
@@ -379,7 +386,8 @@ function App(): JSX.Element {
|
|
|
// 处理从联系人详情页发送消息
|
|
|
const handleSendMessageFromContact = (contact: UserContact) => {
|
|
|
logger.info('App: Send message from contact detail', { contactId: contact.id, contactName: contact.name })
|
|
|
-
|
|
|
+
|
|
|
+ skipFetchContactsOnChatFromContactRef.current = true
|
|
|
setActiveTab('chat')
|
|
|
setSelectedContactDetail(null)
|
|
|
|