Management: Avoid infinite requests after adding chat member
This commit is contained in:
parent
9fb3b71e58
commit
faf9c3796c
@ -23,7 +23,7 @@ import {
|
||||
addChats, addUsers, addUserStatuses, replaceThreadParam,
|
||||
updateChatListIds, updateChats, updateChat, updateChatListSecondaryInfo,
|
||||
updateManagementProgress, leaveChat, replaceUsers, replaceUserStatuses,
|
||||
replaceChats, replaceChatListIds,
|
||||
replaceChats, replaceChatListIds, addChatMembers,
|
||||
} from '../../reducers';
|
||||
import {
|
||||
selectChat, selectUser, selectChatListType, selectIsChatPinned,
|
||||
@ -953,19 +953,7 @@ addReducer('loadMoreMembers', (global) => {
|
||||
|
||||
global = getGlobal();
|
||||
global = addUsers(global, buildCollectionByKey(users, 'id'));
|
||||
|
||||
const newMemberIds = new Set(members.map(m => m.userId));
|
||||
const preservedMembers = chat.fullInfo?.members?.filter((m) => !newMemberIds.has(m.userId)) || [];
|
||||
|
||||
global = updateChat(global, chat.id, {
|
||||
fullInfo: {
|
||||
...chat.fullInfo,
|
||||
members: [
|
||||
...preservedMembers,
|
||||
...members,
|
||||
],
|
||||
},
|
||||
});
|
||||
global = addChatMembers(global, chat, members);
|
||||
setGlobal(global);
|
||||
})();
|
||||
});
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { GlobalState } from '../../global/types';
|
||||
import { ApiChat, ApiPhoto } from '../../api/types';
|
||||
import { ApiChat, ApiChatMember, ApiPhoto } from '../../api/types';
|
||||
|
||||
import { ARCHIVED_FOLDER_ID } from '../../config';
|
||||
import { omit } from '../../util/iteratees';
|
||||
import { areSortedArraysEqual, omit } from '../../util/iteratees';
|
||||
import { selectChatListType } from '../selectors';
|
||||
|
||||
export function replaceChatListIds(
|
||||
@ -216,3 +216,25 @@ export function leaveChat(global: GlobalState, leftChatId: string): GlobalState
|
||||
|
||||
return global;
|
||||
}
|
||||
|
||||
export function addChatMembers(global: GlobalState, chat: ApiChat, membersToAdd: ApiChatMember[]): GlobalState {
|
||||
const currentMembers = chat.fullInfo?.members;
|
||||
const newMemberIds = new Set(membersToAdd.map(m => m.userId));
|
||||
const updatedMembers = [
|
||||
...currentMembers?.filter((m) => !newMemberIds.has(m.userId)) || [],
|
||||
...membersToAdd,
|
||||
];
|
||||
const currentIds = currentMembers?.map(({ userId }) => userId) || [];
|
||||
const updatedIds = updatedMembers.map(({ userId }) => userId);
|
||||
|
||||
if (areSortedArraysEqual(currentIds, updatedIds)) {
|
||||
return global;
|
||||
}
|
||||
|
||||
return updateChat(global, chat.id, {
|
||||
fullInfo: {
|
||||
...chat.fullInfo,
|
||||
members: updatedMembers,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user