Profile: Prevent stories panel from making unnecessary requests (#5557)

This commit is contained in:
zubiden 2025-02-13 14:27:46 +01:00 committed by Alexander Zinchuk
parent 673c2aee5a
commit bb5ec799a1
4 changed files with 16 additions and 10 deletions

View File

@ -422,6 +422,7 @@ async function fetchCommonStoriesRequest({ method, peerId }: {
result.stories.forEach((story) => addStoryToLocalDb(story, peerId));
return {
count: result.count,
stories,
pinnedIds: result.pinnedToTop,
};

View File

@ -363,8 +363,8 @@ const Profile: FC<OwnProps & StateProps> = ({
loadPeerProfileStories({ peerId: chatId, offsetId });
}, [chatId]);
const handleLoadStoriesArchive = useCallback(({ offsetId }: { offsetId: number }) => {
loadStoriesArchive({ peerId: currentUserId!, offsetId });
}, [currentUserId]);
loadStoriesArchive({ peerId: chatId, offsetId });
}, [chatId]);
const handleLoadGifts = useCallback(() => {
loadPeerSavedGifts({ peerId: chatId });
}, [chatId]);

View File

@ -334,8 +334,8 @@ function Transition({
}
const container = containerRef.current!;
const activeElement = container.querySelector<HTMLDivElement>(`.${CLASSES.active}`)
|| container.querySelector<HTMLDivElement>(`.${CLASSES.from}`);
const activeElement = container.querySelector<HTMLDivElement>(`:scope > .${CLASSES.active}`)
|| container.querySelector<HTMLDivElement>(`:scope > .${CLASSES.from}`);
if (!activeElement) {
return;
}

View File

@ -298,7 +298,7 @@ addActionHandler('loadPeerStories', async (global, actions, payload): Promise<vo
addActionHandler('loadPeerProfileStories', async (global, actions, payload): Promise<void> => {
const { peerId, offsetId } = payload;
const peer = selectPeer(global, peerId);
const peerStories = selectPeerStories(global, peerId);
let peerStories = selectPeerStories(global, peerId);
if (!peer || peerStories?.isFullyLoaded) {
return;
}
@ -309,18 +309,20 @@ addActionHandler('loadPeerProfileStories', async (global, actions, payload): Pro
}
global = getGlobal();
if (Object.values(result.stories).length === 0) {
global = addStoriesForPeer(global, peerId, result.stories, result.pinnedIds);
peerStories = selectPeerStories(global, peerId);
if (Object.values(result.stories).length === 0
|| (peerStories?.profileIds?.length && peerStories?.profileIds.length >= result.count)) {
global = updatePeerStoriesFullyLoaded(global, peerId, true);
}
global = addStoriesForPeer(global, peerId, result.stories, result.pinnedIds);
setGlobal(global);
});
addActionHandler('loadStoriesArchive', async (global, actions, payload): Promise<void> => {
const { peerId, offsetId } = payload;
const peer = selectPeer(global, peerId);
const peerStories = selectPeerStories(global, peerId);
let peerStories = selectPeerStories(global, peerId);
if (!peer || peerStories?.isArchiveFullyLoaded) return;
const result = await callApi('fetchStoriesArchive', { peer, offsetId });
@ -329,10 +331,13 @@ addActionHandler('loadStoriesArchive', async (global, actions, payload): Promise
}
global = getGlobal();
if (Object.values(result.stories).length === 0) {
global = addStoriesForPeer(global, peerId, result.stories, undefined, true);
peerStories = selectPeerStories(global, peerId);
if (Object.values(result.stories).length === 0
|| (peerStories?.archiveIds?.length && peerStories?.archiveIds.length >= result.count)) {
global = updatePeerStoriesFullyLoaded(global, peerId, true, true);
}
global = addStoriesForPeer(global, peerId, result.stories, undefined, true);
setGlobal(global);
});