@droppii-org/chat-mobile 0.2.6 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/module/components/ThreadCard/AvatarSection.js +4 -4
- package/lib/module/components/ThreadCard/AvatarSection.js.map +1 -1
- package/lib/module/components/ThreadCard/NamePrefixIcon.js +13 -16
- package/lib/module/components/ThreadCard/NamePrefixIcon.js.map +1 -1
- package/lib/module/components/ThreadCard/ThreadCard.js +13 -33
- package/lib/module/components/ThreadCard/ThreadCard.js.map +1 -1
- package/lib/module/context/ChatContext.js +7 -6
- package/lib/module/context/ChatContext.js.map +1 -1
- package/lib/module/hooks/message/useSendMessage.js +101 -0
- package/lib/module/hooks/message/useSendMessage.js.map +1 -0
- package/lib/module/hooks/useChatMessages.js +37 -119
- package/lib/module/hooks/useChatMessages.js.map +1 -1
- package/lib/module/hooks/useConversationList.js +29 -17
- package/lib/module/hooks/useConversationList.js.map +1 -1
- package/lib/module/hooks/useLinkPreview/useLinkPreview.js +3 -2
- package/lib/module/hooks/useLinkPreview/useLinkPreview.js.map +1 -1
- package/lib/module/screens/chat-detail/ChatComposer.js +2 -2
- package/lib/module/screens/chat-detail/ChatComposer.js.map +1 -1
- package/lib/module/screens/chat-detail/ChatDetail.js +14 -10
- package/lib/module/screens/chat-detail/ChatDetail.js.map +1 -1
- package/lib/module/screens/chat-detail/ChatDetailHeader.js +5 -8
- package/lib/module/screens/chat-detail/ChatDetailHeader.js.map +1 -1
- package/lib/module/screens/chat-detail/ChatLinkPreview.js +1 -1
- package/lib/module/screens/chat-detail/ChatLinkPreview.js.map +1 -1
- package/lib/module/screens/chat-detail/ChatListLegend.js +0 -2
- package/lib/module/screens/chat-detail/ChatListLegend.js.map +1 -1
- package/lib/module/screens/chat-detail/conversationHeader.utils.js +7 -9
- package/lib/module/screens/chat-detail/conversationHeader.utils.js.map +1 -1
- package/lib/module/screens/chat-detail/legend/LegendChatMessage.js +10 -23
- package/lib/module/screens/chat-detail/legend/LegendChatMessage.js.map +1 -1
- package/lib/module/screens/chat-detail/legend/message-types.js +128 -6
- package/lib/module/screens/chat-detail/legend/message-types.js.map +1 -1
- package/lib/module/store/conversation.js +1 -1
- package/lib/module/store/conversation.js.map +1 -1
- package/lib/module/store/message.js +45 -0
- package/lib/module/store/message.js.map +1 -0
- package/lib/module/translation/resources/i18n.js +7 -1
- package/lib/module/translation/resources/i18n.js.map +1 -1
- package/lib/module/types/chat.js +2 -7
- package/lib/module/types/chat.js.map +1 -1
- package/lib/module/utils/conversation.js +34 -13
- package/lib/module/utils/conversation.js.map +1 -1
- package/lib/module/utils/legendListMessage.js +0 -3
- package/lib/module/utils/legendListMessage.js.map +1 -1
- package/lib/module/utils/message.js +5 -8
- package/lib/module/utils/message.js.map +1 -1
- package/lib/module/utils/url.js +3 -3
- package/lib/module/utils/url.js.map +1 -1
- package/lib/typescript/src/components/ThreadCard/AvatarSection.d.ts +2 -2
- package/lib/typescript/src/components/ThreadCard/AvatarSection.d.ts.map +1 -1
- package/lib/typescript/src/components/ThreadCard/NamePrefixIcon.d.ts +3 -4
- package/lib/typescript/src/components/ThreadCard/NamePrefixIcon.d.ts.map +1 -1
- package/lib/typescript/src/components/ThreadCard/ThreadCard.d.ts.map +1 -1
- package/lib/typescript/src/context/ChatContext.d.ts +1 -1
- package/lib/typescript/src/context/ChatContext.d.ts.map +1 -1
- package/lib/typescript/src/hooks/message/useSendMessage.d.ts +12 -0
- package/lib/typescript/src/hooks/message/useSendMessage.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useChatMessages.d.ts +0 -1
- package/lib/typescript/src/hooks/useChatMessages.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useConversationList.d.ts +2 -1
- package/lib/typescript/src/hooks/useConversationList.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useLinkPreview/useLinkPreview.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/ChatDetail.d.ts +1 -1
- package/lib/typescript/src/screens/chat-detail/ChatDetail.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/ChatDetailHeader.d.ts +1 -1
- package/lib/typescript/src/screens/chat-detail/ChatDetailHeader.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/ChatListLegend.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/conversationHeader.utils.d.ts +1 -1
- package/lib/typescript/src/screens/chat-detail/conversationHeader.utils.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/legend/LegendChatMessage.d.ts +1 -3
- package/lib/typescript/src/screens/chat-detail/legend/LegendChatMessage.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/legend/message-types.d.ts +1 -0
- package/lib/typescript/src/screens/chat-detail/legend/message-types.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/types.d.ts +6 -7
- package/lib/typescript/src/screens/chat-detail/types.d.ts.map +1 -1
- package/lib/typescript/src/store/message.d.ts +3 -0
- package/lib/typescript/src/store/message.d.ts.map +1 -0
- package/lib/typescript/src/translation/resources/i18n.d.ts.map +1 -1
- package/lib/typescript/src/types/chat.d.ts +28 -27
- package/lib/typescript/src/types/chat.d.ts.map +1 -1
- package/lib/typescript/src/types/common.d.ts +1 -0
- package/lib/typescript/src/types/common.d.ts.map +1 -1
- package/lib/typescript/src/utils/conversation.d.ts +3 -2
- package/lib/typescript/src/utils/conversation.d.ts.map +1 -1
- package/lib/typescript/src/utils/legendListMessage.d.ts +0 -2
- package/lib/typescript/src/utils/legendListMessage.d.ts.map +1 -1
- package/lib/typescript/src/utils/message.d.ts.map +1 -1
- package/lib/typescript/src/utils/url.d.ts +1 -1
- package/lib/typescript/src/utils/url.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/components/ThreadCard/AvatarSection.tsx +5 -8
- package/src/components/ThreadCard/NamePrefixIcon.tsx +27 -38
- package/src/components/ThreadCard/ThreadCard.tsx +16 -30
- package/src/context/ChatContext.tsx +12 -4
- package/src/hooks/message/useSendMessage.ts +136 -0
- package/src/hooks/useChatMessages.ts +70 -158
- package/src/hooks/useConversationList.ts +34 -16
- package/src/hooks/useLinkPreview/useLinkPreview.ts +3 -2
- package/src/screens/chat-detail/ChatComposer.tsx +2 -2
- package/src/screens/chat-detail/ChatDetail.tsx +29 -22
- package/src/screens/chat-detail/ChatDetailHeader.tsx +4 -10
- package/src/screens/chat-detail/ChatLinkPreview.tsx +1 -1
- package/src/screens/chat-detail/ChatListLegend.tsx +1 -2
- package/src/screens/chat-detail/conversationHeader.utils.ts +11 -14
- package/src/screens/chat-detail/legend/LegendChatMessage.tsx +15 -33
- package/src/screens/chat-detail/legend/message-types.tsx +167 -12
- package/src/screens/chat-detail/types.ts +6 -8
- package/src/store/conversation.ts +1 -1
- package/src/store/message.ts +44 -0
- package/src/translation/resources/i18n.ts +6 -0
- package/src/types/chat.ts +31 -30
- package/src/types/common.ts +1 -0
- package/src/utils/conversation.ts +44 -17
- package/src/utils/legendListMessage.ts +0 -5
- package/src/utils/message.ts +10 -12
- package/src/utils/url.ts +3 -3
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
import { memo } from 'react';
|
|
4
4
|
import { Avatar } from "../Avatar/index.js";
|
|
5
|
-
import {
|
|
5
|
+
import { PeerType } from '@droppii/openim-rn-client-sdk';
|
|
6
6
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
7
|
export const AvatarSection = /*#__PURE__*/memo(({
|
|
8
8
|
avatar,
|
|
9
9
|
fullName,
|
|
10
|
-
|
|
10
|
+
peerType,
|
|
11
11
|
applicationType
|
|
12
12
|
}) => {
|
|
13
|
-
if (
|
|
13
|
+
if (peerType === PeerType.Bot) {
|
|
14
14
|
return /*#__PURE__*/_jsx(Avatar, {
|
|
15
15
|
source: avatar,
|
|
16
16
|
fullName: fullName,
|
|
@@ -19,7 +19,7 @@ export const AvatarSection = /*#__PURE__*/memo(({
|
|
|
19
19
|
}
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
|
-
if (applicationType === 'MALL') {
|
|
22
|
+
if (peerType === PeerType.Customer || applicationType === 'MALL') {
|
|
23
23
|
return /*#__PURE__*/_jsx(Avatar, {
|
|
24
24
|
source: avatar,
|
|
25
25
|
fullName: fullName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["memo","Avatar","
|
|
1
|
+
{"version":3,"names":["memo","Avatar","PeerType","jsx","_jsx","AvatarSection","avatar","fullName","peerType","applicationType","Bot","source","badge","variant","Customer","displayName"],"sourceRoot":"../../../../src","sources":["components/ThreadCard/AvatarSection.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,OAAO;AAC5B,SAASC,MAAM,QAAQ,oBAAW;AAElC,SAASC,QAAQ,QAAQ,+BAA+B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AASzD,OAAO,MAAMC,aAAa,gBAAGL,IAAI,CAC/B,CAAC;EAAEM,MAAM;EAAEC,QAAQ;EAAEC,QAAQ;EAAEC;AAAoC,CAAC,KAAK;EACvE,IAAID,QAAQ,KAAKN,QAAQ,CAACQ,GAAG,EAAE;IAC7B,oBACEN,IAAA,CAACH,MAAM;MACLU,MAAM,EAAEL,MAAO;MACfC,QAAQ,EAAEA,QAAS;MACnBK,KAAK,EAAE;QAAEC,OAAO,EAAE;MAAM;IAAE,CAC3B,CAAC;EAEN;EAEA,IAAIL,QAAQ,KAAKN,QAAQ,CAACY,QAAQ,IAAIL,eAAe,KAAK,MAAM,EAAE;IAChE,oBACEL,IAAA,CAACH,MAAM;MACLU,MAAM,EAAEL,MAAO;MACfC,QAAQ,EAAEA,QAAS;MACnBK,KAAK,EAAE;QAAEC,OAAO,EAAE;MAAO;IAAE,CAC5B,CAAC;EAEN;EAEA,oBAAOT,IAAA,CAACH,MAAM;IAACU,MAAM,EAAEL,MAAO;IAACC,QAAQ,EAAEA;EAAS,CAAE,CAAC;AACvD,CACF,CAAC;AAEDF,aAAa,CAACU,WAAW,GAAG,eAAe","ignoreList":[]}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
import { memo } from 'react';
|
|
4
4
|
import { Image, StyleSheet } from 'react-native';
|
|
5
5
|
import { KContainer, KImage, KColors } from '@droppii/libs';
|
|
6
|
-
import { DChatCategory, DChatType } from "../../types/chat.js";
|
|
7
6
|
import Images from "../../assets/images/index.js";
|
|
7
|
+
import { PeerType } from '@droppii/openim-rn-client-sdk';
|
|
8
8
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
9
|
const styles = StyleSheet.create({
|
|
10
10
|
icon: {
|
|
@@ -13,10 +13,9 @@ const styles = StyleSheet.create({
|
|
|
13
13
|
}
|
|
14
14
|
});
|
|
15
15
|
export const NamePrefixIcon = /*#__PURE__*/memo(({
|
|
16
|
-
|
|
17
|
-
chatType
|
|
16
|
+
peerType
|
|
18
17
|
}) => {
|
|
19
|
-
if (
|
|
18
|
+
if (peerType === PeerType.Bot) {
|
|
20
19
|
return /*#__PURE__*/_jsx(KContainer.View, {
|
|
21
20
|
marginR: "0.25rem",
|
|
22
21
|
children: /*#__PURE__*/_jsx(Image, {
|
|
@@ -25,18 +24,7 @@ export const NamePrefixIcon = /*#__PURE__*/memo(({
|
|
|
25
24
|
})
|
|
26
25
|
});
|
|
27
26
|
}
|
|
28
|
-
if (
|
|
29
|
-
return /*#__PURE__*/_jsx(KContainer.View, {
|
|
30
|
-
marginR: "0.25rem",
|
|
31
|
-
children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
|
|
32
|
-
name: "robot-outline",
|
|
33
|
-
provider: "MaterialCommunityIcons",
|
|
34
|
-
size: 14,
|
|
35
|
-
color: KColors.palette.primary.w400
|
|
36
|
-
})
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
if (chatType === DChatType.GROUP) {
|
|
27
|
+
if (peerType === PeerType.Group) {
|
|
40
28
|
return /*#__PURE__*/_jsx(KContainer.View, {
|
|
41
29
|
marginR: "0.25rem",
|
|
42
30
|
children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
|
|
@@ -46,6 +34,15 @@ export const NamePrefixIcon = /*#__PURE__*/memo(({
|
|
|
46
34
|
})
|
|
47
35
|
});
|
|
48
36
|
}
|
|
37
|
+
|
|
38
|
+
// if (peerType === DChatPeerType.CUSTOMER) {
|
|
39
|
+
// return (
|
|
40
|
+
// <KContainer.View marginR="0.25rem">
|
|
41
|
+
// <Image source={Images.ICON_DROPPII} style={styles.icon} />
|
|
42
|
+
// </KContainer.View>
|
|
43
|
+
// );
|
|
44
|
+
// }
|
|
45
|
+
|
|
49
46
|
return null;
|
|
50
47
|
});
|
|
51
48
|
NamePrefixIcon.displayName = 'NamePrefixIcon';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["memo","Image","StyleSheet","KContainer","KImage","KColors","
|
|
1
|
+
{"version":3,"names":["memo","Image","StyleSheet","KContainer","KImage","KColors","Images","PeerType","jsx","_jsx","styles","create","icon","width","height","NamePrefixIcon","peerType","Bot","View","marginR","children","source","ICON_DROPPII","style","Group","VectorIcons","name","size","color","black","displayName"],"sourceRoot":"../../../../src","sources":["components/ThreadCard/NamePrefixIcon.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,OAAO;AAC5B,SAASC,KAAK,EAAEC,UAAU,QAAQ,cAAc;AAChD,SAASC,UAAU,EAAEC,MAAM,EAAEC,OAAO,QAAQ,eAAe;AAC3D,OAAOC,MAAM,MAAM,8BAAqB;AACxC,SAASC,QAAQ,QAAQ,+BAA+B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEzD,MAAMC,MAAM,GAAGR,UAAU,CAACS,MAAM,CAAC;EAC/BC,IAAI,EAAE;IACJC,KAAK,EAAE,EAAE;IACTC,MAAM,EAAE;EACV;AACF,CAAC,CAAC;AAMF,OAAO,MAAMC,cAAc,gBAAGf,IAAI,CAAC,CAAC;EAAEgB;AAA8B,CAAC,KAAK;EACxE,IAAIA,QAAQ,KAAKT,QAAQ,CAACU,GAAG,EAAE;IAC7B,oBACER,IAAA,CAACN,UAAU,CAACe,IAAI;MAACC,OAAO,EAAC,SAAS;MAAAC,QAAA,eAChCX,IAAA,CAACR,KAAK;QAACoB,MAAM,EAAEf,MAAM,CAACgB,YAAa;QAACC,KAAK,EAAEb,MAAM,CAACE;MAAK,CAAE;IAAC,CAC3C,CAAC;EAEtB;EAEA,IAAII,QAAQ,KAAKT,QAAQ,CAACiB,KAAK,EAAE;IAC/B,oBACEf,IAAA,CAACN,UAAU,CAACe,IAAI;MAACC,OAAO,EAAC,SAAS;MAAAC,QAAA,eAChCX,IAAA,CAACL,MAAM,CAACqB,WAAW;QAACC,IAAI,EAAC,YAAY;QAACC,IAAI,EAAE,EAAG;QAACC,KAAK,EAAEvB,OAAO,CAACwB;MAAM,CAAE;IAAC,CACzD,CAAC;EAEtB;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA,OAAO,IAAI;AACb,CAAC,CAAC;AAEFd,cAAc,CAACe,WAAW,GAAG,gBAAgB","ignoreList":[]}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { memo, useCallback } from 'react';
|
|
4
|
-
import { StyleSheet } from 'react-native';
|
|
5
4
|
import { KContainer, KImage, KLabel, KColors } from '@droppii/libs';
|
|
6
|
-
import { DChatCategory } from "../../types/chat.js";
|
|
7
5
|
import { AvatarSection } from "./AvatarSection.js";
|
|
8
6
|
import { NamePrefixIcon } from "./NamePrefixIcon.js";
|
|
9
7
|
import { UnreadBadge } from "./UnreadBadge.js";
|
|
10
8
|
import { formatTimestamp, getLastMessageText } from "./thread-card.utils.js";
|
|
11
|
-
import Images from "../../assets/images/index.js";
|
|
12
9
|
import { useConversation, useUserStore } from "../../store/index.js";
|
|
13
10
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
11
|
const ThreadCard = /*#__PURE__*/memo(({
|
|
@@ -16,18 +13,19 @@ const ThreadCard = /*#__PURE__*/memo(({
|
|
|
16
13
|
onPress
|
|
17
14
|
}) => {
|
|
18
15
|
const {
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
peerType,
|
|
17
|
+
showName,
|
|
18
|
+
faceURL,
|
|
21
19
|
lastMessage,
|
|
22
20
|
unreadCount = 0,
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
recvMsgOpt,
|
|
22
|
+
isPinned,
|
|
25
23
|
applicationType,
|
|
26
|
-
chatType,
|
|
27
24
|
latestMsgSendTime
|
|
28
25
|
} = useConversation(item) ?? {};
|
|
29
|
-
const fullName =
|
|
26
|
+
const fullName = showName ?? '';
|
|
30
27
|
const hasUnread = unreadCount > 0;
|
|
28
|
+
const isMuted = (recvMsgOpt ?? 0) !== 0;
|
|
31
29
|
const timestamp = formatTimestamp(latestMsgSendTime ?? lastMessage?.sendTime ?? null);
|
|
32
30
|
const currentUserId = useUserStore(s => s.user?.userID);
|
|
33
31
|
const lastMessageText = getLastMessageText(lastMessage, currentUserId);
|
|
@@ -45,11 +43,10 @@ const ThreadCard = /*#__PURE__*/memo(({
|
|
|
45
43
|
onPress: handlePress,
|
|
46
44
|
activeOpacity: 0.7,
|
|
47
45
|
children: [/*#__PURE__*/_jsx(AvatarSection, {
|
|
48
|
-
avatar:
|
|
46
|
+
avatar: faceURL ?? null,
|
|
49
47
|
fullName: fullName,
|
|
50
|
-
|
|
51
|
-
applicationType: applicationType
|
|
52
|
-
chatType: chatType
|
|
48
|
+
peerType: peerType,
|
|
49
|
+
applicationType: applicationType
|
|
53
50
|
}), /*#__PURE__*/_jsxs(KContainer.View, {
|
|
54
51
|
flex: true,
|
|
55
52
|
marginL: "0.5rem",
|
|
@@ -58,17 +55,7 @@ const ThreadCard = /*#__PURE__*/memo(({
|
|
|
58
55
|
row: true,
|
|
59
56
|
alignItems: "center",
|
|
60
57
|
children: [/*#__PURE__*/_jsx(NamePrefixIcon, {
|
|
61
|
-
|
|
62
|
-
chatType: chatType
|
|
63
|
-
}), /*#__PURE__*/_jsx(KContainer.VisibleView, {
|
|
64
|
-
visible:
|
|
65
|
-
// chatCategory === DChatCategory.BIZ_BOT_CRM ||
|
|
66
|
-
chatCategory === DChatCategory.BIZ_BOT_PDP,
|
|
67
|
-
children: /*#__PURE__*/_jsx(KImage.Base, {
|
|
68
|
-
uri: Images.ICON_BOT,
|
|
69
|
-
size: 14,
|
|
70
|
-
style: styles.botIcon
|
|
71
|
-
})
|
|
58
|
+
peerType: peerType
|
|
72
59
|
}), /*#__PURE__*/_jsx(KLabel.Text, {
|
|
73
60
|
typo: hasUnread ? 'TextMdBold' : 'TextMdNormal',
|
|
74
61
|
numberOfLines: 1,
|
|
@@ -76,7 +63,7 @@ const ThreadCard = /*#__PURE__*/memo(({
|
|
|
76
63
|
flex: true,
|
|
77
64
|
children: fullName
|
|
78
65
|
}), /*#__PURE__*/_jsx(KContainer.VisibleView, {
|
|
79
|
-
visible:
|
|
66
|
+
visible: isMuted,
|
|
80
67
|
children: /*#__PURE__*/_jsx(KContainer.View, {
|
|
81
68
|
marginL: "0.25rem",
|
|
82
69
|
children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
|
|
@@ -105,7 +92,7 @@ const ThreadCard = /*#__PURE__*/memo(({
|
|
|
105
92
|
flex: true,
|
|
106
93
|
children: lastMessageText
|
|
107
94
|
}), /*#__PURE__*/_jsx(KContainer.VisibleView, {
|
|
108
|
-
visible: Boolean(
|
|
95
|
+
visible: Boolean(isPinned),
|
|
109
96
|
children: /*#__PURE__*/_jsx(KContainer.View, {
|
|
110
97
|
marginL: "0.5rem",
|
|
111
98
|
children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
|
|
@@ -124,11 +111,4 @@ const ThreadCard = /*#__PURE__*/memo(({
|
|
|
124
111
|
});
|
|
125
112
|
ThreadCard.displayName = 'ThreadCard';
|
|
126
113
|
export default ThreadCard;
|
|
127
|
-
const styles = StyleSheet.create({
|
|
128
|
-
botIcon: {
|
|
129
|
-
width: 16,
|
|
130
|
-
height: 16,
|
|
131
|
-
marginRight: 4
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
114
|
//# sourceMappingURL=ThreadCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["memo","useCallback","
|
|
1
|
+
{"version":3,"names":["memo","useCallback","KContainer","KImage","KLabel","KColors","AvatarSection","NamePrefixIcon","UnreadBadge","formatTimestamp","getLastMessageText","useConversation","useUserStore","jsx","_jsx","jsxs","_jsxs","ThreadCard","item","onPress","peerType","showName","faceURL","lastMessage","unreadCount","recvMsgOpt","isPinned","applicationType","latestMsgSendTime","fullName","hasUnread","isMuted","timestamp","sendTime","currentUserId","s","user","userID","lastMessageText","handlePress","event","Touchable","row","alignItems","paddingH","paddingV","activeOpacity","children","avatar","View","flex","marginL","paddingB","Text","typo","numberOfLines","color","black","VisibleView","visible","VectorIcons","name","provider","size","palette","gray","w500","Boolean","w400","normal","count","displayName"],"sourceRoot":"../../../../src","sources":["components/ThreadCard/ThreadCard.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -12,20 +12,21 @@ export const useChatContext = () => {
|
|
|
12
12
|
};
|
|
13
13
|
const ChatProviderInner = ({
|
|
14
14
|
logGA,
|
|
15
|
-
children
|
|
15
|
+
children,
|
|
16
|
+
applicationType
|
|
16
17
|
}) => {
|
|
17
18
|
const value = useMemo(() => ({
|
|
18
|
-
logGA
|
|
19
|
-
|
|
19
|
+
logGA,
|
|
20
|
+
applicationType
|
|
21
|
+
}), [logGA, applicationType]);
|
|
20
22
|
return /*#__PURE__*/_jsx(ChatContext.Provider, {
|
|
21
23
|
value: value,
|
|
22
24
|
children: children
|
|
23
25
|
});
|
|
24
26
|
};
|
|
25
27
|
export const ChatProvider = ({
|
|
26
|
-
enabled,
|
|
27
28
|
...props
|
|
28
|
-
}) =>
|
|
29
|
+
}) => /*#__PURE__*/_jsx(ChatProviderInner, {
|
|
29
30
|
...props
|
|
30
|
-
})
|
|
31
|
+
});
|
|
31
32
|
//# sourceMappingURL=ChatContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createContext","useContext","useMemo","jsx","_jsx","ChatContext","undefined","useChatContext","context","Error","ChatProviderInner","logGA","children","value","Provider","ChatProvider","
|
|
1
|
+
{"version":3,"names":["createContext","useContext","useMemo","jsx","_jsx","ChatContext","undefined","useChatContext","context","Error","ChatProviderInner","logGA","children","applicationType","value","Provider","ChatProvider","props"],"sourceRoot":"../../../src","sources":["context/ChatContext.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,UAAU,EAAEC,OAAO,QAAQ,OAAO;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAG3D,OAAO,MAAMC,WAAW,gBAAGL,aAAa,CACtCM,SACF,CAAC;AAED,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAuB;EACnD,MAAMC,OAAO,GAAGP,UAAU,CAACI,WAAW,CAAC;EACvC,IAAI,CAACG,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,iDAAiD,CAAC;EACpE;EACA,OAAOD,OAAO;AAChB,CAAC;AAED,MAAME,iBAAiB,GAAGA,CAAC;EACzBC,KAAK;EACLC,QAAQ;EACRC;AACiB,CAAC,KAAK;EACvB,MAAMC,KAAK,GAAGZ,OAAO,CACnB,OAAO;IAAES,KAAK;IAAEE;EAAgB,CAAC,CAAC,EAClC,CAACF,KAAK,EAAEE,eAAe,CACzB,CAAC;EAED,oBAAOT,IAAA,CAACC,WAAW,CAACU,QAAQ;IAACD,KAAK,EAAEA,KAAM;IAAAF,QAAA,EAAEA;EAAQ,CAAuB,CAAC;AAC9E,CAAC;AAED,OAAO,MAAMI,YAAY,GAAGA,CAAC;EAAE,GAAGC;AAAyB,CAAC,kBAC1Db,IAAA,CAACM,iBAAiB;EAAA,GAAKO;AAAK,CAAG,CAChC","ignoreList":[]}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback } from 'react';
|
|
4
|
+
import { useConversationStore } from "../../store/index.js";
|
|
5
|
+
import { extractUrls } from "../../utils/url.js";
|
|
6
|
+
import OpenIMSDK from '@droppii/openim-rn-client-sdk';
|
|
7
|
+
import { useChatContext } from "../../context/index.js";
|
|
8
|
+
import { generateContentBasedOnMessageType } from "../../utils/conversation.js";
|
|
9
|
+
import { useMessageStore } from "../../store/message.js";
|
|
10
|
+
export const useSendMessage = () => {
|
|
11
|
+
const applicationType = useChatContext().applicationType;
|
|
12
|
+
const pushNewMessage = useMessageStore(state => state.pushNewMessage);
|
|
13
|
+
const sendMessage = useCallback(async ({
|
|
14
|
+
plainText,
|
|
15
|
+
files,
|
|
16
|
+
urlMetadata
|
|
17
|
+
}) => {
|
|
18
|
+
const {
|
|
19
|
+
userID: recvID,
|
|
20
|
+
groupID
|
|
21
|
+
} = useConversationStore.getState().getCurrentConversation() || {};
|
|
22
|
+
if (!recvID && !groupID) return;
|
|
23
|
+
const messageList = [];
|
|
24
|
+
for (const file of files || []) {
|
|
25
|
+
if (!file) continue;
|
|
26
|
+
}
|
|
27
|
+
if (!!plainText && plainText.trim() !== '') {
|
|
28
|
+
const urls = extractUrls(plainText);
|
|
29
|
+
const isUrlMessage = urls.length > 0;
|
|
30
|
+
let message = null;
|
|
31
|
+
if (isUrlMessage) {
|
|
32
|
+
message = await createUrlTextMessage(plainText, urls);
|
|
33
|
+
} else {
|
|
34
|
+
message = await createTextMessage(plainText);
|
|
35
|
+
}
|
|
36
|
+
if (!message) return;
|
|
37
|
+
messageList.push(message);
|
|
38
|
+
}
|
|
39
|
+
for (const message of messageList) {
|
|
40
|
+
const extendMessageInfo = {
|
|
41
|
+
applicationType,
|
|
42
|
+
urlMetadata
|
|
43
|
+
};
|
|
44
|
+
const successMessage = await OpenIMSDK.sendMessage({
|
|
45
|
+
groupID: groupID || '',
|
|
46
|
+
recvID: recvID || '',
|
|
47
|
+
message: {
|
|
48
|
+
...message,
|
|
49
|
+
ex: JSON.stringify(extendMessageInfo) || '{}'
|
|
50
|
+
},
|
|
51
|
+
offlinePushInfo: generateOfflinePushInfo(message.contentType, plainText || '')
|
|
52
|
+
});
|
|
53
|
+
pushNewMessage(successMessage);
|
|
54
|
+
}
|
|
55
|
+
}, [applicationType, pushNewMessage]);
|
|
56
|
+
return {
|
|
57
|
+
sendMessage
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
const generateOfflinePushInfo = (contentType, plainText) => {
|
|
61
|
+
const conversationData = useConversationStore?.getState?.()?.getCurrentConversation();
|
|
62
|
+
const title = conversationData?.showName || 'Droppii';
|
|
63
|
+
const desc = generateContentBasedOnMessageType(contentType, plainText);
|
|
64
|
+
return {
|
|
65
|
+
title,
|
|
66
|
+
desc,
|
|
67
|
+
ex: JSON.stringify({
|
|
68
|
+
icon: conversationData?.faceURL || '',
|
|
69
|
+
conversationId: conversationData?.conversationId || '',
|
|
70
|
+
title,
|
|
71
|
+
desc
|
|
72
|
+
}),
|
|
73
|
+
iOSPushSound: 'default',
|
|
74
|
+
iOSBadgeCount: true
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
export const createTextMessage = async text => {
|
|
78
|
+
let textMessage = await OpenIMSDK.createTextMessage(text, new Date().getTime().toString()).then(data => {
|
|
79
|
+
return data;
|
|
80
|
+
}).catch(({
|
|
81
|
+
errCode,
|
|
82
|
+
errMsg
|
|
83
|
+
}) => {
|
|
84
|
+
console.error('createTextMessage', errCode, errMsg);
|
|
85
|
+
return null;
|
|
86
|
+
});
|
|
87
|
+
return textMessage;
|
|
88
|
+
};
|
|
89
|
+
export const createUrlTextMessage = async (text, urls) => {
|
|
90
|
+
let urlTextMessage = await OpenIMSDK.createUrlTextMessage(text, urls, new Date().getTime().toString()).then(data => {
|
|
91
|
+
return data;
|
|
92
|
+
}).catch(({
|
|
93
|
+
errCode,
|
|
94
|
+
errMsg
|
|
95
|
+
}) => {
|
|
96
|
+
console.error('createUrlTextMessage', errCode, errMsg);
|
|
97
|
+
return null;
|
|
98
|
+
});
|
|
99
|
+
return urlTextMessage;
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=useSendMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useConversationStore","extractUrls","OpenIMSDK","useChatContext","generateContentBasedOnMessageType","useMessageStore","useSendMessage","applicationType","pushNewMessage","state","sendMessage","plainText","files","urlMetadata","userID","recvID","groupID","getState","getCurrentConversation","messageList","file","trim","urls","isUrlMessage","length","message","createUrlTextMessage","createTextMessage","push","extendMessageInfo","successMessage","ex","JSON","stringify","offlinePushInfo","generateOfflinePushInfo","contentType","conversationData","title","showName","desc","icon","faceURL","conversationId","iOSPushSound","iOSBadgeCount","text","textMessage","Date","getTime","toString","then","data","catch","errCode","errMsg","console","error","urlTextMessage"],"sourceRoot":"../../../../src","sources":["hooks/message/useSendMessage.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,46 +3,28 @@
|
|
|
3
3
|
import OpenIMSDK, { OpenIMEvent } from '@droppii/openim-rn-client-sdk';
|
|
4
4
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
5
5
|
import { ChatMessageAPI } from "../services/message.js";
|
|
6
|
-
import { belongsToConversation,
|
|
6
|
+
import { belongsToConversation, hasNewHistoryMessages, mergeMessages } from "../utils/message.js";
|
|
7
|
+
import { useMessageStore } from "../store/message.js";
|
|
7
8
|
export function useChatMessages({
|
|
8
9
|
conversationId,
|
|
9
10
|
enabled = true,
|
|
10
11
|
pageSize = 20
|
|
11
12
|
}) {
|
|
12
|
-
const
|
|
13
|
+
const messages = useMessageStore(s => s.messages);
|
|
14
|
+
const hasMoreEarlier = useMessageStore(s => s.hasMoreEarlier);
|
|
15
|
+
const hasMoreNewer = useMessageStore(s => s.hasMoreNewer);
|
|
16
|
+
const setMessages = useMessageStore(s => s.setMessages);
|
|
17
|
+
const pushNewMessage = useMessageStore(s => s.pushNewMessage);
|
|
18
|
+
const reset = useMessageStore(s => s.reset);
|
|
13
19
|
const [currentUserId, setCurrentUserId] = useState();
|
|
14
20
|
const [isLoading, setIsLoading] = useState(false);
|
|
15
21
|
const [isLoadingEarlier, setIsLoadingEarlier] = useState(false);
|
|
16
|
-
const [hasMoreEarlier, setHasMoreEarlier] = useState(false);
|
|
17
22
|
const [isLoadingNewer, setIsLoadingNewer] = useState(false);
|
|
18
|
-
const [hasMoreNewer, setHasMoreNewer] = useState(false);
|
|
19
23
|
const [error, setError] = useState(null);
|
|
20
24
|
const conversationIdRef = useRef(conversationId);
|
|
21
25
|
conversationIdRef.current = conversationId;
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
const messagesRef = useRef(messages);
|
|
25
|
-
const hasMoreEarlierRef = useRef(hasMoreEarlier);
|
|
26
|
-
const hasMoreNewerRef = useRef(hasMoreNewer);
|
|
27
|
-
const historyAnchorRef = useRef(null);
|
|
28
|
-
const newestAnchorRef = useRef(null);
|
|
29
|
-
messagesRef.current = messages;
|
|
30
|
-
hasMoreEarlierRef.current = hasMoreEarlier;
|
|
31
|
-
hasMoreNewerRef.current = hasMoreNewer;
|
|
32
|
-
const resetState = useCallback(() => {
|
|
33
|
-
setMessages([]);
|
|
34
|
-
setHasMoreEarlier(false);
|
|
35
|
-
setHasMoreNewer(false);
|
|
36
|
-
setError(null);
|
|
37
|
-
isLoadingEarlierRef.current = false;
|
|
38
|
-
isLoadingNewerRef.current = false;
|
|
39
|
-
historyAnchorRef.current = null;
|
|
40
|
-
newestAnchorRef.current = null;
|
|
41
|
-
}, []);
|
|
42
|
-
const loadInitialMessages = useCallback(async () => {
|
|
43
|
-
if (!conversationId) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
26
|
+
const fetchInitial = useCallback(async () => {
|
|
27
|
+
if (!conversationId) return;
|
|
46
28
|
setIsLoading(true);
|
|
47
29
|
setError(null);
|
|
48
30
|
try {
|
|
@@ -50,135 +32,72 @@ export function useChatMessages({
|
|
|
50
32
|
count: pageSize
|
|
51
33
|
}), ChatMessageAPI.getCurrentUserId()]);
|
|
52
34
|
const initialMessages = history.messageList;
|
|
53
|
-
const oldestAnchor = getHistoryPaginationAnchor(initialMessages);
|
|
54
35
|
setCurrentUserId(userId);
|
|
55
|
-
setMessages(mergeMessages([], initialMessages));
|
|
56
|
-
historyAnchorRef.current = oldestAnchor ? {
|
|
57
|
-
clientMsgID: oldestAnchor.clientMsgID
|
|
58
|
-
// lastMinSeq: resolveHistoryLastMinSeq(
|
|
59
|
-
// history,
|
|
60
|
-
// initialMessages.find(
|
|
61
|
-
// (message) => message.clientMsgID === oldestAnchor.clientMsgID
|
|
62
|
-
// )
|
|
63
|
-
// ),
|
|
64
|
-
} : null;
|
|
65
|
-
setHasMoreEarlier(!history.isEnd && !!oldestAnchor);
|
|
36
|
+
setMessages(mergeMessages([], initialMessages), !history.isEnd);
|
|
66
37
|
ChatMessageAPI.markConversationAsRead(conversationId).catch(() => undefined);
|
|
67
38
|
} catch (err) {
|
|
68
39
|
setError(err instanceof Error ? err : new Error(String(err)));
|
|
69
40
|
} finally {
|
|
70
41
|
setIsLoading(false);
|
|
71
42
|
}
|
|
72
|
-
}, [conversationId, pageSize]);
|
|
43
|
+
}, [conversationId, pageSize, setMessages]);
|
|
73
44
|
const onLoadEarlier = useCallback(async () => {
|
|
74
|
-
if (
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
isLoadingEarlierRef.current = true;
|
|
45
|
+
if (isLoadingEarlier || !hasMoreEarlier || !messages.length) return;
|
|
78
46
|
setIsLoadingEarlier(true);
|
|
79
47
|
setError(null);
|
|
80
|
-
const anchor = historyAnchorRef.current;
|
|
81
|
-
if (!anchor?.clientMsgID) {
|
|
82
|
-
isLoadingEarlierRef.current = false;
|
|
83
|
-
setIsLoadingEarlier(false);
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
48
|
try {
|
|
87
49
|
const history = await ChatMessageAPI.fetchHistoryMessages(conversationId, {
|
|
88
50
|
count: pageSize,
|
|
89
|
-
startClientMsgID:
|
|
51
|
+
startClientMsgID: messages[0].clientMsgID
|
|
90
52
|
});
|
|
91
53
|
const incoming = history.messageList;
|
|
92
|
-
const
|
|
93
|
-
if (
|
|
94
|
-
setMessages(
|
|
54
|
+
const hasNew = hasNewHistoryMessages(messages, incoming);
|
|
55
|
+
if (hasNew) {
|
|
56
|
+
setMessages(mergeMessages(messages, incoming), !history.isEnd && hasNew);
|
|
57
|
+
} else {
|
|
58
|
+
setMessages(messages, false);
|
|
95
59
|
}
|
|
96
|
-
const nextAnchor = getHistoryPaginationAnchor(incoming);
|
|
97
|
-
historyAnchorRef.current = nextAnchor ? {
|
|
98
|
-
clientMsgID: nextAnchor.clientMsgID
|
|
99
|
-
// lastMinSeq: resolveHistoryLastMinSeq(
|
|
100
|
-
// history,
|
|
101
|
-
// incoming.find(
|
|
102
|
-
// (message) => message.clientMsgID === nextAnchor.clientMsgID
|
|
103
|
-
// )
|
|
104
|
-
// ),
|
|
105
|
-
} : null;
|
|
106
|
-
setHasMoreEarlier(!history.isEnd && hasNewMessages && !!nextAnchor);
|
|
107
60
|
} catch (err) {
|
|
108
61
|
setError(err instanceof Error ? err : new Error(String(err)));
|
|
109
62
|
} finally {
|
|
110
|
-
isLoadingEarlierRef.current = false;
|
|
111
63
|
setIsLoadingEarlier(false);
|
|
112
64
|
}
|
|
113
|
-
}, [conversationId, pageSize]);
|
|
65
|
+
}, [conversationId, hasMoreEarlier, isLoadingEarlier, messages, pageSize, setMessages]);
|
|
114
66
|
const onLoadNewer = useCallback(async () => {
|
|
115
|
-
if (
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
isLoadingNewerRef.current = true;
|
|
67
|
+
if (isLoadingNewer || !hasMoreNewer || !messages.length) return;
|
|
119
68
|
setIsLoadingNewer(true);
|
|
120
69
|
setError(null);
|
|
121
|
-
const anchor = newestAnchorRef.current;
|
|
122
|
-
if (!anchor?.clientMsgID && messagesRef.current.length === 0) {
|
|
123
|
-
isLoadingNewerRef.current = false;
|
|
124
|
-
setIsLoadingNewer(false);
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
70
|
try {
|
|
128
|
-
// Get the newest message ID to load from
|
|
129
|
-
const newestMessage = messagesRef.current[messagesRef.current.length - 1];
|
|
130
71
|
const history = await ChatMessageAPI.fetchHistoryMessages(conversationId, {
|
|
131
72
|
count: pageSize,
|
|
132
|
-
startClientMsgID:
|
|
73
|
+
startClientMsgID: messages[messages.length - 1].clientMsgID
|
|
133
74
|
});
|
|
134
75
|
const incoming = history.messageList;
|
|
135
|
-
const
|
|
136
|
-
if (
|
|
137
|
-
setMessages(
|
|
76
|
+
const hasNew = incoming.length > 0;
|
|
77
|
+
if (hasNew) {
|
|
78
|
+
setMessages(mergeMessages(messages, incoming), !history.isEnd && hasNew);
|
|
138
79
|
}
|
|
139
|
-
setHasMoreNewer(!history.isEnd && hasNewMessages);
|
|
140
80
|
} catch (err) {
|
|
141
81
|
setError(err instanceof Error ? err : new Error(String(err)));
|
|
142
82
|
} finally {
|
|
143
|
-
isLoadingNewerRef.current = false;
|
|
144
83
|
setIsLoadingNewer(false);
|
|
145
84
|
}
|
|
146
|
-
}, [conversationId, pageSize]);
|
|
147
|
-
const sendTextMessage = useCallback(async text => {
|
|
148
|
-
const trimmed = text.trim();
|
|
149
|
-
if (!trimmed) {
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
const sentMessage = await ChatMessageAPI.sendTextMessage({
|
|
153
|
-
text: trimmed
|
|
154
|
-
});
|
|
155
|
-
setMessages(current => mergeMessages(current, [sentMessage]));
|
|
156
|
-
}, []);
|
|
85
|
+
}, [conversationId, hasMoreNewer, isLoadingNewer, messages, pageSize, setMessages]);
|
|
157
86
|
const appendIncomingMessages = useCallback(incoming => {
|
|
158
87
|
const relevant = incoming.filter(message => belongsToConversation(message, conversationIdRef.current));
|
|
159
|
-
if (!relevant.length)
|
|
160
|
-
|
|
161
|
-
}
|
|
162
|
-
setMessages(current => mergeMessages(current, relevant));
|
|
88
|
+
if (!relevant.length) return;
|
|
89
|
+
relevant.forEach(msg => pushNewMessage(msg));
|
|
163
90
|
ChatMessageAPI.markConversationAsRead(conversationIdRef.current).catch(() => undefined);
|
|
164
|
-
}, []);
|
|
91
|
+
}, [pushNewMessage]);
|
|
165
92
|
useEffect(() => {
|
|
166
|
-
|
|
167
|
-
if (!enabled || !conversationId)
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
loadInitialMessages();
|
|
171
|
-
}, [conversationId, enabled, loadInitialMessages, resetState]);
|
|
93
|
+
reset();
|
|
94
|
+
if (!enabled || !conversationId) return;
|
|
95
|
+
fetchInitial();
|
|
96
|
+
}, [conversationId, enabled, fetchInitial, reset]);
|
|
172
97
|
useEffect(() => {
|
|
173
|
-
if (!enabled || !conversationId)
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
const handleNewMessages = incoming => {
|
|
177
|
-
appendIncomingMessages(incoming);
|
|
178
|
-
};
|
|
179
|
-
const handleNewMessage = incoming => {
|
|
180
|
-
appendIncomingMessages([incoming]);
|
|
181
|
-
};
|
|
98
|
+
if (!enabled || !conversationId) return;
|
|
99
|
+
const handleNewMessages = incoming => appendIncomingMessages(incoming);
|
|
100
|
+
const handleNewMessage = incoming => appendIncomingMessages([incoming]);
|
|
182
101
|
OpenIMSDK.on(OpenIMEvent.OnRecvNewMessages, handleNewMessages);
|
|
183
102
|
OpenIMSDK.on(OpenIMEvent.OnRecvNewMessage, handleNewMessage);
|
|
184
103
|
return () => {
|
|
@@ -197,8 +116,7 @@ export function useChatMessages({
|
|
|
197
116
|
error,
|
|
198
117
|
onLoadEarlier,
|
|
199
118
|
onLoadNewer,
|
|
200
|
-
|
|
201
|
-
refresh: loadInitialMessages
|
|
119
|
+
refresh: fetchInitial
|
|
202
120
|
};
|
|
203
121
|
}
|
|
204
122
|
//# sourceMappingURL=useChatMessages.js.map
|