Chats: memoize ChatMessageList messages for performance

merge-requests/568/head
Alex Gleason 2021-07-01 18:41:08 -05:00
rodzic 319af71327
commit 9cbd7b88c7
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 7211D1F99744FBB7
1 zmienionych plików z 28 dodań i 8 usunięć

Wyświetl plik

@ -14,6 +14,7 @@ import { MediaGallery } from 'soapbox/features/ui/util/async-components';
import Bundle from 'soapbox/features/ui/components/bundle';
import DropdownMenuContainer from 'soapbox/containers/dropdown_menu_container';
import { initReportById } from 'soapbox/actions/reports';
import { createSelector } from 'reselect';
const messages = defineMessages({
today: { id: 'chats.dividers.today', defaultMessage: 'Today' },
@ -38,15 +39,34 @@ const makeEmojiMap = record => record.get('emojis', ImmutableList()).reduce((map
return map.set(`:${emoji.get('shortcode')}:`, emoji);
}, ImmutableMap());
const mapStateToProps = (state, { chatMessageIds }) => ({
me: state.get('me'),
chatMessages: chatMessageIds.reduce((acc, curr) => {
const chatMessage = state.getIn(['chat_messages', curr]);
return chatMessage ? acc.push(chatMessage) : acc;
}, ImmutableList()),
});
const makeGetChatMessages = () => {
return createSelector(
[(chatMessages, chatMessageIds) => (
chatMessageIds.reduce((acc, curr) => {
const chatMessage = chatMessages.get(curr);
return chatMessage ? acc.push(chatMessage) : acc;
}, ImmutableList())
)],
chatMessages => chatMessages,
);
};
export default @connect(mapStateToProps)
const makeMapStateToProps = () => {
const getChatMessages = makeGetChatMessages();
const mapStateToProps = (state, { chatMessageIds }) => {
const chatMessages = state.get('chat_messages');
return {
me: state.get('me'),
chatMessages: getChatMessages(chatMessages, chatMessageIds),
};
};
return mapStateToProps;
};
export default @connect(makeMapStateToProps)
@injectIntl
class ChatMessageList extends ImmutablePureComponent {