-
Notifications
You must be signed in to change notification settings - Fork 0
/
last-message-query.ts
46 lines (41 loc) · 1.37 KB
/
last-message-query.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import {
Channel,
DirectContact,
useDirectMessagesQuery,
usePublicMessagesQuery,
} from "../nostr";
import { useEffect, useMemo } from "react";
import { useMessagesQuery } from "./messages-query";
import { useJoinedCommunityTeamQuery } from "./joined-community-team-query";
import { KindOfCommunity } from "../types";
/**
*
* @param contact Current direct contact
* @param channel Current channel
* @param community Current channel's community
* @note As for ecency-vision this query runs initial messages fetching. If your application don't follow this rule
* make sure that messages queries was fetched manually
*/
export function useLastMessageQuery(
contact?: DirectContact,
channel?: Channel,
community?: KindOfCommunity,
) {
const { data: joinedCommunityTeamKeys, isSuccess } =
useJoinedCommunityTeamQuery(community);
const { refetch: refetchDirectMessages } = useDirectMessagesQuery(contact);
const { refetch: refetchPublicMessages } = usePublicMessagesQuery(
channel,
joinedCommunityTeamKeys.map(({ pubkey }) => pubkey),
);
const messages = useMessagesQuery(contact, channel);
useEffect(() => {
refetchDirectMessages();
}, [contact]);
useEffect(() => {
if (isSuccess) {
refetchPublicMessages();
}
}, [channel, joinedCommunityTeamKeys, isSuccess]);
return useMemo(() => messages[messages.length - 1], [messages]);
}