@sendbird/uikit-react-native 2.4.2 → 2.5.0-rc.0
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/commonjs/components/ChannelMessageList/index.js +319 -0
- package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -0
- package/lib/commonjs/components/ChatFlatList.js +30 -50
- package/lib/commonjs/components/ChatFlatList.js.map +1 -1
- package/lib/commonjs/components/MessageSearchResultItem.js +132 -0
- package/lib/commonjs/components/MessageSearchResultItem.js.map +1 -0
- package/lib/commonjs/components/ScrollToBottomButton.js +1 -1
- package/lib/commonjs/components/ScrollToBottomButton.js.map +1 -1
- package/lib/commonjs/constants.js +6 -2
- package/lib/commonjs/constants.js.map +1 -1
- package/lib/commonjs/containers/GroupChannelPreviewContainer.js +2 -2
- package/lib/commonjs/containers/GroupChannelPreviewContainer.js.map +1 -1
- package/lib/commonjs/containers/SendbirdUIKitContainer.js +4 -2
- package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
- package/lib/commonjs/contexts/SendbirdChatCtx.js +4 -2
- package/lib/commonjs/contexts/SendbirdChatCtx.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelHeader.js +4 -2
- package/lib/commonjs/domain/groupChannel/component/GroupChannelHeader.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +84 -301
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelSuggestedMentionList.js +2 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelSuggestedMentionList.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/module/moduleContext.js +9 -2
- package/lib/commonjs/domain/groupChannel/module/moduleContext.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
- package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +18 -4
- package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
- package/lib/commonjs/domain/groupChannelSettings/types.js.map +1 -1
- package/lib/commonjs/domain/messageSearch/component/MessageSearchHeader.js +105 -0
- package/lib/commonjs/domain/messageSearch/component/MessageSearchHeader.js.map +1 -0
- package/lib/commonjs/domain/messageSearch/component/MessageSearchList.js +40 -0
- package/lib/commonjs/domain/messageSearch/component/MessageSearchList.js.map +1 -0
- package/lib/commonjs/domain/messageSearch/component/MessageSearchStatusEmpty.js +22 -0
- package/lib/commonjs/domain/messageSearch/component/MessageSearchStatusEmpty.js.map +1 -0
- package/lib/commonjs/domain/messageSearch/component/MessageSearchStatusError.js +26 -0
- package/lib/commonjs/domain/messageSearch/component/MessageSearchStatusError.js.map +1 -0
- package/lib/commonjs/domain/messageSearch/component/MessageSearchStatusLoading.js +22 -0
- package/lib/commonjs/domain/messageSearch/component/MessageSearchStatusLoading.js.map +1 -0
- package/lib/commonjs/domain/messageSearch/index.js +62 -0
- package/lib/commonjs/domain/messageSearch/index.js.map +1 -0
- package/lib/commonjs/domain/messageSearch/module/createMessageSearchModule.js +36 -0
- package/lib/commonjs/domain/messageSearch/module/createMessageSearchModule.js.map +1 -0
- package/lib/commonjs/domain/messageSearch/module/moduleContext.js +25 -0
- package/lib/commonjs/domain/messageSearch/module/moduleContext.js.map +1 -0
- package/lib/commonjs/domain/messageSearch/types.js +6 -0
- package/lib/commonjs/domain/messageSearch/types.js.map +1 -0
- package/lib/commonjs/domain/openChannel/component/OpenChannelMessageList.js +38 -279
- package/lib/commonjs/domain/openChannel/component/OpenChannelMessageList.js.map +1 -1
- package/lib/commonjs/domain/openChannel/module/moduleContext.js +9 -2
- package/lib/commonjs/domain/openChannel/module/moduleContext.js.map +1 -1
- package/lib/commonjs/domain/openChannel/types.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelFragment.js +107 -15
- package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelSettingsFragment.js +2 -0
- package/lib/commonjs/fragments/createGroupChannelSettingsFragment.js.map +1 -1
- package/lib/commonjs/fragments/createMessageSearchFragment.js +145 -0
- package/lib/commonjs/fragments/createMessageSearchFragment.js.map +1 -0
- package/lib/commonjs/fragments/createOpenChannelFragment.js +40 -8
- package/lib/commonjs/fragments/createOpenChannelFragment.js.map +1 -1
- package/lib/commonjs/hooks/useMentionSuggestion.js +17 -0
- package/lib/commonjs/hooks/useMentionSuggestion.js.map +1 -1
- package/lib/commonjs/index.js +60 -40
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/localization/StringSet.type.js.map +1 -1
- package/lib/commonjs/localization/createBaseStringSet.js +33 -20
- package/lib/commonjs/localization/createBaseStringSet.js.map +1 -1
- package/lib/commonjs/utils/pubsub.js +21 -0
- package/lib/commonjs/utils/pubsub.js.map +1 -0
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/components/ChannelMessageList/index.js +311 -0
- package/lib/module/components/ChannelMessageList/index.js.map +1 -0
- package/lib/module/components/ChatFlatList.js +32 -52
- package/lib/module/components/ChatFlatList.js.map +1 -1
- package/lib/module/components/MessageSearchResultItem.js +124 -0
- package/lib/module/components/MessageSearchResultItem.js.map +1 -0
- package/lib/module/components/ScrollToBottomButton.js +1 -1
- package/lib/module/components/ScrollToBottomButton.js.map +1 -1
- package/lib/module/constants.js +3 -1
- package/lib/module/constants.js.map +1 -1
- package/lib/module/containers/GroupChannelPreviewContainer.js +2 -2
- package/lib/module/containers/GroupChannelPreviewContainer.js.map +1 -1
- package/lib/module/containers/SendbirdUIKitContainer.js +4 -2
- package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
- package/lib/module/contexts/SendbirdChatCtx.js +4 -2
- package/lib/module/contexts/SendbirdChatCtx.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelHeader.js +4 -2
- package/lib/module/domain/groupChannel/component/GroupChannelHeader.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +88 -305
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelSuggestedMentionList.js +2 -0
- package/lib/module/domain/groupChannel/component/GroupChannelSuggestedMentionList.js.map +1 -1
- package/lib/module/domain/groupChannel/module/moduleContext.js +9 -2
- package/lib/module/domain/groupChannel/module/moduleContext.js.map +1 -1
- package/lib/module/domain/groupChannel/types.js.map +1 -1
- package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +18 -4
- package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
- package/lib/module/domain/groupChannelSettings/types.js.map +1 -1
- package/lib/module/domain/messageSearch/component/MessageSearchHeader.js +96 -0
- package/lib/module/domain/messageSearch/component/MessageSearchHeader.js.map +1 -0
- package/lib/module/domain/messageSearch/component/MessageSearchList.js +32 -0
- package/lib/module/domain/messageSearch/component/MessageSearchList.js.map +1 -0
- package/lib/module/domain/messageSearch/component/MessageSearchStatusEmpty.js +14 -0
- package/lib/module/domain/messageSearch/component/MessageSearchStatusEmpty.js.map +1 -0
- package/lib/module/domain/messageSearch/component/MessageSearchStatusError.js +18 -0
- package/lib/module/domain/messageSearch/component/MessageSearchStatusError.js.map +1 -0
- package/lib/module/domain/messageSearch/component/MessageSearchStatusLoading.js +14 -0
- package/lib/module/domain/messageSearch/component/MessageSearchStatusLoading.js.map +1 -0
- package/lib/module/domain/messageSearch/index.js +8 -0
- package/lib/module/domain/messageSearch/index.js.map +1 -0
- package/lib/module/domain/messageSearch/module/createMessageSearchModule.js +28 -0
- package/lib/module/domain/messageSearch/module/createMessageSearchModule.js.map +1 -0
- package/lib/module/domain/messageSearch/module/moduleContext.js +14 -0
- package/lib/module/domain/messageSearch/module/moduleContext.js.map +1 -0
- package/lib/module/domain/messageSearch/types.js +2 -0
- package/lib/module/domain/messageSearch/types.js.map +1 -0
- package/lib/module/domain/openChannel/component/OpenChannelMessageList.js +40 -281
- package/lib/module/domain/openChannel/component/OpenChannelMessageList.js.map +1 -1
- package/lib/module/domain/openChannel/module/moduleContext.js +9 -2
- package/lib/module/domain/openChannel/module/moduleContext.js.map +1 -1
- package/lib/module/domain/openChannel/types.js.map +1 -1
- package/lib/module/fragments/createGroupChannelFragment.js +109 -17
- package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/module/fragments/createGroupChannelSettingsFragment.js +2 -0
- package/lib/module/fragments/createGroupChannelSettingsFragment.js.map +1 -1
- package/lib/module/fragments/createMessageSearchFragment.js +135 -0
- package/lib/module/fragments/createMessageSearchFragment.js.map +1 -0
- package/lib/module/fragments/createOpenChannelFragment.js +41 -9
- package/lib/module/fragments/createOpenChannelFragment.js.map +1 -1
- package/lib/module/hooks/useMentionSuggestion.js +18 -1
- package/lib/module/hooks/useMentionSuggestion.js.map +1 -1
- package/lib/module/index.js +2 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/localization/StringSet.type.js.map +1 -1
- package/lib/module/localization/createBaseStringSet.js +34 -21
- package/lib/module/localization/createBaseStringSet.js.map +1 -1
- package/lib/module/utils/pubsub.js +14 -0
- package/lib/module/utils/pubsub.js.map +1 -0
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/components/ChannelMessageList/index.d.ts +55 -0
- package/lib/typescript/src/components/ChatFlatList.d.ts +7 -8
- package/lib/typescript/src/components/MessageRenderer/index.d.ts +4 -0
- package/lib/typescript/src/components/MessageSearchResultItem.d.ts +2 -0
- package/lib/typescript/src/components/OpenChannelMessageRenderer/index.d.ts +1 -0
- package/lib/typescript/src/components/ScrollToBottomButton.d.ts +1 -1
- package/lib/typescript/src/constants.d.ts +3 -1
- package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +2 -1
- package/lib/typescript/src/contexts/SendbirdChatCtx.d.ts +3 -1
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelHeader.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +3 -32
- package/lib/typescript/src/domain/groupChannel/types.d.ts +23 -35
- package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannelSettings/types.d.ts +2 -0
- package/lib/typescript/src/domain/messageSearch/component/MessageSearchHeader.d.ts +3 -0
- package/lib/typescript/src/domain/messageSearch/component/MessageSearchList.d.ts +3 -0
- package/lib/typescript/src/domain/messageSearch/component/MessageSearchStatusEmpty.d.ts +2 -0
- package/lib/typescript/src/domain/messageSearch/component/MessageSearchStatusError.d.ts +3 -0
- package/lib/typescript/src/domain/messageSearch/component/MessageSearchStatusLoading.d.ts +2 -0
- package/lib/typescript/src/domain/messageSearch/index.d.ts +7 -0
- package/lib/typescript/src/domain/messageSearch/module/createMessageSearchModule.d.ts +3 -0
- package/lib/typescript/src/domain/messageSearch/module/moduleContext.d.ts +3 -0
- package/lib/typescript/src/domain/messageSearch/types.d.ts +53 -0
- package/lib/typescript/src/domain/openChannel/component/OpenChannelMessageList.d.ts +1 -37
- package/lib/typescript/src/domain/openChannel/types.d.ts +17 -36
- package/lib/typescript/src/fragments/createMessageSearchFragment.d.ts +3 -0
- package/lib/typescript/src/hooks/useMentionSuggestion.d.ts +3 -2
- package/lib/typescript/src/index.d.ts +2 -0
- package/lib/typescript/src/localization/StringSet.type.d.ts +17 -3
- package/lib/typescript/src/utils/pubsub.d.ts +6 -0
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +8 -7
- package/src/components/ChannelMessageList/index.tsx +392 -0
- package/src/components/ChatFlatList.tsx +33 -51
- package/src/components/MessageSearchResultItem.tsx +125 -0
- package/src/components/ScrollToBottomButton.tsx +3 -4
- package/src/constants.ts +3 -1
- package/src/containers/GroupChannelPreviewContainer.tsx +2 -2
- package/src/containers/SendbirdUIKitContainer.tsx +2 -0
- package/src/contexts/SendbirdChatCtx.tsx +7 -1
- package/src/domain/groupChannel/component/GroupChannelHeader.tsx +9 -3
- package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +73 -316
- package/src/domain/groupChannel/component/GroupChannelSuggestedMentionList.tsx +2 -1
- package/src/domain/groupChannel/module/moduleContext.tsx +10 -2
- package/src/domain/groupChannel/types.ts +49 -38
- package/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.tsx +29 -13
- package/src/domain/groupChannelSettings/types.ts +2 -0
- package/src/domain/messageSearch/component/MessageSearchHeader.tsx +98 -0
- package/src/domain/messageSearch/component/MessageSearchList.tsx +26 -0
- package/src/domain/messageSearch/component/MessageSearchStatusEmpty.tsx +15 -0
- package/src/domain/messageSearch/component/MessageSearchStatusError.tsx +16 -0
- package/src/domain/messageSearch/component/MessageSearchStatusLoading.tsx +15 -0
- package/src/domain/messageSearch/index.ts +7 -0
- package/src/domain/messageSearch/module/createMessageSearchModule.tsx +21 -0
- package/src/domain/messageSearch/module/moduleContext.tsx +16 -0
- package/src/domain/messageSearch/types.ts +55 -0
- package/src/domain/openChannel/component/OpenChannelMessageList.tsx +35 -303
- package/src/domain/openChannel/module/moduleContext.tsx +8 -2
- package/src/domain/openChannel/types.ts +40 -38
- package/src/fragments/createGroupChannelFragment.tsx +114 -17
- package/src/fragments/createGroupChannelSettingsFragment.tsx +2 -0
- package/src/fragments/createMessageSearchFragment.tsx +159 -0
- package/src/fragments/createOpenChannelFragment.tsx +48 -12
- package/src/hooks/useMentionSuggestion.ts +23 -3
- package/src/index.ts +3 -0
- package/src/localization/StringSet.type.ts +20 -2
- package/src/localization/createBaseStringSet.ts +22 -2
- package/src/utils/pubsub.ts +20 -0
- package/src/version.ts +0 -2
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
import React, { useMemo } from 'react';
|
|
1
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import { Animated, Easing } from 'react-native';
|
|
2
3
|
import { useGroupChannelMessages } from '@sendbird/uikit-chat-hooks';
|
|
3
|
-
import { NOOP, PASS, messageComparator, useFreshCallback } from '@sendbird/uikit-utils';
|
|
4
|
+
import { NOOP, PASS, messageComparator, useFreshCallback, useRefTracker } from '@sendbird/uikit-utils';
|
|
4
5
|
import MessageRenderer from '../components/MessageRenderer';
|
|
5
6
|
import NewMessagesButton from '../components/NewMessagesButton';
|
|
6
7
|
import ScrollToBottomButton from '../components/ScrollToBottomButton';
|
|
7
8
|
import StatusComposition from '../components/StatusComposition';
|
|
9
|
+
import { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../constants';
|
|
8
10
|
import createGroupChannelModule from '../domain/groupChannel/module/createGroupChannelModule';
|
|
9
11
|
import { useSendbirdChat } from '../hooks/useContext';
|
|
12
|
+
import pubsub from '../utils/pubsub';
|
|
10
13
|
const createGroupChannelFragment = initModule => {
|
|
11
14
|
const GroupChannelModule = createGroupChannelModule(initModule);
|
|
12
15
|
return _ref => {
|
|
13
16
|
let {
|
|
17
|
+
searchItem,
|
|
14
18
|
renderNewMessagesButton = props => /*#__PURE__*/React.createElement(NewMessagesButton, props),
|
|
15
19
|
renderScrollToBottomButton = props => /*#__PURE__*/React.createElement(ScrollToBottomButton, props),
|
|
16
20
|
renderMessage,
|
|
@@ -36,29 +40,46 @@ const createGroupChannelFragment = initModule => {
|
|
|
36
40
|
sdk,
|
|
37
41
|
currentUser
|
|
38
42
|
} = useSendbirdChat();
|
|
43
|
+
const [internalSearchItem, setInternalSearchItem] = useState(searchItem);
|
|
44
|
+
const navigateFromMessageSearch = useCallback(() => Boolean(searchItem), []);
|
|
45
|
+
const [groupChannelPubSub] = useState(() => pubsub());
|
|
46
|
+
const [scrolledAwayFromBottom, setScrolledAwayFromBottom] = useState(false);
|
|
47
|
+
const scrolledAwayFromBottomRef = useRefTracker(scrolledAwayFromBottom);
|
|
39
48
|
const {
|
|
49
|
+
loading,
|
|
40
50
|
messages,
|
|
41
|
-
|
|
42
|
-
|
|
51
|
+
newMessages,
|
|
52
|
+
resetNewMessages,
|
|
43
53
|
next,
|
|
44
54
|
prev,
|
|
55
|
+
hasNext,
|
|
45
56
|
sendFileMessage,
|
|
46
57
|
sendUserMessage,
|
|
47
58
|
updateFileMessage,
|
|
48
59
|
updateUserMessage,
|
|
49
60
|
resendMessage,
|
|
50
61
|
deleteMessage,
|
|
51
|
-
|
|
62
|
+
resetWithStartingPoint
|
|
52
63
|
} = useGroupChannelMessages(sdk, channel, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId, {
|
|
53
64
|
collectionCreator,
|
|
54
65
|
queryCreator,
|
|
55
66
|
sortComparator,
|
|
56
67
|
onChannelDeleted,
|
|
57
|
-
enableCollectionWithoutLocalCache: !queryCreator
|
|
68
|
+
enableCollectionWithoutLocalCache: !queryCreator,
|
|
69
|
+
shouldCountNewMessages: () => scrolledAwayFromBottomRef.current,
|
|
70
|
+
onMessagesReceived(messages) {
|
|
71
|
+
groupChannelPubSub.publish({
|
|
72
|
+
type: 'MESSAGES_RECEIVED',
|
|
73
|
+
data: {
|
|
74
|
+
messages
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
startingPoint: internalSearchItem === null || internalSearchItem === void 0 ? void 0 : internalSearchItem.startingPoint
|
|
58
79
|
});
|
|
80
|
+
const MessageComponent = useCallback(withFocusingAnimation(renderMessage ? props => /*#__PURE__*/React.createElement(React.Fragment, null, renderMessage(props)) : MessageRenderer), [renderMessage]);
|
|
59
81
|
const _renderMessage = useFreshCallback(props => {
|
|
60
|
-
|
|
61
|
-
return /*#__PURE__*/React.createElement(MessageRenderer, props);
|
|
82
|
+
return /*#__PURE__*/React.createElement(MessageComponent, props);
|
|
62
83
|
});
|
|
63
84
|
const memoizedFlatListProps = useMemo(() => ({
|
|
64
85
|
ListEmptyComponent: /*#__PURE__*/React.createElement(GroupChannelModule.StatusEmpty, null),
|
|
@@ -66,14 +87,36 @@ const createGroupChannelFragment = initModule => {
|
|
|
66
87
|
flexGrow: 1
|
|
67
88
|
},
|
|
68
89
|
...flatListProps
|
|
69
|
-
}), [
|
|
90
|
+
}), [flatListProps]);
|
|
91
|
+
const onResetMessageList = useCallback(callback => {
|
|
92
|
+
resetWithStartingPoint(Number.MAX_SAFE_INTEGER, callback);
|
|
93
|
+
setInternalSearchItem(undefined);
|
|
94
|
+
}, []);
|
|
95
|
+
const onPending = message => {
|
|
96
|
+
groupChannelPubSub.publish({
|
|
97
|
+
type: 'MESSAGE_SENT_PENDING',
|
|
98
|
+
data: {
|
|
99
|
+
message
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
const onSent = message => {
|
|
104
|
+
groupChannelPubSub.publish({
|
|
105
|
+
type: 'MESSAGE_SENT_SUCCESS',
|
|
106
|
+
data: {
|
|
107
|
+
message
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
};
|
|
70
111
|
const onPressSendUserMessage = useFreshCallback(async params => {
|
|
71
112
|
const processedParams = await onBeforeSendUserMessage(params);
|
|
72
|
-
await sendUserMessage(processedParams);
|
|
113
|
+
const message = await sendUserMessage(processedParams, onPending);
|
|
114
|
+
onSent(message);
|
|
73
115
|
});
|
|
74
116
|
const onPressSendFileMessage = useFreshCallback(async params => {
|
|
75
117
|
const processedParams = await onBeforeSendFileMessage(params);
|
|
76
|
-
await sendFileMessage(processedParams);
|
|
118
|
+
const message = await sendFileMessage(processedParams, onPending);
|
|
119
|
+
onSent(message);
|
|
77
120
|
});
|
|
78
121
|
const onPressUpdateUserMessage = useFreshCallback(async (message, params) => {
|
|
79
122
|
const processedParams = await onBeforeUpdateUserMessage(params);
|
|
@@ -83,13 +126,18 @@ const createGroupChannelFragment = initModule => {
|
|
|
83
126
|
const processedParams = await onBeforeUpdateFileMessage(params);
|
|
84
127
|
await updateFileMessage(message.messageId, processedParams);
|
|
85
128
|
});
|
|
129
|
+
const onScrolledAwayFromBottom = useFreshCallback(value => {
|
|
130
|
+
if (!value) resetNewMessages();
|
|
131
|
+
setScrolledAwayFromBottom(value);
|
|
132
|
+
});
|
|
86
133
|
|
|
87
134
|
/** @deprecated **/
|
|
88
135
|
const onSendFileMessage = useFreshCallback(async file => {
|
|
89
136
|
const processedParams = await onBeforeSendFileMessage({
|
|
90
137
|
file
|
|
91
138
|
});
|
|
92
|
-
await sendFileMessage(processedParams);
|
|
139
|
+
const message = await sendFileMessage(processedParams, onPending);
|
|
140
|
+
onSent(message);
|
|
93
141
|
});
|
|
94
142
|
/** @deprecated **/
|
|
95
143
|
const onSendUserMessage = useFreshCallback(async (text, mention) => {
|
|
@@ -99,7 +147,8 @@ const createGroupChannelFragment = initModule => {
|
|
|
99
147
|
mentionedMessageTemplate: mention === null || mention === void 0 ? void 0 : mention.messageTemplate,
|
|
100
148
|
mentionType: mention === null || mention === void 0 ? void 0 : mention.type
|
|
101
149
|
});
|
|
102
|
-
await sendUserMessage(processedParams);
|
|
150
|
+
const message = await sendUserMessage(processedParams, onPending);
|
|
151
|
+
onSent(message);
|
|
103
152
|
});
|
|
104
153
|
/** @deprecated **/
|
|
105
154
|
const onUpdateFileMessage = useFreshCallback(async (editedFile, message) => {
|
|
@@ -120,9 +169,11 @@ const createGroupChannelFragment = initModule => {
|
|
|
120
169
|
});
|
|
121
170
|
return /*#__PURE__*/React.createElement(GroupChannelModule.Provider, {
|
|
122
171
|
channel: channel,
|
|
172
|
+
groupChannelPubSub: groupChannelPubSub,
|
|
123
173
|
enableTypingIndicator: enableTypingIndicator,
|
|
124
174
|
keyboardAvoidOffset: keyboardAvoidOffset
|
|
125
175
|
}, /*#__PURE__*/React.createElement(GroupChannelModule.Header, {
|
|
176
|
+
shouldHideRight: navigateFromMessageSearch,
|
|
126
177
|
onPressHeaderLeft: onPressHeaderLeft,
|
|
127
178
|
onPressHeaderRight: onPressHeaderRight
|
|
128
179
|
}), /*#__PURE__*/React.createElement(StatusComposition, {
|
|
@@ -130,21 +181,27 @@ const createGroupChannelFragment = initModule => {
|
|
|
130
181
|
LoadingComponent: /*#__PURE__*/React.createElement(GroupChannelModule.StatusLoading, null)
|
|
131
182
|
}, /*#__PURE__*/React.createElement(GroupChannelModule.MessageList, {
|
|
132
183
|
channel: channel,
|
|
184
|
+
searchItem: internalSearchItem,
|
|
185
|
+
onResetMessageList: onResetMessageList,
|
|
133
186
|
enableMessageGrouping: enableMessageGrouping,
|
|
134
187
|
currentUserId: currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId,
|
|
135
188
|
renderMessage: _renderMessage,
|
|
136
189
|
messages: messages,
|
|
137
|
-
|
|
138
|
-
newMessagesFromMembers: newMessagesFromMembers,
|
|
190
|
+
newMessages: newMessages,
|
|
139
191
|
onTopReached: prev,
|
|
140
192
|
onBottomReached: next,
|
|
193
|
+
hasNext: hasNext,
|
|
194
|
+
scrolledAwayFromBottom: scrolledAwayFromBottom,
|
|
195
|
+
onScrolledAwayFromBottom: onScrolledAwayFromBottom,
|
|
141
196
|
renderNewMessagesButton: renderNewMessagesButton,
|
|
142
197
|
renderScrollToBottomButton: renderScrollToBottomButton,
|
|
143
198
|
onResendFailedMessage: resendMessage,
|
|
144
199
|
onDeleteMessage: deleteMessage,
|
|
145
|
-
onPressImageMessage: onPressImageMessage,
|
|
146
200
|
onPressMediaMessage: onPressMediaMessage,
|
|
147
|
-
flatListProps: memoizedFlatListProps
|
|
201
|
+
flatListProps: memoizedFlatListProps,
|
|
202
|
+
nextMessages: newMessages,
|
|
203
|
+
newMessagesFromMembers: newMessages,
|
|
204
|
+
onPressImageMessage: onPressImageMessage
|
|
148
205
|
}), /*#__PURE__*/React.createElement(GroupChannelModule.Input, {
|
|
149
206
|
SuggestedMentionList: GroupChannelModule.SuggestedMentionList,
|
|
150
207
|
shouldRenderInput: shouldRenderInput(channel),
|
|
@@ -165,5 +222,40 @@ function shouldRenderInput(channel) {
|
|
|
165
222
|
}
|
|
166
223
|
return true;
|
|
167
224
|
}
|
|
225
|
+
function withFocusingAnimation(Component) {
|
|
226
|
+
return /*#__PURE__*/React.memo(props => {
|
|
227
|
+
const translateY = useRef(new Animated.Value(0)).current;
|
|
228
|
+
useEffect(() => {
|
|
229
|
+
if (props.focused) {
|
|
230
|
+
setTimeout(() => {
|
|
231
|
+
Animated.sequence([{
|
|
232
|
+
toValue: -10,
|
|
233
|
+
duration: 500
|
|
234
|
+
}, {
|
|
235
|
+
toValue: 0,
|
|
236
|
+
duration: 100
|
|
237
|
+
}, {
|
|
238
|
+
toValue: -10,
|
|
239
|
+
duration: 200
|
|
240
|
+
}, {
|
|
241
|
+
toValue: 0,
|
|
242
|
+
duration: 100
|
|
243
|
+
}].map(value => Animated.timing(translateY, {
|
|
244
|
+
...value,
|
|
245
|
+
useNativeDriver: true,
|
|
246
|
+
easing: Easing.inOut(Easing.ease)
|
|
247
|
+
}))).start();
|
|
248
|
+
}, MESSAGE_SEARCH_SAFE_SCROLL_DELAY + MESSAGE_FOCUS_ANIMATION_DELAY);
|
|
249
|
+
}
|
|
250
|
+
}, [props.focused]);
|
|
251
|
+
return /*#__PURE__*/React.createElement(Animated.View, {
|
|
252
|
+
style: {
|
|
253
|
+
transform: [{
|
|
254
|
+
translateY
|
|
255
|
+
}]
|
|
256
|
+
}
|
|
257
|
+
}, /*#__PURE__*/React.createElement(Component, props));
|
|
258
|
+
});
|
|
259
|
+
}
|
|
168
260
|
export default createGroupChannelFragment;
|
|
169
261
|
//# sourceMappingURL=createGroupChannelFragment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useMemo","useGroupChannelMessages","NOOP","PASS","messageComparator","useFreshCallback","MessageRenderer","NewMessagesButton","ScrollToBottomButton","StatusComposition","createGroupChannelModule","useSendbirdChat","createGroupChannelFragment","initModule","GroupChannelModule","_ref","renderNewMessagesButton","props","createElement","renderScrollToBottomButton","renderMessage","enableMessageGrouping","enableTypingIndicator","onPressHeaderLeft","onPressHeaderRight","onPressMediaMessage","onChannelDeleted","onBeforeSendUserMessage","onBeforeSendFileMessage","onBeforeUpdateUserMessage","onBeforeUpdateFileMessage","channel","keyboardAvoidOffset","queryCreator","collectionCreator","sortComparator","flatListProps","onPressImageMessage","sdk","currentUser","messages","nextMessages","newMessagesFromMembers","next","prev","sendFileMessage","sendUserMessage","updateFileMessage","updateUserMessage","resendMessage","deleteMessage","loading","userId","enableCollectionWithoutLocalCache","_renderMessage","memoizedFlatListProps","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","onPressSendUserMessage","params","processedParams","onPressSendFileMessage","onPressUpdateUserMessage","message","messageId","onPressUpdateFileMessage","onSendFileMessage","file","onSendUserMessage","text","mention","mentionedUserIds","userIds","mentionedMessageTemplate","messageTemplate","mentionType","type","onUpdateFileMessage","editedFile","onUpdateUserMessage","editedText","Provider","Header","LoadingComponent","StatusLoading","MessageList","currentUserId","onTopReached","onBottomReached","onResendFailedMessage","onDeleteMessage","Input","SuggestedMentionList","shouldRenderInput","isBroadcast","myRole"],"sources":["createGroupChannelFragment.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\n\nimport { useGroupChannelMessages } from '@sendbird/uikit-chat-hooks';\nimport { NOOP, PASS, SendbirdGroupChannel, messageComparator, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport MessageRenderer from '../components/MessageRenderer';\nimport NewMessagesButton from '../components/NewMessagesButton';\nimport ScrollToBottomButton from '../components/ScrollToBottomButton';\nimport StatusComposition from '../components/StatusComposition';\nimport createGroupChannelModule from '../domain/groupChannel/module/createGroupChannelModule';\nimport type { GroupChannelFragment, GroupChannelModule, GroupChannelProps } from '../domain/groupChannel/types';\nimport { useSendbirdChat } from '../hooks/useContext';\n\nconst createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): GroupChannelFragment => {\n const GroupChannelModule = createGroupChannelModule(initModule);\n\n return ({\n renderNewMessagesButton = (props) => <NewMessagesButton {...props} />,\n renderScrollToBottomButton = (props) => <ScrollToBottomButton {...props} />,\n renderMessage,\n enableMessageGrouping = true,\n enableTypingIndicator = true,\n onPressHeaderLeft = NOOP,\n onPressHeaderRight = NOOP,\n onPressMediaMessage = NOOP,\n onChannelDeleted = NOOP,\n onBeforeSendUserMessage = PASS,\n onBeforeSendFileMessage = PASS,\n onBeforeUpdateUserMessage = PASS,\n onBeforeUpdateFileMessage = PASS,\n channel,\n keyboardAvoidOffset,\n queryCreator,\n collectionCreator,\n sortComparator = messageComparator,\n flatListProps,\n onPressImageMessage,\n }) => {\n const { sdk, currentUser } = useSendbirdChat();\n\n const {\n messages,\n nextMessages,\n newMessagesFromMembers,\n next,\n prev,\n sendFileMessage,\n sendUserMessage,\n updateFileMessage,\n updateUserMessage,\n resendMessage,\n deleteMessage,\n loading,\n } = useGroupChannelMessages(sdk, channel, currentUser?.userId, {\n collectionCreator,\n queryCreator,\n sortComparator,\n onChannelDeleted,\n enableCollectionWithoutLocalCache: !queryCreator,\n });\n\n const _renderMessage: GroupChannelProps['MessageList']['renderMessage'] = useFreshCallback((props) => {\n if (renderMessage) return renderMessage(props);\n return <MessageRenderer {...props} />;\n });\n\n const memoizedFlatListProps = useMemo(\n () => ({\n ListEmptyComponent: <GroupChannelModule.StatusEmpty />,\n contentContainerStyle: { flexGrow: 1 },\n ...flatListProps,\n }),\n [loading, flatListProps],\n );\n\n const onPressSendUserMessage: GroupChannelProps['Input']['onPressSendUserMessage'] = useFreshCallback(\n async (params) => {\n const processedParams = await onBeforeSendUserMessage(params);\n await sendUserMessage(processedParams);\n },\n );\n const onPressSendFileMessage: GroupChannelProps['Input']['onPressSendFileMessage'] = useFreshCallback(\n async (params) => {\n const processedParams = await onBeforeSendFileMessage(params);\n await sendFileMessage(processedParams);\n },\n );\n const onPressUpdateUserMessage: GroupChannelProps['Input']['onPressUpdateUserMessage'] = useFreshCallback(\n async (message, params) => {\n const processedParams = await onBeforeUpdateUserMessage(params);\n await updateUserMessage(message.messageId, processedParams);\n },\n );\n const onPressUpdateFileMessage: GroupChannelProps['Input']['onPressUpdateFileMessage'] = useFreshCallback(\n async (message, params) => {\n const processedParams = await onBeforeUpdateFileMessage(params);\n await updateFileMessage(message.messageId, processedParams);\n },\n );\n\n /** @deprecated **/\n const onSendFileMessage: GroupChannelProps['Input']['onSendFileMessage'] = useFreshCallback(async (file) => {\n const processedParams = await onBeforeSendFileMessage({ file });\n await sendFileMessage(processedParams);\n });\n /** @deprecated **/\n const onSendUserMessage: GroupChannelProps['Input']['onSendUserMessage'] = useFreshCallback(\n async (text, mention) => {\n const processedParams = await onBeforeSendUserMessage({\n message: text,\n mentionedUserIds: mention?.userIds,\n mentionedMessageTemplate: mention?.messageTemplate,\n mentionType: mention?.type,\n });\n await sendUserMessage(processedParams);\n },\n );\n /** @deprecated **/\n const onUpdateFileMessage: GroupChannelProps['Input']['onUpdateFileMessage'] = useFreshCallback(\n async (editedFile, message) => {\n const processedParams = await onBeforeSendFileMessage({ file: editedFile });\n await updateFileMessage(message.messageId, processedParams);\n },\n );\n /** @deprecated **/\n const onUpdateUserMessage: GroupChannelProps['Input']['onUpdateUserMessage'] = useFreshCallback(\n async (editedText, message, mention) => {\n const processedParams = await onBeforeSendUserMessage({\n message: editedText,\n mentionedUserIds: mention?.userIds,\n mentionedMessageTemplate: mention?.messageTemplate,\n mentionType: mention?.type,\n });\n await updateUserMessage(message.messageId, processedParams);\n },\n );\n\n return (\n <GroupChannelModule.Provider\n channel={channel}\n enableTypingIndicator={enableTypingIndicator}\n keyboardAvoidOffset={keyboardAvoidOffset}\n >\n <GroupChannelModule.Header onPressHeaderLeft={onPressHeaderLeft} onPressHeaderRight={onPressHeaderRight} />\n <StatusComposition loading={loading} LoadingComponent={<GroupChannelModule.StatusLoading />}>\n <GroupChannelModule.MessageList\n channel={channel}\n enableMessageGrouping={enableMessageGrouping}\n currentUserId={currentUser?.userId}\n renderMessage={_renderMessage}\n messages={messages}\n nextMessages={nextMessages}\n newMessagesFromMembers={newMessagesFromMembers}\n onTopReached={prev}\n onBottomReached={next}\n renderNewMessagesButton={renderNewMessagesButton}\n renderScrollToBottomButton={renderScrollToBottomButton}\n onResendFailedMessage={resendMessage}\n onDeleteMessage={deleteMessage}\n onPressImageMessage={onPressImageMessage}\n onPressMediaMessage={onPressMediaMessage}\n flatListProps={memoizedFlatListProps}\n />\n <GroupChannelModule.Input\n SuggestedMentionList={GroupChannelModule.SuggestedMentionList}\n shouldRenderInput={shouldRenderInput(channel)}\n onPressSendUserMessage={onPressSendUserMessage}\n onPressSendFileMessage={onPressSendFileMessage}\n onPressUpdateUserMessage={onPressUpdateUserMessage}\n onPressUpdateFileMessage={onPressUpdateFileMessage}\n onSendFileMessage={onSendFileMessage}\n onSendUserMessage={onSendUserMessage}\n onUpdateFileMessage={onUpdateFileMessage}\n onUpdateUserMessage={onUpdateUserMessage}\n />\n </StatusComposition>\n </GroupChannelModule.Provider>\n );\n };\n};\n\nfunction shouldRenderInput(channel: SendbirdGroupChannel) {\n if (channel.isBroadcast) {\n return channel.myRole === 'operator';\n }\n\n return true;\n}\n\nexport default createGroupChannelFragment;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","Animated","Easing","useGroupChannelMessages","NOOP","PASS","messageComparator","useFreshCallback","useRefTracker","MessageRenderer","NewMessagesButton","ScrollToBottomButton","StatusComposition","MESSAGE_FOCUS_ANIMATION_DELAY","MESSAGE_SEARCH_SAFE_SCROLL_DELAY","createGroupChannelModule","useSendbirdChat","pubsub","createGroupChannelFragment","initModule","GroupChannelModule","_ref","searchItem","renderNewMessagesButton","props","createElement","renderScrollToBottomButton","renderMessage","enableMessageGrouping","enableTypingIndicator","onPressHeaderLeft","onPressHeaderRight","onPressMediaMessage","onChannelDeleted","onBeforeSendUserMessage","onBeforeSendFileMessage","onBeforeUpdateUserMessage","onBeforeUpdateFileMessage","channel","keyboardAvoidOffset","queryCreator","collectionCreator","sortComparator","flatListProps","onPressImageMessage","sdk","currentUser","internalSearchItem","setInternalSearchItem","navigateFromMessageSearch","Boolean","groupChannelPubSub","scrolledAwayFromBottom","setScrolledAwayFromBottom","scrolledAwayFromBottomRef","loading","messages","newMessages","resetNewMessages","next","prev","hasNext","sendFileMessage","sendUserMessage","updateFileMessage","updateUserMessage","resendMessage","deleteMessage","resetWithStartingPoint","userId","enableCollectionWithoutLocalCache","shouldCountNewMessages","current","onMessagesReceived","publish","type","data","startingPoint","MessageComponent","withFocusingAnimation","Fragment","_renderMessage","memoizedFlatListProps","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","onResetMessageList","callback","Number","MAX_SAFE_INTEGER","undefined","onPending","message","onSent","onPressSendUserMessage","params","processedParams","onPressSendFileMessage","onPressUpdateUserMessage","messageId","onPressUpdateFileMessage","onScrolledAwayFromBottom","value","onSendFileMessage","file","onSendUserMessage","text","mention","mentionedUserIds","userIds","mentionedMessageTemplate","messageTemplate","mentionType","onUpdateFileMessage","editedFile","onUpdateUserMessage","editedText","Provider","Header","shouldHideRight","LoadingComponent","StatusLoading","MessageList","currentUserId","onTopReached","onBottomReached","onResendFailedMessage","onDeleteMessage","nextMessages","newMessagesFromMembers","Input","SuggestedMentionList","shouldRenderInput","isBroadcast","myRole","Component","memo","translateY","Value","focused","setTimeout","sequence","toValue","duration","map","timing","useNativeDriver","easing","inOut","ease","start","View","style","transform"],"sources":["createGroupChannelFragment.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Animated, Easing } from 'react-native';\n\nimport { useGroupChannelMessages } from '@sendbird/uikit-chat-hooks';\nimport {\n NOOP,\n PASS,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdUserMessage,\n messageComparator,\n useFreshCallback,\n useRefTracker,\n} from '@sendbird/uikit-utils';\n\nimport MessageRenderer from '../components/MessageRenderer';\nimport NewMessagesButton from '../components/NewMessagesButton';\nimport ScrollToBottomButton from '../components/ScrollToBottomButton';\nimport StatusComposition from '../components/StatusComposition';\nimport { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../constants';\nimport createGroupChannelModule from '../domain/groupChannel/module/createGroupChannelModule';\nimport type {\n GroupChannelFragment,\n GroupChannelModule,\n GroupChannelProps,\n GroupChannelPubSubContextPayload,\n} from '../domain/groupChannel/types';\nimport { useSendbirdChat } from '../hooks/useContext';\nimport pubsub from '../utils/pubsub';\n\nconst createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): GroupChannelFragment => {\n const GroupChannelModule = createGroupChannelModule(initModule);\n\n return ({\n searchItem,\n renderNewMessagesButton = (props) => <NewMessagesButton {...props} />,\n renderScrollToBottomButton = (props) => <ScrollToBottomButton {...props} />,\n renderMessage,\n enableMessageGrouping = true,\n enableTypingIndicator = true,\n onPressHeaderLeft = NOOP,\n onPressHeaderRight = NOOP,\n onPressMediaMessage = NOOP,\n onChannelDeleted = NOOP,\n onBeforeSendUserMessage = PASS,\n onBeforeSendFileMessage = PASS,\n onBeforeUpdateUserMessage = PASS,\n onBeforeUpdateFileMessage = PASS,\n channel,\n keyboardAvoidOffset,\n queryCreator,\n collectionCreator,\n sortComparator = messageComparator,\n flatListProps,\n onPressImageMessage,\n }) => {\n const { sdk, currentUser } = useSendbirdChat();\n\n const [internalSearchItem, setInternalSearchItem] = useState(searchItem);\n const navigateFromMessageSearch = useCallback(() => Boolean(searchItem), []);\n\n const [groupChannelPubSub] = useState(() => pubsub<GroupChannelPubSubContextPayload>());\n const [scrolledAwayFromBottom, setScrolledAwayFromBottom] = useState(false);\n const scrolledAwayFromBottomRef = useRefTracker(scrolledAwayFromBottom);\n\n const {\n loading,\n messages,\n newMessages,\n resetNewMessages,\n next,\n prev,\n hasNext,\n sendFileMessage,\n sendUserMessage,\n updateFileMessage,\n updateUserMessage,\n resendMessage,\n deleteMessage,\n resetWithStartingPoint,\n } = useGroupChannelMessages(sdk, channel, currentUser?.userId, {\n collectionCreator,\n queryCreator,\n sortComparator,\n onChannelDeleted,\n enableCollectionWithoutLocalCache: !queryCreator,\n shouldCountNewMessages: () => scrolledAwayFromBottomRef.current,\n onMessagesReceived(messages) {\n groupChannelPubSub.publish({ type: 'MESSAGES_RECEIVED', data: { messages } });\n },\n startingPoint: internalSearchItem?.startingPoint,\n });\n\n const MessageComponent: GroupChannelProps['MessageList']['renderMessage'] = useCallback(\n withFocusingAnimation(renderMessage ? (props) => <>{renderMessage(props)}</> : MessageRenderer),\n [renderMessage],\n );\n\n const _renderMessage: GroupChannelProps['MessageList']['renderMessage'] = useFreshCallback((props) => {\n return <MessageComponent {...props} />;\n });\n\n const memoizedFlatListProps = useMemo(\n () => ({\n ListEmptyComponent: <GroupChannelModule.StatusEmpty />,\n contentContainerStyle: { flexGrow: 1 },\n ...flatListProps,\n }),\n [flatListProps],\n );\n\n const onResetMessageList = useCallback((callback?: () => void) => {\n resetWithStartingPoint(Number.MAX_SAFE_INTEGER, callback);\n setInternalSearchItem(undefined);\n }, []);\n\n const onPending = (message: SendbirdFileMessage | SendbirdUserMessage) => {\n groupChannelPubSub.publish({ type: 'MESSAGE_SENT_PENDING', data: { message } });\n };\n\n const onSent = (message: SendbirdFileMessage | SendbirdUserMessage) => {\n groupChannelPubSub.publish({ type: 'MESSAGE_SENT_SUCCESS', data: { message } });\n };\n\n const onPressSendUserMessage: GroupChannelProps['Input']['onPressSendUserMessage'] = useFreshCallback(\n async (params) => {\n const processedParams = await onBeforeSendUserMessage(params);\n const message = await sendUserMessage(processedParams, onPending);\n onSent(message);\n },\n );\n const onPressSendFileMessage: GroupChannelProps['Input']['onPressSendFileMessage'] = useFreshCallback(\n async (params) => {\n const processedParams = await onBeforeSendFileMessage(params);\n const message = await sendFileMessage(processedParams, onPending);\n onSent(message);\n },\n );\n const onPressUpdateUserMessage: GroupChannelProps['Input']['onPressUpdateUserMessage'] = useFreshCallback(\n async (message, params) => {\n const processedParams = await onBeforeUpdateUserMessage(params);\n await updateUserMessage(message.messageId, processedParams);\n },\n );\n const onPressUpdateFileMessage: GroupChannelProps['Input']['onPressUpdateFileMessage'] = useFreshCallback(\n async (message, params) => {\n const processedParams = await onBeforeUpdateFileMessage(params);\n await updateFileMessage(message.messageId, processedParams);\n },\n );\n const onScrolledAwayFromBottom = useFreshCallback((value: boolean) => {\n if (!value) resetNewMessages();\n setScrolledAwayFromBottom(value);\n });\n\n /** @deprecated **/\n const onSendFileMessage: GroupChannelProps['Input']['onSendFileMessage'] = useFreshCallback(async (file) => {\n const processedParams = await onBeforeSendFileMessage({ file });\n const message = await sendFileMessage(processedParams, onPending);\n onSent(message);\n });\n /** @deprecated **/\n const onSendUserMessage: GroupChannelProps['Input']['onSendUserMessage'] = useFreshCallback(\n async (text, mention) => {\n const processedParams = await onBeforeSendUserMessage({\n message: text,\n mentionedUserIds: mention?.userIds,\n mentionedMessageTemplate: mention?.messageTemplate,\n mentionType: mention?.type,\n });\n const message = await sendUserMessage(processedParams, onPending);\n onSent(message);\n },\n );\n /** @deprecated **/\n const onUpdateFileMessage: GroupChannelProps['Input']['onUpdateFileMessage'] = useFreshCallback(\n async (editedFile, message) => {\n const processedParams = await onBeforeSendFileMessage({ file: editedFile });\n await updateFileMessage(message.messageId, processedParams);\n },\n );\n /** @deprecated **/\n const onUpdateUserMessage: GroupChannelProps['Input']['onUpdateUserMessage'] = useFreshCallback(\n async (editedText, message, mention) => {\n const processedParams = await onBeforeSendUserMessage({\n message: editedText,\n mentionedUserIds: mention?.userIds,\n mentionedMessageTemplate: mention?.messageTemplate,\n mentionType: mention?.type,\n });\n await updateUserMessage(message.messageId, processedParams);\n },\n );\n\n return (\n <GroupChannelModule.Provider\n channel={channel}\n groupChannelPubSub={groupChannelPubSub}\n enableTypingIndicator={enableTypingIndicator}\n keyboardAvoidOffset={keyboardAvoidOffset}\n >\n <GroupChannelModule.Header\n shouldHideRight={navigateFromMessageSearch}\n onPressHeaderLeft={onPressHeaderLeft}\n onPressHeaderRight={onPressHeaderRight}\n />\n <StatusComposition loading={loading} LoadingComponent={<GroupChannelModule.StatusLoading />}>\n <GroupChannelModule.MessageList\n channel={channel}\n searchItem={internalSearchItem}\n onResetMessageList={onResetMessageList}\n enableMessageGrouping={enableMessageGrouping}\n currentUserId={currentUser?.userId}\n renderMessage={_renderMessage}\n messages={messages}\n newMessages={newMessages}\n onTopReached={prev}\n onBottomReached={next}\n hasNext={hasNext}\n scrolledAwayFromBottom={scrolledAwayFromBottom}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n renderNewMessagesButton={renderNewMessagesButton}\n renderScrollToBottomButton={renderScrollToBottomButton}\n onResendFailedMessage={resendMessage}\n onDeleteMessage={deleteMessage}\n onPressMediaMessage={onPressMediaMessage}\n flatListProps={memoizedFlatListProps}\n nextMessages={newMessages}\n newMessagesFromMembers={newMessages}\n onPressImageMessage={onPressImageMessage}\n />\n <GroupChannelModule.Input\n SuggestedMentionList={GroupChannelModule.SuggestedMentionList}\n shouldRenderInput={shouldRenderInput(channel)}\n onPressSendUserMessage={onPressSendUserMessage}\n onPressSendFileMessage={onPressSendFileMessage}\n onPressUpdateUserMessage={onPressUpdateUserMessage}\n onPressUpdateFileMessage={onPressUpdateFileMessage}\n onSendFileMessage={onSendFileMessage}\n onSendUserMessage={onSendUserMessage}\n onUpdateFileMessage={onUpdateFileMessage}\n onUpdateUserMessage={onUpdateUserMessage}\n />\n </StatusComposition>\n </GroupChannelModule.Provider>\n );\n };\n};\n\nfunction shouldRenderInput(channel: SendbirdGroupChannel) {\n if (channel.isBroadcast) {\n return channel.myRole === 'operator';\n }\n\n return true;\n}\n\nfunction withFocusingAnimation<P extends unknown & { focused: boolean }>(Component: React.ComponentType<P>) {\n return React.memo<P>((props) => {\n const translateY = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n if (props.focused) {\n setTimeout(() => {\n Animated.sequence(\n [\n { toValue: -10, duration: 500 },\n { toValue: 0, duration: 100 },\n { toValue: -10, duration: 200 },\n { toValue: 0, duration: 100 },\n ].map((value) =>\n Animated.timing(translateY, { ...value, useNativeDriver: true, easing: Easing.inOut(Easing.ease) }),\n ),\n ).start();\n }, MESSAGE_SEARCH_SAFE_SCROLL_DELAY + MESSAGE_FOCUS_ANIMATION_DELAY);\n }\n }, [props.focused]);\n\n return (\n <Animated.View style={{ transform: [{ translateY }] }}>\n <Component {...props} />\n </Animated.View>\n );\n });\n}\n\nexport default createGroupChannelFragment;\n"],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ const createGroupChannelSettingsFragment = initModule => {
|
|
|
12
12
|
channel,
|
|
13
13
|
onPressMenuModeration,
|
|
14
14
|
onPressMenuMembers,
|
|
15
|
+
onPressMenuSearchInChannel,
|
|
15
16
|
onPressMenuLeaveChannel,
|
|
16
17
|
onPressMenuNotification,
|
|
17
18
|
menuItemsCreator
|
|
@@ -39,6 +40,7 @@ const createGroupChannelSettingsFragment = initModule => {
|
|
|
39
40
|
menuItemsCreator: menuItemsCreator,
|
|
40
41
|
onPressMenuModeration: onPressMenuModeration,
|
|
41
42
|
onPressMenuMembers: onPressMenuMembers,
|
|
43
|
+
onPressMenuSearchInChannel: onPressMenuSearchInChannel,
|
|
42
44
|
onPressMenuLeaveChannel: onPressMenuLeaveChannel,
|
|
43
45
|
onPressMenuNotification: onPressMenuNotification
|
|
44
46
|
})));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","ScrollView","useSafeAreaInsets","createStyleSheet","useUIKitTheme","NOOP","createGroupChannelSettingsModule","createGroupChannelSettingsFragment","initModule","GroupChannelSettingsModule","_ref","onPressHeaderLeft","channel","onPressMenuModeration","onPressMenuMembers","onPressMenuLeaveChannel","onPressMenuNotification","menuItemsCreator","colors","left","right","createElement","Provider","Header","style","backgroundColor","background","contentContainerStyle","paddingLeft","styles","viewContainer","paddingHorizontal","paddingRight","Info","Menu"],"sources":["createGroupChannelSettingsFragment.tsx"],"sourcesContent":["import React from 'react';\nimport { ScrollView } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { NOOP } from '@sendbird/uikit-utils';\n\nimport createGroupChannelSettingsModule from '../domain/groupChannelSettings/module/createGroupChannelSettingsModule';\nimport type { GroupChannelSettingsFragment, GroupChannelSettingsModule } from '../domain/groupChannelSettings/types';\n\nconst createGroupChannelSettingsFragment = (\n initModule?: Partial<GroupChannelSettingsModule>,\n): GroupChannelSettingsFragment => {\n const GroupChannelSettingsModule = createGroupChannelSettingsModule(initModule);\n\n return ({\n onPressHeaderLeft = NOOP,\n channel,\n onPressMenuModeration,\n onPressMenuMembers,\n onPressMenuLeaveChannel,\n onPressMenuNotification,\n menuItemsCreator,\n }) => {\n const { colors } = useUIKitTheme();\n const { left, right } = useSafeAreaInsets();\n\n return (\n <GroupChannelSettingsModule.Provider channel={channel}>\n <GroupChannelSettingsModule.Header onPressHeaderLeft={onPressHeaderLeft} />\n <ScrollView\n style={{ backgroundColor: colors.background }}\n contentContainerStyle={{\n paddingLeft: left + styles.viewContainer.paddingHorizontal,\n paddingRight: right + styles.viewContainer.paddingHorizontal,\n }}\n >\n <GroupChannelSettingsModule.Info />\n <GroupChannelSettingsModule.Menu\n menuItemsCreator={menuItemsCreator}\n onPressMenuModeration={onPressMenuModeration}\n onPressMenuMembers={onPressMenuMembers}\n onPressMenuLeaveChannel={onPressMenuLeaveChannel}\n onPressMenuNotification={onPressMenuNotification}\n />\n </ScrollView>\n </GroupChannelSettingsModule.Provider>\n );\n };\n};\n\nconst styles = createStyleSheet({\n viewContainer: {\n paddingHorizontal: 16,\n },\n});\n\nexport default createGroupChannelSettingsFragment;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,iBAAiB,QAAQ,gCAAgC;AAElE,SAASC,gBAAgB,EAAEC,aAAa,QAAQ,yCAAyC;AACzF,SAASC,IAAI,QAAQ,uBAAuB;AAE5C,OAAOC,gCAAgC,MAAM,wEAAwE;AAGrH,MAAMC,kCAAkC,GACtCC,UAAgD,IACf;EACjC,MAAMC,0BAA0B,GAAGH,gCAAgC,CAACE,UAAU,CAAC;EAE/E,OAAOE,IAAA,
|
|
1
|
+
{"version":3,"names":["React","ScrollView","useSafeAreaInsets","createStyleSheet","useUIKitTheme","NOOP","createGroupChannelSettingsModule","createGroupChannelSettingsFragment","initModule","GroupChannelSettingsModule","_ref","onPressHeaderLeft","channel","onPressMenuModeration","onPressMenuMembers","onPressMenuSearchInChannel","onPressMenuLeaveChannel","onPressMenuNotification","menuItemsCreator","colors","left","right","createElement","Provider","Header","style","backgroundColor","background","contentContainerStyle","paddingLeft","styles","viewContainer","paddingHorizontal","paddingRight","Info","Menu"],"sources":["createGroupChannelSettingsFragment.tsx"],"sourcesContent":["import React from 'react';\nimport { ScrollView } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { NOOP } from '@sendbird/uikit-utils';\n\nimport createGroupChannelSettingsModule from '../domain/groupChannelSettings/module/createGroupChannelSettingsModule';\nimport type { GroupChannelSettingsFragment, GroupChannelSettingsModule } from '../domain/groupChannelSettings/types';\n\nconst createGroupChannelSettingsFragment = (\n initModule?: Partial<GroupChannelSettingsModule>,\n): GroupChannelSettingsFragment => {\n const GroupChannelSettingsModule = createGroupChannelSettingsModule(initModule);\n\n return ({\n onPressHeaderLeft = NOOP,\n channel,\n onPressMenuModeration,\n onPressMenuMembers,\n onPressMenuSearchInChannel,\n onPressMenuLeaveChannel,\n onPressMenuNotification,\n menuItemsCreator,\n }) => {\n const { colors } = useUIKitTheme();\n const { left, right } = useSafeAreaInsets();\n\n return (\n <GroupChannelSettingsModule.Provider channel={channel}>\n <GroupChannelSettingsModule.Header onPressHeaderLeft={onPressHeaderLeft} />\n <ScrollView\n style={{ backgroundColor: colors.background }}\n contentContainerStyle={{\n paddingLeft: left + styles.viewContainer.paddingHorizontal,\n paddingRight: right + styles.viewContainer.paddingHorizontal,\n }}\n >\n <GroupChannelSettingsModule.Info />\n <GroupChannelSettingsModule.Menu\n menuItemsCreator={menuItemsCreator}\n onPressMenuModeration={onPressMenuModeration}\n onPressMenuMembers={onPressMenuMembers}\n onPressMenuSearchInChannel={onPressMenuSearchInChannel}\n onPressMenuLeaveChannel={onPressMenuLeaveChannel}\n onPressMenuNotification={onPressMenuNotification}\n />\n </ScrollView>\n </GroupChannelSettingsModule.Provider>\n );\n };\n};\n\nconst styles = createStyleSheet({\n viewContainer: {\n paddingHorizontal: 16,\n },\n});\n\nexport default createGroupChannelSettingsFragment;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,iBAAiB,QAAQ,gCAAgC;AAElE,SAASC,gBAAgB,EAAEC,aAAa,QAAQ,yCAAyC;AACzF,SAASC,IAAI,QAAQ,uBAAuB;AAE5C,OAAOC,gCAAgC,MAAM,wEAAwE;AAGrH,MAAMC,kCAAkC,GACtCC,UAAgD,IACf;EACjC,MAAMC,0BAA0B,GAAGH,gCAAgC,CAACE,UAAU,CAAC;EAE/E,OAAOE,IAAA,IASD;IAAA,IATE;MACNC,iBAAiB,GAAGN,IAAI;MACxBO,OAAO;MACPC,qBAAqB;MACrBC,kBAAkB;MAClBC,0BAA0B;MAC1BC,uBAAuB;MACvBC,uBAAuB;MACvBC;IACF,CAAC,GAAAR,IAAA;IACC,MAAM;MAAES;IAAO,CAAC,GAAGf,aAAa,EAAE;IAClC,MAAM;MAAEgB,IAAI;MAAEC;IAAM,CAAC,GAAGnB,iBAAiB,EAAE;IAE3C,oBACEF,KAAA,CAAAsB,aAAA,CAACb,0BAA0B,CAACc,QAAQ;MAACX,OAAO,EAAEA;IAAQ,gBACpDZ,KAAA,CAAAsB,aAAA,CAACb,0BAA0B,CAACe,MAAM;MAACb,iBAAiB,EAAEA;IAAkB,EAAG,eAC3EX,KAAA,CAAAsB,aAAA,CAACrB,UAAU;MACTwB,KAAK,EAAE;QAAEC,eAAe,EAAEP,MAAM,CAACQ;MAAW,CAAE;MAC9CC,qBAAqB,EAAE;QACrBC,WAAW,EAAET,IAAI,GAAGU,MAAM,CAACC,aAAa,CAACC,iBAAiB;QAC1DC,YAAY,EAAEZ,KAAK,GAAGS,MAAM,CAACC,aAAa,CAACC;MAC7C;IAAE,gBAEFhC,KAAA,CAAAsB,aAAA,CAACb,0BAA0B,CAACyB,IAAI,OAAG,eACnClC,KAAA,CAAAsB,aAAA,CAACb,0BAA0B,CAAC0B,IAAI;MAC9BjB,gBAAgB,EAAEA,gBAAiB;MACnCL,qBAAqB,EAAEA,qBAAsB;MAC7CC,kBAAkB,EAAEA,kBAAmB;MACvCC,0BAA0B,EAAEA,0BAA2B;MACvDC,uBAAuB,EAAEA,uBAAwB;MACjDC,uBAAuB,EAAEA;IAAwB,EACjD,CACS,CACuB;EAE1C,CAAC;AACH,CAAC;AAED,MAAMa,MAAM,GAAG3B,gBAAgB,CAAC;EAC9B4B,aAAa,EAAE;IACbC,iBAAiB,EAAE;EACrB;AACF,CAAC,CAAC;AAEF,eAAezB,kCAAkC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import React, { useRef, useState } from 'react';
|
|
2
|
+
import { MessageSearchOrder } from '@sendbird/chat/message';
|
|
3
|
+
import { Logger, NOOP, useFreshCallback, useSafeAreaPadding } from '@sendbird/uikit-utils';
|
|
4
|
+
import { MessageSearchResultItem } from '../components/MessageSearchResultItem';
|
|
5
|
+
import StatusComposition from '../components/StatusComposition';
|
|
6
|
+
import { createMessageSearchModule } from '../domain/messageSearch';
|
|
7
|
+
import { useSendbirdChat } from '../hooks/useContext';
|
|
8
|
+
function getMessageSearchQuery(sdk, options) {
|
|
9
|
+
if (options.queryCreator) return options.queryCreator(options);
|
|
10
|
+
return sdk.createMessageSearchQuery(options);
|
|
11
|
+
}
|
|
12
|
+
const createMessageSearchFragment = initModule => {
|
|
13
|
+
const MessageSearchModule = createMessageSearchModule(initModule);
|
|
14
|
+
return _ref => {
|
|
15
|
+
let {
|
|
16
|
+
onPressHeaderLeft = NOOP,
|
|
17
|
+
channel,
|
|
18
|
+
queryCreator,
|
|
19
|
+
renderSearchResultItem,
|
|
20
|
+
onPressSearchResultItem
|
|
21
|
+
} = _ref;
|
|
22
|
+
const padding = useSafeAreaPadding(['left', 'right', 'bottom']);
|
|
23
|
+
const {
|
|
24
|
+
sdk
|
|
25
|
+
} = useSendbirdChat();
|
|
26
|
+
const {
|
|
27
|
+
keyword,
|
|
28
|
+
setKeyword,
|
|
29
|
+
search,
|
|
30
|
+
searchResults,
|
|
31
|
+
loading,
|
|
32
|
+
next,
|
|
33
|
+
error,
|
|
34
|
+
query
|
|
35
|
+
} = useMessageSearch(sdk, {
|
|
36
|
+
channel,
|
|
37
|
+
queryCreator
|
|
38
|
+
});
|
|
39
|
+
const renderItem = useFreshCallback(props => {
|
|
40
|
+
if (renderSearchResultItem) return renderSearchResultItem(props);
|
|
41
|
+
return /*#__PURE__*/React.createElement(MessageSearchResultItem, props);
|
|
42
|
+
});
|
|
43
|
+
return /*#__PURE__*/React.createElement(MessageSearchModule.Provider, null, /*#__PURE__*/React.createElement(MessageSearchModule.Header, {
|
|
44
|
+
keyword: keyword,
|
|
45
|
+
onChangeKeyword: setKeyword,
|
|
46
|
+
onPressHeaderLeft: onPressHeaderLeft,
|
|
47
|
+
onPressHeaderRight: search
|
|
48
|
+
}), /*#__PURE__*/React.createElement(StatusComposition, {
|
|
49
|
+
loading: loading,
|
|
50
|
+
LoadingComponent: /*#__PURE__*/React.createElement(MessageSearchModule.StatusLoading, null),
|
|
51
|
+
error: Boolean(error),
|
|
52
|
+
ErrorComponent: /*#__PURE__*/React.createElement(MessageSearchModule.StatusError, {
|
|
53
|
+
onPressRetry: search
|
|
54
|
+
})
|
|
55
|
+
}, query && /*#__PURE__*/React.createElement(MessageSearchModule.List, {
|
|
56
|
+
channel: channel,
|
|
57
|
+
onPressSearchResultItem: onPressSearchResultItem,
|
|
58
|
+
messages: searchResults,
|
|
59
|
+
renderSearchResultItem: renderItem,
|
|
60
|
+
flatListProps: {
|
|
61
|
+
keyboardDismissMode: 'on-drag',
|
|
62
|
+
keyboardShouldPersistTaps: 'handled',
|
|
63
|
+
onEndReached: next,
|
|
64
|
+
ListEmptyComponent: MessageSearchModule.StatusEmpty,
|
|
65
|
+
contentContainerStyle: {
|
|
66
|
+
flexGrow: 1,
|
|
67
|
+
...padding
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
})));
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
const useMessageSearch = (sdk, _ref2) => {
|
|
74
|
+
let {
|
|
75
|
+
channel,
|
|
76
|
+
queryCreator
|
|
77
|
+
} = _ref2;
|
|
78
|
+
const [query, setQuery] = useState();
|
|
79
|
+
const [keyword, setKeyword] = useState('');
|
|
80
|
+
const [loading, setLoading] = useState(false);
|
|
81
|
+
const [error, setError] = useState(null);
|
|
82
|
+
const [searchResults, setSearchResults] = useState([]);
|
|
83
|
+
const queryInProgress = useRef(false);
|
|
84
|
+
const search = useFreshCallback(async () => {
|
|
85
|
+
if (keyword.length <= 0) return;
|
|
86
|
+
if (queryInProgress.current) return;
|
|
87
|
+
const query = getMessageSearchQuery(sdk, {
|
|
88
|
+
keyword,
|
|
89
|
+
channelUrl: channel.url,
|
|
90
|
+
messageTimestampFrom: Math.max(channel.joinedAt, channel.invitedAt),
|
|
91
|
+
order: MessageSearchOrder.TIMESTAMP,
|
|
92
|
+
queryCreator
|
|
93
|
+
});
|
|
94
|
+
setQuery(query);
|
|
95
|
+
setLoading(true);
|
|
96
|
+
setError(null);
|
|
97
|
+
try {
|
|
98
|
+
queryInProgress.current = true;
|
|
99
|
+
const result = await query.next();
|
|
100
|
+
setSearchResults(result);
|
|
101
|
+
} catch (err) {
|
|
102
|
+
Logger.warn('[MessageSearchFragment] search failure', err);
|
|
103
|
+
setError(err);
|
|
104
|
+
} finally {
|
|
105
|
+
queryInProgress.current = false;
|
|
106
|
+
setLoading(false);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
const next = useFreshCallback(async () => {
|
|
110
|
+
if (!(query !== null && query !== void 0 && query.hasNext)) return;
|
|
111
|
+
if (queryInProgress.current) return;
|
|
112
|
+
try {
|
|
113
|
+
queryInProgress.current = true;
|
|
114
|
+
const result = await query.next();
|
|
115
|
+
setSearchResults(prev => [...prev, ...result]);
|
|
116
|
+
} catch (err) {
|
|
117
|
+
Logger.warn('[MessageSearchFragment] next failure', err);
|
|
118
|
+
setError(err);
|
|
119
|
+
} finally {
|
|
120
|
+
queryInProgress.current = false;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
return {
|
|
124
|
+
keyword,
|
|
125
|
+
setKeyword,
|
|
126
|
+
query,
|
|
127
|
+
loading,
|
|
128
|
+
error,
|
|
129
|
+
searchResults,
|
|
130
|
+
search,
|
|
131
|
+
next
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
export default createMessageSearchFragment;
|
|
135
|
+
//# sourceMappingURL=createMessageSearchFragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useRef","useState","MessageSearchOrder","Logger","NOOP","useFreshCallback","useSafeAreaPadding","MessageSearchResultItem","StatusComposition","createMessageSearchModule","useSendbirdChat","getMessageSearchQuery","sdk","options","queryCreator","createMessageSearchQuery","createMessageSearchFragment","initModule","MessageSearchModule","_ref","onPressHeaderLeft","channel","renderSearchResultItem","onPressSearchResultItem","padding","keyword","setKeyword","search","searchResults","loading","next","error","query","useMessageSearch","renderItem","props","createElement","Provider","Header","onChangeKeyword","onPressHeaderRight","LoadingComponent","StatusLoading","Boolean","ErrorComponent","StatusError","onPressRetry","List","messages","flatListProps","keyboardDismissMode","keyboardShouldPersistTaps","onEndReached","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","_ref2","setQuery","setLoading","setError","setSearchResults","queryInProgress","length","current","channelUrl","url","messageTimestampFrom","Math","max","joinedAt","invitedAt","order","TIMESTAMP","result","err","warn","hasNext","prev"],"sources":["createMessageSearchFragment.tsx"],"sourcesContent":["import React, { useRef, useState } from 'react';\n\nimport { MessageSearchOrder } from '@sendbird/chat/message';\nimport {\n Logger,\n NOOP,\n SendbirdBaseMessage,\n SendbirdChatSDK,\n SendbirdGroupChannel,\n SendbirdMessageSearchQuery,\n useFreshCallback,\n useSafeAreaPadding,\n} from '@sendbird/uikit-utils';\n\nimport { MessageSearchResultItem } from '../components/MessageSearchResultItem';\nimport StatusComposition from '../components/StatusComposition';\nimport { createMessageSearchModule } from '../domain/messageSearch';\nimport type { MessageSearchFragment, MessageSearchModule, MessageSearchProps } from '../domain/messageSearch/types';\nimport { useSendbirdChat } from '../hooks/useContext';\n\ntype DefaultMessageSearchQueryParams = {\n keyword: string;\n channelUrl: string;\n messageTimestampFrom: number;\n order: MessageSearchOrder;\n};\n\ntype SearchQueryOptions = DefaultMessageSearchQueryParams & {\n queryCreator?: (params: DefaultMessageSearchQueryParams) => SendbirdMessageSearchQuery;\n};\n\nfunction getMessageSearchQuery(sdk: SendbirdChatSDK, options: SearchQueryOptions) {\n if (options.queryCreator) return options.queryCreator(options);\n return sdk.createMessageSearchQuery(options);\n}\n\nconst createMessageSearchFragment = (initModule?: Partial<MessageSearchModule>): MessageSearchFragment => {\n const MessageSearchModule = createMessageSearchModule(initModule);\n\n return ({ onPressHeaderLeft = NOOP, channel, queryCreator, renderSearchResultItem, onPressSearchResultItem }) => {\n const padding = useSafeAreaPadding(['left', 'right', 'bottom']);\n\n const { sdk } = useSendbirdChat();\n const { keyword, setKeyword, search, searchResults, loading, next, error, query } = useMessageSearch(sdk, {\n channel,\n queryCreator,\n });\n\n const renderItem: MessageSearchProps['List']['renderSearchResultItem'] = useFreshCallback((props) => {\n if (renderSearchResultItem) return renderSearchResultItem(props);\n return <MessageSearchResultItem {...props} />;\n });\n\n return (\n <MessageSearchModule.Provider>\n <MessageSearchModule.Header\n keyword={keyword}\n onChangeKeyword={setKeyword}\n onPressHeaderLeft={onPressHeaderLeft}\n onPressHeaderRight={search}\n />\n <StatusComposition\n loading={loading}\n LoadingComponent={<MessageSearchModule.StatusLoading />}\n error={Boolean(error)}\n ErrorComponent={<MessageSearchModule.StatusError onPressRetry={search} />}\n >\n {query && (\n <MessageSearchModule.List\n channel={channel}\n onPressSearchResultItem={onPressSearchResultItem}\n messages={searchResults}\n renderSearchResultItem={renderItem}\n flatListProps={{\n keyboardDismissMode: 'on-drag',\n keyboardShouldPersistTaps: 'handled',\n onEndReached: next,\n ListEmptyComponent: MessageSearchModule.StatusEmpty,\n contentContainerStyle: { flexGrow: 1, ...padding },\n }}\n />\n )}\n </StatusComposition>\n </MessageSearchModule.Provider>\n );\n };\n};\n\nconst useMessageSearch = (\n sdk: SendbirdChatSDK,\n { channel, queryCreator }: { channel: SendbirdGroupChannel; queryCreator: SearchQueryOptions['queryCreator'] },\n) => {\n const [query, setQuery] = useState<SendbirdMessageSearchQuery>();\n const [keyword, setKeyword] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<unknown>(null);\n const [searchResults, setSearchResults] = useState<SendbirdBaseMessage[]>([]);\n const queryInProgress = useRef(false);\n\n const search = useFreshCallback(async () => {\n if (keyword.length <= 0) return;\n if (queryInProgress.current) return;\n\n const query = getMessageSearchQuery(sdk, {\n keyword,\n channelUrl: channel.url,\n messageTimestampFrom: Math.max(channel.joinedAt, channel.invitedAt),\n order: MessageSearchOrder.TIMESTAMP,\n queryCreator,\n });\n\n setQuery(query);\n setLoading(true);\n setError(null);\n\n try {\n queryInProgress.current = true;\n const result = await query.next();\n setSearchResults(result);\n } catch (err) {\n Logger.warn('[MessageSearchFragment] search failure', err);\n setError(err);\n } finally {\n queryInProgress.current = false;\n setLoading(false);\n }\n });\n\n const next = useFreshCallback(async () => {\n if (!query?.hasNext) return;\n if (queryInProgress.current) return;\n\n try {\n queryInProgress.current = true;\n const result = await query.next();\n setSearchResults((prev) => [...prev, ...result]);\n } catch (err) {\n Logger.warn('[MessageSearchFragment] next failure', err);\n setError(err);\n } finally {\n queryInProgress.current = false;\n }\n });\n\n return {\n keyword,\n setKeyword,\n\n query,\n loading,\n error,\n searchResults,\n\n search,\n next,\n };\n};\n\nexport default createMessageSearchFragment;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
-
import React, { useMemo } from 'react';
|
|
2
|
+
import React, { useMemo, useState } from 'react';
|
|
3
3
|
import { SendbirdError } from '@sendbird/chat';
|
|
4
4
|
import { useOpenChannelMessages } from '@sendbird/uikit-chat-hooks';
|
|
5
5
|
import { useToast } from '@sendbird/uikit-react-native-foundation';
|
|
@@ -10,6 +10,7 @@ import StatusComposition from '../components/StatusComposition';
|
|
|
10
10
|
import { UNKNOWN_USER_ID } from '../constants';
|
|
11
11
|
import { createOpenChannelModule } from '../domain/openChannel';
|
|
12
12
|
import { useLocalization, useSendbirdChat, useUserProfile } from '../hooks/useContext';
|
|
13
|
+
import pubsub from '../utils/pubsub';
|
|
13
14
|
const createOpenChannelFragment = initModule => {
|
|
14
15
|
const OpenChannelModule = createOpenChannelModule(initModule);
|
|
15
16
|
return _ref => {
|
|
@@ -46,12 +47,13 @@ const createOpenChannelFragment = initModule => {
|
|
|
46
47
|
const {
|
|
47
48
|
show: showUserProfile
|
|
48
49
|
} = useUserProfile();
|
|
50
|
+
const [openChannelPubSub] = useState(() => pubsub());
|
|
49
51
|
const {
|
|
50
52
|
messages,
|
|
51
|
-
|
|
52
|
-
newMessagesFromMembers,
|
|
53
|
+
newMessages,
|
|
53
54
|
next,
|
|
54
55
|
prev,
|
|
56
|
+
hasNext,
|
|
55
57
|
sendFileMessage,
|
|
56
58
|
sendUserMessage,
|
|
57
59
|
updateFileMessage,
|
|
@@ -66,14 +68,23 @@ const createOpenChannelFragment = initModule => {
|
|
|
66
68
|
onError(error) {
|
|
67
69
|
if (error instanceof SendbirdError) {
|
|
68
70
|
switch (error.code) {
|
|
69
|
-
case SBErrorCode.
|
|
70
|
-
case SBErrorCode.
|
|
71
|
+
case SBErrorCode.RESOURCE_NOT_FOUND:
|
|
72
|
+
case SBErrorCode.CHANNEL_NOT_FOUND:
|
|
73
|
+
case SBErrorCode.BANNED_USER_SEND_MESSAGE_NOT_ALLOWED:
|
|
71
74
|
{
|
|
72
75
|
return showToast(STRINGS.TOAST.GET_CHANNEL_ERROR, 'error');
|
|
73
76
|
}
|
|
74
77
|
}
|
|
75
78
|
}
|
|
76
79
|
showToast(STRINGS.TOAST.UNKNOWN_ERROR, 'error');
|
|
80
|
+
},
|
|
81
|
+
onMessagesReceived(messages) {
|
|
82
|
+
openChannelPubSub.publish({
|
|
83
|
+
type: 'MESSAGES_RECEIVED',
|
|
84
|
+
data: {
|
|
85
|
+
messages
|
|
86
|
+
}
|
|
87
|
+
});
|
|
77
88
|
}
|
|
78
89
|
});
|
|
79
90
|
const isOperator = channel.isOperator((currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId) ?? UNKNOWN_USER_ID);
|
|
@@ -90,13 +101,31 @@ const createOpenChannelFragment = initModule => {
|
|
|
90
101
|
},
|
|
91
102
|
...flatListProps
|
|
92
103
|
}), [loading, flatListProps]);
|
|
104
|
+
const onPending = message => {
|
|
105
|
+
openChannelPubSub.publish({
|
|
106
|
+
type: 'MESSAGE_SENT_PENDING',
|
|
107
|
+
data: {
|
|
108
|
+
message
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
const onSent = message => {
|
|
113
|
+
openChannelPubSub.publish({
|
|
114
|
+
type: 'MESSAGE_SENT_SUCCESS',
|
|
115
|
+
data: {
|
|
116
|
+
message
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
};
|
|
93
120
|
const onPressSendUserMessage = useFreshCallback(async params => {
|
|
94
121
|
const processedParams = await onBeforeSendUserMessage(params);
|
|
95
|
-
await sendUserMessage(processedParams);
|
|
122
|
+
const message = await sendUserMessage(processedParams, onPending);
|
|
123
|
+
onSent(message);
|
|
96
124
|
});
|
|
97
125
|
const onPressSendFileMessage = useFreshCallback(async params => {
|
|
98
126
|
const processedParams = await onBeforeSendFileMessage(params);
|
|
99
|
-
await sendFileMessage(processedParams);
|
|
127
|
+
const message = await sendFileMessage(processedParams, onPending);
|
|
128
|
+
onSent(message);
|
|
100
129
|
});
|
|
101
130
|
const onPressUpdateUserMessage = useFreshCallback(async (message, params) => {
|
|
102
131
|
const processedParams = await onBeforeUpdateUserMessage(params);
|
|
@@ -107,6 +136,7 @@ const createOpenChannelFragment = initModule => {
|
|
|
107
136
|
await updateFileMessage(message.messageId, processedParams);
|
|
108
137
|
});
|
|
109
138
|
return /*#__PURE__*/React.createElement(OpenChannelModule.Provider, {
|
|
139
|
+
openChannelPubSub: openChannelPubSub,
|
|
110
140
|
channel: channel,
|
|
111
141
|
keyboardAvoidOffset: keyboardAvoidOffset
|
|
112
142
|
}, /*#__PURE__*/React.createElement(OpenChannelModule.Header, {
|
|
@@ -118,14 +148,16 @@ const createOpenChannelFragment = initModule => {
|
|
|
118
148
|
LoadingComponent: /*#__PURE__*/React.createElement(OpenChannelModule.StatusLoading, null)
|
|
119
149
|
}, /*#__PURE__*/React.createElement(OpenChannelModule.MessageList, {
|
|
120
150
|
channel: channel,
|
|
151
|
+
hasNext: hasNext,
|
|
121
152
|
enableMessageGrouping: enableMessageGrouping,
|
|
122
153
|
currentUserId: currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId,
|
|
123
154
|
renderMessage: _renderMessage,
|
|
124
155
|
messages: messages,
|
|
125
|
-
|
|
126
|
-
newMessagesFromMembers: newMessagesFromMembers,
|
|
156
|
+
newMessages: newMessages,
|
|
127
157
|
onTopReached: prev,
|
|
128
158
|
onBottomReached: next,
|
|
159
|
+
scrolledAwayFromBottom: false,
|
|
160
|
+
onScrolledAwayFromBottom: NOOP,
|
|
129
161
|
renderNewMessagesButton: renderNewMessagesButton,
|
|
130
162
|
renderScrollToBottomButton: renderScrollToBottomButton,
|
|
131
163
|
onResendFailedMessage: resendMessage,
|