Skip to content

Commit f64a3a6

Browse files
authored
Fix: Sidebar starred messages fetched by api to include thread messages. (#669)
* fetch starred message api called * starred messages fetching from api * ran prettier * fixed linting errors
1 parent 28a8202 commit f64a3a6

File tree

8 files changed

+65
-11
lines changed

8 files changed

+65
-11
lines changed

packages/react/src/hooks/useFetchChatData.js

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
useChannelStore,
66
useMemberStore,
77
useMessageStore,
8+
useStarredMessageStore,
89
} from '../store';
910

1011
const useFetchChatData = (showRoles) => {
@@ -13,6 +14,9 @@ const useFetchChatData = (showRoles) => {
1314
const isChannelPrivate = useChannelStore((state) => state.isChannelPrivate);
1415
const setMessages = useMessageStore((state) => state.setMessages);
1516
const setAdmins = useMemberStore((state) => state.setAdmins);
17+
const setStarredMessages = useStarredMessageStore(
18+
(state) => state.setStarredMessages
19+
);
1620
const isUserAuthenticated = useUserStore(
1721
(state) => state.isUserAuthenticated
1822
);
@@ -80,7 +84,24 @@ const useFetchChatData = (showRoles) => {
8084
]
8185
);
8286

83-
return getMessagesAndRoles;
87+
const getStarredMessages = useCallback(
88+
async (anonymousMode) => {
89+
if (isUserAuthenticated) {
90+
try {
91+
if (!isUserAuthenticated && !anonymousMode) {
92+
return;
93+
}
94+
const { messages } = await RCInstance.getStarredMessages();
95+
setStarredMessages(messages);
96+
} catch (e) {
97+
console.error(e);
98+
}
99+
}
100+
},
101+
[isUserAuthenticated, RCInstance, setStarredMessages]
102+
);
103+
104+
return { getMessagesAndRoles, getStarredMessages };
84105
};
85106

86107
export default useFetchChatData;

packages/react/src/store/starredMessageStore.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { create } from 'zustand';
33
const useStarredMessageStore = create((set) => ({
44
showStarred: false,
55
setShowStarred: (showStarred) => set(() => ({ showStarred })),
6+
starredMessages: [],
7+
setStarredMessages: (messages) => set(() => ({ starredMessages: messages })),
68
}));
79

810
export default useStarredMessageStore;

packages/react/src/views/ChatBody/ChatBody.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ const ChatBody = ({
6969

7070
const username = useUserStore((state) => state.username);
7171

72-
const getMessagesAndRoles = useFetchChatData(showRoles);
72+
const { getMessagesAndRoles } = useFetchChatData(showRoles);
7373

7474
const getThreadMessages = useCallback(async () => {
7575
if (isUserAuthenticated && threadMainMessage?._id) {

packages/react/src/views/ChatHeader/ChatHeader.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ const ChatHeader = ({
8686
);
8787

8888
const dispatchToastMessage = useToastBarDispatch();
89-
const getMessagesAndRoles = useFetchChatData(showRoles);
89+
const { getMessagesAndRoles } = useFetchChatData(showRoles);
9090
const setMessageLimit = useSettingsStore((state) => state.setMessageLimit);
9191
const setMessages = useMessageStore((state) => state.setMessages);
9292
const avatarUrl = useUserStore((state) => state.avatarUrl);

packages/react/src/views/ChatLayout/ChatLayout.js

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useRef } from 'react';
1+
import React, { useEffect, useRef, useCallback, useState } from 'react';
22
import { Box, useComponentOverrides } from '@embeddedchat/ui-elements';
33
import styles from './ChatLayout.styles';
44
import {
@@ -36,9 +36,15 @@ import useUiKitStore from '../../store/uiKitStore';
3636
const ChatLayout = () => {
3737
const messageListRef = useRef(null);
3838
const { classNames, styleOverrides } = useComponentOverrides('ChatBody');
39-
const { ECOptions } = useRCContext();
39+
const { RCInstance, ECOptions } = useRCContext();
4040
const anonymousMode = ECOptions?.anonymousMode;
4141
const showRoles = ECOptions?.anonymousMode;
42+
const setStarredMessages = useStarredMessageStore(
43+
(state) => state.setStarredMessages
44+
);
45+
const starredMessages = useStarredMessageStore(
46+
(state) => state.starredMessages
47+
);
4248
const showSidebar = useSidebarStore((state) => state.showSidebar);
4349
const showMentions = useMentionsStore((state) => state.showMentions);
4450
const showAllFiles = useFileStore((state) => state.showAllFiles);
@@ -57,6 +63,9 @@ const ChatLayout = () => {
5763
const attachmentWindowOpen = useAttachmentWindowStore(
5864
(state) => state.attachmentWindowOpen
5965
);
66+
const isUserAuthenticated = useUserStore(
67+
(state) => state.isUserAuthenticated
68+
);
6069
const { data, handleDrag, handleDragDrop } = useDropBox();
6170
const { uiKitContextualBarOpen, uiKitContextualBarData } = useUiKitStore(
6271
(state) => ({
@@ -72,7 +81,22 @@ const ChatLayout = () => {
7281
});
7382
}
7483
};
75-
84+
const getStarredMessages = useCallback(async () => {
85+
if (isUserAuthenticated) {
86+
try {
87+
if (!isUserAuthenticated && !anonymousMode) {
88+
return;
89+
}
90+
const { messages } = await RCInstance.getStarredMessages();
91+
setStarredMessages(messages);
92+
} catch (e) {
93+
console.error(e);
94+
}
95+
}
96+
}, [isUserAuthenticated, anonymousMode, RCInstance]);
97+
useEffect(() => {
98+
getStarredMessages();
99+
}, [showSidebar]);
76100
return (
77101
<Box
78102
css={styles.layout}

packages/react/src/views/Message/Message.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { LinkPreview } from '../LinkPreview';
2424
import { getMessageStyles } from './Message.styles';
2525
import useBubbleStyles from './BubbleVariant/useBubbleStyles';
2626
import UiKitMessageBlock from './uiKit/UiKitMessageBlock';
27+
import useFetchChatData from '../../hooks/useFetchChatData';
2728

2829
const Message = ({
2930
message,
@@ -60,7 +61,7 @@ const Message = ({
6061
);
6162
const addQuoteMessage = useMessageStore((state) => state.addQuoteMessage);
6263
const openThread = useMessageStore((state) => state.openThread);
63-
64+
const { getStarredMessages } = useFetchChatData();
6465
const dispatchToastMessage = useToastBarDispatch();
6566
const { editMessage, setEditMessage } = useMessageStore((state) => ({
6667
editMessage: state.editMessage,
@@ -92,6 +93,7 @@ const Message = ({
9293
message: 'Message unstarred',
9394
});
9495
}
96+
getStarredMessages();
9597
};
9698

9799
const handlePinMessage = async (msg) => {

packages/react/src/views/MessageAggregators/StarredMessages.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1-
import React, { useCallback } from 'react';
1+
import React, { useCallback, useEffect } from 'react';
22
import { useComponentOverrides } from '@embeddedchat/ui-elements';
3-
import { useUserStore } from '../../store';
3+
import { useStarredMessageStore, useUserStore } from '../../store';
44
import { MessageAggregator } from './common/MessageAggregator';
55

66
const StarredMessages = () => {
77
const authenticatedUserId = useUserStore((state) => state.userId);
88
const { variantOverrides } = useComponentOverrides('StarredMessages');
99
const viewType = variantOverrides.viewType || 'Sidebar';
10+
const starredMessages = useStarredMessageStore(
11+
(state) => state.starredMessages
12+
);
1013
const shouldRender = useCallback(
1114
(msg) =>
1215
msg.starred &&
@@ -18,6 +21,7 @@ const StarredMessages = () => {
1821
title="Starred Messages"
1922
iconName="star"
2023
noMessageInfo="No Starred Messages"
24+
fetchedMessageList={starredMessages}
2125
shouldRender={shouldRender}
2226
viewType={viewType}
2327
/>

packages/react/src/views/MessageAggregators/common/MessageAggregator.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export const MessageAggregator = ({
2323
iconName,
2424
noMessageInfo,
2525
shouldRender,
26+
fetchedMessageList,
2627
searchProps,
2728
searchFiltered,
2829
fetching,
@@ -40,7 +41,7 @@ export const MessageAggregator = ({
4041
);
4142
const [messageRendered, setMessageRendered] = useState(false);
4243
const { loading, messageList } = useSetMessageList(
43-
searchFiltered || allMessages,
44+
fetchedMessageList || searchFiltered || allMessages,
4445
shouldRender
4546
);
4647

@@ -57,7 +58,7 @@ export const MessageAggregator = ({
5758

5859
const isMessageNewDay = (current, previous) =>
5960
!previous ||
60-
!shouldRender(previous) ||
61+
shouldRender(previous) ||
6162
!isSameDay(new Date(current.ts), new Date(previous.ts));
6263

6364
const noMessages = messageList?.length === 0 || !messageRendered;

0 commit comments

Comments
 (0)