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,
|
addChats, addUsers, addUserStatuses, replaceThreadParam,
|
||||||
updateChatListIds, updateChats, updateChat, updateChatListSecondaryInfo,
|
updateChatListIds, updateChats, updateChat, updateChatListSecondaryInfo,
|
||||||
updateManagementProgress, leaveChat, replaceUsers, replaceUserStatuses,
|
updateManagementProgress, leaveChat, replaceUsers, replaceUserStatuses,
|
||||||
replaceChats, replaceChatListIds,
|
replaceChats, replaceChatListIds, addChatMembers,
|
||||||
} from '../../reducers';
|
} from '../../reducers';
|
||||||
import {
|
import {
|
||||||
selectChat, selectUser, selectChatListType, selectIsChatPinned,
|
selectChat, selectUser, selectChatListType, selectIsChatPinned,
|
||||||
@ -953,19 +953,7 @@ addReducer('loadMoreMembers', (global) => {
|
|||||||
|
|
||||||
global = getGlobal();
|
global = getGlobal();
|
||||||
global = addUsers(global, buildCollectionByKey(users, 'id'));
|
global = addUsers(global, buildCollectionByKey(users, 'id'));
|
||||||
|
global = addChatMembers(global, chat, members);
|
||||||
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,
|
|
||||||
],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
setGlobal(global);
|
setGlobal(global);
|
||||||
})();
|
})();
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { GlobalState } from '../../global/types';
|
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 { ARCHIVED_FOLDER_ID } from '../../config';
|
||||||
import { omit } from '../../util/iteratees';
|
import { areSortedArraysEqual, omit } from '../../util/iteratees';
|
||||||
import { selectChatListType } from '../selectors';
|
import { selectChatListType } from '../selectors';
|
||||||
|
|
||||||
export function replaceChatListIds(
|
export function replaceChatListIds(
|
||||||
@ -216,3 +216,25 @@ export function leaveChat(global: GlobalState, leftChatId: string): GlobalState
|
|||||||
|
|
||||||
return global;
|
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