@droppii-org/chat-mobile 0.2.28 → 0.2.29
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/MuteThread.js +86 -0
- package/lib/module/components/ThreadCard/MuteThread.js.map +1 -0
- package/lib/module/components/ThreadCard/ThreadCard.js +93 -73
- package/lib/module/components/ThreadCard/ThreadCard.js.map +1 -1
- package/lib/module/config/uploadLimits.js +1 -1
- package/lib/module/hooks/useMuteConversation.js +34 -0
- package/lib/module/hooks/useMuteConversation.js.map +1 -0
- package/lib/module/screens/chat-detail/messageToolbox/MessageToolboxMenu.js +3 -4
- package/lib/module/screens/chat-detail/messageToolbox/MessageToolboxMenu.js.map +1 -1
- package/lib/module/screens/chat-detail/messageToolbox/messageToolbox.utils.js +5 -3
- package/lib/module/screens/chat-detail/messageToolbox/messageToolbox.utils.js.map +1 -1
- package/lib/module/translation/resources/i18n.js +8 -0
- package/lib/module/translation/resources/i18n.js.map +1 -1
- package/lib/module/utils/device.js +1 -1
- package/lib/module/utils/device.js.map +1 -1
- package/lib/typescript/src/components/ThreadCard/MuteThread.d.ts +10 -0
- package/lib/typescript/src/components/ThreadCard/MuteThread.d.ts.map +1 -0
- package/lib/typescript/src/components/ThreadCard/ThreadCard.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useMuteConversation.d.ts +6 -0
- package/lib/typescript/src/hooks/useMuteConversation.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/messageToolbox/MessageToolboxMenu.d.ts +1 -1
- package/lib/typescript/src/screens/chat-detail/messageToolbox/MessageToolboxMenu.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/messageToolbox/messageToolbox.utils.d.ts +0 -2
- package/lib/typescript/src/screens/chat-detail/messageToolbox/messageToolbox.utils.d.ts.map +1 -1
- package/lib/typescript/src/translation/resources/i18n.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/ThreadCard/MuteThread.tsx +100 -0
- package/src/components/ThreadCard/ThreadCard.tsx +104 -71
- package/src/config/uploadLimits.ts +1 -1
- package/src/hooks/useMuteConversation.ts +44 -0
- package/src/screens/chat-detail/messageToolbox/MessageToolboxMenu.tsx +2 -2
- package/src/screens/chat-detail/messageToolbox/messageToolbox.utils.ts +4 -4
- package/src/translation/resources/i18n.ts +9 -0
- package/src/utils/device.ts +1 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { memo, useCallback } from 'react';
|
|
4
|
+
import { KContainer, KImage, KLabel, KColors } from '@droppii/libs';
|
|
5
|
+
import { useMuteConversation } from "../../hooks/useMuteConversation.js";
|
|
6
|
+
import { trans } from "../../translation/index.js";
|
|
7
|
+
import { UIUtils } from "../../utils/UIUtils.js";
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
+
export const MuteThread = /*#__PURE__*/memo(({
|
|
10
|
+
isMuted,
|
|
11
|
+
conversation,
|
|
12
|
+
swipeableMethods
|
|
13
|
+
}) => {
|
|
14
|
+
const {
|
|
15
|
+
muteConversation,
|
|
16
|
+
unmuteConversation
|
|
17
|
+
} = useMuteConversation();
|
|
18
|
+
const handleMutePress = useCallback(() => {
|
|
19
|
+
UIUtils.alert.open({
|
|
20
|
+
title: trans('chat:mute_confirm_title'),
|
|
21
|
+
message: trans('chat:mute_confirm_desc'),
|
|
22
|
+
primaryIndex: 0,
|
|
23
|
+
buttons: [{
|
|
24
|
+
label: trans('chat:mute_confirm_primary'),
|
|
25
|
+
kind: 'danger',
|
|
26
|
+
onPress: async () => {
|
|
27
|
+
try {
|
|
28
|
+
await muteConversation(conversation);
|
|
29
|
+
UIUtils.toast.open({
|
|
30
|
+
title: trans('chat:mute_toast_success'),
|
|
31
|
+
theme: 'success'
|
|
32
|
+
});
|
|
33
|
+
} catch {
|
|
34
|
+
UIUtils.toast.open({
|
|
35
|
+
title: trans('chat:generic_error'),
|
|
36
|
+
theme: 'error'
|
|
37
|
+
});
|
|
38
|
+
} finally {
|
|
39
|
+
swipeableMethods.close();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}, {
|
|
43
|
+
label: trans('chat:mute_confirm_secondary'),
|
|
44
|
+
kind: 'gray',
|
|
45
|
+
onPress: () => swipeableMethods.close()
|
|
46
|
+
}]
|
|
47
|
+
});
|
|
48
|
+
}, [swipeableMethods, conversation, muteConversation]);
|
|
49
|
+
const handleUnmutePress = useCallback(async () => {
|
|
50
|
+
try {
|
|
51
|
+
await unmuteConversation(conversation);
|
|
52
|
+
UIUtils.toast.open({
|
|
53
|
+
title: trans('chat:unmute_toast_success'),
|
|
54
|
+
theme: 'success'
|
|
55
|
+
});
|
|
56
|
+
} catch {
|
|
57
|
+
UIUtils.toast.open({
|
|
58
|
+
title: trans('chat:generic_error'),
|
|
59
|
+
theme: 'error'
|
|
60
|
+
});
|
|
61
|
+
} finally {
|
|
62
|
+
swipeableMethods.close();
|
|
63
|
+
}
|
|
64
|
+
}, [swipeableMethods, conversation, unmuteConversation]);
|
|
65
|
+
return /*#__PURE__*/_jsxs(KContainer.Touchable, {
|
|
66
|
+
width: 76,
|
|
67
|
+
alignItems: "center",
|
|
68
|
+
justifyContent: "center",
|
|
69
|
+
background: isMuted ? KColors.palette.gray.w400 : KColors.palette.danger.w400,
|
|
70
|
+
onPress: isMuted ? handleUnmutePress : handleMutePress,
|
|
71
|
+
children: [/*#__PURE__*/_jsx(KImage.VectorIcons, {
|
|
72
|
+
name: isMuted ? 'bell-o' : 'bell-off-o',
|
|
73
|
+
provider: "DroppiiNew",
|
|
74
|
+
size: 20,
|
|
75
|
+
color: KColors.white
|
|
76
|
+
}), /*#__PURE__*/_jsx(KLabel.Text, {
|
|
77
|
+
typo: "Text2XsMedium",
|
|
78
|
+
color: KColors.white,
|
|
79
|
+
marginT: "0.25rem",
|
|
80
|
+
textAlign: "center",
|
|
81
|
+
children: isMuted ? trans('chat:unmute_action') : trans('chat:mute_action')
|
|
82
|
+
})]
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
MuteThread.displayName = 'MuteThread';
|
|
86
|
+
//# sourceMappingURL=MuteThread.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["memo","useCallback","KContainer","KImage","KLabel","KColors","useMuteConversation","trans","UIUtils","jsx","_jsx","jsxs","_jsxs","MuteThread","isMuted","conversation","swipeableMethods","muteConversation","unmuteConversation","handleMutePress","alert","open","title","message","primaryIndex","buttons","label","kind","onPress","toast","theme","close","handleUnmutePress","Touchable","width","alignItems","justifyContent","background","palette","gray","w400","danger","children","VectorIcons","name","provider","size","color","white","Text","typo","marginT","textAlign","displayName"],"sourceRoot":"../../../../src","sources":["components/ThreadCard/MuteThread.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { memo, useCallback, useMemo } from 'react';
|
|
4
|
+
import ReanimatedSwipeable from 'react-native-gesture-handler/ReanimatedSwipeable';
|
|
4
5
|
import { KContainer, KImage, KLabel, KColors } from '@droppii/libs';
|
|
5
6
|
import { AvatarSection } from "./AvatarSection.js";
|
|
6
7
|
import { NamePrefixIcon } from "./NamePrefixIcon.js";
|
|
@@ -8,22 +9,25 @@ import { UnreadBadge } from "./UnreadBadge.js";
|
|
|
8
9
|
import { formatTimestamp } from "../../utils/dateTimeUtils.js";
|
|
9
10
|
import { getLastMessageText } from "../../utils/messageUtils.js";
|
|
10
11
|
import { useConversation, useUserStore } from "../../store/index.js";
|
|
11
|
-
import {
|
|
12
|
+
import { MessageReceiveOptType } from '@droppii/openim-rn-client-sdk';
|
|
13
|
+
import { MuteThread } from "./MuteThread.js";
|
|
14
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
15
|
const ThreadCard = /*#__PURE__*/memo(({
|
|
13
16
|
item,
|
|
14
17
|
onPress
|
|
15
18
|
}) => {
|
|
16
|
-
const
|
|
19
|
+
const conversation = useConversation(item);
|
|
17
20
|
const {
|
|
18
21
|
peerType,
|
|
19
22
|
showName,
|
|
20
23
|
faceURL,
|
|
21
24
|
unreadCount = 0,
|
|
22
|
-
recvMsgOpt,
|
|
25
|
+
recvMsgOpt = MessageReceiveOptType.Normal,
|
|
23
26
|
isPinned,
|
|
27
|
+
isNotInGroup,
|
|
24
28
|
latestMsgSendTime,
|
|
25
29
|
latestMsg
|
|
26
|
-
} =
|
|
30
|
+
} = conversation || {};
|
|
27
31
|
const latestMsgData = useMemo(() => {
|
|
28
32
|
let result = null;
|
|
29
33
|
try {
|
|
@@ -35,87 +39,103 @@ const ThreadCard = /*#__PURE__*/memo(({
|
|
|
35
39
|
}, [latestMsg]);
|
|
36
40
|
const fullName = showName ?? '';
|
|
37
41
|
const hasUnread = unreadCount > 0;
|
|
38
|
-
const isMuted =
|
|
42
|
+
const isMuted = recvMsgOpt !== MessageReceiveOptType.Normal;
|
|
39
43
|
const timestamp = formatTimestamp(latestMsgSendTime ?? latestMsgData?.sendTime ?? null);
|
|
40
44
|
const currentUserId = useUserStore(s => s.user?.userID);
|
|
41
|
-
const lastMessageText = getLastMessageText(latestMsgData, currentUserId,
|
|
45
|
+
const lastMessageText = getLastMessageText(latestMsgData, currentUserId, conversation);
|
|
42
46
|
const handlePress = useCallback(event => {
|
|
43
47
|
onPress?.({
|
|
44
48
|
item,
|
|
45
49
|
event
|
|
46
50
|
});
|
|
47
51
|
}, [item, onPress]);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}), /*#__PURE__*/_jsx(KContainer.VisibleView, {
|
|
75
|
-
visible: isMuted,
|
|
76
|
-
children: /*#__PURE__*/_jsx(KContainer.View, {
|
|
77
|
-
marginL: "0.25rem",
|
|
78
|
-
children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
|
|
79
|
-
name: "bell-off",
|
|
80
|
-
provider: "MaterialCommunityIcons",
|
|
81
|
-
size: 16,
|
|
82
|
-
color: KColors.palette.gray.w500
|
|
83
|
-
})
|
|
84
|
-
})
|
|
85
|
-
}), /*#__PURE__*/_jsx(KContainer.VisibleView, {
|
|
86
|
-
visible: Boolean(timestamp),
|
|
87
|
-
children: /*#__PURE__*/_jsx(KLabel.Text, {
|
|
88
|
-
typo: "TextXsNormal",
|
|
89
|
-
color: KColors.palette.gray.w400,
|
|
90
|
-
marginL: "0.25rem",
|
|
91
|
-
children: timestamp
|
|
92
|
-
})
|
|
93
|
-
})]
|
|
52
|
+
const renderRightActions = useCallback((_progress, _translation, swipeableMethods) => /*#__PURE__*/_jsx(_Fragment, {
|
|
53
|
+
children: /*#__PURE__*/_jsx(KContainer.VisibleView, {
|
|
54
|
+
visible: !isNotInGroup,
|
|
55
|
+
children: /*#__PURE__*/_jsx(MuteThread, {
|
|
56
|
+
conversation: conversation,
|
|
57
|
+
isMuted: isMuted,
|
|
58
|
+
swipeableMethods: swipeableMethods
|
|
59
|
+
})
|
|
60
|
+
})
|
|
61
|
+
}), [isMuted, conversation, isNotInGroup]);
|
|
62
|
+
return /*#__PURE__*/_jsx(ReanimatedSwipeable, {
|
|
63
|
+
friction: 2,
|
|
64
|
+
rightThreshold: 40,
|
|
65
|
+
renderRightActions: renderRightActions,
|
|
66
|
+
children: /*#__PURE__*/_jsxs(KContainer.Touchable, {
|
|
67
|
+
row: true,
|
|
68
|
+
alignItems: "center",
|
|
69
|
+
paddingH: "0.75rem",
|
|
70
|
+
paddingV: "0.75rem",
|
|
71
|
+
onPress: handlePress,
|
|
72
|
+
activeOpacity: 1,
|
|
73
|
+
background: KColors.white,
|
|
74
|
+
children: [/*#__PURE__*/_jsx(AvatarSection, {
|
|
75
|
+
avatar: faceURL ?? null,
|
|
76
|
+
fullName: fullName,
|
|
77
|
+
peerType: peerType
|
|
94
78
|
}), /*#__PURE__*/_jsxs(KContainer.View, {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
79
|
+
flex: true,
|
|
80
|
+
marginL: "0.5rem",
|
|
81
|
+
paddingB: 2,
|
|
82
|
+
children: [/*#__PURE__*/_jsxs(KContainer.View, {
|
|
83
|
+
row: true,
|
|
84
|
+
alignItems: "center",
|
|
85
|
+
children: [/*#__PURE__*/_jsx(NamePrefixIcon, {
|
|
86
|
+
peerType: peerType
|
|
87
|
+
}), /*#__PURE__*/_jsx(KLabel.Text, {
|
|
88
|
+
typo: hasUnread ? 'TextMdBold' : 'TextMdNormal',
|
|
89
|
+
numberOfLines: 1,
|
|
90
|
+
color: KColors.black,
|
|
91
|
+
flex: true,
|
|
92
|
+
children: fullName
|
|
93
|
+
}), /*#__PURE__*/_jsx(KContainer.VisibleView, {
|
|
94
|
+
visible: isMuted,
|
|
95
|
+
children: /*#__PURE__*/_jsx(KContainer.View, {
|
|
96
|
+
marginL: "0.25rem",
|
|
97
|
+
children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
|
|
98
|
+
name: "bell-off",
|
|
99
|
+
provider: "MaterialCommunityIcons",
|
|
100
|
+
size: 16,
|
|
101
|
+
color: KColors.palette.gray.w500
|
|
102
|
+
})
|
|
103
|
+
})
|
|
104
|
+
}), /*#__PURE__*/_jsx(KContainer.VisibleView, {
|
|
105
|
+
visible: Boolean(timestamp),
|
|
106
|
+
children: /*#__PURE__*/_jsx(KLabel.Text, {
|
|
107
|
+
typo: "TextXsNormal",
|
|
108
|
+
color: KColors.palette.gray.w400,
|
|
109
|
+
marginL: "0.25rem",
|
|
110
|
+
children: timestamp
|
|
111
|
+
})
|
|
112
|
+
})]
|
|
113
|
+
}), /*#__PURE__*/_jsxs(KContainer.View, {
|
|
114
|
+
row: true,
|
|
115
|
+
alignItems: "center",
|
|
116
|
+
children: [/*#__PURE__*/_jsx(KLabel.Text, {
|
|
117
|
+
typo: hasUnread ? 'TextNmMedium' : 'TextNmNormal',
|
|
118
|
+
color: hasUnread ? KColors.black : KColors.gray.normal,
|
|
119
|
+
numberOfLines: 1,
|
|
120
|
+
flex: true,
|
|
121
|
+
children: lastMessageText
|
|
122
|
+
}), /*#__PURE__*/_jsx(KContainer.VisibleView, {
|
|
123
|
+
visible: Boolean(isPinned),
|
|
124
|
+
children: /*#__PURE__*/_jsx(KContainer.View, {
|
|
125
|
+
marginL: "0.5rem",
|
|
126
|
+
children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
|
|
127
|
+
name: "pin-outline",
|
|
128
|
+
provider: "MaterialCommunityIcons",
|
|
129
|
+
size: 14,
|
|
130
|
+
color: KColors.palette.gray.w400
|
|
131
|
+
})
|
|
112
132
|
})
|
|
113
|
-
})
|
|
114
|
-
|
|
115
|
-
|
|
133
|
+
}), /*#__PURE__*/_jsx(UnreadBadge, {
|
|
134
|
+
count: unreadCount
|
|
135
|
+
})]
|
|
116
136
|
})]
|
|
117
137
|
})]
|
|
118
|
-
})
|
|
138
|
+
})
|
|
119
139
|
});
|
|
120
140
|
});
|
|
121
141
|
ThreadCard.displayName = 'ThreadCard';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["memo","useCallback","useMemo","KContainer","KImage","KLabel","KColors","AvatarSection","NamePrefixIcon","UnreadBadge","formatTimestamp","getLastMessageText","useConversation","useUserStore","jsx","_jsx","jsxs","_jsxs","ThreadCard","item","onPress","
|
|
1
|
+
{"version":3,"names":["memo","useCallback","useMemo","ReanimatedSwipeable","KContainer","KImage","KLabel","KColors","AvatarSection","NamePrefixIcon","UnreadBadge","formatTimestamp","getLastMessageText","useConversation","useUserStore","MessageReceiveOptType","MuteThread","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","ThreadCard","item","onPress","conversation","peerType","showName","faceURL","unreadCount","recvMsgOpt","Normal","isPinned","isNotInGroup","latestMsgSendTime","latestMsg","latestMsgData","result","JSON","parse","error","console","fullName","hasUnread","isMuted","timestamp","sendTime","currentUserId","s","user","userID","lastMessageText","handlePress","event","renderRightActions","_progress","_translation","swipeableMethods","children","VisibleView","visible","friction","rightThreshold","Touchable","row","alignItems","paddingH","paddingV","activeOpacity","background","white","avatar","View","flex","marginL","paddingB","Text","typo","numberOfLines","color","black","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":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback } from 'react';
|
|
4
|
+
import OpenIMSDK, { MessageReceiveOptType } from '@droppii/openim-rn-client-sdk';
|
|
5
|
+
import { useConversationStore } from "../store/index.js";
|
|
6
|
+
export function useMuteConversation() {
|
|
7
|
+
const muteConversation = useCallback(async conversation => {
|
|
8
|
+
if (conversation == null) return;
|
|
9
|
+
await OpenIMSDK.setConversationRecvMessageOpt({
|
|
10
|
+
conversationID: conversation.conversationID,
|
|
11
|
+
opt: MessageReceiveOptType.NotNotify
|
|
12
|
+
});
|
|
13
|
+
useConversationStore.getState().updateConversations([{
|
|
14
|
+
...conversation,
|
|
15
|
+
recvMsgOpt: MessageReceiveOptType.NotNotify
|
|
16
|
+
}]);
|
|
17
|
+
}, []);
|
|
18
|
+
const unmuteConversation = useCallback(async conversation => {
|
|
19
|
+
if (conversation == null) return;
|
|
20
|
+
await OpenIMSDK.setConversationRecvMessageOpt({
|
|
21
|
+
conversationID: conversation.conversationID,
|
|
22
|
+
opt: MessageReceiveOptType.Normal
|
|
23
|
+
});
|
|
24
|
+
useConversationStore.getState().updateConversations([{
|
|
25
|
+
...conversation,
|
|
26
|
+
recvMsgOpt: MessageReceiveOptType.Normal
|
|
27
|
+
}]);
|
|
28
|
+
}, []);
|
|
29
|
+
return {
|
|
30
|
+
muteConversation,
|
|
31
|
+
unmuteConversation
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=useMuteConversation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","OpenIMSDK","MessageReceiveOptType","useConversationStore","useMuteConversation","muteConversation","conversation","setConversationRecvMessageOpt","conversationID","opt","NotNotify","getState","updateConversations","recvMsgOpt","unmuteConversation","Normal"],"sourceRoot":"../../../src","sources":["hooks/useMuteConversation.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,OAAOC,SAAS,IACdC,qBAAqB,QAChB,+BAA+B;AAEtC,SAASC,oBAAoB,QAAQ,mBAAU;AAE/C,OAAO,SAASC,mBAAmBA,CAAA,EAAG;EACpC,MAAMC,gBAAgB,GAAGL,WAAW,CAClC,MAAOM,YAA+B,IAAK;IACzC,IAAIA,YAAY,IAAI,IAAI,EAAE;IAE1B,MAAML,SAAS,CAACM,6BAA6B,CAAC;MAC5CC,cAAc,EAAEF,YAAY,CAACE,cAAc;MAC3CC,GAAG,EAAEP,qBAAqB,CAACQ;IAC7B,CAAC,CAAC;IACFP,oBAAoB,CACjBQ,QAAQ,CAAC,CAAC,CACVC,mBAAmB,CAAC,CACnB;MAAE,GAAGN,YAAY;MAAEO,UAAU,EAAEX,qBAAqB,CAACQ;IAAU,CAAC,CACjE,CAAC;EACN,CAAC,EACD,EACF,CAAC;EAED,MAAMI,kBAAkB,GAAGd,WAAW,CACpC,MAAOM,YAA+B,IAAK;IACzC,IAAIA,YAAY,IAAI,IAAI,EAAE;IAE1B,MAAML,SAAS,CAACM,6BAA6B,CAAC;MAC5CC,cAAc,EAAEF,YAAY,CAACE,cAAc;MAC3CC,GAAG,EAAEP,qBAAqB,CAACa;IAC7B,CAAC,CAAC;IACFZ,oBAAoB,CACjBQ,QAAQ,CAAC,CAAC,CACVC,mBAAmB,CAAC,CACnB;MAAE,GAAGN,YAAY;MAAEO,UAAU,EAAEX,qBAAqB,CAACa;IAAO,CAAC,CAC9D,CAAC;EACN,CAAC,EACD,EACF,CAAC;EAED,OAAO;IAAEV,gBAAgB;IAAES;EAAmB,CAAC;AACjD","ignoreList":[]}
|
|
@@ -8,6 +8,7 @@ import { MessageToolboxItem } from "./MessageToolboxItem.js";
|
|
|
8
8
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
9
|
export const MessageToolboxMenu = /*#__PURE__*/memo(({
|
|
10
10
|
showCopyMessage,
|
|
11
|
+
showCopyMessageLink,
|
|
11
12
|
showRetryMessage,
|
|
12
13
|
showRevokeMessage,
|
|
13
14
|
onCopyMessage,
|
|
@@ -26,10 +27,8 @@ export const MessageToolboxMenu = /*#__PURE__*/memo(({
|
|
|
26
27
|
}), /*#__PURE__*/_jsx(MessageToolboxItem, {
|
|
27
28
|
icon: "link-o",
|
|
28
29
|
color: KColors.gray.dark,
|
|
29
|
-
label: trans('chat:copy_message_link')
|
|
30
|
-
|
|
31
|
-
,
|
|
32
|
-
visible: false,
|
|
30
|
+
label: trans('chat:copy_message_link'),
|
|
31
|
+
visible: showCopyMessageLink,
|
|
33
32
|
onPress: onCopyMessageLink
|
|
34
33
|
}), /*#__PURE__*/_jsx(MessageToolboxItem, {
|
|
35
34
|
icon: "arrow-reload-o",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["memo","StyleSheet","KContainer","KColors","KSpacingValue","trans","MessageToolboxItem","jsx","_jsx","jsxs","_jsxs","MessageToolboxMenu","showCopyMessage","showRetryMessage","showRevokeMessage","onCopyMessage","onCopyMessageLink","onRetryMessage","onRevokeMessage","View","style","styles","card","children","icon","color","gray","dark","label","visible","onPress","danger","normal","displayName","create","minWidth","paddingVertical","borderRadius","backgroundColor","white","shadowColor","black","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","row","flexDirection","alignItems","paddingHorizontal"],"sourceRoot":"../../../../../src","sources":["screens/chat-detail/messageToolbox/MessageToolboxMenu.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,OAAO;AAC5B,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,UAAU,EAAEC,OAAO,EAAEC,aAAa,QAAQ,eAAe;AAClE,SAASC,KAAK,QAAQ,+BAAsB;AAC5C,SAASC,kBAAkB,QAAQ,yBAAsB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAa1D,OAAO,MAAMC,kBAAkB,gBAAGX,IAAI,CACpC,CAAC;EACCY,eAAe;EACfC,gBAAgB;EAChBC,iBAAiB;EACjBC,aAAa;EACbC,iBAAiB;EACjBC,cAAc;EACdC;AACuB,CAAC,KAAK;EAC7B,
|
|
1
|
+
{"version":3,"names":["memo","StyleSheet","KContainer","KColors","KSpacingValue","trans","MessageToolboxItem","jsx","_jsx","jsxs","_jsxs","MessageToolboxMenu","showCopyMessage","showCopyMessageLink","showRetryMessage","showRevokeMessage","onCopyMessage","onCopyMessageLink","onRetryMessage","onRevokeMessage","View","style","styles","card","children","icon","color","gray","dark","label","visible","onPress","danger","normal","displayName","create","minWidth","paddingVertical","borderRadius","backgroundColor","white","shadowColor","black","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","row","flexDirection","alignItems","paddingHorizontal"],"sourceRoot":"../../../../../src","sources":["screens/chat-detail/messageToolbox/MessageToolboxMenu.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,OAAO;AAC5B,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,UAAU,EAAEC,OAAO,EAAEC,aAAa,QAAQ,eAAe;AAClE,SAASC,KAAK,QAAQ,+BAAsB;AAC5C,SAASC,kBAAkB,QAAQ,yBAAsB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAa1D,OAAO,MAAMC,kBAAkB,gBAAGX,IAAI,CACpC,CAAC;EACCY,eAAe;EACfC,mBAAmB;EACnBC,gBAAgB;EAChBC,iBAAiB;EACjBC,aAAa;EACbC,iBAAiB;EACjBC,cAAc;EACdC;AACuB,CAAC,KAAK;EAC7B,oBACET,KAAA,CAACR,UAAU,CAACkB,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACC,IAAK;IAAAC,QAAA,gBAClChB,IAAA,CAACF,kBAAkB;MACjBmB,IAAI,EAAC,QAAQ;MACbC,KAAK,EAAEvB,OAAO,CAACwB,IAAI,CAACC,IAAK;MACzBC,KAAK,EAAExB,KAAK,CAAC,mBAAmB,CAAE;MAClCyB,OAAO,EAAElB,eAAgB;MACzBmB,OAAO,EAAEf;IAAc,CACxB,CAAC,eAEFR,IAAA,CAACF,kBAAkB;MACjBmB,IAAI,EAAC,QAAQ;MACbC,KAAK,EAAEvB,OAAO,CAACwB,IAAI,CAACC,IAAK;MACzBC,KAAK,EAAExB,KAAK,CAAC,wBAAwB,CAAE;MACvCyB,OAAO,EAAEjB,mBAAoB;MAC7BkB,OAAO,EAAEd;IAAkB,CAC5B,CAAC,eAEFT,IAAA,CAACF,kBAAkB;MACjBmB,IAAI,EAAC,gBAAgB;MACrBC,KAAK,EAAEvB,OAAO,CAAC6B,MAAM,CAACC,MAAO;MAC7BJ,KAAK,EAAExB,KAAK,CAAC,oBAAoB,CAAE;MACnCyB,OAAO,EAAEhB,gBAAiB;MAC1BiB,OAAO,EAAEb;IAAe,CACzB,CAAC,eAEFV,IAAA,CAACF,kBAAkB;MACjBmB,IAAI,EAAC,eAAe;MACpBC,KAAK,EAAEvB,OAAO,CAAC6B,MAAM,CAACC,MAAO;MAC7BJ,KAAK,EAAExB,KAAK,CAAC,qBAAqB,CAAE;MACpCyB,OAAO,EAAEf,iBAAkB;MAC3BgB,OAAO,EAAEZ;IAAgB,CAC1B,CAAC;EAAA,CACa,CAAC;AAEtB,CACF,CAAC;AAEDR,kBAAkB,CAACuB,WAAW,GAAG,oBAAoB;AAErD,MAAMZ,MAAM,GAAGrB,UAAU,CAACkC,MAAM,CAAC;EAC/BZ,IAAI,EAAE;IACJa,QAAQ,EAAE,GAAG;IACbC,eAAe,EAAEjC,aAAa,CAAC,QAAQ,CAAC;IACxCkC,YAAY,EAAElC,aAAa,CAAC,MAAM,CAAC;IACnCmC,eAAe,EAAEpC,OAAO,CAACqC,KAAK;IAC9BC,WAAW,EAAEtC,OAAO,CAACuC,KAAK;IAC1BC,YAAY,EAAE;MAAEC,KAAK,EAAE,CAAC;MAAEC,MAAM,EAAE;IAAE,CAAC;IACrCC,aAAa,EAAE,GAAG;IAClBC,YAAY,EAAE,EAAE;IAChBC,SAAS,EAAE;EACb,CAAC;EACDC,GAAG,EAAE;IACHC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,iBAAiB,EAAEhD,aAAa,CAAC,MAAM,CAAC;IACxCiC,eAAe,EAAEjC,aAAa,CAAC,QAAQ;EACzC;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -13,7 +13,9 @@ const isEligibleForToolbox = message => isMessageSucceeded(message) && !isMessag
|
|
|
13
13
|
const isCopyMessageSupported = message => isEligibleForToolbox(message) && COPYABLE_TEXT_TYPES.includes(message.contentType);
|
|
14
14
|
|
|
15
15
|
// All message types are supported, as long as the message is eligible.
|
|
16
|
-
const isCopyMessageLinkSupported = message =>
|
|
16
|
+
// const isCopyMessageLinkSupported = (message: DMessageItem): boolean =>
|
|
17
|
+
// isEligibleForToolbox(message);
|
|
18
|
+
|
|
17
19
|
const isRetrySupported = message => message.status === MessageStatus.Failed;
|
|
18
20
|
|
|
19
21
|
// Revoke is only available within 24h of a successful send.
|
|
@@ -33,12 +35,12 @@ export const getMessageToolboxItems = (message, currentUserId) => {
|
|
|
33
35
|
return {};
|
|
34
36
|
}
|
|
35
37
|
const showCopyMessage = isCopyMessageSupported(message);
|
|
36
|
-
const showCopyMessageLink = isCopyMessageLinkSupported(message);
|
|
38
|
+
// const showCopyMessageLink = isCopyMessageLinkSupported(message);
|
|
37
39
|
const showRetryMessage = isRetrySupported(message);
|
|
38
40
|
const showRevokeMessage = isRevokeMessageSupported(message, currentUserId);
|
|
39
41
|
return {
|
|
40
42
|
showCopyMessage,
|
|
41
|
-
showCopyMessageLink,
|
|
43
|
+
// showCopyMessageLink,
|
|
42
44
|
showRetryMessage,
|
|
43
45
|
showRevokeMessage
|
|
44
46
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MessageStatus","MessageType","getMessageText","isMessageRevoked","COPYABLE_TEXT_TYPES","TextMessage","AtTextMessage","QuoteMessage","UrlTextMessage","isMessageSucceeded","message","status","Failed","Sending","isEligibleForToolbox","isCopyMessageSupported","includes","contentType","
|
|
1
|
+
{"version":3,"names":["MessageStatus","MessageType","getMessageText","isMessageRevoked","COPYABLE_TEXT_TYPES","TextMessage","AtTextMessage","QuoteMessage","UrlTextMessage","isMessageSucceeded","message","status","Failed","Sending","isEligibleForToolbox","isCopyMessageSupported","includes","contentType","isRetrySupported","REVOKE_WINDOW_MS","isRevokeMessageSupported","currentUserId","sendID","Date","now","sendTime","createTime","getCopyableMessageText","urlTextElem","content","getMessageToolboxItems","showCopyMessage","showRetryMessage","showRevokeMessage"],"sourceRoot":"../../../../../src","sources":["screens/chat-detail/messageToolbox/messageToolbox.utils.ts"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,WAAW,QAAQ,+BAA+B;AAE1E,SAASC,cAAc,QAAQ,qCAAkC;AACjE,SAASC,gBAAgB,QAAQ,gCAA6B;;AAE9D;AACA,MAAMC,mBAA6B,GAAG,CACpCH,WAAW,CAACI,WAAW,EACvBJ,WAAW,CAACK,aAAa,EACzBL,WAAW,CAACM,YAAY,EACxBN,WAAW,CAACO,cAAc,CAC3B;AAED,MAAMC,kBAAkB,GAAIC,OAAqB,IAC/CA,OAAO,CAACC,MAAM,KAAKX,aAAa,CAACY,MAAM,IACvCF,OAAO,CAACC,MAAM,KAAKX,aAAa,CAACa,OAAO;;AAE1C;AACA,MAAMC,oBAAoB,GAAIJ,OAAqB,IACjDD,kBAAkB,CAACC,OAAO,CAAC,IAAI,CAACP,gBAAgB,CAACO,OAAO,CAAC;AAE3D,MAAMK,sBAAsB,GAAIL,OAAqB,IACnDI,oBAAoB,CAACJ,OAAO,CAAC,IAC7BN,mBAAmB,CAACY,QAAQ,CAACN,OAAO,CAACO,WAAW,CAAC;;AAEnD;AACA;AACA;;AAEA,MAAMC,gBAAgB,GAAIR,OAAqB,IAC7CA,OAAO,CAACC,MAAM,KAAKX,aAAa,CAACY,MAAM;;AAEzC;AACA,MAAMO,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;;AAE5C;AACA;AACA,MAAMC,wBAAwB,GAAGA,CAC/BV,OAAqB,EACrBW,aAAsB,KAEtBP,oBAAoB,CAACJ,OAAO,CAAC,IAC7B,CAAC,CAACW,aAAa,IACfX,OAAO,CAACY,MAAM,KAAKD,aAAa,IAChCE,IAAI,CAACC,GAAG,CAAC,CAAC,IAAId,OAAO,CAACe,QAAQ,IAAIf,OAAO,CAACgB,UAAU,IAAI,CAAC,CAAC,GAAGP,gBAAgB;AAE/E,OAAO,MAAMQ,sBAAsB,GAAIjB,OAAqB,IAAa;EACvE,IAAIA,OAAO,CAACO,WAAW,KAAKhB,WAAW,CAACO,cAAc,EAAE;IACtD,OAAOE,OAAO,CAACkB,WAAW,EAAEC,OAAO,IAAI,EAAE;EAC3C;EACA,OAAO3B,cAAc,CAACQ,OAAO,CAAC;AAChC,CAAC;AAED,OAAO,MAAMoB,sBAAsB,GAAGA,CACpCpB,OAAsB,EACtBW,aAAsB,KACnB;EACH,IAAIX,OAAO,IAAI,IAAI,EAAE;IACnB,OAAO,CAAC,CAAC;EACX;EAEA,MAAMqB,eAAe,GAAGhB,sBAAsB,CAACL,OAAO,CAAC;EACvD;EACA,MAAMsB,gBAAgB,GAAGd,gBAAgB,CAACR,OAAO,CAAC;EAClD,MAAMuB,iBAAiB,GAAGb,wBAAwB,CAACV,OAAO,EAAEW,aAAa,CAAC;EAE1E,OAAO;IACLU,eAAe;IACf;IACAC,gBAAgB;IAChBC;EACF,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -41,6 +41,14 @@ const i18nKey = {
|
|
|
41
41
|
'msg_type_link': '[Liên kết]',
|
|
42
42
|
'msg_type_revoke': 'Đã thu hồi tin nhắn',
|
|
43
43
|
'chat:revoked_by_sender': '{{sender}} đã thu hồi tin nhắn',
|
|
44
|
+
'chat:mute_action': 'Tắt thông báo',
|
|
45
|
+
'chat:unmute_action': 'Bật thông báo',
|
|
46
|
+
'chat:mute_confirm_title': 'Tắt thông báo',
|
|
47
|
+
'chat:mute_confirm_desc': 'Bạn có thể bỏ lỡ tin nhắn quan trọng nếu tắt thông báo! Bạn có chắc chắn muốn tắt thông báo?',
|
|
48
|
+
'chat:mute_confirm_primary': 'Tắt thông báo',
|
|
49
|
+
'chat:mute_confirm_secondary': 'Quay lại',
|
|
50
|
+
'chat:mute_toast_success': 'Đã tắt thông báo',
|
|
51
|
+
'chat:unmute_toast_success': 'Đã bật thông báo',
|
|
44
52
|
'start': 'Bắt đầu',
|
|
45
53
|
'restart': 'Bắt đầu lại'
|
|
46
54
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["i18nKey","vi"],"sourceRoot":"../../../../src","sources":["translation/resources/i18n.ts"],"mappings":";;AAAA,MAAMA,OAA+B,GAAG;EACtC,0BAA0B,EAAE,gBAAgB;EAC5C,2BAA2B,EAAE,YAAY;EACzC,qBAAqB,EAAE,0BAA0B;EACjD,qBAAqB,EAAE,kCAAkC;EACzD,uBAAuB,EAAE,oBAAoB;EAC7C,yBAAyB,EAAE,iBAAiB;EAC5C,+BAA+B,EAAE,6BAA6B;EAC9D,uBAAuB,EAAE,oCAAoC;EAC7D,8BAA8B,EAAE,gCAAgC;EAChE,2BAA2B,EAAE,kBAAkB;EAC/C,uBAAuB,EAAE,sBAAsB;EAC/C,oBAAoB,EAAE,eAAe;EACrC,sBAAsB,EACpB,sFAAsF;EACxF,sBAAsB,EACpB,gFAAgF;EAClF,iBAAiB,EAAE,YAAY;EAC/B,0BAA0B,EAAE,gCAAgC;EAC5D,oBAAoB,EAAE,gCAAgC;EACtD,6BAA6B,EAAE,kCAAkC;EACjE,eAAe,EAAE,SAAS;EAC1B,gBAAgB,EAAE,YAAY;EAC9B,iBAAiB,EAAE,SAAS;EAC5B,WAAW,EAAE,KAAK;EAClB,YAAY,EAAE,SAAS;EACvB,2BAA2B,EAAE,6BAA6B;EAC1D,mBAAmB,EAAE,kBAAkB;EACvC,yBAAyB,EAAE,kBAAkB;EAC7C,qBAAqB,EAAE,0BAA0B;EACjD,mBAAmB,EAAE,mBAAmB;EACxC,wBAAwB,EAAE,6BAA6B;EACvD,2BAA2B,EAAE,8BAA8B;EAC3D,gCAAgC,EAAE,wCAAwC;EAC1E,oBAAoB,EAAE,SAAS;EAC/B,qBAAqB,EAAE,SAAS;EAChC,gBAAgB,EAAE,YAAY;EAC9B,gBAAgB,EAAE,kBAAkB;EACpC,gBAAgB,EAAE,SAAS;EAC3B,eAAe,EAAE,iBAAiB;EAClC,eAAe,EAAE,YAAY;EAC7B,iBAAiB,EAAE,qBAAqB;EACxC,wBAAwB,EAAE,gCAAgC;EAC1D,OAAO,EAAE,SAAS;EAClB,SAAS,EAAE;AACb,CAAC;AAED,eAAe;EACbC,EAAE,EAAED;AACN,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["i18nKey","vi"],"sourceRoot":"../../../../src","sources":["translation/resources/i18n.ts"],"mappings":";;AAAA,MAAMA,OAA+B,GAAG;EACtC,0BAA0B,EAAE,gBAAgB;EAC5C,2BAA2B,EAAE,YAAY;EACzC,qBAAqB,EAAE,0BAA0B;EACjD,qBAAqB,EAAE,kCAAkC;EACzD,uBAAuB,EAAE,oBAAoB;EAC7C,yBAAyB,EAAE,iBAAiB;EAC5C,+BAA+B,EAAE,6BAA6B;EAC9D,uBAAuB,EAAE,oCAAoC;EAC7D,8BAA8B,EAAE,gCAAgC;EAChE,2BAA2B,EAAE,kBAAkB;EAC/C,uBAAuB,EAAE,sBAAsB;EAC/C,oBAAoB,EAAE,eAAe;EACrC,sBAAsB,EACpB,sFAAsF;EACxF,sBAAsB,EACpB,gFAAgF;EAClF,iBAAiB,EAAE,YAAY;EAC/B,0BAA0B,EAAE,gCAAgC;EAC5D,oBAAoB,EAAE,gCAAgC;EACtD,6BAA6B,EAAE,kCAAkC;EACjE,eAAe,EAAE,SAAS;EAC1B,gBAAgB,EAAE,YAAY;EAC9B,iBAAiB,EAAE,SAAS;EAC5B,WAAW,EAAE,KAAK;EAClB,YAAY,EAAE,SAAS;EACvB,2BAA2B,EAAE,6BAA6B;EAC1D,mBAAmB,EAAE,kBAAkB;EACvC,yBAAyB,EAAE,kBAAkB;EAC7C,qBAAqB,EAAE,0BAA0B;EACjD,mBAAmB,EAAE,mBAAmB;EACxC,wBAAwB,EAAE,6BAA6B;EACvD,2BAA2B,EAAE,8BAA8B;EAC3D,gCAAgC,EAAE,wCAAwC;EAC1E,oBAAoB,EAAE,SAAS;EAC/B,qBAAqB,EAAE,SAAS;EAChC,gBAAgB,EAAE,YAAY;EAC9B,gBAAgB,EAAE,kBAAkB;EACpC,gBAAgB,EAAE,SAAS;EAC3B,eAAe,EAAE,iBAAiB;EAClC,eAAe,EAAE,YAAY;EAC7B,iBAAiB,EAAE,qBAAqB;EACxC,wBAAwB,EAAE,gCAAgC;EAC1D,kBAAkB,EAAE,eAAe;EACnC,oBAAoB,EAAE,eAAe;EACrC,yBAAyB,EAAE,eAAe;EAC1C,wBAAwB,EACtB,8FAA8F;EAChG,2BAA2B,EAAE,eAAe;EAC5C,6BAA6B,EAAE,UAAU;EACzC,yBAAyB,EAAE,kBAAkB;EAC7C,2BAA2B,EAAE,kBAAkB;EAC/C,OAAO,EAAE,SAAS;EAClB,SAAS,EAAE;AACb,CAAC;AAED,eAAe;EACbC,EAAE,EAAED;AACN,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ImagePicker","pick","pickDocument","types","documentTypes","isErrorWithCode","errorCodes","keepLocalCopy","check","request","openSettings","PERMISSIONS","RESULTS","Alert","Platform","PHOTO_PERMISSION","select","ios","IOS","PHOTO_LIBRARY","android","Number","Version","ANDROID","READ_MEDIA_IMAGES","READ_EXTERNAL_STORAGE","default","checkPhotoPermission","result","GRANTED","LIMITED","DENIED","req","BLOCKED","UNAVAILABLE","alert","text","style","onPress","DeviceUtils","openImagePicker","multiple","hasPermission","openPicker","mediaType","compressImageQuality","forceJpg","images","Array","isArray","console","log","count","length","map","img","filename","size","width","height","error","code","openVideoPicker","videos","vid","duration","openFilePicker","results","allowMultiSelection","type","allFiles","mode","copies","files","r","uri","fileName","name","destination","i","decodeURIComponent","status","localUri","mimeType","OPERATION_CANCELED"],"sourceRoot":"../../../src","sources":["utils/device.ts"],"mappings":";;AAAA,OAAOA,WAAW,MAAM,gCAAgC;AACxD,SACEC,IAAI,IAAIC,YAAY,EACpBC,KAAK,IAAIC,aAAa,EACtBC,eAAe,EACfC,UAAU,EACVC,aAAa,QACR,gCAAgC;AACvC,SACEC,KAAK,EACLC,OAAO,EACPC,YAAY,EACZC,WAAW,EACXC,OAAO,QAEF,0BAA0B;AACjC,SAASC,KAAK,EAAEC,QAAQ,QAAQ,cAAc;AAE9C,MAAMC,gBAA4B,GAAGD,QAAQ,CAACE,MAAM,CAAC;EACnDC,GAAG,EAAEN,WAAW,CAACO,GAAG,CAACC,aAAa;EAClCC,OAAO,EACLC,MAAM,CAACP,QAAQ,CAACQ,OAAO,CAAC,IAAI,EAAE,GAC1BX,WAAW,CAACY,OAAO,CAACC,iBAAiB,GACrCb,WAAW,CAACY,OAAO,CAACE,qBAAqB;EAC/CC,OAAO,EAAEf,WAAW,CAACO,GAAG,CAACC;AAC3B,CAAC,CAAC;AAEF,MAAMQ,oBAAoB,GAAG,MAAAA,CAAA,KAA8B;EACzD,MAAMC,MAAM,GAAG,MAAMpB,KAAK,CAACO,gBAAgB,CAAC;EAC5C,IAAIa,MAAM,KAAKhB,OAAO,CAACiB,OAAO,IAAID,MAAM,KAAKhB,OAAO,CAACkB,OAAO,EAAE,OAAO,IAAI;EACzE,IAAIF,MAAM,KAAKhB,OAAO,CAACmB,MAAM,EAAE;IAC7B,MAAMC,GAAG,GAAG,MAAMvB,OAAO,CAACM,gBAAgB,CAAC;IAC3C,OAAOiB,GAAG,KAAKpB,OAAO,CAACiB,OAAO,IAAIG,GAAG,KAAKpB,OAAO,CAACkB,OAAO;EAC3D;EACA,IAAIF,MAAM,KAAKhB,OAAO,CAACqB,OAAO,IAAIL,MAAM,KAAKhB,OAAO,CAACsB,WAAW,EAAE;IAChErB,KAAK,CAACsB,KAAK,CACT,oBAAoB,EACpB,4DAA4D,EAC5D,CACE;MAAEC,IAAI,EAAE,KAAK;MAAEC,KAAK,EAAE;IAAS,CAAC,EAChC;MAAED,IAAI,EAAE,YAAY;MAAEE,OAAO,EAAEA,CAAA,KAAM5B,YAAY,CAAC;IAAE,CAAC,CAEzD,CAAC;IACD,OAAO,KAAK;EACd;EACA,OAAO,KAAK;AACd,CAAC;AASD,MAAM6B,WAAW,GAAG;EAClBC,eAAe,EAAE,MAAAA,CAAOC,QAAiB,GAAG,KAAK,KAAK;IACpD,MAAMC,aAAa,GAAG,MAAMf,oBAAoB,CAAC,CAAC;IAClD,IAAI,CAACe,aAAa,EAAE,OAAO,IAAI;IAC/B,IAAI;MACF,MAAMd,MAAM,GAAG,MAAM5B,WAAW,CAAC2C,UAAU,CAAC;QAC1C;QACAC,SAAS,EAAE,KAAK;QAChBC,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"names":["ImagePicker","pick","pickDocument","types","documentTypes","isErrorWithCode","errorCodes","keepLocalCopy","check","request","openSettings","PERMISSIONS","RESULTS","Alert","Platform","PHOTO_PERMISSION","select","ios","IOS","PHOTO_LIBRARY","android","Number","Version","ANDROID","READ_MEDIA_IMAGES","READ_EXTERNAL_STORAGE","default","checkPhotoPermission","result","GRANTED","LIMITED","DENIED","req","BLOCKED","UNAVAILABLE","alert","text","style","onPress","DeviceUtils","openImagePicker","multiple","hasPermission","openPicker","mediaType","compressImageQuality","forceJpg","images","Array","isArray","console","log","count","length","map","img","filename","size","width","height","error","code","openVideoPicker","videos","vid","duration","openFilePicker","results","allowMultiSelection","type","allFiles","mode","copies","files","r","uri","fileName","name","destination","i","decodeURIComponent","status","localUri","mimeType","OPERATION_CANCELED"],"sourceRoot":"../../../src","sources":["utils/device.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SwipeableMethods } from 'react-native-gesture-handler/ReanimatedSwipeable';
|
|
2
|
+
import { type ConversationItem } from '@droppii/openim-rn-client-sdk';
|
|
3
|
+
interface MuteThreadProps {
|
|
4
|
+
isMuted: boolean;
|
|
5
|
+
conversation?: ConversationItem;
|
|
6
|
+
swipeableMethods: SwipeableMethods;
|
|
7
|
+
}
|
|
8
|
+
export declare const MuteThread: import("react").MemoExoticComponent<({ isMuted, conversation, swipeableMethods }: MuteThreadProps) => import("react").JSX.Element>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=MuteThread.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MuteThread.d.ts","sourceRoot":"","sources":["../../../../../src/components/ThreadCard/MuteThread.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AAKzF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,eAAO,MAAM,UAAU,oFACyB,eAAe,iCAkF9D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadCard.d.ts","sourceRoot":"","sources":["../../../../../src/components/ThreadCard/ThreadCard.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"ThreadCard.d.ts","sourceRoot":"","sources":["../../../../../src/components/ThreadCard/ThreadCard.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAgB1D,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,qBAAqB,CAAA;KAAE,KAAK,IAAI,CAAC;CAC5E;AAED,QAAA,MAAM,UAAU,0DAA4B,eAAe,iCAiJzD,CAAC;AAIH,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ConversationItem } from '@droppii/openim-rn-client-sdk';
|
|
2
|
+
export declare function useMuteConversation(): {
|
|
3
|
+
muteConversation: (conversation?: ConversationItem) => Promise<void>;
|
|
4
|
+
unmuteConversation: (conversation?: ConversationItem) => Promise<void>;
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=useMuteConversation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMuteConversation.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useMuteConversation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,wBAAgB,mBAAmB;sCAET,gBAAgB;wCAiBhB,gBAAgB;EAiBzC"}
|
|
@@ -8,6 +8,6 @@ interface MessageToolboxMenuProps {
|
|
|
8
8
|
onRetryMessage: () => void;
|
|
9
9
|
onRevokeMessage: () => void;
|
|
10
10
|
}
|
|
11
|
-
export declare const MessageToolboxMenu: import("react").MemoExoticComponent<({ showCopyMessage, showRetryMessage, showRevokeMessage, onCopyMessage, onCopyMessageLink, onRetryMessage, onRevokeMessage, }: MessageToolboxMenuProps) => import("react").JSX.Element>;
|
|
11
|
+
export declare const MessageToolboxMenu: import("react").MemoExoticComponent<({ showCopyMessage, showCopyMessageLink, showRetryMessage, showRevokeMessage, onCopyMessage, onCopyMessageLink, onRetryMessage, onRevokeMessage, }: MessageToolboxMenuProps) => import("react").JSX.Element>;
|
|
12
12
|
export {};
|
|
13
13
|
//# sourceMappingURL=MessageToolboxMenu.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageToolboxMenu.d.ts","sourceRoot":"","sources":["../../../../../../src/screens/chat-detail/messageToolbox/MessageToolboxMenu.tsx"],"names":[],"mappings":"AAMA,UAAU,uBAAuB;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"MessageToolboxMenu.d.ts","sourceRoot":"","sources":["../../../../../../src/screens/chat-detail/messageToolbox/MessageToolboxMenu.tsx"],"names":[],"mappings":"AAMA,UAAU,uBAAuB;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,eAAO,MAAM,kBAAkB,0LAU1B,uBAAuB,iCAqC3B,CAAC"}
|
|
@@ -2,12 +2,10 @@ import type { DMessageItem } from '../../../types/chat';
|
|
|
2
2
|
export declare const getCopyableMessageText: (message: DMessageItem) => string;
|
|
3
3
|
export declare const getMessageToolboxItems: (message?: DMessageItem, currentUserId?: string) => {
|
|
4
4
|
showCopyMessage?: undefined;
|
|
5
|
-
showCopyMessageLink?: undefined;
|
|
6
5
|
showRetryMessage?: undefined;
|
|
7
6
|
showRevokeMessage?: undefined;
|
|
8
7
|
} | {
|
|
9
8
|
showCopyMessage: boolean;
|
|
10
|
-
showCopyMessageLink: boolean;
|
|
11
9
|
showRetryMessage: boolean;
|
|
12
10
|
showRevokeMessage: boolean;
|
|
13
11
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageToolbox.utils.d.ts","sourceRoot":"","sources":["../../../../../../src/screens/chat-detail/messageToolbox/messageToolbox.utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA6CxD,eAAO,MAAM,sBAAsB,GAAI,SAAS,YAAY,KAAG,MAK9D,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,UAAU,YAAY,EACtB,gBAAgB,MAAM
|
|
1
|
+
{"version":3,"file":"messageToolbox.utils.d.ts","sourceRoot":"","sources":["../../../../../../src/screens/chat-detail/messageToolbox/messageToolbox.utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA6CxD,eAAO,MAAM,sBAAsB,GAAI,SAAS,YAAY,KAAG,MAK9D,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,UAAU,YAAY,EACtB,gBAAgB,MAAM;;;;;;;;CAiBvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../../src/translation/resources/i18n.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../../src/translation/resources/i18n.ts"],"names":[],"mappings":";;;AAwDA,wBAEE"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { memo, useCallback } from 'react';
|
|
2
|
+
import type { SwipeableMethods } from 'react-native-gesture-handler/ReanimatedSwipeable';
|
|
3
|
+
import { KContainer, KImage, KLabel, KColors } from '@droppii/libs';
|
|
4
|
+
import { useMuteConversation } from '../../hooks/useMuteConversation';
|
|
5
|
+
import { trans } from '../../translation';
|
|
6
|
+
import { UIUtils } from '../../utils/UIUtils';
|
|
7
|
+
import { type ConversationItem } from '@droppii/openim-rn-client-sdk';
|
|
8
|
+
|
|
9
|
+
interface MuteThreadProps {
|
|
10
|
+
isMuted: boolean;
|
|
11
|
+
conversation?: ConversationItem;
|
|
12
|
+
swipeableMethods: SwipeableMethods;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const MuteThread = memo(
|
|
16
|
+
({ isMuted, conversation, swipeableMethods }: MuteThreadProps) => {
|
|
17
|
+
const { muteConversation, unmuteConversation } = useMuteConversation();
|
|
18
|
+
|
|
19
|
+
const handleMutePress = useCallback(() => {
|
|
20
|
+
UIUtils.alert.open({
|
|
21
|
+
title: trans('chat:mute_confirm_title'),
|
|
22
|
+
message: trans('chat:mute_confirm_desc'),
|
|
23
|
+
primaryIndex: 0,
|
|
24
|
+
buttons: [
|
|
25
|
+
{
|
|
26
|
+
label: trans('chat:mute_confirm_primary'),
|
|
27
|
+
kind: 'danger',
|
|
28
|
+
onPress: async () => {
|
|
29
|
+
try {
|
|
30
|
+
await muteConversation(conversation);
|
|
31
|
+
UIUtils.toast.open({
|
|
32
|
+
title: trans('chat:mute_toast_success'),
|
|
33
|
+
theme: 'success',
|
|
34
|
+
});
|
|
35
|
+
} catch {
|
|
36
|
+
UIUtils.toast.open({
|
|
37
|
+
title: trans('chat:generic_error'),
|
|
38
|
+
theme: 'error',
|
|
39
|
+
});
|
|
40
|
+
} finally {
|
|
41
|
+
swipeableMethods.close();
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
label: trans('chat:mute_confirm_secondary'),
|
|
47
|
+
kind: 'gray',
|
|
48
|
+
onPress: () => swipeableMethods.close(),
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
});
|
|
52
|
+
}, [swipeableMethods, conversation, muteConversation]);
|
|
53
|
+
|
|
54
|
+
const handleUnmutePress = useCallback(async () => {
|
|
55
|
+
try {
|
|
56
|
+
await unmuteConversation(conversation);
|
|
57
|
+
UIUtils.toast.open({
|
|
58
|
+
title: trans('chat:unmute_toast_success'),
|
|
59
|
+
theme: 'success',
|
|
60
|
+
});
|
|
61
|
+
} catch {
|
|
62
|
+
UIUtils.toast.open({
|
|
63
|
+
title: trans('chat:generic_error'),
|
|
64
|
+
theme: 'error',
|
|
65
|
+
});
|
|
66
|
+
} finally {
|
|
67
|
+
swipeableMethods.close();
|
|
68
|
+
}
|
|
69
|
+
}, [swipeableMethods, conversation, unmuteConversation]);
|
|
70
|
+
|
|
71
|
+
return (
|
|
72
|
+
<KContainer.Touchable
|
|
73
|
+
width={76}
|
|
74
|
+
alignItems="center"
|
|
75
|
+
justifyContent="center"
|
|
76
|
+
background={
|
|
77
|
+
isMuted ? KColors.palette.gray.w400 : KColors.palette.danger.w400
|
|
78
|
+
}
|
|
79
|
+
onPress={isMuted ? handleUnmutePress : handleMutePress}
|
|
80
|
+
>
|
|
81
|
+
<KImage.VectorIcons
|
|
82
|
+
name={isMuted ? 'bell-o' : 'bell-off-o'}
|
|
83
|
+
provider="DroppiiNew"
|
|
84
|
+
size={20}
|
|
85
|
+
color={KColors.white}
|
|
86
|
+
/>
|
|
87
|
+
<KLabel.Text
|
|
88
|
+
typo="Text2XsMedium"
|
|
89
|
+
color={KColors.white}
|
|
90
|
+
marginT="0.25rem"
|
|
91
|
+
textAlign="center"
|
|
92
|
+
>
|
|
93
|
+
{isMuted ? trans('chat:unmute_action') : trans('chat:mute_action')}
|
|
94
|
+
</KLabel.Text>
|
|
95
|
+
</KContainer.Touchable>
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
MuteThread.displayName = 'MuteThread';
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { memo, useCallback, useMemo } from 'react';
|
|
2
2
|
import { type GestureResponderEvent } from 'react-native';
|
|
3
|
+
import ReanimatedSwipeable from 'react-native-gesture-handler/ReanimatedSwipeable';
|
|
4
|
+
import type { SwipeableMethods } from 'react-native-gesture-handler/ReanimatedSwipeable';
|
|
3
5
|
import { KContainer, KImage, KLabel, KColors } from '@droppii/libs';
|
|
4
6
|
import { AvatarSection } from './AvatarSection';
|
|
5
7
|
import { NamePrefixIcon } from './NamePrefixIcon';
|
|
@@ -7,7 +9,11 @@ import { UnreadBadge } from './UnreadBadge';
|
|
|
7
9
|
import { formatTimestamp } from '../../utils/dateTimeUtils';
|
|
8
10
|
import { getLastMessageText } from '../../utils/messageUtils';
|
|
9
11
|
import { useConversation, useUserStore } from '../../store';
|
|
10
|
-
import
|
|
12
|
+
import {
|
|
13
|
+
MessageReceiveOptType,
|
|
14
|
+
type MessageItem,
|
|
15
|
+
} from '@droppii/openim-rn-client-sdk';
|
|
16
|
+
import { MuteThread } from './MuteThread';
|
|
11
17
|
|
|
12
18
|
interface ThreadCardProps {
|
|
13
19
|
item: string;
|
|
@@ -15,18 +21,19 @@ interface ThreadCardProps {
|
|
|
15
21
|
}
|
|
16
22
|
|
|
17
23
|
const ThreadCard = memo(({ item, onPress }: ThreadCardProps) => {
|
|
18
|
-
const
|
|
24
|
+
const conversation = useConversation(item);
|
|
19
25
|
|
|
20
26
|
const {
|
|
21
27
|
peerType,
|
|
22
28
|
showName,
|
|
23
29
|
faceURL,
|
|
24
30
|
unreadCount = 0,
|
|
25
|
-
recvMsgOpt,
|
|
31
|
+
recvMsgOpt = MessageReceiveOptType.Normal,
|
|
26
32
|
isPinned,
|
|
33
|
+
isNotInGroup,
|
|
27
34
|
latestMsgSendTime,
|
|
28
35
|
latestMsg,
|
|
29
|
-
} =
|
|
36
|
+
} = conversation || {};
|
|
30
37
|
|
|
31
38
|
const latestMsgData: MessageItem = useMemo(() => {
|
|
32
39
|
let result = null;
|
|
@@ -40,7 +47,7 @@ const ThreadCard = memo(({ item, onPress }: ThreadCardProps) => {
|
|
|
40
47
|
|
|
41
48
|
const fullName = showName ?? '';
|
|
42
49
|
const hasUnread = unreadCount > 0;
|
|
43
|
-
const isMuted =
|
|
50
|
+
const isMuted = recvMsgOpt !== MessageReceiveOptType.Normal;
|
|
44
51
|
const timestamp = formatTimestamp(
|
|
45
52
|
latestMsgSendTime ?? latestMsgData?.sendTime ?? null
|
|
46
53
|
);
|
|
@@ -48,7 +55,7 @@ const ThreadCard = memo(({ item, onPress }: ThreadCardProps) => {
|
|
|
48
55
|
const lastMessageText = getLastMessageText(
|
|
49
56
|
latestMsgData,
|
|
50
57
|
currentUserId,
|
|
51
|
-
|
|
58
|
+
conversation
|
|
52
59
|
);
|
|
53
60
|
|
|
54
61
|
const handlePress = useCallback(
|
|
@@ -58,79 +65,105 @@ const ThreadCard = memo(({ item, onPress }: ThreadCardProps) => {
|
|
|
58
65
|
[item, onPress]
|
|
59
66
|
);
|
|
60
67
|
|
|
68
|
+
const renderRightActions = useCallback(
|
|
69
|
+
(
|
|
70
|
+
_progress: unknown,
|
|
71
|
+
_translation: unknown,
|
|
72
|
+
swipeableMethods: SwipeableMethods
|
|
73
|
+
) => (
|
|
74
|
+
<>
|
|
75
|
+
<KContainer.VisibleView visible={!isNotInGroup}>
|
|
76
|
+
<MuteThread
|
|
77
|
+
conversation={conversation}
|
|
78
|
+
isMuted={isMuted}
|
|
79
|
+
swipeableMethods={swipeableMethods}
|
|
80
|
+
/>
|
|
81
|
+
</KContainer.VisibleView>
|
|
82
|
+
</>
|
|
83
|
+
),
|
|
84
|
+
[isMuted, conversation, isNotInGroup]
|
|
85
|
+
);
|
|
86
|
+
|
|
61
87
|
return (
|
|
62
|
-
<
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
paddingV="0.75rem"
|
|
67
|
-
onPress={handlePress}
|
|
68
|
-
activeOpacity={0.7}
|
|
88
|
+
<ReanimatedSwipeable
|
|
89
|
+
friction={2}
|
|
90
|
+
rightThreshold={40}
|
|
91
|
+
renderRightActions={renderRightActions}
|
|
69
92
|
>
|
|
70
|
-
<
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
93
|
+
<KContainer.Touchable
|
|
94
|
+
row
|
|
95
|
+
alignItems="center"
|
|
96
|
+
paddingH="0.75rem"
|
|
97
|
+
paddingV="0.75rem"
|
|
98
|
+
onPress={handlePress}
|
|
99
|
+
activeOpacity={1}
|
|
100
|
+
background={KColors.white}
|
|
101
|
+
>
|
|
102
|
+
<AvatarSection
|
|
103
|
+
avatar={faceURL ?? null}
|
|
104
|
+
fullName={fullName}
|
|
105
|
+
peerType={peerType}
|
|
106
|
+
/>
|
|
75
107
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
<KLabel.Text
|
|
82
|
-
typo={hasUnread ? 'TextMdBold' : 'TextMdNormal'}
|
|
83
|
-
numberOfLines={1}
|
|
84
|
-
color={KColors.black}
|
|
85
|
-
flex
|
|
86
|
-
>
|
|
87
|
-
{fullName}
|
|
88
|
-
</KLabel.Text>
|
|
89
|
-
<KContainer.VisibleView visible={isMuted}>
|
|
90
|
-
<KContainer.View marginL="0.25rem">
|
|
91
|
-
<KImage.VectorIcons
|
|
92
|
-
name="bell-off"
|
|
93
|
-
provider="MaterialCommunityIcons"
|
|
94
|
-
size={16}
|
|
95
|
-
color={KColors.palette.gray.w500}
|
|
96
|
-
/>
|
|
97
|
-
</KContainer.View>
|
|
98
|
-
</KContainer.VisibleView>
|
|
99
|
-
<KContainer.VisibleView visible={Boolean(timestamp)}>
|
|
108
|
+
{/* Chat-Content */}
|
|
109
|
+
<KContainer.View flex marginL="0.5rem" paddingB={2}>
|
|
110
|
+
{/* Row-Title */}
|
|
111
|
+
<KContainer.View row alignItems="center">
|
|
112
|
+
<NamePrefixIcon peerType={peerType} />
|
|
100
113
|
<KLabel.Text
|
|
101
|
-
typo=
|
|
102
|
-
|
|
103
|
-
|
|
114
|
+
typo={hasUnread ? 'TextMdBold' : 'TextMdNormal'}
|
|
115
|
+
numberOfLines={1}
|
|
116
|
+
color={KColors.black}
|
|
117
|
+
flex
|
|
104
118
|
>
|
|
105
|
-
{
|
|
119
|
+
{fullName}
|
|
106
120
|
</KLabel.Text>
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
<KContainer.VisibleView visible={Boolean(isPinned)}>
|
|
121
|
-
<KContainer.View marginL="0.5rem">
|
|
122
|
-
<KImage.VectorIcons
|
|
123
|
-
name="pin-outline"
|
|
124
|
-
provider="MaterialCommunityIcons"
|
|
125
|
-
size={14}
|
|
121
|
+
<KContainer.VisibleView visible={isMuted}>
|
|
122
|
+
<KContainer.View marginL="0.25rem">
|
|
123
|
+
<KImage.VectorIcons
|
|
124
|
+
name="bell-off"
|
|
125
|
+
provider="MaterialCommunityIcons"
|
|
126
|
+
size={16}
|
|
127
|
+
color={KColors.palette.gray.w500}
|
|
128
|
+
/>
|
|
129
|
+
</KContainer.View>
|
|
130
|
+
</KContainer.VisibleView>
|
|
131
|
+
<KContainer.VisibleView visible={Boolean(timestamp)}>
|
|
132
|
+
<KLabel.Text
|
|
133
|
+
typo="TextXsNormal"
|
|
126
134
|
color={KColors.palette.gray.w400}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
135
|
+
marginL="0.25rem"
|
|
136
|
+
>
|
|
137
|
+
{timestamp}
|
|
138
|
+
</KLabel.Text>
|
|
139
|
+
</KContainer.VisibleView>
|
|
140
|
+
</KContainer.View>
|
|
141
|
+
|
|
142
|
+
{/* In-Text */}
|
|
143
|
+
<KContainer.View row alignItems="center">
|
|
144
|
+
<KLabel.Text
|
|
145
|
+
typo={hasUnread ? 'TextNmMedium' : 'TextNmNormal'}
|
|
146
|
+
color={hasUnread ? KColors.black : KColors.gray.normal}
|
|
147
|
+
numberOfLines={1}
|
|
148
|
+
flex
|
|
149
|
+
>
|
|
150
|
+
{lastMessageText}
|
|
151
|
+
</KLabel.Text>
|
|
152
|
+
<KContainer.VisibleView visible={Boolean(isPinned)}>
|
|
153
|
+
<KContainer.View marginL="0.5rem">
|
|
154
|
+
<KImage.VectorIcons
|
|
155
|
+
name="pin-outline"
|
|
156
|
+
provider="MaterialCommunityIcons"
|
|
157
|
+
size={14}
|
|
158
|
+
color={KColors.palette.gray.w400}
|
|
159
|
+
/>
|
|
160
|
+
</KContainer.View>
|
|
161
|
+
</KContainer.VisibleView>
|
|
162
|
+
<UnreadBadge count={unreadCount} />
|
|
163
|
+
</KContainer.View>
|
|
131
164
|
</KContainer.View>
|
|
132
|
-
</KContainer.
|
|
133
|
-
</
|
|
165
|
+
</KContainer.Touchable>
|
|
166
|
+
</ReanimatedSwipeable>
|
|
134
167
|
);
|
|
135
168
|
});
|
|
136
169
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import OpenIMSDK, {
|
|
3
|
+
MessageReceiveOptType,
|
|
4
|
+
} from '@droppii/openim-rn-client-sdk';
|
|
5
|
+
import type { ConversationItem } from '@droppii/openim-rn-client-sdk';
|
|
6
|
+
import { useConversationStore } from '../store';
|
|
7
|
+
|
|
8
|
+
export function useMuteConversation() {
|
|
9
|
+
const muteConversation = useCallback(
|
|
10
|
+
async (conversation?: ConversationItem) => {
|
|
11
|
+
if (conversation == null) return;
|
|
12
|
+
|
|
13
|
+
await OpenIMSDK.setConversationRecvMessageOpt({
|
|
14
|
+
conversationID: conversation.conversationID,
|
|
15
|
+
opt: MessageReceiveOptType.NotNotify,
|
|
16
|
+
});
|
|
17
|
+
useConversationStore
|
|
18
|
+
.getState()
|
|
19
|
+
.updateConversations([
|
|
20
|
+
{ ...conversation, recvMsgOpt: MessageReceiveOptType.NotNotify },
|
|
21
|
+
]);
|
|
22
|
+
},
|
|
23
|
+
[]
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
const unmuteConversation = useCallback(
|
|
27
|
+
async (conversation?: ConversationItem) => {
|
|
28
|
+
if (conversation == null) return;
|
|
29
|
+
|
|
30
|
+
await OpenIMSDK.setConversationRecvMessageOpt({
|
|
31
|
+
conversationID: conversation.conversationID,
|
|
32
|
+
opt: MessageReceiveOptType.Normal,
|
|
33
|
+
});
|
|
34
|
+
useConversationStore
|
|
35
|
+
.getState()
|
|
36
|
+
.updateConversations([
|
|
37
|
+
{ ...conversation, recvMsgOpt: MessageReceiveOptType.Normal },
|
|
38
|
+
]);
|
|
39
|
+
},
|
|
40
|
+
[]
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
return { muteConversation, unmuteConversation };
|
|
44
|
+
}
|
|
@@ -18,6 +18,7 @@ interface MessageToolboxMenuProps {
|
|
|
18
18
|
export const MessageToolboxMenu = memo(
|
|
19
19
|
({
|
|
20
20
|
showCopyMessage,
|
|
21
|
+
showCopyMessageLink,
|
|
21
22
|
showRetryMessage,
|
|
22
23
|
showRevokeMessage,
|
|
23
24
|
onCopyMessage,
|
|
@@ -39,8 +40,7 @@ export const MessageToolboxMenu = memo(
|
|
|
39
40
|
icon="link-o"
|
|
40
41
|
color={KColors.gray.dark}
|
|
41
42
|
label={trans('chat:copy_message_link')}
|
|
42
|
-
|
|
43
|
-
visible={false}
|
|
43
|
+
visible={showCopyMessageLink}
|
|
44
44
|
onPress={onCopyMessageLink}
|
|
45
45
|
/>
|
|
46
46
|
|
|
@@ -24,8 +24,8 @@ const isCopyMessageSupported = (message: DMessageItem): boolean =>
|
|
|
24
24
|
COPYABLE_TEXT_TYPES.includes(message.contentType);
|
|
25
25
|
|
|
26
26
|
// All message types are supported, as long as the message is eligible.
|
|
27
|
-
const isCopyMessageLinkSupported = (message: DMessageItem): boolean =>
|
|
28
|
-
|
|
27
|
+
// const isCopyMessageLinkSupported = (message: DMessageItem): boolean =>
|
|
28
|
+
// isEligibleForToolbox(message);
|
|
29
29
|
|
|
30
30
|
const isRetrySupported = (message: DMessageItem): boolean =>
|
|
31
31
|
message.status === MessageStatus.Failed;
|
|
@@ -60,13 +60,13 @@ export const getMessageToolboxItems = (
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
const showCopyMessage = isCopyMessageSupported(message);
|
|
63
|
-
const showCopyMessageLink = isCopyMessageLinkSupported(message);
|
|
63
|
+
// const showCopyMessageLink = isCopyMessageLinkSupported(message);
|
|
64
64
|
const showRetryMessage = isRetrySupported(message);
|
|
65
65
|
const showRevokeMessage = isRevokeMessageSupported(message, currentUserId);
|
|
66
66
|
|
|
67
67
|
return {
|
|
68
68
|
showCopyMessage,
|
|
69
|
-
showCopyMessageLink,
|
|
69
|
+
// showCopyMessageLink,
|
|
70
70
|
showRetryMessage,
|
|
71
71
|
showRevokeMessage,
|
|
72
72
|
};
|
|
@@ -41,6 +41,15 @@ const i18nKey: Record<string, string> = {
|
|
|
41
41
|
'msg_type_link': '[Liên kết]',
|
|
42
42
|
'msg_type_revoke': 'Đã thu hồi tin nhắn',
|
|
43
43
|
'chat:revoked_by_sender': '{{sender}} đã thu hồi tin nhắn',
|
|
44
|
+
'chat:mute_action': 'Tắt thông báo',
|
|
45
|
+
'chat:unmute_action': 'Bật thông báo',
|
|
46
|
+
'chat:mute_confirm_title': 'Tắt thông báo',
|
|
47
|
+
'chat:mute_confirm_desc':
|
|
48
|
+
'Bạn có thể bỏ lỡ tin nhắn quan trọng nếu tắt thông báo! Bạn có chắc chắn muốn tắt thông báo?',
|
|
49
|
+
'chat:mute_confirm_primary': 'Tắt thông báo',
|
|
50
|
+
'chat:mute_confirm_secondary': 'Quay lại',
|
|
51
|
+
'chat:mute_toast_success': 'Đã tắt thông báo',
|
|
52
|
+
'chat:unmute_toast_success': 'Đã bật thông báo',
|
|
44
53
|
'start': 'Bắt đầu',
|
|
45
54
|
'restart': 'Bắt đầu lại',
|
|
46
55
|
};
|