[Refactoring] Multitabs: Fix creating redundant message list records (#2604)
This commit is contained in:
parent
99dc944de6
commit
511668b72a
@ -55,7 +55,7 @@ import {
|
|||||||
selectChatFolder, selectSupportChat, selectChatByUsername,
|
selectChatFolder, selectSupportChat, selectChatByUsername,
|
||||||
selectCurrentMessageList, selectThreadInfo, selectCurrentChat, selectLastServiceNotification,
|
selectCurrentMessageList, selectThreadInfo, selectCurrentChat, selectLastServiceNotification,
|
||||||
selectVisibleUsers, selectUserByPhoneNumber, selectDraft, selectThreadTopMessageId,
|
selectVisibleUsers, selectUserByPhoneNumber, selectDraft, selectThreadTopMessageId,
|
||||||
selectTabState,
|
selectTabState, selectThread,
|
||||||
} from '../../selectors';
|
} from '../../selectors';
|
||||||
import { buildCollectionByKey, omit } from '../../../util/iteratees';
|
import { buildCollectionByKey, omit } from '../../../util/iteratees';
|
||||||
import { debounce, pause, throttle } from '../../../util/schedulers';
|
import { debounce, pause, throttle } from '../../../util/schedulers';
|
||||||
@ -1898,17 +1898,27 @@ async function loadChats<T extends GlobalState>(
|
|||||||
|
|
||||||
const idsToUpdateDraft = isFullDraftSync ? result.chatIds : Object.keys(result.draftsById);
|
const idsToUpdateDraft = isFullDraftSync ? result.chatIds : Object.keys(result.draftsById);
|
||||||
idsToUpdateDraft.forEach((chatId) => {
|
idsToUpdateDraft.forEach((chatId) => {
|
||||||
|
const draft = result.draftsById[chatId];
|
||||||
|
const thread = selectThread(global, chatId, MAIN_THREAD_ID);
|
||||||
|
|
||||||
|
if (!draft && !thread) return;
|
||||||
|
|
||||||
if (!selectDraft(global, chatId, MAIN_THREAD_ID)?.isLocal) {
|
if (!selectDraft(global, chatId, MAIN_THREAD_ID)?.isLocal) {
|
||||||
global = replaceThreadParam(
|
global = replaceThreadParam(
|
||||||
global, chatId, MAIN_THREAD_ID, 'draft', result.draftsById[chatId],
|
global, chatId, MAIN_THREAD_ID, 'draft', draft,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const idsToUpdateReplyingToId = isFullDraftSync ? result.chatIds : Object.keys(result.replyingToById);
|
const idsToUpdateReplyingToId = isFullDraftSync ? result.chatIds : Object.keys(result.replyingToById);
|
||||||
idsToUpdateReplyingToId.forEach((chatId) => {
|
idsToUpdateReplyingToId.forEach((chatId) => {
|
||||||
|
const replyingToById = result.replyingToById[chatId];
|
||||||
|
const thread = selectThread(global, chatId, MAIN_THREAD_ID);
|
||||||
|
|
||||||
|
if (!replyingToById && !thread) return;
|
||||||
|
|
||||||
global = replaceThreadParam(
|
global = replaceThreadParam(
|
||||||
global, chatId, MAIN_THREAD_ID, 'replyingToId', result.replyingToById[chatId],
|
global, chatId, MAIN_THREAD_ID, 'replyingToId', replyingToById,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -95,11 +95,19 @@ export function selectTabThreadParam<T extends GlobalState, K extends keyof TabT
|
|||||||
return selectTabState(global, tabId).tabThreads[chatId]?.[threadId]?.[key];
|
return selectTabState(global, tabId).tabThreads[chatId]?.[threadId]?.[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
export function selectThreadParam<K extends keyof Thread>(
|
export function selectThreadParam<T extends GlobalState, K extends keyof Thread>(
|
||||||
global: GlobalState,
|
global: T,
|
||||||
chatId: string,
|
chatId: string,
|
||||||
threadId: number,
|
threadId: number,
|
||||||
key: K,
|
key: K,
|
||||||
|
) {
|
||||||
|
return selectThread(global, chatId, threadId)?.[key];
|
||||||
|
}
|
||||||
|
|
||||||
|
export function selectThread<T extends GlobalState>(
|
||||||
|
global: T,
|
||||||
|
chatId: string,
|
||||||
|
threadId: number,
|
||||||
) {
|
) {
|
||||||
const messageInfo = global.messages.byChatId[chatId];
|
const messageInfo = global.messages.byChatId[chatId];
|
||||||
if (!messageInfo) {
|
if (!messageInfo) {
|
||||||
@ -111,7 +119,7 @@ export function selectThreadParam<K extends keyof Thread>(
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
return thread[key];
|
return thread;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function selectListedIds<T extends GlobalState>(global: T, chatId: string, threadId: number) {
|
export function selectListedIds<T extends GlobalState>(global: T, chatId: string, threadId: number) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user