Skip to content

Commit 7bc0954

Browse files
authored
Merge branch 'dev' into CW-some-stream-disappear
2 parents b90ebbf + d4d5306 commit 7bc0954

File tree

31 files changed

+1149
-844
lines changed

31 files changed

+1149
-844
lines changed

src/pages/common/components/ChatComponent/ChatComponent.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -206,10 +206,15 @@ export default function ChatComponent({
206206
chatChannelId: chatChannel?.id || "",
207207
participants: chatChannel?.participants,
208208
});
209-
const users = chatChannel ? chatUsers : discussionUsers;
210-
const discussionMessages = chatChannel
211-
? chatMessagesData.data
212-
: discussionMessagesData.data || [];
209+
const users = useMemo(
210+
() => (chatChannel ? chatUsers : discussionUsers),
211+
[chatUsers, discussionUsers, chatChannel],
212+
);
213+
const discussionMessages = useMemo(
214+
() =>
215+
chatChannel ? chatMessagesData.data : discussionMessagesData.data || [],
216+
[chatChannel, chatMessagesData.data, discussionMessagesData.data],
217+
);
213218
const isFetchedDiscussionMessages =
214219
discussionMessagesData.fetched || chatMessagesData.fetched;
215220
const areInitialMessagesLoading = isChatChannel

src/pages/common/components/DiscussionFeedCard/DiscussionFeedCard.tsx

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,30 @@ function DiscussionFeedCard(props, ref) {
346346
}
347347
}, [item.data.lastMessage?.content]);
348348

349+
const lastMessage = useMemo(() => {
350+
return getLastMessage({
351+
commonFeedType: item.data.type,
352+
lastMessage: item.data.lastMessage,
353+
discussion,
354+
currentUserId: userId,
355+
feedItemCreatorName: getUserName(discussionCreator),
356+
commonName,
357+
isProject,
358+
hasFiles: item.data.hasFiles,
359+
hasImages: item.data.hasImages,
360+
});
361+
}, [
362+
item.data.type,
363+
item.data.lastMessage,
364+
discussion,
365+
userId,
366+
discussionCreator,
367+
commonName,
368+
isProject,
369+
item.data.hasFiles,
370+
item.data.hasImages,
371+
]);
372+
349373
return (
350374
<>
351375
<FeedCard
@@ -358,17 +382,7 @@ function DiscussionFeedCard(props, ref) {
358382
isExpanded={isExpanded}
359383
onClick={handleOpenChat}
360384
title={cardTitle}
361-
lastMessage={getLastMessage({
362-
commonFeedType: item.data.type,
363-
lastMessage: item.data.lastMessage,
364-
discussion,
365-
currentUserId: userId,
366-
feedItemCreatorName: getUserName(discussionCreator),
367-
commonName,
368-
isProject,
369-
hasFiles: item.data.hasFiles,
370-
hasImages: item.data.hasImages,
371-
})}
385+
lastMessage={lastMessage}
372386
isPreviewMode={isPreviewMode}
373387
isPinned={isPinned}
374388
commonName={commonName}
@@ -481,4 +495,4 @@ function DiscussionFeedCard(props, ref) {
481495

482496
export default forwardRef<FeedItemRef, DiscussionFeedCardProps>(
483497
DiscussionFeedCard,
484-
);
498+
);

src/pages/common/components/FeedCard/FeedCard.tsx

Lines changed: 91 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import React, {
55
forwardRef,
66
useImperativeHandle,
77
PropsWithChildren,
8+
useCallback,
9+
useMemo,
810
} from "react";
911
import { useCollapse } from "react-collapsed";
1012
import classNames from "classnames";
@@ -106,11 +108,11 @@ const FeedCard = (props, ref) => {
106108
});
107109
const containerRef = useRef<HTMLDivElement>(null);
108110

109-
const toggleExpanding = () => {
111+
const toggleExpanding = useCallback(() => {
110112
if (setExpandedFeedItemId) {
111113
setExpandedFeedItemId(isExpanded ? null : feedItemId);
112114
}
113-
};
115+
}, [setExpandedFeedItemId, isExpanded, feedItemId]);
114116

115117
const scrollToTargetTop = (
116118
headerOffset: number,
@@ -140,7 +142,7 @@ const FeedCard = (props, ref) => {
140142
}
141143
};
142144

143-
const scrollToTargetAdjusted = () => {
145+
const scrollToTargetAdjusted = useCallback(() => {
144146
if (scrollTimeoutRef.current) {
145147
clearTimeout(scrollTimeoutRef.current);
146148
}
@@ -192,7 +194,7 @@ const FeedCard = (props, ref) => {
192194
});
193195
}
194196
}, COLLAPSE_DURATION + EXTRA_WAITING_TIME_FOR_TIMEOUT);
195-
};
197+
}, [isTabletView]);
196198

197199
useEffect(() => {
198200
if (isExpanded && containerRef?.current) {
@@ -203,63 +205,102 @@ const FeedCard = (props, ref) => {
203205
clearTimeout(scrollTimeoutRef.current);
204206
scrollTimeoutRef.current = null;
205207
}
206-
}, [isExpanded]);
208+
}, [isExpanded, scrollToTargetAdjusted]);
207209

208-
const handleClick = () => {
210+
const handleClick = useCallback(() => {
209211
onClick?.();
210212

211213
if (!isTabletView && isActive) {
212214
toggleExpanding();
213215
}
214-
};
216+
}, [onClick, isTabletView, isActive, toggleExpanding]);
215217

216-
const handleExpand: MouseEventHandler = (event) => {
217-
event.stopPropagation();
218-
toggleExpanding();
219-
};
218+
const handleExpand: MouseEventHandler = useCallback(
219+
(event) => {
220+
event.stopPropagation();
221+
toggleExpanding();
222+
},
223+
[toggleExpanding],
224+
);
225+
226+
useImperativeHandle(
227+
ref,
228+
() => ({
229+
itemId: feedItemId,
230+
scrollToItem: scrollToTargetAdjusted,
231+
}),
232+
[feedItemId, scrollToTargetAdjusted],
233+
);
220234

221-
useImperativeHandle(ref, () => ({
222-
itemId: feedItemId,
223-
scrollToItem: scrollToTargetAdjusted,
224-
}));
235+
const feedItemBaseContent = useMemo(() => {
236+
return renderFeedItemBaseContent?.({
237+
lastActivity,
238+
unreadMessages,
239+
isMobileView: isTabletView,
240+
isActive,
241+
isExpanded,
242+
canBeExpanded,
243+
onClick: handleClick,
244+
onExpand: handleExpand,
245+
title,
246+
lastMessage: !isLoading ? lastMessage : undefined,
247+
menuItems,
248+
commonName,
249+
commonId,
250+
image,
251+
imageAlt,
252+
isProject,
253+
isPinned,
254+
isFollowing,
255+
type,
256+
seenOnce,
257+
seen,
258+
ownerId,
259+
discussionPredefinedType,
260+
hasFiles,
261+
hasImages,
262+
hasUnseenMention,
263+
notion,
264+
originalCommonIdForLinking,
265+
linkedCommonIds,
266+
});
267+
}, [
268+
lastActivity,
269+
unreadMessages,
270+
isTabletView,
271+
isActive,
272+
isExpanded,
273+
canBeExpanded,
274+
handleClick,
275+
handleExpand,
276+
title,
277+
lastMessage,
278+
isLoading,
279+
menuItems,
280+
commonName,
281+
commonId,
282+
image,
283+
imageAlt,
284+
isProject,
285+
isPinned,
286+
isFollowing,
287+
type,
288+
seenOnce,
289+
seen,
290+
ownerId,
291+
discussionPredefinedType,
292+
hasFiles,
293+
hasImages,
294+
hasUnseenMention,
295+
notion,
296+
originalCommonIdForLinking,
297+
linkedCommonIds,
298+
renderFeedItemBaseContent,
299+
]);
225300

226301
return (
227302
<div ref={containerRef}>
228-
{!isPreviewMode && (
229-
<div {...getToggleProps()}>
230-
{renderFeedItemBaseContent?.({
231-
lastActivity,
232-
unreadMessages,
233-
isMobileView: isTabletView,
234-
isActive,
235-
isExpanded,
236-
canBeExpanded,
237-
onClick: handleClick,
238-
onExpand: handleExpand,
239-
title,
240-
lastMessage: !isLoading ? lastMessage : undefined,
241-
menuItems,
242-
commonName,
243-
commonId,
244-
image,
245-
imageAlt,
246-
isProject,
247-
isPinned,
248-
isFollowing,
249-
type,
250-
seenOnce,
251-
seen,
252-
ownerId,
253-
discussionPredefinedType,
254-
hasFiles,
255-
hasImages,
256-
hasUnseenMention,
257-
notion,
258-
originalCommonIdForLinking,
259-
linkedCommonIds,
260-
})}
261-
</div>
262-
)}
303+
{!isPreviewMode && <div {...getToggleProps()}>{feedItemBaseContent}</div>}
263304
<div {...getCollapseProps()}>
264305
<CommonCard
265306
className={classNames(

0 commit comments

Comments
 (0)