@sendbird/uikit-react-native 3.0.4 → 3.1.1

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.
Files changed (145) hide show
  1. package/lib/commonjs/components/ChannelInput/SendInput.js +151 -19
  2. package/lib/commonjs/components/ChannelInput/SendInput.js.map +1 -1
  3. package/lib/commonjs/components/ChannelInput/index.js +5 -13
  4. package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
  5. package/lib/commonjs/components/ChannelMessageList/index.js +34 -20
  6. package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
  7. package/lib/commonjs/components/ChatFlatList/index.js +1 -1
  8. package/lib/commonjs/components/ChatFlatList/index.js.map +1 -1
  9. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js +4 -1
  10. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js.map +1 -1
  11. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js +191 -0
  12. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map +1 -0
  13. package/lib/commonjs/components/GroupChannelMessageRenderer/index.js +12 -1
  14. package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -1
  15. package/lib/commonjs/components/MessageSearchResultItem.js +2 -8
  16. package/lib/commonjs/components/MessageSearchResultItem.js.map +1 -1
  17. package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js +8 -7
  18. package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
  19. package/lib/commonjs/containers/GroupChannelPreviewContainer.js +3 -9
  20. package/lib/commonjs/containers/GroupChannelPreviewContainer.js.map +1 -1
  21. package/lib/commonjs/containers/SendbirdUIKitContainer.js +43 -9
  22. package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
  23. package/lib/commonjs/contexts/SendbirdChatCtx.js +5 -0
  24. package/lib/commonjs/contexts/SendbirdChatCtx.js.map +1 -1
  25. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput.js +5 -1
  26. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput.js.map +1 -1
  27. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +47 -10
  28. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  29. package/lib/commonjs/domain/groupChannel/module/moduleContext.js +38 -3
  30. package/lib/commonjs/domain/groupChannel/module/moduleContext.js.map +1 -1
  31. package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
  32. package/lib/commonjs/domain/openChannel/types.js.map +1 -1
  33. package/lib/commonjs/fragments/createGroupChannelFragment.js +19 -0
  34. package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
  35. package/lib/commonjs/hooks/useConnection.js +2 -1
  36. package/lib/commonjs/hooks/useConnection.js.map +1 -1
  37. package/lib/commonjs/hooks/useMentionSuggestion.js +1 -1
  38. package/lib/commonjs/hooks/useMentionSuggestion.js.map +1 -1
  39. package/lib/commonjs/hooks/useMentionTextInput.js +4 -3
  40. package/lib/commonjs/hooks/useMentionTextInput.js.map +1 -1
  41. package/lib/commonjs/libs/MentionManager.js.map +1 -1
  42. package/lib/commonjs/localization/StringSet.type.js.map +1 -1
  43. package/lib/commonjs/localization/createBaseStringSet.js +29 -0
  44. package/lib/commonjs/localization/createBaseStringSet.js.map +1 -1
  45. package/lib/commonjs/platform/createMediaService.native.js +1 -1
  46. package/lib/commonjs/platform/createMediaService.native.js.map +1 -1
  47. package/lib/commonjs/platform/types.js.map +1 -1
  48. package/lib/commonjs/utils/pubsub.js +3 -1
  49. package/lib/commonjs/utils/pubsub.js.map +1 -1
  50. package/lib/commonjs/version.js +1 -1
  51. package/lib/commonjs/version.js.map +1 -1
  52. package/lib/module/components/ChannelInput/SendInput.js +153 -21
  53. package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
  54. package/lib/module/components/ChannelInput/index.js +6 -14
  55. package/lib/module/components/ChannelInput/index.js.map +1 -1
  56. package/lib/module/components/ChannelMessageList/index.js +34 -20
  57. package/lib/module/components/ChannelMessageList/index.js.map +1 -1
  58. package/lib/module/components/ChatFlatList/index.js +1 -1
  59. package/lib/module/components/ChatFlatList/index.js.map +1 -1
  60. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js +4 -1
  61. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js.map +1 -1
  62. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js +182 -0
  63. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map +1 -0
  64. package/lib/module/components/GroupChannelMessageRenderer/index.js +13 -2
  65. package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -1
  66. package/lib/module/components/MessageSearchResultItem.js +3 -9
  67. package/lib/module/components/MessageSearchResultItem.js.map +1 -1
  68. package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js +8 -7
  69. package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
  70. package/lib/module/containers/GroupChannelPreviewContainer.js +4 -10
  71. package/lib/module/containers/GroupChannelPreviewContainer.js.map +1 -1
  72. package/lib/module/containers/SendbirdUIKitContainer.js +43 -9
  73. package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
  74. package/lib/module/contexts/SendbirdChatCtx.js +6 -1
  75. package/lib/module/contexts/SendbirdChatCtx.js.map +1 -1
  76. package/lib/module/domain/groupChannel/component/GroupChannelInput.js +5 -1
  77. package/lib/module/domain/groupChannel/component/GroupChannelInput.js.map +1 -1
  78. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +50 -13
  79. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  80. package/lib/module/domain/groupChannel/module/moduleContext.js +39 -4
  81. package/lib/module/domain/groupChannel/module/moduleContext.js.map +1 -1
  82. package/lib/module/domain/groupChannel/types.js.map +1 -1
  83. package/lib/module/domain/openChannel/types.js.map +1 -1
  84. package/lib/module/fragments/createGroupChannelFragment.js +19 -0
  85. package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
  86. package/lib/module/hooks/useConnection.js +2 -1
  87. package/lib/module/hooks/useConnection.js.map +1 -1
  88. package/lib/module/hooks/useMentionSuggestion.js +1 -1
  89. package/lib/module/hooks/useMentionSuggestion.js.map +1 -1
  90. package/lib/module/hooks/useMentionTextInput.js +4 -3
  91. package/lib/module/hooks/useMentionTextInput.js.map +1 -1
  92. package/lib/module/libs/MentionManager.js.map +1 -1
  93. package/lib/module/localization/StringSet.type.js.map +1 -1
  94. package/lib/module/localization/createBaseStringSet.js +30 -1
  95. package/lib/module/localization/createBaseStringSet.js.map +1 -1
  96. package/lib/module/platform/createMediaService.native.js +1 -1
  97. package/lib/module/platform/createMediaService.native.js.map +1 -1
  98. package/lib/module/platform/types.js.map +1 -1
  99. package/lib/module/utils/pubsub.js +3 -1
  100. package/lib/module/utils/pubsub.js.map +1 -1
  101. package/lib/module/version.js +1 -1
  102. package/lib/module/version.js.map +1 -1
  103. package/lib/typescript/src/components/ChannelInput/index.d.ts +2 -0
  104. package/lib/typescript/src/components/ChannelMessageList/index.d.ts +4 -1
  105. package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.d.ts +9 -0
  106. package/lib/typescript/src/components/GroupChannelMessageRenderer/index.d.ts +1 -0
  107. package/lib/typescript/src/components/OpenChannelMessageRenderer/index.d.ts +1 -0
  108. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +4 -2
  109. package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +4 -0
  110. package/lib/typescript/src/domain/groupChannel/types.d.ts +6 -2
  111. package/lib/typescript/src/domain/openChannel/component/OpenChannelHeader.d.ts +1 -1
  112. package/lib/typescript/src/domain/openChannel/types.d.ts +1 -2
  113. package/lib/typescript/src/libs/MentionManager.d.ts +1 -4
  114. package/lib/typescript/src/localization/StringSet.type.d.ts +7 -1
  115. package/lib/typescript/src/platform/types.d.ts +10 -11
  116. package/lib/typescript/src/version.d.ts +1 -1
  117. package/package.json +6 -6
  118. package/src/components/ChannelInput/SendInput.tsx +184 -51
  119. package/src/components/ChannelInput/index.tsx +11 -15
  120. package/src/components/ChannelMessageList/index.tsx +45 -27
  121. package/src/components/ChatFlatList/index.tsx +1 -1
  122. package/src/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.tsx +5 -1
  123. package/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.tsx +177 -0
  124. package/src/components/GroupChannelMessageRenderer/index.tsx +16 -1
  125. package/src/components/MessageSearchResultItem.tsx +3 -5
  126. package/src/components/ReactionAddons/BottomSheetReactionAddon.tsx +6 -7
  127. package/src/containers/GroupChannelPreviewContainer.tsx +6 -7
  128. package/src/containers/SendbirdUIKitContainer.tsx +40 -10
  129. package/src/contexts/SendbirdChatCtx.tsx +7 -1
  130. package/src/domain/groupChannel/component/GroupChannelInput.tsx +5 -1
  131. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +46 -13
  132. package/src/domain/groupChannel/module/moduleContext.tsx +38 -3
  133. package/src/domain/groupChannel/types.ts +8 -2
  134. package/src/domain/openChannel/types.ts +1 -2
  135. package/src/fragments/createGroupChannelFragment.tsx +15 -0
  136. package/src/hooks/useConnection.ts +1 -1
  137. package/src/hooks/useMentionSuggestion.ts +2 -1
  138. package/src/hooks/useMentionTextInput.ts +2 -2
  139. package/src/libs/MentionManager.tsx +1 -8
  140. package/src/localization/StringSet.type.ts +11 -0
  141. package/src/localization/createBaseStringSet.ts +30 -0
  142. package/src/platform/createMediaService.native.tsx +1 -1
  143. package/src/platform/types.ts +9 -9
  144. package/src/utils/pubsub.ts +3 -1
  145. package/src/version.ts +1 -1
@@ -1,23 +1,30 @@
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
2
  import React, { useContext, useEffect, useRef } from 'react';
3
3
  import { useChannelHandler } from '@sendbird/uikit-chat-hooks';
4
- import { isDifferentChannel, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';
4
+ import { useToast } from '@sendbird/uikit-react-native-foundation';
5
+ import { isDifferentChannel, useFreshCallback, useIsFirstMount, useUniqHandlerId } from '@sendbird/uikit-utils';
5
6
  import ChannelMessageList from '../../../components/ChannelMessageList';
6
- import { MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../../constants';
7
- import { useSendbirdChat } from '../../../hooks/useContext';
7
+ import { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../../constants';
8
+ import { useLocalization, useSendbirdChat } from '../../../hooks/useContext';
8
9
  import { GroupChannelContexts } from '../module/moduleContext';
9
10
  const GroupChannelMessageList = props => {
11
+ const toast = useToast();
12
+ const {
13
+ STRINGS
14
+ } = useLocalization();
10
15
  const {
11
16
  sdk
12
17
  } = useSendbirdChat();
13
18
  const {
14
- setMessageToEdit
19
+ setMessageToEdit,
20
+ setMessageToReply
15
21
  } = useContext(GroupChannelContexts.Fragment);
16
22
  const {
17
23
  subscribe
18
24
  } = useContext(GroupChannelContexts.PubSub);
19
25
  const id = useUniqHandlerId('GroupChannelMessageList');
20
26
  const ref = useRef(null);
27
+ const isFirstMount = useIsFirstMount();
21
28
 
22
29
  // FIXME: Workaround, should run after data has been applied to UI.
23
30
  const lazyScrollToBottom = function () {
@@ -46,22 +53,37 @@ const GroupChannelMessageList = props => {
46
53
  });
47
54
  }, timeout);
48
55
  };
49
- useEffect(() => {
50
- if (props.searchItem) {
51
- const createdAt = props.searchItem.startingPoint;
52
- const foundMessageIndex = props.messages.findIndex(it => it.createdAt === createdAt);
53
- const isIncludedInList = foundMessageIndex > -1;
54
- if (isIncludedInList) {
55
- lazyScrollToIndex(foundMessageIndex, true, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);
56
+ const scrollToMessage = useFreshCallback(function (createdAt) {
57
+ let focusAnimated = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
58
+ const foundMessageIndex = props.messages.findIndex(it => it.createdAt === createdAt);
59
+ const isIncludedInList = foundMessageIndex > -1;
60
+ if (isIncludedInList) {
61
+ if (focusAnimated) {
62
+ setTimeout(() => props.onUpdateSearchItem({
63
+ startingPoint: createdAt
64
+ }), MESSAGE_FOCUS_ANIMATION_DELAY);
65
+ }
66
+ lazyScrollToIndex(foundMessageIndex, true, isFirstMount ? MESSAGE_SEARCH_SAFE_SCROLL_DELAY : 0);
67
+ } else {
68
+ if (props.channel.messageOffsetTimestamp <= createdAt) {
69
+ if (focusAnimated) props.onUpdateSearchItem({
70
+ startingPoint: createdAt
71
+ });
72
+ props.onResetMessageListWithStartingPoint(createdAt);
73
+ } else {
74
+ return false;
56
75
  }
57
76
  }
58
- }, [props.searchItem]);
77
+ return true;
78
+ });
59
79
  const scrollToBottom = useFreshCallback(function () {
60
80
  let animated = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
61
81
  if (props.hasNext()) {
82
+ props.onUpdateSearchItem(undefined);
83
+ props.onScrolledAwayFromBottom(false);
62
84
  props.onResetMessageList(() => {
63
- lazyScrollToBottom(animated);
64
85
  props.onScrolledAwayFromBottom(false);
86
+ lazyScrollToBottom(animated);
65
87
  });
66
88
  } else {
67
89
  lazyScrollToBottom(animated);
@@ -100,9 +122,24 @@ const GroupChannelMessageList = props => {
100
122
  }
101
123
  });
102
124
  }, [props.scrolledAwayFromBottom]);
125
+
126
+ // Only trigger once when message list mount with initial props.searchItem
127
+ // - Search screen + searchItem > mount message list
128
+ // - Reset message list + searchItem > re-mount message list
129
+ useEffect(() => {
130
+ if (isFirstMount && props.searchItem) {
131
+ scrollToMessage(props.searchItem.startingPoint);
132
+ }
133
+ }, [isFirstMount]);
134
+ const onPressParentMessage = useFreshCallback(message => {
135
+ const canScrollToParent = scrollToMessage(message.createdAt, true);
136
+ if (!canScrollToParent) toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');
137
+ });
103
138
  return /*#__PURE__*/React.createElement(ChannelMessageList, _extends({}, props, {
104
139
  ref: ref,
140
+ onReplyMessage: setMessageToReply,
105
141
  onEditMessage: setMessageToEdit,
142
+ onPressParentMessage: onPressParentMessage,
106
143
  onPressNewMessagesButton: scrollToBottom,
107
144
  onPressScrollToBottomButton: scrollToBottom
108
145
  }));
@@ -1 +1 @@
1
- {"version":3,"names":["React","useContext","useEffect","useRef","useChannelHandler","isDifferentChannel","useFreshCallback","useUniqHandlerId","ChannelMessageList","MESSAGE_SEARCH_SAFE_SCROLL_DELAY","useSendbirdChat","GroupChannelContexts","GroupChannelMessageList","props","sdk","setMessageToEdit","Fragment","subscribe","PubSub","id","ref","lazyScrollToBottom","animated","arguments","length","undefined","timeout","setTimeout","_ref$current","current","scrollToOffset","offset","lazyScrollToIndex","index","_ref$current2","scrollToIndex","viewPosition","searchItem","createdAt","startingPoint","foundMessageIndex","messages","findIndex","it","isIncludedInList","scrollToBottom","hasNext","onResetMessageList","onScrolledAwayFromBottom","onReactionUpdated","channel","event","recentMessage","isRecentMessage","messageId","scrollReachedBottomAndCanScroll","scrolledAwayFromBottom","_ref","type","createElement","_extends","onEditMessage","onPressNewMessagesButton","onPressScrollToBottomButton","memo"],"sources":["GroupChannelMessageList.tsx"],"sourcesContent":["import React, { useContext, useEffect, useRef } from 'react';\nimport type { FlatList } from 'react-native';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport type { SendbirdMessage } from '@sendbird/uikit-utils';\nimport { isDifferentChannel, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport ChannelMessageList from '../../../components/ChannelMessageList';\nimport { MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../../constants';\nimport { useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelContexts } from '../module/moduleContext';\nimport type { GroupChannelProps } from '../types';\n\nconst GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {\n const { sdk } = useSendbirdChat();\n const { setMessageToEdit } = useContext(GroupChannelContexts.Fragment);\n const { subscribe } = useContext(GroupChannelContexts.PubSub);\n\n const id = useUniqHandlerId('GroupChannelMessageList');\n const ref = useRef<FlatList<SendbirdMessage>>(null);\n\n // FIXME: Workaround, should run after data has been applied to UI.\n const lazyScrollToBottom = (animated = false, timeout = 0) => {\n setTimeout(() => {\n ref.current?.scrollToOffset({ offset: 0, animated });\n }, timeout);\n };\n\n // FIXME: Workaround, should run after data has been applied to UI.\n const lazyScrollToIndex = (index = 0, animated = false, timeout = 0) => {\n setTimeout(() => {\n ref.current?.scrollToIndex({ index, animated, viewPosition: 0.5 });\n }, timeout);\n };\n\n useEffect(() => {\n if (props.searchItem) {\n const createdAt = props.searchItem.startingPoint;\n const foundMessageIndex = props.messages.findIndex((it) => it.createdAt === createdAt);\n const isIncludedInList = foundMessageIndex > -1;\n if (isIncludedInList) {\n lazyScrollToIndex(foundMessageIndex, true, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);\n }\n }\n }, [props.searchItem]);\n\n const scrollToBottom = useFreshCallback((animated = false) => {\n if (props.hasNext()) {\n props.onResetMessageList(() => {\n lazyScrollToBottom(animated);\n props.onScrolledAwayFromBottom(false);\n });\n } else {\n lazyScrollToBottom(animated);\n }\n });\n\n useChannelHandler(sdk, id, {\n onReactionUpdated(channel, event) {\n if (isDifferentChannel(channel, props.channel)) return;\n const recentMessage = props.messages[0];\n const isRecentMessage = recentMessage && recentMessage.messageId === event.messageId;\n const scrollReachedBottomAndCanScroll = !props.scrolledAwayFromBottom && !props.hasNext();\n if (isRecentMessage && scrollReachedBottomAndCanScroll) {\n lazyScrollToBottom(true, 250);\n }\n },\n });\n\n useEffect(() => {\n return subscribe(({ type }) => {\n switch (type) {\n case 'MESSAGES_RECEIVED': {\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGE_SENT_SUCCESS':\n case 'MESSAGE_SENT_PENDING': {\n scrollToBottom(false);\n break;\n }\n }\n });\n }, [props.scrolledAwayFromBottom]);\n\n return (\n <ChannelMessageList\n {...props}\n ref={ref}\n onEditMessage={setMessageToEdit}\n onPressNewMessagesButton={scrollToBottom}\n onPressScrollToBottomButton={scrollToBottom}\n />\n );\n};\n\nexport default React.memo(GroupChannelMessageList);\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useContext","useEffect","useRef","useChannelHandler","useToast","isDifferentChannel","useFreshCallback","useIsFirstMount","useUniqHandlerId","ChannelMessageList","MESSAGE_FOCUS_ANIMATION_DELAY","MESSAGE_SEARCH_SAFE_SCROLL_DELAY","useLocalization","useSendbirdChat","GroupChannelContexts","GroupChannelMessageList","props","toast","STRINGS","sdk","setMessageToEdit","setMessageToReply","Fragment","subscribe","PubSub","id","ref","isFirstMount","lazyScrollToBottom","animated","arguments","length","undefined","timeout","setTimeout","_ref$current","current","scrollToOffset","offset","lazyScrollToIndex","index","_ref$current2","scrollToIndex","viewPosition","scrollToMessage","createdAt","focusAnimated","foundMessageIndex","messages","findIndex","it","isIncludedInList","onUpdateSearchItem","startingPoint","channel","messageOffsetTimestamp","onResetMessageListWithStartingPoint","scrollToBottom","hasNext","onScrolledAwayFromBottom","onResetMessageList","onReactionUpdated","event","recentMessage","isRecentMessage","messageId","scrollReachedBottomAndCanScroll","scrolledAwayFromBottom","_ref","type","searchItem","onPressParentMessage","message","canScrollToParent","show","TOAST","FIND_PARENT_MSG_ERROR","createElement","_extends","onReplyMessage","onEditMessage","onPressNewMessagesButton","onPressScrollToBottomButton","memo"],"sources":["GroupChannelMessageList.tsx"],"sourcesContent":["import React, { useContext, useEffect, useRef } from 'react';\nimport type { FlatList } from 'react-native';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { useToast } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdMessage } from '@sendbird/uikit-utils';\nimport { isDifferentChannel, useFreshCallback, useIsFirstMount, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport ChannelMessageList from '../../../components/ChannelMessageList';\nimport { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../../constants';\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelContexts } from '../module/moduleContext';\nimport type { GroupChannelProps } from '../types';\n\nconst GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {\n const toast = useToast();\n const { STRINGS } = useLocalization();\n const { sdk } = useSendbirdChat();\n const { setMessageToEdit, setMessageToReply } = useContext(GroupChannelContexts.Fragment);\n const { subscribe } = useContext(GroupChannelContexts.PubSub);\n\n const id = useUniqHandlerId('GroupChannelMessageList');\n const ref = useRef<FlatList<SendbirdMessage>>(null);\n const isFirstMount = useIsFirstMount();\n\n // FIXME: Workaround, should run after data has been applied to UI.\n const lazyScrollToBottom = (animated = false, timeout = 0) => {\n setTimeout(() => {\n ref.current?.scrollToOffset({ offset: 0, animated });\n }, timeout);\n };\n\n // FIXME: Workaround, should run after data has been applied to UI.\n const lazyScrollToIndex = (index = 0, animated = false, timeout = 0) => {\n setTimeout(() => {\n ref.current?.scrollToIndex({ index, animated, viewPosition: 0.5 });\n }, timeout);\n };\n\n const scrollToMessage = useFreshCallback((createdAt: number, focusAnimated = false): boolean => {\n const foundMessageIndex = props.messages.findIndex((it) => it.createdAt === createdAt);\n const isIncludedInList = foundMessageIndex > -1;\n\n if (isIncludedInList) {\n if (focusAnimated) {\n setTimeout(() => props.onUpdateSearchItem({ startingPoint: createdAt }), MESSAGE_FOCUS_ANIMATION_DELAY);\n }\n lazyScrollToIndex(foundMessageIndex, true, isFirstMount ? MESSAGE_SEARCH_SAFE_SCROLL_DELAY : 0);\n } else {\n if (props.channel.messageOffsetTimestamp <= createdAt) {\n if (focusAnimated) props.onUpdateSearchItem({ startingPoint: createdAt });\n props.onResetMessageListWithStartingPoint(createdAt);\n } else {\n return false;\n }\n }\n\n return true;\n });\n\n const scrollToBottom = useFreshCallback((animated = false) => {\n if (props.hasNext()) {\n props.onUpdateSearchItem(undefined);\n props.onScrolledAwayFromBottom(false);\n\n props.onResetMessageList(() => {\n props.onScrolledAwayFromBottom(false);\n lazyScrollToBottom(animated);\n });\n } else {\n lazyScrollToBottom(animated);\n }\n });\n\n useChannelHandler(sdk, id, {\n onReactionUpdated(channel, event) {\n if (isDifferentChannel(channel, props.channel)) return;\n const recentMessage = props.messages[0];\n const isRecentMessage = recentMessage && recentMessage.messageId === event.messageId;\n const scrollReachedBottomAndCanScroll = !props.scrolledAwayFromBottom && !props.hasNext();\n if (isRecentMessage && scrollReachedBottomAndCanScroll) {\n lazyScrollToBottom(true, 250);\n }\n },\n });\n\n useEffect(() => {\n return subscribe(({ type }) => {\n switch (type) {\n case 'MESSAGES_RECEIVED': {\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGE_SENT_SUCCESS':\n case 'MESSAGE_SENT_PENDING': {\n scrollToBottom(false);\n break;\n }\n }\n });\n }, [props.scrolledAwayFromBottom]);\n\n // Only trigger once when message list mount with initial props.searchItem\n // - Search screen + searchItem > mount message list\n // - Reset message list + searchItem > re-mount message list\n useEffect(() => {\n if (isFirstMount && props.searchItem) {\n scrollToMessage(props.searchItem.startingPoint);\n }\n }, [isFirstMount]);\n\n const onPressParentMessage = useFreshCallback((message: SendbirdMessage) => {\n const canScrollToParent = scrollToMessage(message.createdAt, true);\n if (!canScrollToParent) toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');\n });\n\n return (\n <ChannelMessageList\n {...props}\n ref={ref}\n onReplyMessage={setMessageToReply}\n onEditMessage={setMessageToEdit}\n onPressParentMessage={onPressParentMessage}\n onPressNewMessagesButton={scrollToBottom}\n onPressScrollToBottomButton={scrollToBottom}\n />\n );\n};\n\nexport default React.memo(GroupChannelMessageList);\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import React, { createContext, useState } from 'react';
1
+ import React, { createContext, useCallback, useState } from 'react';
2
2
  import { useChannelHandler } from '@sendbird/uikit-chat-hooks';
3
3
  import { NOOP, isDifferentChannel, useUniqHandlerId } from '@sendbird/uikit-utils';
4
4
  import ProviderLayout from '../../../components/ProviderLayout';
@@ -7,7 +7,8 @@ export const GroupChannelContexts = {
7
7
  Fragment: /*#__PURE__*/createContext({
8
8
  headerTitle: '',
9
9
  channel: {},
10
- setMessageToEdit: NOOP
10
+ setMessageToEdit: NOOP,
11
+ setMessageToReply: NOOP
11
12
  }),
12
13
  TypingIndicator: /*#__PURE__*/createContext({
13
14
  typingUsers: []
@@ -36,7 +37,39 @@ export const GroupChannelContextsProvider = _ref => {
36
37
  } = useSendbirdChat();
37
38
  const [typingUsers, setTypingUsers] = useState([]);
38
39
  const [messageToEdit, setMessageToEdit] = useState();
40
+ const [messageToReply, setMessageToReply] = useState();
41
+ const updateInputMode = (mode, message) => {
42
+ if (mode === 'send' || !message) {
43
+ setMessageToEdit(undefined);
44
+ setMessageToReply(undefined);
45
+ return;
46
+ } else if (mode === 'edit') {
47
+ setMessageToEdit(message);
48
+ setMessageToReply(undefined);
49
+ return;
50
+ } else if (mode === 'reply') {
51
+ setMessageToEdit(undefined);
52
+ setMessageToReply(message);
53
+ return;
54
+ }
55
+ };
39
56
  useChannelHandler(sdk, handlerId, {
57
+ onMessageDeleted(_, messageId) {
58
+ if ((messageToReply === null || messageToReply === void 0 ? void 0 : messageToReply.messageId) === messageId) {
59
+ setMessageToReply(undefined);
60
+ }
61
+ },
62
+ onChannelFrozen(frozenChannel) {
63
+ if (frozenChannel.url === channel.url) {
64
+ setMessageToReply(undefined);
65
+ }
66
+ },
67
+ onUserMuted(mutedChannel, user) {
68
+ var _sdk$currentUser;
69
+ if (mutedChannel.url === channel.url && user.userId === ((_sdk$currentUser = sdk.currentUser) === null || _sdk$currentUser === void 0 ? void 0 : _sdk$currentUser.userId)) {
70
+ setMessageToReply(undefined);
71
+ }
72
+ },
40
73
  onTypingStatusUpdated(eventChannel) {
41
74
  if (isDifferentChannel(channel, eventChannel)) return;
42
75
  if (!enableTypingIndicator) return;
@@ -47,9 +80,11 @@ export const GroupChannelContextsProvider = _ref => {
47
80
  value: {
48
81
  headerTitle: STRINGS.GROUP_CHANNEL.HEADER_TITLE((currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId) ?? '', channel),
49
82
  channel,
83
+ keyboardAvoidOffset,
50
84
  messageToEdit,
51
- setMessageToEdit,
52
- keyboardAvoidOffset
85
+ setMessageToEdit: useCallback(message => updateInputMode('edit', message), []),
86
+ messageToReply,
87
+ setMessageToReply: useCallback(message => updateInputMode('reply', message), [])
53
88
  }
54
89
  }, /*#__PURE__*/React.createElement(GroupChannelContexts.TypingIndicator.Provider, {
55
90
  value: {
@@ -1 +1 @@
1
- {"version":3,"names":["React","createContext","useState","useChannelHandler","NOOP","isDifferentChannel","useUniqHandlerId","ProviderLayout","useLocalization","useSendbirdChat","GroupChannelContexts","Fragment","headerTitle","channel","setMessageToEdit","TypingIndicator","typingUsers","PubSub","publish","subscribe","GroupChannelContextsProvider","_ref","children","enableTypingIndicator","keyboardAvoidOffset","groupChannelPubSub","Error","handlerId","STRINGS","currentUser","sdk","setTypingUsers","messageToEdit","onTypingStatusUpdated","eventChannel","getTypingUsers","createElement","Provider","value","GROUP_CHANNEL","HEADER_TITLE","userId"],"sources":["moduleContext.tsx"],"sourcesContent":["import React, { createContext, useState } from 'react';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport {\n NOOP,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdUser,\n SendbirdUserMessage,\n isDifferentChannel,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport ProviderLayout from '../../../components/ProviderLayout';\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport type { PubSub } from '../../../utils/pubsub';\nimport type { GroupChannelContextsType, GroupChannelModule, GroupChannelPubSubContextPayload } from '../types';\n\nexport const GroupChannelContexts: GroupChannelContextsType = {\n Fragment: createContext({\n headerTitle: '',\n channel: {} as SendbirdGroupChannel,\n setMessageToEdit: NOOP,\n }),\n TypingIndicator: createContext({\n typingUsers: [] as SendbirdUser[],\n }),\n PubSub: createContext({\n publish: NOOP,\n subscribe: () => NOOP,\n } as PubSub<GroupChannelPubSubContextPayload>),\n};\n\nexport const GroupChannelContextsProvider: GroupChannelModule['Provider'] = ({\n children,\n channel,\n enableTypingIndicator,\n keyboardAvoidOffset = 0,\n groupChannelPubSub,\n}) => {\n if (!channel) throw new Error('GroupChannel is not provided to GroupChannelModule');\n\n const handlerId = useUniqHandlerId('GroupChannelContextsProvider');\n const { STRINGS } = useLocalization();\n const { currentUser, sdk } = useSendbirdChat();\n\n const [typingUsers, setTypingUsers] = useState<SendbirdUser[]>([]);\n const [messageToEdit, setMessageToEdit] = useState<SendbirdUserMessage | SendbirdFileMessage>();\n\n useChannelHandler(sdk, handlerId, {\n onTypingStatusUpdated(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (!enableTypingIndicator) return;\n setTypingUsers(eventChannel.getTypingUsers());\n },\n });\n\n return (\n <ProviderLayout>\n <GroupChannelContexts.Fragment.Provider\n value={{\n headerTitle: STRINGS.GROUP_CHANNEL.HEADER_TITLE(currentUser?.userId ?? '', channel),\n channel,\n messageToEdit,\n setMessageToEdit,\n keyboardAvoidOffset,\n }}\n >\n <GroupChannelContexts.TypingIndicator.Provider value={{ typingUsers }}>\n <GroupChannelContexts.PubSub.Provider value={groupChannelPubSub}>\n {children}\n </GroupChannelContexts.PubSub.Provider>\n </GroupChannelContexts.TypingIndicator.Provider>\n </GroupChannelContexts.Fragment.Provider>\n </ProviderLayout>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,aAAa,EAAEC,QAAQ,QAAQ,OAAO;AAEtD,SAASC,iBAAiB,QAAQ,4BAA4B;AAC9D,SACEC,IAAI,EAKJC,kBAAkB,EAClBC,gBAAgB,QACX,uBAAuB;AAE9B,OAAOC,cAAc,MAAM,oCAAoC;AAC/D,SAASC,eAAe,EAAEC,eAAe,QAAQ,2BAA2B;AAI5E,OAAO,MAAMC,oBAA8C,GAAG;EAC5DC,QAAQ,eAAEV,aAAa,CAAC;IACtBW,WAAW,EAAE,EAAE;IACfC,OAAO,EAAE,CAAC,CAAyB;IACnCC,gBAAgB,EAAEV;EACpB,CAAC,CAAC;EACFW,eAAe,eAAEd,aAAa,CAAC;IAC7Be,WAAW,EAAE;EACf,CAAC,CAAC;EACFC,MAAM,eAAEhB,aAAa,CAAC;IACpBiB,OAAO,EAAEd,IAAI;IACbe,SAAS,EAAEA,CAAA,KAAMf;EACnB,CAAC;AACH,CAAC;AAED,OAAO,MAAMgB,4BAA4D,GAAGC,IAAA,IAMtE;EAAA,IANuE;IAC3EC,QAAQ;IACRT,OAAO;IACPU,qBAAqB;IACrBC,mBAAmB,GAAG,CAAC;IACvBC;EACF,CAAC,GAAAJ,IAAA;EACC,IAAI,CAACR,OAAO,EAAE,MAAM,IAAIa,KAAK,CAAC,oDAAoD,CAAC;EAEnF,MAAMC,SAAS,GAAGrB,gBAAgB,CAAC,8BAA8B,CAAC;EAClE,MAAM;IAAEsB;EAAQ,CAAC,GAAGpB,eAAe,EAAE;EACrC,MAAM;IAAEqB,WAAW;IAAEC;EAAI,CAAC,GAAGrB,eAAe,EAAE;EAE9C,MAAM,CAACO,WAAW,EAAEe,cAAc,CAAC,GAAG7B,QAAQ,CAAiB,EAAE,CAAC;EAClE,MAAM,CAAC8B,aAAa,EAAElB,gBAAgB,CAAC,GAAGZ,QAAQ,EAA6C;EAE/FC,iBAAiB,CAAC2B,GAAG,EAAEH,SAAS,EAAE;IAChCM,qBAAqBA,CAACC,YAAY,EAAE;MAClC,IAAI7B,kBAAkB,CAACQ,OAAO,EAAEqB,YAAY,CAAC,EAAE;MAC/C,IAAI,CAACX,qBAAqB,EAAE;MAC5BQ,cAAc,CAACG,YAAY,CAACC,cAAc,EAAE,CAAC;IAC/C;EACF,CAAC,CAAC;EAEF,oBACEnC,KAAA,CAAAoC,aAAA,CAAC7B,cAAc,qBACbP,KAAA,CAAAoC,aAAA,CAAC1B,oBAAoB,CAACC,QAAQ,CAAC0B,QAAQ;IACrCC,KAAK,EAAE;MACL1B,WAAW,EAAEgB,OAAO,CAACW,aAAa,CAACC,YAAY,CAAC,CAAAX,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEY,MAAM,KAAI,EAAE,EAAE5B,OAAO,CAAC;MACnFA,OAAO;MACPmB,aAAa;MACblB,gBAAgB;MAChBU;IACF;EAAE,gBAEFxB,KAAA,CAAAoC,aAAA,CAAC1B,oBAAoB,CAACK,eAAe,CAACsB,QAAQ;IAACC,KAAK,EAAE;MAAEtB;IAAY;EAAE,gBACpEhB,KAAA,CAAAoC,aAAA,CAAC1B,oBAAoB,CAACO,MAAM,CAACoB,QAAQ;IAACC,KAAK,EAAEb;EAAmB,GAC7DH,QAAQ,CAC4B,CACO,CACT,CAC1B;AAErB,CAAC"}
1
+ {"version":3,"names":["React","createContext","useCallback","useState","useChannelHandler","NOOP","isDifferentChannel","useUniqHandlerId","ProviderLayout","useLocalization","useSendbirdChat","GroupChannelContexts","Fragment","headerTitle","channel","setMessageToEdit","setMessageToReply","TypingIndicator","typingUsers","PubSub","publish","subscribe","GroupChannelContextsProvider","_ref","children","enableTypingIndicator","keyboardAvoidOffset","groupChannelPubSub","Error","handlerId","STRINGS","currentUser","sdk","setTypingUsers","messageToEdit","messageToReply","updateInputMode","mode","message","undefined","onMessageDeleted","_","messageId","onChannelFrozen","frozenChannel","url","onUserMuted","mutedChannel","user","_sdk$currentUser","userId","onTypingStatusUpdated","eventChannel","getTypingUsers","createElement","Provider","value","GROUP_CHANNEL","HEADER_TITLE"],"sources":["moduleContext.tsx"],"sourcesContent":["import React, { createContext, useCallback, useState } from 'react';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport {\n NOOP,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdUser,\n SendbirdUserMessage,\n isDifferentChannel,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport ProviderLayout from '../../../components/ProviderLayout';\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport type { PubSub } from '../../../utils/pubsub';\nimport type { GroupChannelContextsType, GroupChannelModule, GroupChannelPubSubContextPayload } from '../types';\n\nexport const GroupChannelContexts: GroupChannelContextsType = {\n Fragment: createContext({\n headerTitle: '',\n channel: {} as SendbirdGroupChannel,\n setMessageToEdit: NOOP,\n setMessageToReply: NOOP,\n }),\n TypingIndicator: createContext({\n typingUsers: [] as SendbirdUser[],\n }),\n PubSub: createContext({\n publish: NOOP,\n subscribe: () => NOOP,\n } as PubSub<GroupChannelPubSubContextPayload>),\n};\n\nexport const GroupChannelContextsProvider: GroupChannelModule['Provider'] = ({\n children,\n channel,\n enableTypingIndicator,\n keyboardAvoidOffset = 0,\n groupChannelPubSub,\n}) => {\n if (!channel) throw new Error('GroupChannel is not provided to GroupChannelModule');\n\n const handlerId = useUniqHandlerId('GroupChannelContextsProvider');\n const { STRINGS } = useLocalization();\n const { currentUser, sdk } = useSendbirdChat();\n\n const [typingUsers, setTypingUsers] = useState<SendbirdUser[]>([]);\n const [messageToEdit, setMessageToEdit] = useState<SendbirdUserMessage | SendbirdFileMessage>();\n const [messageToReply, setMessageToReply] = useState<SendbirdUserMessage | SendbirdFileMessage>();\n\n const updateInputMode = (mode: 'send' | 'edit' | 'reply', message?: SendbirdUserMessage | SendbirdFileMessage) => {\n if (mode === 'send' || !message) {\n setMessageToEdit(undefined);\n setMessageToReply(undefined);\n return;\n } else if (mode === 'edit') {\n setMessageToEdit(message);\n setMessageToReply(undefined);\n return;\n } else if (mode === 'reply') {\n setMessageToEdit(undefined);\n setMessageToReply(message);\n return;\n }\n };\n\n useChannelHandler(sdk, handlerId, {\n onMessageDeleted(_, messageId) {\n if (messageToReply?.messageId === messageId) {\n setMessageToReply(undefined);\n }\n },\n onChannelFrozen(frozenChannel) {\n if (frozenChannel.url === channel.url) {\n setMessageToReply(undefined);\n }\n },\n onUserMuted(mutedChannel, user) {\n if (mutedChannel.url === channel.url && user.userId === sdk.currentUser?.userId) {\n setMessageToReply(undefined);\n }\n },\n onTypingStatusUpdated(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (!enableTypingIndicator) return;\n setTypingUsers(eventChannel.getTypingUsers());\n },\n });\n\n return (\n <ProviderLayout>\n <GroupChannelContexts.Fragment.Provider\n value={{\n headerTitle: STRINGS.GROUP_CHANNEL.HEADER_TITLE(currentUser?.userId ?? '', channel),\n channel,\n keyboardAvoidOffset,\n messageToEdit,\n setMessageToEdit: useCallback((message) => updateInputMode('edit', message), []),\n messageToReply,\n setMessageToReply: useCallback((message) => updateInputMode('reply', message), []),\n }}\n >\n <GroupChannelContexts.TypingIndicator.Provider value={{ typingUsers }}>\n <GroupChannelContexts.PubSub.Provider value={groupChannelPubSub}>\n {children}\n </GroupChannelContexts.PubSub.Provider>\n </GroupChannelContexts.TypingIndicator.Provider>\n </GroupChannelContexts.Fragment.Provider>\n </ProviderLayout>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from 'react';\n\nimport type { UseGroupChannelMessagesOptions } from '@sendbird/uikit-chat-hooks';\nimport type {\n OnBeforeHandler,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUser,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n} from '@sendbird/uikit-utils';\n\nimport type { ChannelInputProps, SuggestedMentionListProps } from '../../components/ChannelInput';\nimport type { ChannelMessageListProps } from '../../components/ChannelMessageList';\nimport type { CommonComponent } from '../../types';\nimport type { PubSub } from '../../utils/pubsub';\n\nexport interface GroupChannelProps {\n Fragment: {\n channel: SendbirdGroupChannel;\n onChannelDeleted: () => void;\n onPressHeaderLeft: GroupChannelProps['Header']['onPressHeaderLeft'];\n onPressHeaderRight: GroupChannelProps['Header']['onPressHeaderRight'];\n onPressMediaMessage?: GroupChannelProps['MessageList']['onPressMediaMessage'];\n\n onBeforeSendUserMessage?: OnBeforeHandler<SendbirdUserMessageCreateParams>;\n onBeforeSendFileMessage?: OnBeforeHandler<SendbirdFileMessageCreateParams>;\n onBeforeUpdateUserMessage?: OnBeforeHandler<SendbirdUserMessageUpdateParams>;\n onBeforeUpdateFileMessage?: OnBeforeHandler<SendbirdFileMessageUpdateParams>;\n\n renderMessage?: GroupChannelProps['MessageList']['renderMessage'];\n renderNewMessagesButton?: GroupChannelProps['MessageList']['renderNewMessagesButton'];\n renderScrollToBottomButton?: GroupChannelProps['MessageList']['renderScrollToBottomButton'];\n\n enableTypingIndicator?: GroupChannelProps['Provider']['enableTypingIndicator'];\n enableMessageGrouping?: GroupChannelProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];\n flatListProps?: GroupChannelProps['MessageList']['flatListProps'];\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];\n collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];\n\n searchItem?: GroupChannelProps['MessageList']['searchItem'];\n };\n Header: {\n shouldHideRight: () => boolean;\n onPressHeaderLeft: () => void;\n onPressHeaderRight: () => void;\n };\n MessageList: Pick<\n ChannelMessageListProps<SendbirdGroupChannel>,\n | 'enableMessageGrouping'\n | 'currentUserId'\n | 'channel'\n | 'messages'\n | 'newMessages'\n | 'scrolledAwayFromBottom'\n | 'onScrolledAwayFromBottom'\n | 'onTopReached'\n | 'onBottomReached'\n | 'onResendFailedMessage'\n | 'onDeleteMessage'\n | 'onPressMediaMessage'\n | 'renderMessage'\n | 'renderNewMessagesButton'\n | 'renderScrollToBottomButton'\n | 'flatListProps'\n | 'hasNext'\n | 'searchItem'\n > & {\n onResetMessageList: (callback?: () => void) => void;\n };\n Input: Pick<\n ChannelInputProps,\n | 'shouldRenderInput'\n | 'onPressSendUserMessage'\n | 'onPressSendFileMessage'\n | 'onPressUpdateUserMessage'\n | 'onPressUpdateFileMessage'\n | 'SuggestedMentionList'\n | 'AttachmentsButton'\n >;\n\n SuggestedMentionList: SuggestedMentionListProps;\n Provider: {\n channel: SendbirdGroupChannel;\n enableTypingIndicator: boolean;\n keyboardAvoidOffset?: number;\n groupChannelPubSub: PubSub<GroupChannelPubSubContextPayload>;\n };\n}\n\n/**\n * Internal context for GroupChannel\n * For example, the developer can create a custom header\n * with getting data from the domain context\n * */\nexport interface GroupChannelContextsType {\n Fragment: React.Context<{\n headerTitle: string;\n channel: SendbirdGroupChannel;\n messageToEdit?: SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n keyboardAvoidOffset?: number;\n }>;\n TypingIndicator: React.Context<{\n typingUsers: SendbirdUser[];\n }>;\n PubSub: React.Context<PubSub<GroupChannelPubSubContextPayload>>;\n}\nexport interface GroupChannelModule {\n Provider: CommonComponent<GroupChannelProps['Provider']>;\n Header: CommonComponent<GroupChannelProps['Header']>;\n MessageList: CommonComponent<GroupChannelProps['MessageList']>;\n Input: CommonComponent<GroupChannelProps['Input']>;\n SuggestedMentionList: CommonComponent<GroupChannelProps['SuggestedMentionList']>;\n StatusEmpty: CommonComponent;\n StatusLoading: CommonComponent;\n}\n\nexport type GroupChannelFragment = CommonComponent<GroupChannelProps['Fragment']>;\n\nexport type GroupChannelPubSubContextPayload =\n | {\n type: 'MESSAGE_SENT_PENDING' | 'MESSAGE_SENT_SUCCESS';\n data: {\n message: SendbirdUserMessage | SendbirdFileMessage;\n };\n }\n | {\n type: 'MESSAGES_RECEIVED';\n data: {\n messages: SendbirdMessage[];\n };\n };\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from 'react';\n\nimport type { UseGroupChannelMessagesOptions } from '@sendbird/uikit-chat-hooks';\nimport type {\n OnBeforeHandler,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUser,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n} from '@sendbird/uikit-utils';\n\nimport type { ChannelInputProps, SuggestedMentionListProps } from '../../components/ChannelInput';\nimport type { ChannelMessageListProps } from '../../components/ChannelMessageList';\nimport type { CommonComponent } from '../../types';\nimport type { PubSub } from '../../utils/pubsub';\n\nexport interface GroupChannelProps {\n Fragment: {\n channel: SendbirdGroupChannel;\n onChannelDeleted: () => void;\n onPressHeaderLeft: GroupChannelProps['Header']['onPressHeaderLeft'];\n onPressHeaderRight: GroupChannelProps['Header']['onPressHeaderRight'];\n onPressMediaMessage?: GroupChannelProps['MessageList']['onPressMediaMessage'];\n\n onBeforeSendUserMessage?: OnBeforeHandler<SendbirdUserMessageCreateParams>;\n onBeforeSendFileMessage?: OnBeforeHandler<SendbirdFileMessageCreateParams>;\n onBeforeUpdateUserMessage?: OnBeforeHandler<SendbirdUserMessageUpdateParams>;\n onBeforeUpdateFileMessage?: OnBeforeHandler<SendbirdFileMessageUpdateParams>;\n\n renderMessage?: GroupChannelProps['MessageList']['renderMessage'];\n renderNewMessagesButton?: GroupChannelProps['MessageList']['renderNewMessagesButton'];\n renderScrollToBottomButton?: GroupChannelProps['MessageList']['renderScrollToBottomButton'];\n\n enableTypingIndicator?: GroupChannelProps['Provider']['enableTypingIndicator'];\n enableMessageGrouping?: GroupChannelProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];\n flatListProps?: GroupChannelProps['MessageList']['flatListProps'];\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];\n collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];\n\n searchItem?: GroupChannelProps['MessageList']['searchItem'];\n };\n Header: {\n shouldHideRight: () => boolean;\n onPressHeaderLeft: () => void;\n onPressHeaderRight: () => void;\n };\n MessageList: Pick<\n ChannelMessageListProps<SendbirdGroupChannel>,\n | 'enableMessageGrouping'\n | 'currentUserId'\n | 'channel'\n | 'messages'\n | 'newMessages'\n | 'scrolledAwayFromBottom'\n | 'onScrolledAwayFromBottom'\n | 'onTopReached'\n | 'onBottomReached'\n | 'onResendFailedMessage'\n | 'onDeleteMessage'\n | 'onPressMediaMessage'\n | 'renderMessage'\n | 'renderNewMessagesButton'\n | 'renderScrollToBottomButton'\n | 'flatListProps'\n | 'hasNext'\n | 'searchItem'\n > & {\n onResetMessageList: (callback?: () => void) => void;\n onResetMessageListWithStartingPoint: (startingPoint: number, callback?: () => void) => void;\n\n // Changing the search item will trigger the focus animation on messages.\n onUpdateSearchItem: (searchItem?: GroupChannelProps['MessageList']['searchItem']) => void;\n };\n Input: Pick<\n ChannelInputProps,\n | 'shouldRenderInput'\n | 'onPressSendUserMessage'\n | 'onPressSendFileMessage'\n | 'onPressUpdateUserMessage'\n | 'onPressUpdateFileMessage'\n | 'SuggestedMentionList'\n | 'AttachmentsButton'\n >;\n\n SuggestedMentionList: SuggestedMentionListProps;\n Provider: {\n channel: SendbirdGroupChannel;\n enableTypingIndicator: boolean;\n keyboardAvoidOffset?: number;\n groupChannelPubSub: PubSub<GroupChannelPubSubContextPayload>;\n };\n}\n\n/**\n * Internal context for GroupChannel\n * For example, the developer can create a custom header\n * with getting data from the domain context\n * */\nexport interface GroupChannelContextsType {\n Fragment: React.Context<{\n headerTitle: string;\n keyboardAvoidOffset?: number;\n channel: SendbirdGroupChannel;\n messageToEdit?: SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n messageToReply?: SendbirdUserMessage | SendbirdFileMessage;\n setMessageToReply: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n }>;\n TypingIndicator: React.Context<{\n typingUsers: SendbirdUser[];\n }>;\n PubSub: React.Context<PubSub<GroupChannelPubSubContextPayload>>;\n}\nexport interface GroupChannelModule {\n Provider: CommonComponent<GroupChannelProps['Provider']>;\n Header: CommonComponent<GroupChannelProps['Header']>;\n MessageList: CommonComponent<GroupChannelProps['MessageList']>;\n Input: CommonComponent<GroupChannelProps['Input']>;\n SuggestedMentionList: CommonComponent<GroupChannelProps['SuggestedMentionList']>;\n StatusEmpty: CommonComponent;\n StatusLoading: CommonComponent;\n}\n\nexport type GroupChannelFragment = CommonComponent<GroupChannelProps['Fragment']>;\n\nexport type GroupChannelPubSubContextPayload =\n | {\n type: 'MESSAGE_SENT_PENDING' | 'MESSAGE_SENT_SUCCESS';\n data: {\n message: SendbirdUserMessage | SendbirdFileMessage;\n };\n }\n | {\n type: 'MESSAGES_RECEIVED' | 'MESSAGES_UPDATED';\n data: {\n messages: SendbirdMessage[];\n };\n };\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from 'react';\n\nimport type { UseOpenChannelMessagesOptions } from '@sendbird/uikit-chat-hooks';\nimport type { Icon } from '@sendbird/uikit-react-native-foundation';\nimport type {\n OnBeforeHandler,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n} from '@sendbird/uikit-utils';\n\nimport type { ChannelInputProps } from '../../components/ChannelInput';\nimport type { ChannelMessageListProps } from '../../components/ChannelMessageList';\nimport type { CommonComponent } from '../../types';\nimport type { PubSub } from '../../utils/pubsub';\nimport type { GroupChannelPubSubContextPayload } from '../groupChannel/types';\n\nexport type OpenChannelProps = {\n Fragment: {\n channel: SendbirdOpenChannel;\n onChannelDeleted: () => void;\n onPressHeaderLeft: OpenChannelProps['Header']['onPressHeaderLeft'];\n onPressHeaderRightWithSettings: OpenChannelProps['Header']['onPressHeaderRight'];\n onPressHeaderRightWithParticipants: OpenChannelProps['Header']['onPressHeaderRight'];\n onPressMediaMessage?: OpenChannelProps['MessageList']['onPressMediaMessage'];\n\n onBeforeSendUserMessage?: OnBeforeHandler<SendbirdUserMessageCreateParams>;\n onBeforeSendFileMessage?: OnBeforeHandler<SendbirdFileMessageCreateParams>;\n onBeforeUpdateUserMessage?: OnBeforeHandler<SendbirdUserMessageUpdateParams>;\n onBeforeUpdateFileMessage?: OnBeforeHandler<SendbirdFileMessageUpdateParams>;\n\n renderMessage?: OpenChannelProps['MessageList']['renderMessage'];\n renderNewMessagesButton?: OpenChannelProps['MessageList']['renderNewMessagesButton'];\n renderScrollToBottomButton?: OpenChannelProps['MessageList']['renderScrollToBottomButton'];\n\n enableMessageGrouping?: OpenChannelProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: OpenChannelProps['Provider']['keyboardAvoidOffset'];\n flatListProps?: OpenChannelProps['MessageList']['flatListProps'];\n sortComparator?: UseOpenChannelMessagesOptions['sortComparator'];\n queryCreator?: UseOpenChannelMessagesOptions['queryCreator'];\n };\n Header: {\n rightIconName: keyof typeof Icon.Assets;\n onPressHeaderLeft: () => void;\n onPressHeaderRight: () => void;\n };\n\n MessageList: Pick<\n ChannelMessageListProps<SendbirdOpenChannel>,\n | 'enableMessageGrouping'\n | 'currentUserId'\n | 'channel'\n | 'messages'\n | 'newMessages'\n | 'scrolledAwayFromBottom'\n | 'onScrolledAwayFromBottom'\n | 'onTopReached'\n | 'onBottomReached'\n | 'onResendFailedMessage'\n | 'onDeleteMessage'\n | 'onPressMediaMessage'\n | 'renderMessage'\n | 'renderNewMessagesButton'\n | 'renderScrollToBottomButton'\n | 'flatListProps'\n | 'hasNext'\n >;\n Input: Pick<\n ChannelInputProps,\n | 'shouldRenderInput'\n | 'onPressSendUserMessage'\n | 'onPressSendFileMessage'\n | 'onPressUpdateUserMessage'\n | 'onPressUpdateFileMessage'\n | 'AttachmentsButton'\n >;\n\n Provider: {\n channel: SendbirdOpenChannel;\n keyboardAvoidOffset?: number;\n openChannelPubSub: PubSub<OpenChannelPubSubContextPayload>;\n };\n};\n\n/**\n * Internal context for OpenChannel\n * For example, the developer can create a custom header\n * with getting data from the domain context\n * */\nexport type OpenChannelContextsType = {\n Fragment: React.Context<{\n headerTitle: string;\n channel: SendbirdOpenChannel;\n messageToEdit?: SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n keyboardAvoidOffset?: number;\n }>;\n PubSub: React.Context<PubSub<GroupChannelPubSubContextPayload>>;\n};\nexport interface OpenChannelModule {\n Provider: CommonComponent<OpenChannelProps['Provider']>;\n Header: CommonComponent<OpenChannelProps['Header']>;\n MessageList: CommonComponent<OpenChannelProps['MessageList']>;\n Input: CommonComponent<OpenChannelProps['Input']>;\n StatusEmpty: CommonComponent;\n StatusLoading: CommonComponent;\n}\n\nexport type OpenChannelFragment = CommonComponent<OpenChannelProps['Fragment']>;\n\nexport type OpenChannelPubSubContextPayload =\n | {\n type: 'MESSAGE_SENT_PENDING' | 'MESSAGE_SENT_SUCCESS';\n data: {\n message: SendbirdUserMessage | SendbirdFileMessage;\n };\n }\n | {\n type: 'MESSAGES_RECEIVED';\n data: {\n messages: SendbirdMessage[];\n };\n };\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from 'react';\n\nimport type { UseOpenChannelMessagesOptions } from '@sendbird/uikit-chat-hooks';\nimport type { Icon } from '@sendbird/uikit-react-native-foundation';\nimport type {\n OnBeforeHandler,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n} from '@sendbird/uikit-utils';\n\nimport type { ChannelInputProps } from '../../components/ChannelInput';\nimport type { ChannelMessageListProps } from '../../components/ChannelMessageList';\nimport type { CommonComponent } from '../../types';\nimport type { PubSub } from '../../utils/pubsub';\n\nexport type OpenChannelProps = {\n Fragment: {\n channel: SendbirdOpenChannel;\n onChannelDeleted: () => void;\n onPressHeaderLeft: OpenChannelProps['Header']['onPressHeaderLeft'];\n onPressHeaderRightWithSettings: OpenChannelProps['Header']['onPressHeaderRight'];\n onPressHeaderRightWithParticipants: OpenChannelProps['Header']['onPressHeaderRight'];\n onPressMediaMessage?: OpenChannelProps['MessageList']['onPressMediaMessage'];\n\n onBeforeSendUserMessage?: OnBeforeHandler<SendbirdUserMessageCreateParams>;\n onBeforeSendFileMessage?: OnBeforeHandler<SendbirdFileMessageCreateParams>;\n onBeforeUpdateUserMessage?: OnBeforeHandler<SendbirdUserMessageUpdateParams>;\n onBeforeUpdateFileMessage?: OnBeforeHandler<SendbirdFileMessageUpdateParams>;\n\n renderMessage?: OpenChannelProps['MessageList']['renderMessage'];\n renderNewMessagesButton?: OpenChannelProps['MessageList']['renderNewMessagesButton'];\n renderScrollToBottomButton?: OpenChannelProps['MessageList']['renderScrollToBottomButton'];\n\n enableMessageGrouping?: OpenChannelProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: OpenChannelProps['Provider']['keyboardAvoidOffset'];\n flatListProps?: OpenChannelProps['MessageList']['flatListProps'];\n sortComparator?: UseOpenChannelMessagesOptions['sortComparator'];\n queryCreator?: UseOpenChannelMessagesOptions['queryCreator'];\n };\n Header: {\n rightIconName: keyof typeof Icon.Assets;\n onPressHeaderLeft: () => void;\n onPressHeaderRight: () => void;\n };\n\n MessageList: Pick<\n ChannelMessageListProps<SendbirdOpenChannel>,\n | 'enableMessageGrouping'\n | 'currentUserId'\n | 'channel'\n | 'messages'\n | 'newMessages'\n | 'scrolledAwayFromBottom'\n | 'onScrolledAwayFromBottom'\n | 'onTopReached'\n | 'onBottomReached'\n | 'onResendFailedMessage'\n | 'onDeleteMessage'\n | 'onPressMediaMessage'\n | 'renderMessage'\n | 'renderNewMessagesButton'\n | 'renderScrollToBottomButton'\n | 'flatListProps'\n | 'hasNext'\n >;\n Input: Pick<\n ChannelInputProps,\n | 'shouldRenderInput'\n | 'onPressSendUserMessage'\n | 'onPressSendFileMessage'\n | 'onPressUpdateUserMessage'\n | 'onPressUpdateFileMessage'\n | 'AttachmentsButton'\n >;\n\n Provider: {\n channel: SendbirdOpenChannel;\n keyboardAvoidOffset?: number;\n openChannelPubSub: PubSub<OpenChannelPubSubContextPayload>;\n };\n};\n\n/**\n * Internal context for OpenChannel\n * For example, the developer can create a custom header\n * with getting data from the domain context\n * */\nexport type OpenChannelContextsType = {\n Fragment: React.Context<{\n headerTitle: string;\n channel: SendbirdOpenChannel;\n messageToEdit?: SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n keyboardAvoidOffset?: number;\n }>;\n PubSub: React.Context<PubSub<OpenChannelPubSubContextPayload>>;\n};\nexport interface OpenChannelModule {\n Provider: CommonComponent<OpenChannelProps['Provider']>;\n Header: CommonComponent<OpenChannelProps['Header']>;\n MessageList: CommonComponent<OpenChannelProps['MessageList']>;\n Input: CommonComponent<OpenChannelProps['Input']>;\n StatusEmpty: CommonComponent;\n StatusLoading: CommonComponent;\n}\n\nexport type OpenChannelFragment = CommonComponent<OpenChannelProps['Fragment']>;\n\nexport type OpenChannelPubSubContextPayload =\n | {\n type: 'MESSAGE_SENT_PENDING' | 'MESSAGE_SENT_SUCCESS';\n data: {\n message: SendbirdUserMessage | SendbirdFileMessage;\n };\n }\n | {\n type: 'MESSAGES_RECEIVED';\n data: {\n messages: SendbirdMessage[];\n };\n };\n"],"mappings":""}
@@ -71,6 +71,14 @@ const createGroupChannelFragment = initModule => {
71
71
  }
72
72
  });
73
73
  },
74
+ onMessagesUpdated(messages) {
75
+ groupChannelPubSub.publish({
76
+ type: 'MESSAGES_UPDATED',
77
+ data: {
78
+ messages
79
+ }
80
+ });
81
+ },
74
82
  collectionCreator,
75
83
  sortComparator,
76
84
  onChannelDeleted,
@@ -91,7 +99,16 @@ const createGroupChannelFragment = initModule => {
91
99
  }), [flatListProps]);
92
100
  const onResetMessageList = useCallback(callback => {
93
101
  resetWithStartingPoint(Number.MAX_SAFE_INTEGER, callback);
102
+ }, []);
103
+ const onResetMessageListWithStartingPoint = useCallback((startingPoint, callback) => {
104
+ resetWithStartingPoint(startingPoint, callback);
105
+ }, []);
106
+
107
+ // Changing the search item will trigger the focus animation on messages.
108
+ const onUpdateSearchItem = useCallback(searchItem => {
109
+ // Clean up for animation trigger with useEffect
94
110
  setInternalSearchItem(undefined);
111
+ setInternalSearchItem(searchItem);
95
112
  }, []);
96
113
  const onPending = message => {
97
114
  groupChannelPubSub.publish({
@@ -147,6 +164,8 @@ const createGroupChannelFragment = initModule => {
147
164
  channel: channel,
148
165
  searchItem: internalSearchItem,
149
166
  onResetMessageList: onResetMessageList,
167
+ onResetMessageListWithStartingPoint: onResetMessageListWithStartingPoint,
168
+ onUpdateSearchItem: onUpdateSearchItem,
150
169
  enableMessageGrouping: enableMessageGrouping,
151
170
  currentUserId: currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId,
152
171
  renderMessage: renderItem,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useMemo","useState","ReplyType","useGroupChannelMessages","NOOP","PASS","messageComparator","useFreshCallback","useIIFE","useRefTracker","GroupChannelMessageRenderer","NewMessagesButton","ScrollToBottomButton","StatusComposition","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","collectionCreator","sortComparator","flatListProps","sdk","currentUser","sbOptions","internalSearchItem","setInternalSearchItem","navigateFromMessageSearch","Boolean","groupChannelPubSub","scrolledAwayFromBottom","setScrolledAwayFromBottom","scrolledAwayFromBottomRef","replyType","uikit","groupChannel","NONE","ONLY_REPLY_TO_CHANNEL","loading","messages","newMessages","resetNewMessages","next","prev","hasNext","sendFileMessage","sendUserMessage","updateFileMessage","updateUserMessage","resendMessage","deleteMessage","resetWithStartingPoint","userId","shouldCountNewMessages","current","onMessagesReceived","publish","type","data","startingPoint","enableCollectionWithoutLocalCache","renderItem","memoizedFlatListProps","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","onResetMessageList","callback","Number","MAX_SAFE_INTEGER","undefined","onPending","message","onSent","onPressSendUserMessage","params","processedParams","onPressSendFileMessage","onPressUpdateUserMessage","messageId","onPressUpdateFileMessage","onScrolledAwayFromBottom","value","Provider","Header","shouldHideRight","LoadingComponent","StatusLoading","MessageList","currentUserId","onTopReached","onBottomReached","onResendFailedMessage","onDeleteMessage","Input","SuggestedMentionList","shouldRenderInput","isBroadcast","myRole"],"sources":["createGroupChannelFragment.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from 'react';\n\nimport { ReplyType } from '@sendbird/chat/message';\nimport { useGroupChannelMessages } from '@sendbird/uikit-chat-hooks';\nimport {\n NOOP,\n PASS,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdUserMessage,\n messageComparator,\n useFreshCallback,\n useIIFE,\n useRefTracker,\n} from '@sendbird/uikit-utils';\n\nimport GroupChannelMessageRenderer from '../components/GroupChannelMessageRenderer';\nimport NewMessagesButton from '../components/NewMessagesButton';\nimport ScrollToBottomButton from '../components/ScrollToBottomButton';\nimport StatusComposition from '../components/StatusComposition';\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,\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 collectionCreator,\n sortComparator = messageComparator,\n flatListProps,\n }) => {\n const { sdk, currentUser, sbOptions } = 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 replyType = useIIFE(() => {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'none') return ReplyType.NONE;\n else return ReplyType.ONLY_REPLY_TO_CHANNEL;\n });\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 shouldCountNewMessages: () => scrolledAwayFromBottomRef.current,\n onMessagesReceived(messages) {\n groupChannelPubSub.publish({ type: 'MESSAGES_RECEIVED', data: { messages } });\n },\n collectionCreator,\n sortComparator,\n onChannelDeleted,\n replyType,\n startingPoint: internalSearchItem?.startingPoint,\n enableCollectionWithoutLocalCache: true,\n });\n\n const renderItem: GroupChannelProps['MessageList']['renderMessage'] = useFreshCallback((props) => {\n if (renderMessage) return renderMessage(props);\n return <GroupChannelMessageRenderer {...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 return (\n <GroupChannelModule.Provider\n channel={channel}\n groupChannelPubSub={groupChannelPubSub}\n enableTypingIndicator={enableTypingIndicator ?? sbOptions.uikit.groupChannel.channel.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={renderItem}\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 />\n <GroupChannelModule.Input\n SuggestedMentionList={GroupChannelModule.SuggestedMentionList}\n shouldRenderInput={shouldRenderInput(channel)}\n onPressSendUserMessage={onPressSendUserMessage}\n onPressSendFileMessage={onPressSendFileMessage}\n onPressUpdateUserMessage={onPressUpdateUserMessage}\n onPressUpdateFileMessage={onPressUpdateFileMessage}\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","useMemo","useState","ReplyType","useGroupChannelMessages","NOOP","PASS","messageComparator","useFreshCallback","useIIFE","useRefTracker","GroupChannelMessageRenderer","NewMessagesButton","ScrollToBottomButton","StatusComposition","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","collectionCreator","sortComparator","flatListProps","sdk","currentUser","sbOptions","internalSearchItem","setInternalSearchItem","navigateFromMessageSearch","Boolean","groupChannelPubSub","scrolledAwayFromBottom","setScrolledAwayFromBottom","scrolledAwayFromBottomRef","replyType","uikit","groupChannel","NONE","ONLY_REPLY_TO_CHANNEL","loading","messages","newMessages","resetNewMessages","next","prev","hasNext","sendFileMessage","sendUserMessage","updateFileMessage","updateUserMessage","resendMessage","deleteMessage","resetWithStartingPoint","userId","shouldCountNewMessages","current","onMessagesReceived","publish","type","data","onMessagesUpdated","startingPoint","enableCollectionWithoutLocalCache","renderItem","memoizedFlatListProps","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","onResetMessageList","callback","Number","MAX_SAFE_INTEGER","onResetMessageListWithStartingPoint","onUpdateSearchItem","undefined","onPending","message","onSent","onPressSendUserMessage","params","processedParams","onPressSendFileMessage","onPressUpdateUserMessage","messageId","onPressUpdateFileMessage","onScrolledAwayFromBottom","value","Provider","Header","shouldHideRight","LoadingComponent","StatusLoading","MessageList","currentUserId","onTopReached","onBottomReached","onResendFailedMessage","onDeleteMessage","Input","SuggestedMentionList","shouldRenderInput","isBroadcast","myRole"],"sources":["createGroupChannelFragment.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from 'react';\n\nimport { ReplyType } from '@sendbird/chat/message';\nimport { useGroupChannelMessages } from '@sendbird/uikit-chat-hooks';\nimport {\n NOOP,\n PASS,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdUserMessage,\n messageComparator,\n useFreshCallback,\n useIIFE,\n useRefTracker,\n} from '@sendbird/uikit-utils';\n\nimport GroupChannelMessageRenderer from '../components/GroupChannelMessageRenderer';\nimport NewMessagesButton from '../components/NewMessagesButton';\nimport ScrollToBottomButton from '../components/ScrollToBottomButton';\nimport StatusComposition from '../components/StatusComposition';\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,\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 collectionCreator,\n sortComparator = messageComparator,\n flatListProps,\n }) => {\n const { sdk, currentUser, sbOptions } = 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 replyType = useIIFE(() => {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'none') return ReplyType.NONE;\n else return ReplyType.ONLY_REPLY_TO_CHANNEL;\n });\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 shouldCountNewMessages: () => scrolledAwayFromBottomRef.current,\n onMessagesReceived(messages) {\n groupChannelPubSub.publish({ type: 'MESSAGES_RECEIVED', data: { messages } });\n },\n onMessagesUpdated(messages) {\n groupChannelPubSub.publish({ type: 'MESSAGES_UPDATED', data: { messages } });\n },\n collectionCreator,\n sortComparator,\n onChannelDeleted,\n replyType,\n startingPoint: internalSearchItem?.startingPoint,\n enableCollectionWithoutLocalCache: true,\n });\n\n const renderItem: GroupChannelProps['MessageList']['renderMessage'] = useFreshCallback((props) => {\n if (renderMessage) return renderMessage(props);\n return <GroupChannelMessageRenderer {...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 }, []);\n\n const onResetMessageListWithStartingPoint = useCallback((startingPoint: number, callback?: () => void) => {\n resetWithStartingPoint(startingPoint, callback);\n }, []);\n\n // Changing the search item will trigger the focus animation on messages.\n const onUpdateSearchItem: GroupChannelProps['MessageList']['onUpdateSearchItem'] = useCallback((searchItem) => {\n // Clean up for animation trigger with useEffect\n setInternalSearchItem(undefined);\n setInternalSearchItem(searchItem);\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 return (\n <GroupChannelModule.Provider\n channel={channel}\n groupChannelPubSub={groupChannelPubSub}\n enableTypingIndicator={enableTypingIndicator ?? sbOptions.uikit.groupChannel.channel.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 onResetMessageListWithStartingPoint={onResetMessageListWithStartingPoint}\n onUpdateSearchItem={onUpdateSearchItem}\n enableMessageGrouping={enableMessageGrouping}\n currentUserId={currentUser?.userId}\n renderMessage={renderItem}\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 />\n <GroupChannelModule.Input\n SuggestedMentionList={GroupChannelModule.SuggestedMentionList}\n shouldRenderInput={shouldRenderInput(channel)}\n onPressSendUserMessage={onPressSendUserMessage}\n onPressSendFileMessage={onPressSendFileMessage}\n onPressUpdateUserMessage={onPressUpdateUserMessage}\n onPressUpdateFileMessage={onPressUpdateFileMessage}\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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"}
@@ -8,8 +8,9 @@ function isCacheRestrictedError(error) {
8
8
  return cacheRestrictCodes.some(code => error.code === code);
9
9
  }
10
10
  async function initEmoji(sdk, emojiManager) {
11
+ var _sdk$appInfo;
11
12
  await emojiManager.init();
12
- if (sdk.appInfo.emojiHash !== emojiManager.emojiHash) {
13
+ if (((_sdk$appInfo = sdk.appInfo) === null || _sdk$appInfo === void 0 ? void 0 : _sdk$appInfo.emojiHash) !== emojiManager.emojiHash) {
13
14
  try {
14
15
  const container = await sdk.getAllEmoji();
15
16
  await emojiManager.init(container);
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useUIKitConfig","Logger","useSendbirdChat","usePushTokenRegistration","cacheRestrictCodes","isCacheRestrictedError","error","some","code","initEmoji","sdk","emojiManager","init","appInfo","emojiHash","container","getAllEmoji","useConnection","initDashboardConfigs","setCurrentUser","sbOptions","registerPushTokenForCurrentUser","unregisterPushTokenForCurrentUser","connect","userId","opts","debug","user","accessToken","nickname","updateCurrentUserInfo","then","updatedUser","catch","e","warn","chat","useUserIdForNicknameEnabled","autoPushTokenRegistrationEnabled","Promise","allSettled","isCacheEnabled","message","clearCachedData","currentUser","disconnect","undefined","reconnect"],"sources":["useConnection.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useUIKitConfig } from '@sendbird/uikit-tools';\nimport { Logger, SendbirdChatSDK, SendbirdError, SendbirdUser } from '@sendbird/uikit-utils';\n\nimport type EmojiManager from '../libs/EmojiManager';\nimport { useSendbirdChat } from './useContext';\nimport usePushTokenRegistration from './usePushTokenRegistration';\n\ntype ConnectOptions = { nickname?: string; accessToken?: string };\n\nconst cacheRestrictCodes = [400300, 400301, 400302, 400310];\nfunction isCacheRestrictedError(error: SendbirdError) {\n return cacheRestrictCodes.some((code) => error.code === code);\n}\n\nasync function initEmoji(sdk: SendbirdChatSDK, emojiManager: EmojiManager) {\n await emojiManager.init();\n if (sdk.appInfo.emojiHash !== emojiManager.emojiHash) {\n try {\n const container = await sdk.getAllEmoji();\n await emojiManager.init(container);\n } catch {}\n }\n}\n\nconst useConnection = () => {\n const { initDashboardConfigs } = useUIKitConfig();\n const { sdk, emojiManager, setCurrentUser, sbOptions } = useSendbirdChat();\n const { registerPushTokenForCurrentUser, unregisterPushTokenForCurrentUser } = usePushTokenRegistration();\n\n const connect = useCallback(\n async (userId: string, opts?: ConnectOptions): Promise<SendbirdUser> => {\n try {\n Logger.debug('[useConnection]', 'connect start:', userId);\n let user = await sdk.connect(userId, opts?.accessToken);\n\n if (opts?.nickname) {\n Logger.debug('[useConnection]', 'nickname-sync start:', opts.nickname);\n await sdk\n .updateCurrentUserInfo({ nickname: opts.nickname })\n .then((updatedUser) => (user = updatedUser))\n .catch((e) => Logger.warn('[useConnection]', 'nickname-sync failure', e));\n } else if (sbOptions.chat.useUserIdForNicknameEnabled) {\n await sdk.updateCurrentUserInfo({ nickname: userId }).then((updatedUser) => (user = updatedUser));\n }\n\n if (sbOptions.chat.autoPushTokenRegistrationEnabled) {\n Logger.debug('[useConnection]', 'autoPushTokenRegistration enabled, register for current user');\n await registerPushTokenForCurrentUser().catch((e) => {\n Logger.warn('[useConnection]', 'autoPushToken Registration failure', e);\n });\n }\n\n await Promise.allSettled([initEmoji(sdk, emojiManager), initDashboardConfigs(sdk)]);\n\n Logger.debug('[useConnection]', 'connected! (online)');\n setCurrentUser(user);\n\n return user;\n } catch (e) {\n const error = e as unknown as SendbirdError;\n\n if (sdk.isCacheEnabled) {\n if (isCacheRestrictedError(error)) {\n Logger.warn('[useConnection]', 'offline connect restricted', error.message, error.code);\n Logger.warn('[useConnection]', 'clear cached-data');\n await sdk.clearCachedData().catch((e) => Logger.warn('[useConnection]', 'clear cached-data failure', e));\n } else if (sdk.currentUser) {\n await initEmoji(sdk, emojiManager);\n\n Logger.debug('[useConnection]', 'connected! (offline)');\n setCurrentUser(sdk.currentUser);\n return sdk.currentUser;\n }\n }\n\n Logger.warn('[useConnection]', 'connect failure', error.message, error.code);\n throw error;\n }\n },\n [sdk, registerPushTokenForCurrentUser, sbOptions.chat.autoPushTokenRegistrationEnabled],\n );\n\n const disconnect = useCallback(async () => {\n Logger.debug('[useConnection]', 'disconnect start');\n\n if (sbOptions.chat.autoPushTokenRegistrationEnabled) {\n Logger.debug('[useConnection]', 'autoPushTokenRegistration enabled, unregister for current user');\n await unregisterPushTokenForCurrentUser().catch((e) => {\n Logger.warn('[useConnection]', 'autoPushToken unregister failure', e);\n });\n }\n\n await sdk.disconnect().then(() => setCurrentUser(undefined));\n Logger.debug('[useConnection]', 'disconnected!');\n }, [sdk, unregisterPushTokenForCurrentUser, sbOptions.chat.autoPushTokenRegistrationEnabled]);\n\n return { connect, disconnect, reconnect: () => sdk.reconnect() };\n};\n\nexport default useConnection;\n"],"mappings":"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"}
1
+ {"version":3,"names":["useCallback","useUIKitConfig","Logger","useSendbirdChat","usePushTokenRegistration","cacheRestrictCodes","isCacheRestrictedError","error","some","code","initEmoji","sdk","emojiManager","_sdk$appInfo","init","appInfo","emojiHash","container","getAllEmoji","useConnection","initDashboardConfigs","setCurrentUser","sbOptions","registerPushTokenForCurrentUser","unregisterPushTokenForCurrentUser","connect","userId","opts","debug","user","accessToken","nickname","updateCurrentUserInfo","then","updatedUser","catch","e","warn","chat","useUserIdForNicknameEnabled","autoPushTokenRegistrationEnabled","Promise","allSettled","isCacheEnabled","message","clearCachedData","currentUser","disconnect","undefined","reconnect"],"sources":["useConnection.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useUIKitConfig } from '@sendbird/uikit-tools';\nimport { Logger, SendbirdChatSDK, SendbirdError, SendbirdUser } from '@sendbird/uikit-utils';\n\nimport type EmojiManager from '../libs/EmojiManager';\nimport { useSendbirdChat } from './useContext';\nimport usePushTokenRegistration from './usePushTokenRegistration';\n\ntype ConnectOptions = { nickname?: string; accessToken?: string };\n\nconst cacheRestrictCodes = [400300, 400301, 400302, 400310];\nfunction isCacheRestrictedError(error: SendbirdError) {\n return cacheRestrictCodes.some((code) => error.code === code);\n}\n\nasync function initEmoji(sdk: SendbirdChatSDK, emojiManager: EmojiManager) {\n await emojiManager.init();\n if (sdk.appInfo?.emojiHash !== emojiManager.emojiHash) {\n try {\n const container = await sdk.getAllEmoji();\n await emojiManager.init(container);\n } catch {}\n }\n}\n\nconst useConnection = () => {\n const { initDashboardConfigs } = useUIKitConfig();\n const { sdk, emojiManager, setCurrentUser, sbOptions } = useSendbirdChat();\n const { registerPushTokenForCurrentUser, unregisterPushTokenForCurrentUser } = usePushTokenRegistration();\n\n const connect = useCallback(\n async (userId: string, opts?: ConnectOptions): Promise<SendbirdUser> => {\n try {\n Logger.debug('[useConnection]', 'connect start:', userId);\n let user = await sdk.connect(userId, opts?.accessToken);\n\n if (opts?.nickname) {\n Logger.debug('[useConnection]', 'nickname-sync start:', opts.nickname);\n await sdk\n .updateCurrentUserInfo({ nickname: opts.nickname })\n .then((updatedUser) => (user = updatedUser))\n .catch((e) => Logger.warn('[useConnection]', 'nickname-sync failure', e));\n } else if (sbOptions.chat.useUserIdForNicknameEnabled) {\n await sdk.updateCurrentUserInfo({ nickname: userId }).then((updatedUser) => (user = updatedUser));\n }\n\n if (sbOptions.chat.autoPushTokenRegistrationEnabled) {\n Logger.debug('[useConnection]', 'autoPushTokenRegistration enabled, register for current user');\n await registerPushTokenForCurrentUser().catch((e) => {\n Logger.warn('[useConnection]', 'autoPushToken Registration failure', e);\n });\n }\n\n await Promise.allSettled([initEmoji(sdk, emojiManager), initDashboardConfigs(sdk)]);\n\n Logger.debug('[useConnection]', 'connected! (online)');\n setCurrentUser(user);\n\n return user;\n } catch (e) {\n const error = e as unknown as SendbirdError;\n\n if (sdk.isCacheEnabled) {\n if (isCacheRestrictedError(error)) {\n Logger.warn('[useConnection]', 'offline connect restricted', error.message, error.code);\n Logger.warn('[useConnection]', 'clear cached-data');\n await sdk.clearCachedData().catch((e) => Logger.warn('[useConnection]', 'clear cached-data failure', e));\n } else if (sdk.currentUser) {\n await initEmoji(sdk, emojiManager);\n\n Logger.debug('[useConnection]', 'connected! (offline)');\n setCurrentUser(sdk.currentUser);\n return sdk.currentUser;\n }\n }\n\n Logger.warn('[useConnection]', 'connect failure', error.message, error.code);\n throw error;\n }\n },\n [sdk, registerPushTokenForCurrentUser, sbOptions.chat.autoPushTokenRegistrationEnabled],\n );\n\n const disconnect = useCallback(async () => {\n Logger.debug('[useConnection]', 'disconnect start');\n\n if (sbOptions.chat.autoPushTokenRegistrationEnabled) {\n Logger.debug('[useConnection]', 'autoPushTokenRegistration enabled, unregister for current user');\n await unregisterPushTokenForCurrentUser().catch((e) => {\n Logger.warn('[useConnection]', 'autoPushToken unregister failure', e);\n });\n }\n\n await sdk.disconnect().then(() => setCurrentUser(undefined));\n Logger.debug('[useConnection]', 'disconnected!');\n }, [sdk, unregisterPushTokenForCurrentUser, sbOptions.chat.autoPushTokenRegistrationEnabled]);\n\n return { connect, disconnect, reconnect: () => sdk.reconnect() };\n};\n\nexport default useConnection;\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AAEnC,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,MAAM,QAAsD,uBAAuB;AAG5F,SAASC,eAAe,QAAQ,cAAc;AAC9C,OAAOC,wBAAwB,MAAM,4BAA4B;AAIjE,MAAMC,kBAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC3D,SAASC,sBAAsBA,CAACC,KAAoB,EAAE;EACpD,OAAOF,kBAAkB,CAACG,IAAI,CAAEC,IAAI,IAAKF,KAAK,CAACE,IAAI,KAAKA,IAAI,CAAC;AAC/D;AAEA,eAAeC,SAASA,CAACC,GAAoB,EAAEC,YAA0B,EAAE;EAAA,IAAAC,YAAA;EACzE,MAAMD,YAAY,CAACE,IAAI,EAAE;EACzB,IAAI,EAAAD,YAAA,GAAAF,GAAG,CAACI,OAAO,cAAAF,YAAA,uBAAXA,YAAA,CAAaG,SAAS,MAAKJ,YAAY,CAACI,SAAS,EAAE;IACrD,IAAI;MACF,MAAMC,SAAS,GAAG,MAAMN,GAAG,CAACO,WAAW,EAAE;MACzC,MAAMN,YAAY,CAACE,IAAI,CAACG,SAAS,CAAC;IACpC,CAAC,CAAC,MAAM,CAAC;EACX;AACF;AAEA,MAAME,aAAa,GAAGA,CAAA,KAAM;EAC1B,MAAM;IAAEC;EAAqB,CAAC,GAAGnB,cAAc,EAAE;EACjD,MAAM;IAAEU,GAAG;IAAEC,YAAY;IAAES,cAAc;IAAEC;EAAU,CAAC,GAAGnB,eAAe,EAAE;EAC1E,MAAM;IAAEoB,+BAA+B;IAAEC;EAAkC,CAAC,GAAGpB,wBAAwB,EAAE;EAEzG,MAAMqB,OAAO,GAAGzB,WAAW,CACzB,OAAO0B,MAAc,EAAEC,IAAqB,KAA4B;IACtE,IAAI;MACFzB,MAAM,CAAC0B,KAAK,CAAC,iBAAiB,EAAE,gBAAgB,EAAEF,MAAM,CAAC;MACzD,IAAIG,IAAI,GAAG,MAAMlB,GAAG,CAACc,OAAO,CAACC,MAAM,EAAEC,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEG,WAAW,CAAC;MAEvD,IAAIH,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEI,QAAQ,EAAE;QAClB7B,MAAM,CAAC0B,KAAK,CAAC,iBAAiB,EAAE,sBAAsB,EAAED,IAAI,CAACI,QAAQ,CAAC;QACtE,MAAMpB,GAAG,CACNqB,qBAAqB,CAAC;UAAED,QAAQ,EAAEJ,IAAI,CAACI;QAAS,CAAC,CAAC,CAClDE,IAAI,CAAEC,WAAW,IAAML,IAAI,GAAGK,WAAY,CAAC,CAC3CC,KAAK,CAAEC,CAAC,IAAKlC,MAAM,CAACmC,IAAI,CAAC,iBAAiB,EAAE,uBAAuB,EAAED,CAAC,CAAC,CAAC;MAC7E,CAAC,MAAM,IAAId,SAAS,CAACgB,IAAI,CAACC,2BAA2B,EAAE;QACrD,MAAM5B,GAAG,CAACqB,qBAAqB,CAAC;UAAED,QAAQ,EAAEL;QAAO,CAAC,CAAC,CAACO,IAAI,CAAEC,WAAW,IAAML,IAAI,GAAGK,WAAY,CAAC;MACnG;MAEA,IAAIZ,SAAS,CAACgB,IAAI,CAACE,gCAAgC,EAAE;QACnDtC,MAAM,CAAC0B,KAAK,CAAC,iBAAiB,EAAE,8DAA8D,CAAC;QAC/F,MAAML,+BAA+B,EAAE,CAACY,KAAK,CAAEC,CAAC,IAAK;UACnDlC,MAAM,CAACmC,IAAI,CAAC,iBAAiB,EAAE,oCAAoC,EAAED,CAAC,CAAC;QACzE,CAAC,CAAC;MACJ;MAEA,MAAMK,OAAO,CAACC,UAAU,CAAC,CAAChC,SAAS,CAACC,GAAG,EAAEC,YAAY,CAAC,EAAEQ,oBAAoB,CAACT,GAAG,CAAC,CAAC,CAAC;MAEnFT,MAAM,CAAC0B,KAAK,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;MACtDP,cAAc,CAACQ,IAAI,CAAC;MAEpB,OAAOA,IAAI;IACb,CAAC,CAAC,OAAOO,CAAC,EAAE;MACV,MAAM7B,KAAK,GAAG6B,CAA6B;MAE3C,IAAIzB,GAAG,CAACgC,cAAc,EAAE;QACtB,IAAIrC,sBAAsB,CAACC,KAAK,CAAC,EAAE;UACjCL,MAAM,CAACmC,IAAI,CAAC,iBAAiB,EAAE,4BAA4B,EAAE9B,KAAK,CAACqC,OAAO,EAAErC,KAAK,CAACE,IAAI,CAAC;UACvFP,MAAM,CAACmC,IAAI,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;UACnD,MAAM1B,GAAG,CAACkC,eAAe,EAAE,CAACV,KAAK,CAAEC,CAAC,IAAKlC,MAAM,CAACmC,IAAI,CAAC,iBAAiB,EAAE,2BAA2B,EAAED,CAAC,CAAC,CAAC;QAC1G,CAAC,MAAM,IAAIzB,GAAG,CAACmC,WAAW,EAAE;UAC1B,MAAMpC,SAAS,CAACC,GAAG,EAAEC,YAAY,CAAC;UAElCV,MAAM,CAAC0B,KAAK,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;UACvDP,cAAc,CAACV,GAAG,CAACmC,WAAW,CAAC;UAC/B,OAAOnC,GAAG,CAACmC,WAAW;QACxB;MACF;MAEA5C,MAAM,CAACmC,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,EAAE9B,KAAK,CAACqC,OAAO,EAAErC,KAAK,CAACE,IAAI,CAAC;MAC5E,MAAMF,KAAK;IACb;EACF,CAAC,EACD,CAACI,GAAG,EAAEY,+BAA+B,EAAED,SAAS,CAACgB,IAAI,CAACE,gCAAgC,CAAC,CACxF;EAED,MAAMO,UAAU,GAAG/C,WAAW,CAAC,YAAY;IACzCE,MAAM,CAAC0B,KAAK,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;IAEnD,IAAIN,SAAS,CAACgB,IAAI,CAACE,gCAAgC,EAAE;MACnDtC,MAAM,CAAC0B,KAAK,CAAC,iBAAiB,EAAE,gEAAgE,CAAC;MACjG,MAAMJ,iCAAiC,EAAE,CAACW,KAAK,CAAEC,CAAC,IAAK;QACrDlC,MAAM,CAACmC,IAAI,CAAC,iBAAiB,EAAE,kCAAkC,EAAED,CAAC,CAAC;MACvE,CAAC,CAAC;IACJ;IAEA,MAAMzB,GAAG,CAACoC,UAAU,EAAE,CAACd,IAAI,CAAC,MAAMZ,cAAc,CAAC2B,SAAS,CAAC,CAAC;IAC5D9C,MAAM,CAAC0B,KAAK,CAAC,iBAAiB,EAAE,eAAe,CAAC;EAClD,CAAC,EAAE,CAACjB,GAAG,EAAEa,iCAAiC,EAAEF,SAAS,CAACgB,IAAI,CAACE,gCAAgC,CAAC,CAAC;EAE7F,OAAO;IAAEf,OAAO;IAAEsB,UAAU;IAAEE,SAAS,EAAEA,CAAA,KAAMtC,GAAG,CAACsC,SAAS;EAAG,CAAC;AAClE,CAAC;AAED,eAAe9B,aAAa"}
@@ -73,7 +73,7 @@ const useMentionSuggestion = params => {
73
73
  return freshChannel.createMemberListQuery({
74
74
  nicknameStartsWithFilter: searchString,
75
75
  limit: mentionManager.config.suggestionLimit + 1
76
- }).next().then(members => members.filter(member => member.userId !== (currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId)));
76
+ }).next().then(members => members.filter(member => member.userId !== (currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId))).then(members => members.slice(0, mentionManager.config.suggestionLimit));
77
77
  } else {
78
78
  return freshChannel.members.sort((a, b) => {
79
79
  var _a$nickname;
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useRef","useState","useChannelHandler","isDifferentChannel","useAsyncEffect","useDebounceEffect","useUniqHandlerId","useSendbirdChat","useMentionSuggestion","params","text","selection","channel","mentionedUsers","freshChannel","setFreshChannel","refresh","url","id","sdk","onUserJoined","eventChannel","onUserLeft","onUserBanned","isGroupChannel","mentionManager","currentUser","members","setMembers","searchStringRangeRef","start","end","searchLimitedRef","updateSearchStringRange","selectionIndex","searchString","current","getSearchStringRangeInText","updateSearchLimited","mentionCount","mentionLimit","resetRefs","fetchMembers","selectionRanged","selectionContainsMentionedUser","some","it","rangeHelpers","overlaps","range","isTriggered","isValidSearchString","getSearchString","limited","length","config","isSuper","createMemberListQuery","nicknameStartsWithFilter","limit","suggestionLimit","next","then","filter","member","userId","sort","a","b","_a$nickname","nickname","localeCompare","_member$nickname","toLowerCase","startsWith","slice","catch","debounceMills","reset","searchStringRange","searchLimited"],"sources":["useMentionSuggestion.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport type { SendbirdChatSDK, SendbirdGroupChannel, SendbirdMember, SendbirdUser } from '@sendbird/uikit-utils';\nimport { isDifferentChannel, useAsyncEffect, useDebounceEffect, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../hooks/useContext';\nimport type { Range } from '../types';\n\nconst useMentionSuggestion = (params: {\n text: string;\n selection: Range;\n mentionedUsers: { user: SendbirdUser; range: Range }[];\n sdk: SendbirdChatSDK;\n channel: SendbirdGroupChannel;\n}) => {\n const { text, selection, channel, mentionedUsers } = params;\n\n const [freshChannel, setFreshChannel] = useState(channel);\n\n useAsyncEffect(async () => {\n setFreshChannel(await channel.refresh());\n }, [channel.url]);\n\n const id = useUniqHandlerId('useMentionSuggestion');\n\n useChannelHandler(params.sdk, id, {\n onUserJoined(eventChannel) {\n if (isDifferentChannel(eventChannel, channel)) return;\n setFreshChannel(eventChannel);\n },\n onUserLeft(eventChannel) {\n if (isDifferentChannel(eventChannel, channel)) return;\n setFreshChannel(eventChannel);\n },\n onUserBanned(eventChannel) {\n if (isDifferentChannel(eventChannel, channel)) return;\n if (!eventChannel.isGroupChannel()) return;\n setFreshChannel(eventChannel);\n },\n });\n\n const { mentionManager, currentUser } = useSendbirdChat();\n const [members, setMembers] = useState<SendbirdMember[]>([]);\n\n const searchStringRangeRef = useRef<Range>({ start: 0, end: 0 });\n const searchLimitedRef = useRef(false);\n\n const updateSearchStringRange = (selectionIndex: number, searchString: string) => {\n searchStringRangeRef.current = mentionManager.getSearchStringRangeInText(selectionIndex, searchString);\n return searchStringRangeRef.current;\n };\n const updateSearchLimited = (mentionCount: number, mentionLimit: number) => {\n searchLimitedRef.current = mentionCount >= mentionLimit;\n return searchLimitedRef.current;\n };\n const resetRefs = () => {\n searchLimitedRef.current = false;\n searchStringRangeRef.current = { start: 0, end: 0 };\n };\n\n const fetchMembers = async (): Promise<SendbirdMember[]> => {\n resetRefs();\n\n const selectionRanged = selection.start !== selection.end;\n if (selectionRanged) return [];\n\n const selectionContainsMentionedUser = mentionedUsers.some((it) =>\n mentionManager.rangeHelpers.overlaps(it.range, selection, 'underMore'),\n );\n if (selectionContainsMentionedUser) return [];\n\n const { isTriggered, isValidSearchString, searchString } = mentionManager.getSearchString(text, selection.start);\n if (!isTriggered() || !isValidSearchString()) return [];\n\n const limited = updateSearchLimited(mentionedUsers.length, mentionManager.config.mentionLimit);\n if (limited) return [];\n\n updateSearchStringRange(selection.start, searchString);\n\n if (freshChannel.isSuper) {\n return freshChannel\n .createMemberListQuery({\n nicknameStartsWithFilter: searchString,\n limit: mentionManager.config.suggestionLimit + 1,\n })\n .next()\n .then((members) => members.filter((member) => member.userId !== currentUser?.userId));\n } else {\n return freshChannel.members\n .sort((a, b) => a.nickname?.localeCompare(b.nickname))\n .filter(\n (member) =>\n member.nickname?.toLowerCase().startsWith(searchString.toLowerCase()) &&\n member.userId !== currentUser?.userId,\n )\n .slice(0, mentionManager.config.suggestionLimit);\n }\n };\n\n useDebounceEffect(\n () => {\n return fetchMembers()\n .then(setMembers)\n .catch(() => setMembers([]));\n },\n mentionManager.config.debounceMills,\n [text, selection],\n );\n\n return {\n members,\n reset: useCallback(() => setMembers([]), []),\n searchStringRange: searchStringRangeRef.current,\n searchLimited: searchLimitedRef.current,\n };\n};\n\nexport default useMentionSuggestion;\n"],"mappings":"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"}
1
+ {"version":3,"names":["useCallback","useRef","useState","useChannelHandler","isDifferentChannel","useAsyncEffect","useDebounceEffect","useUniqHandlerId","useSendbirdChat","useMentionSuggestion","params","text","selection","channel","mentionedUsers","freshChannel","setFreshChannel","refresh","url","id","sdk","onUserJoined","eventChannel","onUserLeft","onUserBanned","isGroupChannel","mentionManager","currentUser","members","setMembers","searchStringRangeRef","start","end","searchLimitedRef","updateSearchStringRange","selectionIndex","searchString","current","getSearchStringRangeInText","updateSearchLimited","mentionCount","mentionLimit","resetRefs","fetchMembers","selectionRanged","selectionContainsMentionedUser","some","it","rangeHelpers","overlaps","range","isTriggered","isValidSearchString","getSearchString","limited","length","config","isSuper","createMemberListQuery","nicknameStartsWithFilter","limit","suggestionLimit","next","then","filter","member","userId","slice","sort","a","b","_a$nickname","nickname","localeCompare","_member$nickname","toLowerCase","startsWith","catch","debounceMills","reset","searchStringRange","searchLimited"],"sources":["useMentionSuggestion.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport type { SendbirdChatSDK, SendbirdGroupChannel, SendbirdMember, SendbirdUser } from '@sendbird/uikit-utils';\nimport { isDifferentChannel, useAsyncEffect, useDebounceEffect, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../hooks/useContext';\nimport type { Range } from '../types';\n\nconst useMentionSuggestion = (params: {\n text: string;\n selection: Range;\n mentionedUsers: { user: SendbirdUser; range: Range }[];\n sdk: SendbirdChatSDK;\n channel: SendbirdGroupChannel;\n}) => {\n const { text, selection, channel, mentionedUsers } = params;\n\n const [freshChannel, setFreshChannel] = useState(channel);\n\n useAsyncEffect(async () => {\n setFreshChannel(await channel.refresh());\n }, [channel.url]);\n\n const id = useUniqHandlerId('useMentionSuggestion');\n\n useChannelHandler(params.sdk, id, {\n onUserJoined(eventChannel) {\n if (isDifferentChannel(eventChannel, channel)) return;\n setFreshChannel(eventChannel);\n },\n onUserLeft(eventChannel) {\n if (isDifferentChannel(eventChannel, channel)) return;\n setFreshChannel(eventChannel);\n },\n onUserBanned(eventChannel) {\n if (isDifferentChannel(eventChannel, channel)) return;\n if (!eventChannel.isGroupChannel()) return;\n setFreshChannel(eventChannel);\n },\n });\n\n const { mentionManager, currentUser } = useSendbirdChat();\n const [members, setMembers] = useState<SendbirdMember[]>([]);\n\n const searchStringRangeRef = useRef<Range>({ start: 0, end: 0 });\n const searchLimitedRef = useRef(false);\n\n const updateSearchStringRange = (selectionIndex: number, searchString: string) => {\n searchStringRangeRef.current = mentionManager.getSearchStringRangeInText(selectionIndex, searchString);\n return searchStringRangeRef.current;\n };\n const updateSearchLimited = (mentionCount: number, mentionLimit: number) => {\n searchLimitedRef.current = mentionCount >= mentionLimit;\n return searchLimitedRef.current;\n };\n const resetRefs = () => {\n searchLimitedRef.current = false;\n searchStringRangeRef.current = { start: 0, end: 0 };\n };\n\n const fetchMembers = async (): Promise<SendbirdMember[]> => {\n resetRefs();\n\n const selectionRanged = selection.start !== selection.end;\n if (selectionRanged) return [];\n\n const selectionContainsMentionedUser = mentionedUsers.some((it) =>\n mentionManager.rangeHelpers.overlaps(it.range, selection, 'underMore'),\n );\n if (selectionContainsMentionedUser) return [];\n\n const { isTriggered, isValidSearchString, searchString } = mentionManager.getSearchString(text, selection.start);\n if (!isTriggered() || !isValidSearchString()) return [];\n\n const limited = updateSearchLimited(mentionedUsers.length, mentionManager.config.mentionLimit);\n if (limited) return [];\n\n updateSearchStringRange(selection.start, searchString);\n\n if (freshChannel.isSuper) {\n return freshChannel\n .createMemberListQuery({\n nicknameStartsWithFilter: searchString,\n limit: mentionManager.config.suggestionLimit + 1,\n })\n .next()\n .then((members) => members.filter((member) => member.userId !== currentUser?.userId))\n .then((members) => members.slice(0, mentionManager.config.suggestionLimit));\n } else {\n return freshChannel.members\n .sort((a, b) => a.nickname?.localeCompare(b.nickname))\n .filter(\n (member) =>\n member.nickname?.toLowerCase().startsWith(searchString.toLowerCase()) &&\n member.userId !== currentUser?.userId,\n )\n .slice(0, mentionManager.config.suggestionLimit);\n }\n };\n\n useDebounceEffect(\n () => {\n return fetchMembers()\n .then(setMembers)\n .catch(() => setMembers([]));\n },\n mentionManager.config.debounceMills,\n [text, selection],\n );\n\n return {\n members,\n reset: useCallback(() => setMembers([]), []),\n searchStringRange: searchStringRangeRef.current,\n searchLimited: searchLimitedRef.current,\n };\n};\n\nexport default useMentionSuggestion;\n"],"mappings":"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"}
@@ -18,13 +18,14 @@ const useMentionTextInput = params => {
18
18
  // TODO: Refactor text edit logic more clearly
19
19
  useEffect(() => {
20
20
  if (mentionManager.shouldUseMentionedMessageTemplate(params.messageToEdit, sbOptions.uikit.groupChannel.channel.enableMention)) {
21
- const result = mentionManager.templateToTextAndMentionedUsers(params.messageToEdit.mentionedMessageTemplate, params.messageToEdit.mentionedUsers);
21
+ var _params$messageToEdit, _params$messageToEdit2;
22
+ const result = mentionManager.templateToTextAndMentionedUsers(((_params$messageToEdit = params.messageToEdit) === null || _params$messageToEdit === void 0 ? void 0 : _params$messageToEdit.mentionedMessageTemplate) ?? '', ((_params$messageToEdit2 = params.messageToEdit) === null || _params$messageToEdit2 === void 0 ? void 0 : _params$messageToEdit2.mentionedUsers) ?? []);
22
23
  mentionedUsersRef.current = result.mentionedUsers;
23
24
  setText(result.mentionedText);
24
25
  } else {
25
- var _params$messageToEdit;
26
+ var _params$messageToEdit3;
26
27
  mentionedUsersRef.current = [];
27
- if ((_params$messageToEdit = params.messageToEdit) !== null && _params$messageToEdit !== void 0 && _params$messageToEdit.isUserMessage()) {
28
+ if ((_params$messageToEdit3 = params.messageToEdit) !== null && _params$messageToEdit3 !== void 0 && _params$messageToEdit3.isUserMessage()) {
28
29
  setText(params.messageToEdit.message);
29
30
  }
30
31
  }