Skip to content

Commit 26bce77

Browse files
committed
perf: properly use selected state values
1 parent 1fa6906 commit 26bce77

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

package/src/components/Message/Message.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { useMessageReadData } from './hooks/useMessageReadData';
2323
import { useProcessReactions } from './hooks/useProcessReactions';
2424
import { messageActions as defaultMessageActions } from './utils/messageActions';
2525

26-
import { closeOverlay, openOverlay, useOverlayController } from '../../contexts';
26+
import { closeOverlay, openOverlay, useIsOverlayActive } from '../../contexts';
2727
import {
2828
ChannelContextValue,
2929
useChannelContext,
@@ -694,10 +694,9 @@ const MessageWithContext = (props: MessagePropsWithContext) => {
694694
};
695695

696696
const frozenMessage = useRef(message);
697-
const { id, closing } = useOverlayController();
697+
const { active, closing } = useIsOverlayActive(message.id);
698698

699-
// TODO: refactor
700-
const active = id === message.id;
699+
console.log('MSGID: ', message.id);
701700

702701
const messageContext = useCreateMessageContext({
703702
actionsEnabled,

package/src/contexts/overlayContext/OverlayProvider.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { PropsWithChildren, useEffect, useMemo, useState } from 'react';
1+
import React, { PropsWithChildren, useCallback, useEffect, useMemo, useState } from 'react';
22

33
import { BackHandler, Dimensions, StyleSheet, useWindowDimensions, View } from 'react-native';
44

@@ -196,6 +196,18 @@ export const useOverlayController = () => {
196196
return useStateStore(overlayStore, selector);
197197
};
198198

199+
const noOpObject = { active: false, closing: false };
200+
201+
export const useIsOverlayActive = (messageId: string) => {
202+
const messageOverlaySelector = useCallback(
203+
(nextState: OverlayState) =>
204+
nextState.id === messageId ? { active: true, closing: nextState.closing } : noOpObject,
205+
[messageId],
206+
);
207+
208+
return useStateStore(overlayStore, messageOverlaySelector);
209+
};
210+
199211
const OverlayHostLayer = () => {
200212
const { messageH, topH, bottomH, id, closing } = useOverlayController();
201213
const insets = useSafeAreaInsets();

0 commit comments

Comments
 (0)