@sendbird/uikit-react-native 3.0.4-rc.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) 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/createFileService.native.js +4 -1
  46. package/lib/commonjs/platform/createFileService.native.js.map +1 -1
  47. package/lib/commonjs/platform/createMediaService.native.js +1 -1
  48. package/lib/commonjs/platform/createMediaService.native.js.map +1 -1
  49. package/lib/commonjs/platform/types.js.map +1 -1
  50. package/lib/commonjs/utils/pubsub.js +3 -1
  51. package/lib/commonjs/utils/pubsub.js.map +1 -1
  52. package/lib/commonjs/version.js +1 -1
  53. package/lib/commonjs/version.js.map +1 -1
  54. package/lib/module/components/ChannelInput/SendInput.js +153 -21
  55. package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
  56. package/lib/module/components/ChannelInput/index.js +6 -14
  57. package/lib/module/components/ChannelInput/index.js.map +1 -1
  58. package/lib/module/components/ChannelMessageList/index.js +34 -20
  59. package/lib/module/components/ChannelMessageList/index.js.map +1 -1
  60. package/lib/module/components/ChatFlatList/index.js +1 -1
  61. package/lib/module/components/ChatFlatList/index.js.map +1 -1
  62. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js +4 -1
  63. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js.map +1 -1
  64. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js +182 -0
  65. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map +1 -0
  66. package/lib/module/components/GroupChannelMessageRenderer/index.js +13 -2
  67. package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -1
  68. package/lib/module/components/MessageSearchResultItem.js +3 -9
  69. package/lib/module/components/MessageSearchResultItem.js.map +1 -1
  70. package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js +8 -7
  71. package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
  72. package/lib/module/containers/GroupChannelPreviewContainer.js +4 -10
  73. package/lib/module/containers/GroupChannelPreviewContainer.js.map +1 -1
  74. package/lib/module/containers/SendbirdUIKitContainer.js +43 -9
  75. package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
  76. package/lib/module/contexts/SendbirdChatCtx.js +6 -1
  77. package/lib/module/contexts/SendbirdChatCtx.js.map +1 -1
  78. package/lib/module/domain/groupChannel/component/GroupChannelInput.js +5 -1
  79. package/lib/module/domain/groupChannel/component/GroupChannelInput.js.map +1 -1
  80. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +50 -13
  81. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  82. package/lib/module/domain/groupChannel/module/moduleContext.js +39 -4
  83. package/lib/module/domain/groupChannel/module/moduleContext.js.map +1 -1
  84. package/lib/module/domain/groupChannel/types.js.map +1 -1
  85. package/lib/module/domain/openChannel/types.js.map +1 -1
  86. package/lib/module/fragments/createGroupChannelFragment.js +19 -0
  87. package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
  88. package/lib/module/hooks/useConnection.js +2 -1
  89. package/lib/module/hooks/useConnection.js.map +1 -1
  90. package/lib/module/hooks/useMentionSuggestion.js +1 -1
  91. package/lib/module/hooks/useMentionSuggestion.js.map +1 -1
  92. package/lib/module/hooks/useMentionTextInput.js +4 -3
  93. package/lib/module/hooks/useMentionTextInput.js.map +1 -1
  94. package/lib/module/libs/MentionManager.js.map +1 -1
  95. package/lib/module/localization/StringSet.type.js.map +1 -1
  96. package/lib/module/localization/createBaseStringSet.js +30 -1
  97. package/lib/module/localization/createBaseStringSet.js.map +1 -1
  98. package/lib/module/platform/createFileService.native.js +5 -2
  99. package/lib/module/platform/createFileService.native.js.map +1 -1
  100. package/lib/module/platform/createMediaService.native.js +1 -1
  101. package/lib/module/platform/createMediaService.native.js.map +1 -1
  102. package/lib/module/platform/types.js.map +1 -1
  103. package/lib/module/utils/pubsub.js +3 -1
  104. package/lib/module/utils/pubsub.js.map +1 -1
  105. package/lib/module/version.js +1 -1
  106. package/lib/module/version.js.map +1 -1
  107. package/lib/typescript/src/components/ChannelInput/index.d.ts +2 -0
  108. package/lib/typescript/src/components/ChannelMessageList/index.d.ts +4 -1
  109. package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.d.ts +9 -0
  110. package/lib/typescript/src/components/GroupChannelMessageRenderer/index.d.ts +1 -0
  111. package/lib/typescript/src/components/OpenChannelMessageRenderer/index.d.ts +1 -0
  112. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +4 -2
  113. package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +4 -0
  114. package/lib/typescript/src/domain/groupChannel/types.d.ts +6 -2
  115. package/lib/typescript/src/domain/openChannel/component/OpenChannelHeader.d.ts +1 -1
  116. package/lib/typescript/src/domain/openChannel/types.d.ts +1 -2
  117. package/lib/typescript/src/libs/MentionManager.d.ts +1 -4
  118. package/lib/typescript/src/localization/StringSet.type.d.ts +7 -1
  119. package/lib/typescript/src/platform/types.d.ts +10 -11
  120. package/lib/typescript/src/version.d.ts +1 -1
  121. package/package.json +7 -6
  122. package/src/components/ChannelInput/SendInput.tsx +184 -51
  123. package/src/components/ChannelInput/index.tsx +11 -15
  124. package/src/components/ChannelMessageList/index.tsx +45 -27
  125. package/src/components/ChatFlatList/index.tsx +1 -1
  126. package/src/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.tsx +5 -1
  127. package/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.tsx +177 -0
  128. package/src/components/GroupChannelMessageRenderer/index.tsx +16 -1
  129. package/src/components/MessageSearchResultItem.tsx +3 -5
  130. package/src/components/ReactionAddons/BottomSheetReactionAddon.tsx +6 -7
  131. package/src/containers/GroupChannelPreviewContainer.tsx +6 -7
  132. package/src/containers/SendbirdUIKitContainer.tsx +40 -10
  133. package/src/contexts/SendbirdChatCtx.tsx +7 -1
  134. package/src/domain/groupChannel/component/GroupChannelInput.tsx +5 -1
  135. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +46 -13
  136. package/src/domain/groupChannel/module/moduleContext.tsx +38 -3
  137. package/src/domain/groupChannel/types.ts +8 -2
  138. package/src/domain/openChannel/types.ts +1 -2
  139. package/src/fragments/createGroupChannelFragment.tsx +15 -0
  140. package/src/hooks/useConnection.ts +1 -1
  141. package/src/hooks/useMentionSuggestion.ts +2 -1
  142. package/src/hooks/useMentionTextInput.ts +2 -2
  143. package/src/libs/MentionManager.tsx +1 -8
  144. package/src/localization/StringSet.type.ts +11 -0
  145. package/src/localization/createBaseStringSet.ts +30 -0
  146. package/src/platform/createFileService.native.ts +5 -1
  147. package/src/platform/createMediaService.native.tsx +1 -1
  148. package/src/platform/types.ts +9 -9
  149. package/src/utils/pubsub.ts +3 -1
  150. package/src/version.ts +1 -1
@@ -1,4 +1,4 @@
1
- import React, { useCallback, useState } from 'react';
1
+ import React, { useCallback, useEffect, useState } from 'react';
2
2
  import { useAppFeatures } from '@sendbird/uikit-chat-hooks';
3
3
  import { useUIKitConfig } from '@sendbird/uikit-tools';
4
4
  import { confirmAndMarkAsDelivered, useAppState, useForceUpdate } from '@sendbird/uikit-utils';
@@ -55,6 +55,11 @@ export const SendbirdChatProvider = _ref => {
55
55
  // 'active' | 'background' | 'inactive' | 'unknown' | 'extension';
56
56
  if (status === 'active') sdkInstance.connectionState === 'CLOSED' && sdkInstance.setForegroundState();else if (status === 'background') sdkInstance.connectionState === 'OPEN' && sdkInstance.setBackgroundState();
57
57
  });
58
+ useEffect(() => {
59
+ return () => {
60
+ sdkInstance.disconnect().then(() => _setCurrentUser(undefined));
61
+ };
62
+ }, [sdkInstance]);
58
63
  const value = {
59
64
  sdk: sdkInstance,
60
65
  emojiManager,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useState","useAppFeatures","useUIKitConfig","confirmAndMarkAsDelivered","useAppState","useForceUpdate","SendbirdChatContext","createContext","SendbirdChatProvider","_ref","children","sdkInstance","emojiManager","mentionManager","imageCompressionConfig","enableAutoPushTokenRegistration","enableUseUserIdForNickname","enableImageCompression","currentUser","_setCurrentUser","forceUpdate","appFeatures","configs","configsWithAppAttr","setCurrentUser","user","updateCurrentUserInfo","nickname","profile","Error","params","profileUrl","profileImage","markAsDeliveredWithChannel","channel","deliveryReceiptEnabled","status","connectionState","setForegroundState","setBackgroundState","value","sdk","sbOptions","appInfo","uikit","uikitWithAppInfo","chat","autoPushTokenRegistrationEnabled","useUserIdForNicknameEnabled","imageCompressionEnabled","createElement","Provider"],"sources":["SendbirdChatCtx.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\n\nimport { useAppFeatures } from '@sendbird/uikit-chat-hooks';\nimport { SBUConfig, useUIKitConfig } from '@sendbird/uikit-tools';\nimport type {\n SendbirdChatSDK,\n SendbirdGroupChannel,\n SendbirdUser,\n SendbirdUserUpdateParams,\n} from '@sendbird/uikit-utils';\nimport { confirmAndMarkAsDelivered, useAppState, useForceUpdate } from '@sendbird/uikit-utils';\n\nimport type EmojiManager from '../libs/EmojiManager';\nimport type ImageCompressionConfig from '../libs/ImageCompressionConfig';\nimport type MentionManager from '../libs/MentionManager';\nimport type { FileType } from '../platform/types';\n\nexport interface ChatRelatedFeaturesInUIKit {\n enableAutoPushTokenRegistration: boolean;\n enableUseUserIdForNickname: boolean;\n enableImageCompression: boolean;\n}\n\ninterface Props extends ChatRelatedFeaturesInUIKit, React.PropsWithChildren {\n sdkInstance: SendbirdChatSDK;\n emojiManager: EmojiManager;\n mentionManager: MentionManager;\n imageCompressionConfig: ImageCompressionConfig;\n}\n\nexport type SendbirdChatContextType = {\n sdk: SendbirdChatSDK;\n emojiManager: EmojiManager;\n mentionManager: MentionManager;\n imageCompressionConfig: ImageCompressionConfig;\n currentUser?: SendbirdUser;\n setCurrentUser: React.Dispatch<React.SetStateAction<SendbirdUser | undefined>>;\n\n // helper functions\n updateCurrentUserInfo: (nickname?: string, profile?: string | FileType) => Promise<SendbirdUser>;\n markAsDeliveredWithChannel: (channel: SendbirdGroupChannel) => void;\n\n sbOptions: {\n // UIKit options\n uikit: SBUConfig;\n uikitWithAppInfo: {\n groupChannel: {\n channel: {\n enableReactions: boolean;\n enableOgtag: boolean;\n };\n setting: {\n enableMessageSearch: boolean;\n };\n };\n openChannel: {\n channel: {\n enableOgtag: boolean;\n };\n };\n };\n\n // Chat related options in UIKit\n chat: {\n imageCompressionEnabled: boolean;\n useUserIdForNicknameEnabled: boolean;\n autoPushTokenRegistrationEnabled: boolean; // RN only\n };\n\n // Sendbird application options\n appInfo: {\n deliveryReceiptEnabled: boolean;\n broadcastChannelEnabled: boolean;\n superGroupChannelEnabled: boolean;\n reactionEnabled: boolean;\n };\n };\n};\n\nexport const SendbirdChatContext = React.createContext<SendbirdChatContextType | null>(null);\nexport const SendbirdChatProvider = ({\n children,\n sdkInstance,\n emojiManager,\n mentionManager,\n imageCompressionConfig,\n enableAutoPushTokenRegistration,\n enableUseUserIdForNickname,\n enableImageCompression,\n}: Props) => {\n const [currentUser, _setCurrentUser] = useState<SendbirdUser>();\n const forceUpdate = useForceUpdate();\n const appFeatures = useAppFeatures(sdkInstance);\n const { configs, configsWithAppAttr } = useUIKitConfig();\n\n const setCurrentUser: SendbirdChatContextType['setCurrentUser'] = useCallback((user) => {\n // NOTE: Sendbird SDK handle User object is always same object, so force update after setCurrentUser\n _setCurrentUser(user);\n forceUpdate();\n }, []);\n\n const updateCurrentUserInfo: SendbirdChatContextType['updateCurrentUserInfo'] = useCallback(\n async (nickname, profile) => {\n let user = currentUser;\n\n if (!user) throw new Error('Current user is not defined, please connect using `useConnection()` hook first');\n\n const params: SendbirdUserUpdateParams = {};\n\n if (!nickname) {\n params.nickname = user.nickname;\n } else {\n params.nickname = nickname;\n }\n\n if (!profile) {\n params.profileUrl = user.profileUrl;\n } else if (typeof profile === 'string') {\n params.profileUrl = profile;\n } else if (typeof profile === 'object') {\n params.profileImage = profile;\n } else {\n throw new Error(`Cannot update profile, not supported profile type(${typeof profile})`);\n }\n\n user = await sdkInstance.updateCurrentUserInfo(params);\n\n setCurrentUser(user);\n return user;\n },\n [sdkInstance, currentUser, setCurrentUser],\n );\n\n const markAsDeliveredWithChannel: SendbirdChatContextType['markAsDeliveredWithChannel'] = useCallback(\n (channel: SendbirdGroupChannel) => {\n if (appFeatures.deliveryReceiptEnabled) confirmAndMarkAsDelivered([channel]);\n },\n [sdkInstance, appFeatures.deliveryReceiptEnabled],\n );\n\n useAppState('change', (status) => {\n // 'active' | 'background' | 'inactive' | 'unknown' | 'extension';\n if (status === 'active') sdkInstance.connectionState === 'CLOSED' && sdkInstance.setForegroundState();\n else if (status === 'background') sdkInstance.connectionState === 'OPEN' && sdkInstance.setBackgroundState();\n });\n\n const value: SendbirdChatContextType = {\n sdk: sdkInstance,\n emojiManager,\n mentionManager,\n imageCompressionConfig,\n currentUser,\n setCurrentUser,\n\n updateCurrentUserInfo,\n markAsDeliveredWithChannel,\n\n // TODO: Options should be moved to the common area at the higher level to be passed to the context of each product.\n // For example, common -> chat context, common -> calls context\n sbOptions: {\n appInfo: appFeatures,\n uikit: configs,\n uikitWithAppInfo: configsWithAppAttr(sdkInstance),\n chat: {\n autoPushTokenRegistrationEnabled: enableAutoPushTokenRegistration,\n useUserIdForNicknameEnabled: enableUseUserIdForNickname,\n imageCompressionEnabled: enableImageCompression,\n },\n },\n };\n\n return <SendbirdChatContext.Provider value={value}>{children}</SendbirdChatContext.Provider>;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useCallback","useEffect","useState","useAppFeatures","useUIKitConfig","confirmAndMarkAsDelivered","useAppState","useForceUpdate","SendbirdChatContext","createContext","SendbirdChatProvider","_ref","children","sdkInstance","emojiManager","mentionManager","imageCompressionConfig","enableAutoPushTokenRegistration","enableUseUserIdForNickname","enableImageCompression","currentUser","_setCurrentUser","forceUpdate","appFeatures","configs","configsWithAppAttr","setCurrentUser","user","updateCurrentUserInfo","nickname","profile","Error","params","profileUrl","profileImage","markAsDeliveredWithChannel","channel","deliveryReceiptEnabled","status","connectionState","setForegroundState","setBackgroundState","disconnect","then","undefined","value","sdk","sbOptions","appInfo","uikit","uikitWithAppInfo","chat","autoPushTokenRegistrationEnabled","useUserIdForNicknameEnabled","imageCompressionEnabled","createElement","Provider"],"sources":["SendbirdChatCtx.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react';\n\nimport { useAppFeatures } from '@sendbird/uikit-chat-hooks';\nimport { SBUConfig, useUIKitConfig } from '@sendbird/uikit-tools';\nimport type {\n SendbirdChatSDK,\n SendbirdGroupChannel,\n SendbirdUser,\n SendbirdUserUpdateParams,\n} from '@sendbird/uikit-utils';\nimport { confirmAndMarkAsDelivered, useAppState, useForceUpdate } from '@sendbird/uikit-utils';\n\nimport type EmojiManager from '../libs/EmojiManager';\nimport type ImageCompressionConfig from '../libs/ImageCompressionConfig';\nimport type MentionManager from '../libs/MentionManager';\nimport type { FileType } from '../platform/types';\n\nexport interface ChatRelatedFeaturesInUIKit {\n enableAutoPushTokenRegistration: boolean;\n enableUseUserIdForNickname: boolean;\n enableImageCompression: boolean;\n}\n\ninterface Props extends ChatRelatedFeaturesInUIKit, React.PropsWithChildren {\n sdkInstance: SendbirdChatSDK;\n emojiManager: EmojiManager;\n mentionManager: MentionManager;\n imageCompressionConfig: ImageCompressionConfig;\n}\n\nexport type SendbirdChatContextType = {\n sdk: SendbirdChatSDK;\n emojiManager: EmojiManager;\n mentionManager: MentionManager;\n imageCompressionConfig: ImageCompressionConfig;\n currentUser?: SendbirdUser;\n setCurrentUser: React.Dispatch<React.SetStateAction<SendbirdUser | undefined>>;\n\n // helper functions\n updateCurrentUserInfo: (nickname?: string, profile?: string | FileType) => Promise<SendbirdUser>;\n markAsDeliveredWithChannel: (channel: SendbirdGroupChannel) => void;\n\n sbOptions: {\n // UIKit options\n uikit: SBUConfig;\n uikitWithAppInfo: {\n groupChannel: {\n channel: {\n enableReactions: boolean;\n enableOgtag: boolean;\n };\n setting: {\n enableMessageSearch: boolean;\n };\n };\n openChannel: {\n channel: {\n enableOgtag: boolean;\n };\n };\n };\n\n // Chat related options in UIKit\n chat: {\n imageCompressionEnabled: boolean;\n useUserIdForNicknameEnabled: boolean;\n autoPushTokenRegistrationEnabled: boolean; // RN only\n };\n\n // Sendbird application options\n appInfo: {\n deliveryReceiptEnabled: boolean;\n broadcastChannelEnabled: boolean;\n superGroupChannelEnabled: boolean;\n reactionEnabled: boolean;\n };\n };\n};\n\nexport const SendbirdChatContext = React.createContext<SendbirdChatContextType | null>(null);\nexport const SendbirdChatProvider = ({\n children,\n sdkInstance,\n emojiManager,\n mentionManager,\n imageCompressionConfig,\n enableAutoPushTokenRegistration,\n enableUseUserIdForNickname,\n enableImageCompression,\n}: Props) => {\n const [currentUser, _setCurrentUser] = useState<SendbirdUser>();\n const forceUpdate = useForceUpdate();\n const appFeatures = useAppFeatures(sdkInstance);\n const { configs, configsWithAppAttr } = useUIKitConfig();\n\n const setCurrentUser: SendbirdChatContextType['setCurrentUser'] = useCallback((user) => {\n // NOTE: Sendbird SDK handle User object is always same object, so force update after setCurrentUser\n _setCurrentUser(user);\n forceUpdate();\n }, []);\n\n const updateCurrentUserInfo: SendbirdChatContextType['updateCurrentUserInfo'] = useCallback(\n async (nickname, profile) => {\n let user = currentUser;\n\n if (!user) throw new Error('Current user is not defined, please connect using `useConnection()` hook first');\n\n const params: SendbirdUserUpdateParams = {};\n\n if (!nickname) {\n params.nickname = user.nickname;\n } else {\n params.nickname = nickname;\n }\n\n if (!profile) {\n params.profileUrl = user.profileUrl;\n } else if (typeof profile === 'string') {\n params.profileUrl = profile;\n } else if (typeof profile === 'object') {\n params.profileImage = profile;\n } else {\n throw new Error(`Cannot update profile, not supported profile type(${typeof profile})`);\n }\n\n user = await sdkInstance.updateCurrentUserInfo(params);\n\n setCurrentUser(user);\n return user;\n },\n [sdkInstance, currentUser, setCurrentUser],\n );\n\n const markAsDeliveredWithChannel: SendbirdChatContextType['markAsDeliveredWithChannel'] = useCallback(\n (channel: SendbirdGroupChannel) => {\n if (appFeatures.deliveryReceiptEnabled) confirmAndMarkAsDelivered([channel]);\n },\n [sdkInstance, appFeatures.deliveryReceiptEnabled],\n );\n\n useAppState('change', (status) => {\n // 'active' | 'background' | 'inactive' | 'unknown' | 'extension';\n if (status === 'active') sdkInstance.connectionState === 'CLOSED' && sdkInstance.setForegroundState();\n else if (status === 'background') sdkInstance.connectionState === 'OPEN' && sdkInstance.setBackgroundState();\n });\n\n useEffect(() => {\n return () => {\n sdkInstance.disconnect().then(() => _setCurrentUser(undefined));\n };\n }, [sdkInstance]);\n\n const value: SendbirdChatContextType = {\n sdk: sdkInstance,\n emojiManager,\n mentionManager,\n imageCompressionConfig,\n currentUser,\n setCurrentUser,\n\n updateCurrentUserInfo,\n markAsDeliveredWithChannel,\n\n // TODO: Options should be moved to the common area at the higher level to be passed to the context of each product.\n // For example, common -> chat context, common -> calls context\n sbOptions: {\n appInfo: appFeatures,\n uikit: configs,\n uikitWithAppInfo: configsWithAppAttr(sdkInstance),\n chat: {\n autoPushTokenRegistrationEnabled: enableAutoPushTokenRegistration,\n useUserIdForNicknameEnabled: enableUseUserIdForNickname,\n imageCompressionEnabled: enableImageCompression,\n },\n },\n };\n\n return <SendbirdChatContext.Provider value={value}>{children}</SendbirdChatContext.Provider>;\n};\n"],"mappings":"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"}
@@ -6,15 +6,19 @@ import { GroupChannelContexts } from '../module/moduleContext';
6
6
  const GroupChannelInput = props => {
7
7
  const {
8
8
  channel,
9
+ keyboardAvoidOffset = 0,
9
10
  messageToEdit,
10
11
  setMessageToEdit,
11
- keyboardAvoidOffset = 0
12
+ messageToReply,
13
+ setMessageToReply
12
14
  } = useContext(GroupChannelContexts.Fragment);
13
15
  const chatAvailableState = getGroupChannelChatAvailableState(channel);
14
16
  return /*#__PURE__*/React.createElement(ChannelInput, _extends({
15
17
  channel: channel,
16
18
  messageToEdit: messageToEdit,
17
19
  setMessageToEdit: setMessageToEdit,
20
+ messageToReply: messageToReply,
21
+ setMessageToReply: setMessageToReply,
18
22
  inputMuted: chatAvailableState.muted,
19
23
  inputFrozen: chatAvailableState.frozen,
20
24
  inputDisabled: chatAvailableState.disabled,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useContext","getGroupChannelChatAvailableState","ChannelInput","GroupChannelContexts","GroupChannelInput","props","channel","messageToEdit","setMessageToEdit","keyboardAvoidOffset","Fragment","chatAvailableState","createElement","_extends","inputMuted","muted","inputFrozen","frozen","inputDisabled","disabled","memo"],"sources":["GroupChannelInput.tsx"],"sourcesContent":["import React, { useContext } from 'react';\n\nimport { getGroupChannelChatAvailableState } from '@sendbird/uikit-utils';\n\nimport ChannelInput from '../../../components/ChannelInput';\nimport { GroupChannelContexts } from '../module/moduleContext';\nimport type { GroupChannelProps } from '../types';\n\nconst GroupChannelInput = (props: GroupChannelProps['Input']) => {\n const {\n channel,\n messageToEdit,\n setMessageToEdit,\n keyboardAvoidOffset = 0,\n } = useContext(GroupChannelContexts.Fragment);\n\n const chatAvailableState = getGroupChannelChatAvailableState(channel);\n\n return (\n <ChannelInput\n channel={channel}\n messageToEdit={messageToEdit}\n setMessageToEdit={setMessageToEdit}\n inputMuted={chatAvailableState.muted}\n inputFrozen={chatAvailableState.frozen}\n inputDisabled={chatAvailableState.disabled}\n keyboardAvoidOffset={keyboardAvoidOffset}\n {...props}\n />\n );\n};\n\nexport default React.memo(GroupChannelInput);\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,UAAU,QAAQ,OAAO;AAEzC,SAASC,iCAAiC,QAAQ,uBAAuB;AAEzE,OAAOC,YAAY,MAAM,kCAAkC;AAC3D,SAASC,oBAAoB,QAAQ,yBAAyB;AAG9D,MAAMC,iBAAiB,GAAIC,KAAiC,IAAK;EAC/D,MAAM;IACJC,OAAO;IACPC,aAAa;IACbC,gBAAgB;IAChBC,mBAAmB,GAAG;EACxB,CAAC,GAAGT,UAAU,CAACG,oBAAoB,CAACO,QAAQ,CAAC;EAE7C,MAAMC,kBAAkB,GAAGV,iCAAiC,CAACK,OAAO,CAAC;EAErE,oBACEP,KAAA,CAAAa,aAAA,CAACV,YAAY,EAAAW,QAAA;IACXP,OAAO,EAAEA,OAAQ;IACjBC,aAAa,EAAEA,aAAc;IAC7BC,gBAAgB,EAAEA,gBAAiB;IACnCM,UAAU,EAAEH,kBAAkB,CAACI,KAAM;IACrCC,WAAW,EAAEL,kBAAkB,CAACM,MAAO;IACvCC,aAAa,EAAEP,kBAAkB,CAACQ,QAAS;IAC3CV,mBAAmB,EAAEA;EAAoB,GACrCJ,KAAK,EACT;AAEN,CAAC;AAED,4BAAeN,KAAK,CAACqB,IAAI,CAAChB,iBAAiB,CAAC"}
1
+ {"version":3,"names":["React","useContext","getGroupChannelChatAvailableState","ChannelInput","GroupChannelContexts","GroupChannelInput","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","messageToReply","setMessageToReply","Fragment","chatAvailableState","createElement","_extends","inputMuted","muted","inputFrozen","frozen","inputDisabled","disabled","memo"],"sources":["GroupChannelInput.tsx"],"sourcesContent":["import React, { useContext } from 'react';\n\nimport { getGroupChannelChatAvailableState } from '@sendbird/uikit-utils';\n\nimport ChannelInput from '../../../components/ChannelInput';\nimport { GroupChannelContexts } from '../module/moduleContext';\nimport type { GroupChannelProps } from '../types';\n\nconst GroupChannelInput = (props: GroupChannelProps['Input']) => {\n const {\n channel,\n keyboardAvoidOffset = 0,\n messageToEdit,\n setMessageToEdit,\n messageToReply,\n setMessageToReply,\n } = useContext(GroupChannelContexts.Fragment);\n\n const chatAvailableState = getGroupChannelChatAvailableState(channel);\n\n return (\n <ChannelInput\n channel={channel}\n messageToEdit={messageToEdit}\n setMessageToEdit={setMessageToEdit}\n messageToReply={messageToReply}\n setMessageToReply={setMessageToReply}\n inputMuted={chatAvailableState.muted}\n inputFrozen={chatAvailableState.frozen}\n inputDisabled={chatAvailableState.disabled}\n keyboardAvoidOffset={keyboardAvoidOffset}\n {...props}\n />\n );\n};\n\nexport default React.memo(GroupChannelInput);\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,UAAU,QAAQ,OAAO;AAEzC,SAASC,iCAAiC,QAAQ,uBAAuB;AAEzE,OAAOC,YAAY,MAAM,kCAAkC;AAC3D,SAASC,oBAAoB,QAAQ,yBAAyB;AAG9D,MAAMC,iBAAiB,GAAIC,KAAiC,IAAK;EAC/D,MAAM;IACJC,OAAO;IACPC,mBAAmB,GAAG,CAAC;IACvBC,aAAa;IACbC,gBAAgB;IAChBC,cAAc;IACdC;EACF,CAAC,GAAGX,UAAU,CAACG,oBAAoB,CAACS,QAAQ,CAAC;EAE7C,MAAMC,kBAAkB,GAAGZ,iCAAiC,CAACK,OAAO,CAAC;EAErE,oBACEP,KAAA,CAAAe,aAAA,CAACZ,YAAY,EAAAa,QAAA;IACXT,OAAO,EAAEA,OAAQ;IACjBE,aAAa,EAAEA,aAAc;IAC7BC,gBAAgB,EAAEA,gBAAiB;IACnCC,cAAc,EAAEA,cAAe;IAC/BC,iBAAiB,EAAEA,iBAAkB;IACrCK,UAAU,EAAEH,kBAAkB,CAACI,KAAM;IACrCC,WAAW,EAAEL,kBAAkB,CAACM,MAAO;IACvCC,aAAa,EAAEP,kBAAkB,CAACQ,QAAS;IAC3Cd,mBAAmB,EAAEA;EAAoB,GACrCF,KAAK,EACT;AAEN,CAAC;AAED,4BAAeN,KAAK,CAACuB,IAAI,CAAClB,iBAAiB,CAAC"}
@@ -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":";AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAG5D,SAASC,iBAAiB,QAAQ,4BAA4B;AAC9D,SAASC,QAAQ,QAAQ,yCAAyC;AAElE,SAASC,kBAAkB,EAAEC,gBAAgB,EAAEC,eAAe,EAAEC,gBAAgB,QAAQ,uBAAuB;AAE/G,OAAOC,kBAAkB,MAAM,wCAAwC;AACvE,SAASC,6BAA6B,EAAEC,gCAAgC,QAAQ,oBAAoB;AACpG,SAASC,eAAe,EAAEC,eAAe,QAAQ,2BAA2B;AAC5E,SAASC,oBAAoB,QAAQ,yBAAyB;AAG9D,MAAMC,uBAAuB,GAAIC,KAAuC,IAAK;EAC3E,MAAMC,KAAK,GAAGb,QAAQ,EAAE;EACxB,MAAM;IAAEc;EAAQ,CAAC,GAAGN,eAAe,EAAE;EACrC,MAAM;IAAEO;EAAI,CAAC,GAAGN,eAAe,EAAE;EACjC,MAAM;IAAEO,gBAAgB;IAAEC;EAAkB,CAAC,GAAGrB,UAAU,CAACc,oBAAoB,CAACQ,QAAQ,CAAC;EACzF,MAAM;IAAEC;EAAU,CAAC,GAAGvB,UAAU,CAACc,oBAAoB,CAACU,MAAM,CAAC;EAE7D,MAAMC,EAAE,GAAGjB,gBAAgB,CAAC,yBAAyB,CAAC;EACtD,MAAMkB,GAAG,GAAGxB,MAAM,CAA4B,IAAI,CAAC;EACnD,MAAMyB,YAAY,GAAGpB,eAAe,EAAE;;EAEtC;EACA,MAAMqB,kBAAkB,GAAG,SAAAA,CAAA,EAAmC;IAAA,IAAlCC,QAAQ,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAAA,IAAEG,OAAO,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;IACvDI,UAAU,CAAC,MAAM;MAAA,IAAAC,YAAA;MACf,CAAAA,YAAA,GAAAT,GAAG,CAACU,OAAO,cAAAD,YAAA,uBAAXA,YAAA,CAAaE,cAAc,CAAC;QAAEC,MAAM,EAAE,CAAC;QAAET;MAAS,CAAC,CAAC;IACtD,CAAC,EAAEI,OAAO,CAAC;EACb,CAAC;;EAED;EACA,MAAMM,iBAAiB,GAAG,SAAAA,CAAA,EAA8C;IAAA,IAA7CC,KAAK,GAAAV,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;IAAA,IAAED,QAAQ,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAAA,IAAEG,OAAO,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;IACjEI,UAAU,CAAC,MAAM;MAAA,IAAAO,aAAA;MACf,CAAAA,aAAA,GAAAf,GAAG,CAACU,OAAO,cAAAK,aAAA,uBAAXA,aAAA,CAAaC,aAAa,CAAC;QAAEF,KAAK;QAAEX,QAAQ;QAAEc,YAAY,EAAE;MAAI,CAAC,CAAC;IACpE,CAAC,EAAEV,OAAO,CAAC;EACb,CAAC;EAED,MAAMW,eAAe,GAAGtC,gBAAgB,CAAC,UAACuC,SAAiB,EAAqC;IAAA,IAAnCC,aAAa,GAAAhB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAChF,MAAMiB,iBAAiB,GAAG/B,KAAK,CAACgC,QAAQ,CAACC,SAAS,CAAEC,EAAE,IAAKA,EAAE,CAACL,SAAS,KAAKA,SAAS,CAAC;IACtF,MAAMM,gBAAgB,GAAGJ,iBAAiB,GAAG,CAAC,CAAC;IAE/C,IAAII,gBAAgB,EAAE;MACpB,IAAIL,aAAa,EAAE;QACjBZ,UAAU,CAAC,MAAMlB,KAAK,CAACoC,kBAAkB,CAAC;UAAEC,aAAa,EAAER;QAAU,CAAC,CAAC,EAAEnC,6BAA6B,CAAC;MACzG;MACA6B,iBAAiB,CAACQ,iBAAiB,EAAE,IAAI,EAAEpB,YAAY,GAAGhB,gCAAgC,GAAG,CAAC,CAAC;IACjG,CAAC,MAAM;MACL,IAAIK,KAAK,CAACsC,OAAO,CAACC,sBAAsB,IAAIV,SAAS,EAAE;QACrD,IAAIC,aAAa,EAAE9B,KAAK,CAACoC,kBAAkB,CAAC;UAAEC,aAAa,EAAER;QAAU,CAAC,CAAC;QACzE7B,KAAK,CAACwC,mCAAmC,CAACX,SAAS,CAAC;MACtD,CAAC,MAAM;QACL,OAAO,KAAK;MACd;IACF;IAEA,OAAO,IAAI;EACb,CAAC,CAAC;EAEF,MAAMY,cAAc,GAAGnD,gBAAgB,CAAC,YAAsB;IAAA,IAArBuB,QAAQ,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IACvD,IAAId,KAAK,CAAC0C,OAAO,EAAE,EAAE;MACnB1C,KAAK,CAACoC,kBAAkB,CAACpB,SAAS,CAAC;MACnChB,KAAK,CAAC2C,wBAAwB,CAAC,KAAK,CAAC;MAErC3C,KAAK,CAAC4C,kBAAkB,CAAC,MAAM;QAC7B5C,KAAK,CAAC2C,wBAAwB,CAAC,KAAK,CAAC;QACrC/B,kBAAkB,CAACC,QAAQ,CAAC;MAC9B,CAAC,CAAC;IACJ,CAAC,MAAM;MACLD,kBAAkB,CAACC,QAAQ,CAAC;IAC9B;EACF,CAAC,CAAC;EAEF1B,iBAAiB,CAACgB,GAAG,EAAEM,EAAE,EAAE;IACzBoC,iBAAiBA,CAACP,OAAO,EAAEQ,KAAK,EAAE;MAChC,IAAIzD,kBAAkB,CAACiD,OAAO,EAAEtC,KAAK,CAACsC,OAAO,CAAC,EAAE;MAChD,MAAMS,aAAa,GAAG/C,KAAK,CAACgC,QAAQ,CAAC,CAAC,CAAC;MACvC,MAAMgB,eAAe,GAAGD,aAAa,IAAIA,aAAa,CAACE,SAAS,KAAKH,KAAK,CAACG,SAAS;MACpF,MAAMC,+BAA+B,GAAG,CAAClD,KAAK,CAACmD,sBAAsB,IAAI,CAACnD,KAAK,CAAC0C,OAAO,EAAE;MACzF,IAAIM,eAAe,IAAIE,+BAA+B,EAAE;QACtDtC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC;MAC/B;IACF;EACF,CAAC,CAAC;EAEF3B,SAAS,CAAC,MAAM;IACd,OAAOsB,SAAS,CAAC6C,IAAA,IAAc;MAAA,IAAb;QAAEC;MAAK,CAAC,GAAAD,IAAA;MACxB,QAAQC,IAAI;QACV,KAAK,mBAAmB;UAAE;YACxB,IAAI,CAACrD,KAAK,CAACmD,sBAAsB,EAAE;cACjCV,cAAc,CAAC,IAAI,CAAC;YACtB;YACA;UACF;QACA,KAAK,sBAAsB;QAC3B,KAAK,sBAAsB;UAAE;YAC3BA,cAAc,CAAC,KAAK,CAAC;YACrB;UACF;MAAC;IAEL,CAAC,CAAC;EACJ,CAAC,EAAE,CAACzC,KAAK,CAACmD,sBAAsB,CAAC,CAAC;;EAElC;EACA;EACA;EACAlE,SAAS,CAAC,MAAM;IACd,IAAI0B,YAAY,IAAIX,KAAK,CAACsD,UAAU,EAAE;MACpC1B,eAAe,CAAC5B,KAAK,CAACsD,UAAU,CAACjB,aAAa,CAAC;IACjD;EACF,CAAC,EAAE,CAAC1B,YAAY,CAAC,CAAC;EAElB,MAAM4C,oBAAoB,GAAGjE,gBAAgB,CAAEkE,OAAwB,IAAK;IAC1E,MAAMC,iBAAiB,GAAG7B,eAAe,CAAC4B,OAAO,CAAC3B,SAAS,EAAE,IAAI,CAAC;IAClE,IAAI,CAAC4B,iBAAiB,EAAExD,KAAK,CAACyD,IAAI,CAACxD,OAAO,CAACyD,KAAK,CAACC,qBAAqB,EAAE,OAAO,CAAC;EAClF,CAAC,CAAC;EAEF,oBACE7E,KAAA,CAAA8E,aAAA,CAACpE,kBAAkB,EAAAqE,QAAA,KACb9D,KAAK;IACTU,GAAG,EAAEA,GAAI;IACTqD,cAAc,EAAE1D,iBAAkB;IAClC2D,aAAa,EAAE5D,gBAAiB;IAChCmD,oBAAoB,EAAEA,oBAAqB;IAC3CU,wBAAwB,EAAExB,cAAe;IACzCyB,2BAA2B,EAAEzB;EAAe,GAC5C;AAEN,CAAC;AAED,4BAAe1D,KAAK,CAACoF,IAAI,CAACpE,uBAAuB,CAAC"}
@@ -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);