@sendbird/uikit-react-native 3.7.0 → 3.7.2

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 (60) hide show
  1. package/lib/commonjs/components/ChannelMessageList/index.js +2 -3
  2. package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
  3. package/lib/commonjs/components/ChannelThreadMessageList/index.js +2 -3
  4. package/lib/commonjs/components/ChannelThreadMessageList/index.js.map +1 -1
  5. package/lib/commonjs/components/GroupChannelMessageRenderer/index.js +2 -2
  6. package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -1
  7. package/lib/commonjs/components/OpenChannelMessageRenderer/index.js +2 -2
  8. package/lib/commonjs/components/OpenChannelMessageRenderer/index.js.map +1 -1
  9. package/lib/commonjs/components/ThreadParentMessageRenderer/index.js +2 -2
  10. package/lib/commonjs/components/ThreadParentMessageRenderer/index.js.map +1 -1
  11. package/lib/commonjs/containers/SendbirdUIKitContainer.js +10 -2
  12. package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
  13. package/lib/commonjs/contexts/SBUHandlersCtx.js +25 -0
  14. package/lib/commonjs/contexts/SBUHandlersCtx.js.map +1 -0
  15. package/lib/commonjs/contexts/SendbirdChatCtx.js +1 -1
  16. package/lib/commonjs/contexts/SendbirdChatCtx.js.map +1 -1
  17. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js +2 -3
  18. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js.map +1 -1
  19. package/lib/commonjs/hooks/useContext.js +8 -1
  20. package/lib/commonjs/hooks/useContext.js.map +1 -1
  21. package/lib/commonjs/version.js +1 -1
  22. package/lib/commonjs/version.js.map +1 -1
  23. package/lib/module/components/ChannelMessageList/index.js +3 -4
  24. package/lib/module/components/ChannelMessageList/index.js.map +1 -1
  25. package/lib/module/components/ChannelThreadMessageList/index.js +3 -4
  26. package/lib/module/components/ChannelThreadMessageList/index.js.map +1 -1
  27. package/lib/module/components/GroupChannelMessageRenderer/index.js +3 -3
  28. package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -1
  29. package/lib/module/components/OpenChannelMessageRenderer/index.js +3 -3
  30. package/lib/module/components/OpenChannelMessageRenderer/index.js.map +1 -1
  31. package/lib/module/components/ThreadParentMessageRenderer/index.js +3 -3
  32. package/lib/module/components/ThreadParentMessageRenderer/index.js.map +1 -1
  33. package/lib/module/containers/SendbirdUIKitContainer.js +10 -2
  34. package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
  35. package/lib/module/contexts/SBUHandlersCtx.js +16 -0
  36. package/lib/module/contexts/SBUHandlersCtx.js.map +1 -0
  37. package/lib/module/contexts/SendbirdChatCtx.js +1 -1
  38. package/lib/module/contexts/SendbirdChatCtx.js.map +1 -1
  39. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js +3 -4
  40. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js.map +1 -1
  41. package/lib/module/hooks/useContext.js +6 -0
  42. package/lib/module/hooks/useContext.js.map +1 -1
  43. package/lib/module/version.js +1 -1
  44. package/lib/module/version.js.map +1 -1
  45. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +3 -1
  46. package/lib/typescript/src/contexts/SBUHandlersCtx.d.ts +21 -0
  47. package/lib/typescript/src/hooks/useContext.d.ts +1 -0
  48. package/lib/typescript/src/version.d.ts +1 -1
  49. package/package.json +5 -5
  50. package/src/components/ChannelMessageList/index.tsx +9 -4
  51. package/src/components/ChannelThreadMessageList/index.tsx +9 -4
  52. package/src/components/GroupChannelMessageRenderer/index.tsx +3 -3
  53. package/src/components/OpenChannelMessageRenderer/index.tsx +3 -3
  54. package/src/components/ThreadParentMessageRenderer/index.tsx +3 -3
  55. package/src/containers/SendbirdUIKitContainer.tsx +89 -77
  56. package/src/contexts/SBUHandlersCtx.tsx +27 -0
  57. package/src/contexts/SendbirdChatCtx.tsx +1 -1
  58. package/src/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.tsx +3 -4
  59. package/src/hooks/useContext.ts +7 -0
  60. package/src/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useState","useAppFeatures","useUIKitConfig","confirmAndMarkAsDelivered","useAppState","useForceUpdate","pubsub","SendbirdChatContext","createContext","SendbirdChatProvider","_ref","children","sdkInstance","emojiManager","mentionManager","voiceMessageStatusManager","imageCompressionConfig","voiceMessageConfig","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","groupChannelFragmentOptions","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 VoiceMessageConfig from '../libs/VoiceMessageConfig';\nimport VoiceMessageStatusManager from '../libs/VoiceMessageStatusManager';\nimport type { FileType } from '../platform/types';\nimport pubsub, { type PubSub } from '../utils/pubsub';\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\n emojiManager: EmojiManager;\n mentionManager: MentionManager;\n voiceMessageStatusManager: VoiceMessageStatusManager;\n imageCompressionConfig: ImageCompressionConfig;\n voiceMessageConfig: VoiceMessageConfig;\n}\n\nexport type GroupChannelFragmentOptionsPubSubContextPayload = {\n type: 'OVERRIDE_SEARCH_ITEM_STARTING_POINT';\n data: {\n startingPoint: number;\n };\n};\n\nexport type SendbirdChatContextType = {\n sdk: SendbirdChatSDK;\n currentUser?: SendbirdUser;\n setCurrentUser: React.Dispatch<React.SetStateAction<SendbirdUser | undefined>>;\n\n // feature related instances\n emojiManager: EmojiManager;\n mentionManager: MentionManager;\n voiceMessageStatusManager: VoiceMessageStatusManager;\n imageCompressionConfig: ImageCompressionConfig;\n voiceMessageConfig: VoiceMessageConfig;\n\n // helper functions\n updateCurrentUserInfo: (nickname?: string, profile?: string | FileType) => Promise<SendbirdUser>;\n markAsDeliveredWithChannel: (channel: SendbirdGroupChannel) => void;\n\n groupChannelFragmentOptions: {\n pubsub: PubSub<GroupChannelFragmentOptionsPubSubContextPayload>;\n };\n sbOptions: {\n // UIKit options\n uikit: SBUConfig;\n uikitWithAppInfo: {\n groupChannel: {\n channel: {\n readonly enableReactions: boolean;\n readonly enableReactionsSupergroup: boolean;\n readonly enableOgtag: boolean;\n };\n setting: {\n readonly enableMessageSearch: boolean;\n };\n };\n openChannel: {\n channel: {\n readonly 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 uploadSizeLimit: number | undefined;\n };\n };\n};\n\nexport const SendbirdChatContext = React.createContext<SendbirdChatContextType | null>(null);\nexport const SendbirdChatProvider = ({\n children,\n sdkInstance,\n emojiManager,\n mentionManager,\n voiceMessageStatusManager,\n imageCompressionConfig,\n voiceMessageConfig,\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 voiceMessageConfig,\n voiceMessageStatusManager,\n currentUser,\n setCurrentUser,\n\n updateCurrentUserInfo,\n markAsDeliveredWithChannel,\n groupChannelFragmentOptions: {\n pubsub: pubsub<GroupChannelFragmentOptionsPubSubContextPayload>(),\n },\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","pubsub","SendbirdChatContext","createContext","SendbirdChatProvider","_ref","children","sdkInstance","emojiManager","mentionManager","voiceMessageStatusManager","imageCompressionConfig","voiceMessageConfig","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","disconnectWebSocket","then","undefined","value","sdk","groupChannelFragmentOptions","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 VoiceMessageConfig from '../libs/VoiceMessageConfig';\nimport VoiceMessageStatusManager from '../libs/VoiceMessageStatusManager';\nimport type { FileType } from '../platform/types';\nimport pubsub, { type PubSub } from '../utils/pubsub';\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\n emojiManager: EmojiManager;\n mentionManager: MentionManager;\n voiceMessageStatusManager: VoiceMessageStatusManager;\n imageCompressionConfig: ImageCompressionConfig;\n voiceMessageConfig: VoiceMessageConfig;\n}\n\nexport type GroupChannelFragmentOptionsPubSubContextPayload = {\n type: 'OVERRIDE_SEARCH_ITEM_STARTING_POINT';\n data: {\n startingPoint: number;\n };\n};\n\nexport type SendbirdChatContextType = {\n sdk: SendbirdChatSDK;\n currentUser?: SendbirdUser;\n setCurrentUser: React.Dispatch<React.SetStateAction<SendbirdUser | undefined>>;\n\n // feature related instances\n emojiManager: EmojiManager;\n mentionManager: MentionManager;\n voiceMessageStatusManager: VoiceMessageStatusManager;\n imageCompressionConfig: ImageCompressionConfig;\n voiceMessageConfig: VoiceMessageConfig;\n\n // helper functions\n updateCurrentUserInfo: (nickname?: string, profile?: string | FileType) => Promise<SendbirdUser>;\n markAsDeliveredWithChannel: (channel: SendbirdGroupChannel) => void;\n\n groupChannelFragmentOptions: {\n pubsub: PubSub<GroupChannelFragmentOptionsPubSubContextPayload>;\n };\n sbOptions: {\n // UIKit options\n uikit: SBUConfig;\n uikitWithAppInfo: {\n groupChannel: {\n channel: {\n readonly enableReactions: boolean;\n readonly enableReactionsSupergroup: boolean;\n readonly enableOgtag: boolean;\n };\n setting: {\n readonly enableMessageSearch: boolean;\n };\n };\n openChannel: {\n channel: {\n readonly 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 uploadSizeLimit: number | undefined;\n };\n };\n};\n\nexport const SendbirdChatContext = React.createContext<SendbirdChatContextType | null>(null);\nexport const SendbirdChatProvider = ({\n children,\n sdkInstance,\n emojiManager,\n mentionManager,\n voiceMessageStatusManager,\n imageCompressionConfig,\n voiceMessageConfig,\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.disconnectWebSocket().then(() => _setCurrentUser(undefined));\n };\n }, [sdkInstance]);\n\n const value: SendbirdChatContextType = {\n sdk: sdkInstance,\n emojiManager,\n mentionManager,\n imageCompressionConfig,\n voiceMessageConfig,\n voiceMessageStatusManager,\n currentUser,\n setCurrentUser,\n\n updateCurrentUserInfo,\n markAsDeliveredWithChannel,\n groupChannelFragmentOptions: {\n pubsub: pubsub<GroupChannelFragmentOptionsPubSubContextPayload>(),\n },\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":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAE/D,SAASC,cAAc,QAAQ,4BAA4B;AAC3D,SAAoBC,cAAc,QAAQ,uBAAuB;AAOjE,SAASC,yBAAyB,EAAEC,WAAW,EAAEC,cAAc,QAAQ,uBAAuB;AAQ9F,OAAOC,MAAM,MAAuB,iBAAiB;AAmFrD,OAAO,MAAMC,mBAAmB,gBAAGV,KAAK,CAACW,aAAa,CAAiC,IAAI,CAAC;AAC5F,OAAO,MAAMC,oBAAoB,GAAGC,IAAA,IAWvB;EAAA,IAXwB;IACnCC,QAAQ;IACRC,WAAW;IACXC,YAAY;IACZC,cAAc;IACdC,yBAAyB;IACzBC,sBAAsB;IACtBC,kBAAkB;IAClBC,+BAA+B;IAC/BC,0BAA0B;IAC1BC;EACK,CAAC,GAAAV,IAAA;EACN,MAAM,CAACW,WAAW,EAAEC,eAAe,CAAC,GAAGtB,QAAQ,EAAgB;EAC/D,MAAMuB,WAAW,GAAGlB,cAAc,EAAE;EACpC,MAAMmB,WAAW,GAAGvB,cAAc,CAACW,WAAW,CAAC;EAC/C,MAAM;IAAEa,OAAO;IAAEC;EAAmB,CAAC,GAAGxB,cAAc,EAAE;EAExD,MAAMyB,cAAyD,GAAG7B,WAAW,CAAE8B,IAAI,IAAK;IACtF;IACAN,eAAe,CAACM,IAAI,CAAC;IACrBL,WAAW,EAAE;EACf,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMM,qBAAuE,GAAG/B,WAAW,CACzF,OAAOgC,QAAQ,EAAEC,OAAO,KAAK;IAC3B,IAAIH,IAAI,GAAGP,WAAW;IAEtB,IAAI,CAACO,IAAI,EAAE,MAAM,IAAII,KAAK,CAAC,gFAAgF,CAAC;IAE5G,MAAMC,MAAgC,GAAG,CAAC,CAAC;IAE3C,IAAI,CAACH,QAAQ,EAAE;MACbG,MAAM,CAACH,QAAQ,GAAGF,IAAI,CAACE,QAAQ;IACjC,CAAC,MAAM;MACLG,MAAM,CAACH,QAAQ,GAAGA,QAAQ;IAC5B;IAEA,IAAI,CAACC,OAAO,EAAE;MACZE,MAAM,CAACC,UAAU,GAAGN,IAAI,CAACM,UAAU;IACrC,CAAC,MAAM,IAAI,OAAOH,OAAO,KAAK,QAAQ,EAAE;MACtCE,MAAM,CAACC,UAAU,GAAGH,OAAO;IAC7B,CAAC,MAAM,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;MACtCE,MAAM,CAACE,YAAY,GAAGJ,OAAO;IAC/B,CAAC,MAAM;MACL,MAAM,IAAIC,KAAK,CAAE,qDAAoD,OAAOD,OAAQ,GAAE,CAAC;IACzF;IAEAH,IAAI,GAAG,MAAMhB,WAAW,CAACiB,qBAAqB,CAACI,MAAM,CAAC;IAEtDN,cAAc,CAACC,IAAI,CAAC;IACpB,OAAOA,IAAI;EACb,CAAC,EACD,CAAChB,WAAW,EAAES,WAAW,EAAEM,cAAc,CAAC,CAC3C;EAED,MAAMS,0BAAiF,GAAGtC,WAAW,CAClGuC,OAA6B,IAAK;IACjC,IAAIb,WAAW,CAACc,sBAAsB,EAAEnC,yBAAyB,CAAC,CAACkC,OAAO,CAAC,CAAC;EAC9E,CAAC,EACD,CAACzB,WAAW,EAAEY,WAAW,CAACc,sBAAsB,CAAC,CAClD;EAEDlC,WAAW,CAAC,QAAQ,EAAGmC,MAAM,IAAK;IAChC;IACA,IAAIA,MAAM,KAAK,QAAQ,EAAE3B,WAAW,CAAC4B,eAAe,KAAK,QAAQ,IAAI5B,WAAW,CAAC6B,kBAAkB,EAAE,CAAC,KACjG,IAAIF,MAAM,KAAK,YAAY,EAAE3B,WAAW,CAAC4B,eAAe,KAAK,MAAM,IAAI5B,WAAW,CAAC8B,kBAAkB,EAAE;EAC9G,CAAC,CAAC;EAEF3C,SAAS,CAAC,MAAM;IACd,OAAO,MAAM;MACXa,WAAW,CAAC+B,mBAAmB,EAAE,CAACC,IAAI,CAAC,MAAMtB,eAAe,CAACuB,SAAS,CAAC,CAAC;IAC1E,CAAC;EACH,CAAC,EAAE,CAACjC,WAAW,CAAC,CAAC;EAEjB,MAAMkC,KAA8B,GAAG;IACrCC,GAAG,EAAEnC,WAAW;IAChBC,YAAY;IACZC,cAAc;IACdE,sBAAsB;IACtBC,kBAAkB;IAClBF,yBAAyB;IACzBM,WAAW;IACXM,cAAc;IAEdE,qBAAqB;IACrBO,0BAA0B;IAC1BY,2BAA2B,EAAE;MAC3B1C,MAAM,EAAEA,MAAM;IAChB,CAAC;IAED;IACA;IACA2C,SAAS,EAAE;MACTC,OAAO,EAAE1B,WAAW;MACpB2B,KAAK,EAAE1B,OAAO;MACd2B,gBAAgB,EAAE1B,kBAAkB,CAACd,WAAW,CAAC;MACjDyC,IAAI,EAAE;QACJC,gCAAgC,EAAEpC,+BAA+B;QACjEqC,2BAA2B,EAAEpC,0BAA0B;QACvDqC,uBAAuB,EAAEpC;MAC3B;IACF;EACF,CAAC;EAED,oBAAOvB,KAAA,CAAA4D,aAAA,CAAClD,mBAAmB,CAACmD,QAAQ;IAACZ,KAAK,EAAEA;EAAM,GAAEnC,QAAQ,CAAgC;AAC9F,CAAC"}
@@ -3,8 +3,7 @@ import { TouchableOpacity, View } from 'react-native';
3
3
  import { Avatar, Divider, Icon, Text, createStyleSheet, useAlert, useBottomSheet, useToast, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
4
4
  import { Logger, getAvailableUriFromFileMessage, getFileExtension, getFileType, isMyMessage, isVoiceMessage, shouldRenderReaction, toMegabyte } from '@sendbird/uikit-utils';
5
5
  import ThreadParentMessageRenderer from '../../../components/ThreadParentMessageRenderer';
6
- import { useLocalization, usePlatformService, useSendbirdChat } from '../../../hooks/useContext';
7
- import SBUUtils from '../../../libs/SBUUtils';
6
+ import { useLocalization, usePlatformService, useSBUHandlers, useSendbirdChat } from '../../../hooks/useContext';
8
7
  import { GroupChannelThreadContexts } from '../module/moduleContext';
9
8
  import { ReactionAddons } from './../../../components/ReactionAddons';
10
9
  const GroupChannelThreadParentMessageInfo = props => {
@@ -155,6 +154,7 @@ const useCreateMessagePressActions = _ref => {
155
154
  onPressMediaMessage,
156
155
  onEditMessage
157
156
  } = _ref;
157
+ const handlers = useSBUHandlers();
158
158
  const {
159
159
  STRINGS
160
160
  } = useLocalization();
@@ -205,9 +205,8 @@ const useCreateMessagePressActions = _ref => {
205
205
  const fileType = getFileType(message.type || getFileExtension(message.name));
206
206
  if (['image', 'video', 'audio'].includes(fileType)) {
207
207
  onPressMediaMessage === null || onPressMediaMessage === void 0 ? void 0 : onPressMediaMessage(message, () => onDeleteMessage === null || onDeleteMessage === void 0 ? void 0 : onDeleteMessage(message), getAvailableUriFromFileMessage(message));
208
- } else {
209
- SBUUtils.openURL(message.url);
210
208
  }
209
+ handlers.onOpenFileURL(message.url);
211
210
  }
212
211
  };
213
212
  const alertForMessageDelete = message => {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useContext","TouchableOpacity","View","Avatar","Divider","Icon","Text","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","isVoiceMessage","shouldRenderReaction","toMegabyte","ThreadParentMessageRenderer","useLocalization","usePlatformService","useSendbirdChat","SBUUtils","GroupChannelThreadContexts","ReactionAddons","GroupChannelThreadParentMessageInfo","props","_parentMessage$sender","_parentMessage$thread","channel","parentMessage","setMessageToEdit","Fragment","STRINGS","colors","sbOptions","nickName","sender","nickname","LABELS","USER_NO_NAME","messageTimestamp","GROUP_CHANNEL_THREAD","PARENT_MESSAGE_TIME","replyCountText","REPLY_COUNT","threadInfo","replyCount","createMessagePressActions","useCreateMessagePressActions","currentUserId","onDeleteMessage","onPressMediaMessage","onEditMessage","onPress","onLongPress","bottomSheetItem","message","renderMessageInfoAndMenu","_parentMessage$sender2","createElement","style","styles","infoAndMenuContainer","size","uri","profileUrl","userNickAndTimeContainer","h2","color","onBackground01","numberOfLines","userNickname","caption2","onBackground03","messageTime","activeOpacity","undefined","icon","onBackground02","renderReplyCount","replyContainer","caption3","replyText","renderReactionAddons","configs","uikitWithAppInfo","groupChannel","isSuper","enableReactionsSupergroup","enableReactions","reactionButtonContainer","Message","reactionAddonType","messageProps","container","messageContainer","flexDirection","height","padding","paddingBottom","flex","marginLeft","marginBottom","marginTop","contextMenuButton","width","justifyContent","paddingHorizontal","paddingVertical","paddingLeft","_ref","toast","openSheet","alert","clipboardService","fileService","onDeleteFailure","error","show","TOAST","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","includes","openURL","alertForMessageDelete","title","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","text","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","_ref2","sheetItems","menu","copy","CHANNEL_MESSAGE_COPY","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","CHANNEL_MESSAGE_DELETE","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","sendingStatus","HeaderComponent","isGroupChannel","_ref3","onClose","BottomSheet","memo"],"sources":["GroupChannelThreadParentMessageInfo.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { TouchableOpacity, View } from 'react-native';\n\nimport {\n Avatar,\n BottomSheetItem,\n Divider,\n Icon,\n Text,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdMessage,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n isVoiceMessage,\n shouldRenderReaction,\n toMegabyte,\n} from '@sendbird/uikit-utils';\n\nimport ThreadParentMessageRenderer, {\n ThreadParentMessageRendererProps,\n} from '../../../components/ThreadParentMessageRenderer';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../../hooks/useContext';\nimport SBUUtils from '../../../libs/SBUUtils';\nimport { GroupChannelThreadContexts } from '../module/moduleContext';\nimport type { GroupChannelThreadProps } from '../types';\nimport { ReactionAddons } from './../../../components/ReactionAddons';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\n\nconst GroupChannelThreadParentMessageInfo = (props: GroupChannelThreadProps['ParentMessageInfo']) => {\n const { channel, parentMessage, setMessageToEdit } = useContext(GroupChannelThreadContexts.Fragment);\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { sbOptions } = useSendbirdChat();\n\n const nickName = parentMessage.sender?.nickname || STRINGS.LABELS.USER_NO_NAME;\n const messageTimestamp = STRINGS.GROUP_CHANNEL_THREAD.PARENT_MESSAGE_TIME(parentMessage);\n const replyCountText = STRINGS.GROUP_CHANNEL_THREAD.REPLY_COUNT(parentMessage.threadInfo?.replyCount || 0);\n const createMessagePressActions = useCreateMessagePressActions({\n channel: props.channel,\n currentUserId: props.currentUserId,\n onDeleteMessage: props.onDeleteMessage,\n onPressMediaMessage: props.onPressMediaMessage,\n onEditMessage: setMessageToEdit,\n });\n const { onPress, onLongPress, bottomSheetItem } = createMessagePressActions({ message: parentMessage });\n\n const renderMessageInfoAndMenu = () => {\n return (\n <View style={styles.infoAndMenuContainer}>\n <Avatar size={34} uri={parentMessage.sender?.profileUrl} />\n <View style={styles.userNickAndTimeContainer}>\n <Text h2 color={colors.onBackground01} numberOfLines={1} style={styles.userNickname}>\n {nickName}\n </Text>\n <Text caption2 color={colors.onBackground03} style={styles.messageTime}>\n {messageTimestamp}\n </Text>\n </View>\n <TouchableOpacity activeOpacity={0.7} onPress={bottomSheetItem ? onLongPress : undefined}>\n <Icon icon={'more'} color={colors.onBackground02} />\n </TouchableOpacity>\n </View>\n );\n };\n\n const renderReplyCount = (replyCountText: string) => {\n if (replyCountText) {\n return (\n <View style={styles.replyContainer}>\n <Text caption3 color={colors.onBackground03} style={styles.replyText}>\n {replyCountText}\n </Text>\n <Divider />\n </View>\n );\n } else {\n return null;\n }\n };\n\n const renderReactionAddons = () => {\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n if (shouldRenderReaction(channel, channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions)) {\n return (\n <View style={styles.reactionButtonContainer}>\n <ReactionAddons.Message\n channel={props.channel}\n message={parentMessage}\n reactionAddonType={'thread_parent_message'}\n />\n </View>\n );\n } else {\n return null;\n }\n };\n\n const messageProps: ThreadParentMessageRendererProps = {\n parentMessage,\n onPress,\n onLongPress,\n };\n\n return (\n <View>\n <View style={styles.container}>{renderMessageInfoAndMenu()}</View>\n <View style={styles.messageContainer}>\n <ThreadParentMessageRenderer {...messageProps}></ThreadParentMessageRenderer>\n </View>\n {renderReactionAddons()}\n <Divider />\n {renderReplyCount(replyCountText)}\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n flexDirection: 'column',\n },\n infoAndMenuContainer: {\n flexDirection: 'row',\n height: 50,\n padding: 16,\n paddingBottom: 0,\n },\n userNickAndTimeContainer: {\n flexDirection: 'column',\n flex: 1,\n marginLeft: 8,\n },\n userNickname: {\n marginBottom: 2,\n },\n messageTime: {\n marginTop: 2,\n },\n contextMenuButton: {\n width: 34,\n height: 34,\n justifyContent: 'flex-end',\n },\n messageContainer: {\n paddingHorizontal: 16,\n paddingVertical: 8,\n },\n reactionButtonContainer: {\n paddingLeft: 16,\n marginBottom: 16,\n },\n replyContainer: {\n flexDirection: 'column',\n },\n replyText: {\n justifyContent: 'center',\n paddingHorizontal: 16,\n paddingVertical: 12,\n },\n});\n\nconst useCreateMessagePressActions = ({\n channel,\n currentUserId,\n onDeleteMessage,\n onPressMediaMessage,\n onEditMessage,\n}: Pick<\n GroupChannelThreadProps['ParentMessageInfo'],\n 'channel' | 'currentUserId' | 'onDeleteMessage' | 'onPressMediaMessage'\n> & { onEditMessage: (message: HandleableMessage) => void }): CreateMessagePressActions => {\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const onDeleteFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);\n };\n\n const onCopyText = (message: HandleableMessage) => {\n if (message.isUserMessage()) {\n clipboardService.setString(message.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n }\n };\n\n const onDownloadFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n if (toMegabyte(message.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: message.url, fileName: message.name, fileType: message.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n const onOpenFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n const fileType = getFileType(message.type || getFileExtension(message.name));\n if (['image', 'video', 'audio'].includes(fileType)) {\n onPressMediaMessage?.(message, () => onDeleteMessage?.(message), getAvailableUriFromFileMessage(message));\n } else {\n SBUUtils.openURL(message.url);\n }\n }\n };\n\n const alertForMessageDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n { text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage?.(message).catch(onDeleteFailure);\n },\n },\n ],\n });\n };\n\n return ({ message }) => {\n if (!message.isUserMessage() && !message.isFileMessage()) return {};\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const menu = {\n copy: (message: HandleableMessage) => ({\n icon: 'copy' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => onCopyText(message),\n }),\n edit: (message: HandleableMessage) => ({\n icon: 'edit' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage?.(message),\n }),\n delete: (message: HandleableMessage) => ({\n disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,\n icon: 'delete' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => alertForMessageDelete(message),\n }),\n download: (message: HandleableMessage) => ({\n icon: 'download' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: () => onDownloadFile(message),\n }),\n };\n\n if (message.isUserMessage()) {\n sheetItems.push(menu.copy(message));\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.edit(message));\n sheetItems.push(menu.delete(message));\n }\n }\n }\n\n if (message.isFileMessage()) {\n if (!isVoiceMessage(message)) {\n sheetItems.push(menu.download(message));\n }\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.delete(message));\n }\n }\n }\n\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n const bottomSheetItem: BottomSheetItem = {\n sheetItems,\n HeaderComponent: shouldRenderReaction(\n channel,\n channel.isGroupChannel() && (channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions),\n )\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={message} channel={channel} onClose={onClose} />\n : undefined,\n };\n\n if (message.isFileMessage()) {\n return {\n onPress: () => onOpenFile(message),\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n } else {\n return {\n onPress: undefined,\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n };\n};\n\nexport default React.memo(GroupChannelThreadParentMessageInfo);\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useContext","TouchableOpacity","View","Avatar","Divider","Icon","Text","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","isVoiceMessage","shouldRenderReaction","toMegabyte","ThreadParentMessageRenderer","useLocalization","usePlatformService","useSBUHandlers","useSendbirdChat","GroupChannelThreadContexts","ReactionAddons","GroupChannelThreadParentMessageInfo","props","_parentMessage$sender","_parentMessage$thread","channel","parentMessage","setMessageToEdit","Fragment","STRINGS","colors","sbOptions","nickName","sender","nickname","LABELS","USER_NO_NAME","messageTimestamp","GROUP_CHANNEL_THREAD","PARENT_MESSAGE_TIME","replyCountText","REPLY_COUNT","threadInfo","replyCount","createMessagePressActions","useCreateMessagePressActions","currentUserId","onDeleteMessage","onPressMediaMessage","onEditMessage","onPress","onLongPress","bottomSheetItem","message","renderMessageInfoAndMenu","_parentMessage$sender2","createElement","style","styles","infoAndMenuContainer","size","uri","profileUrl","userNickAndTimeContainer","h2","color","onBackground01","numberOfLines","userNickname","caption2","onBackground03","messageTime","activeOpacity","undefined","icon","onBackground02","renderReplyCount","replyContainer","caption3","replyText","renderReactionAddons","configs","uikitWithAppInfo","groupChannel","isSuper","enableReactionsSupergroup","enableReactions","reactionButtonContainer","Message","reactionAddonType","messageProps","container","messageContainer","flexDirection","height","padding","paddingBottom","flex","marginLeft","marginBottom","marginTop","contextMenuButton","width","justifyContent","paddingHorizontal","paddingVertical","paddingLeft","_ref","handlers","toast","openSheet","alert","clipboardService","fileService","onDeleteFailure","error","show","TOAST","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","includes","onOpenFileURL","alertForMessageDelete","title","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","text","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","_ref2","sheetItems","menu","copy","CHANNEL_MESSAGE_COPY","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","CHANNEL_MESSAGE_DELETE","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","sendingStatus","HeaderComponent","isGroupChannel","_ref3","onClose","BottomSheet","memo"],"sources":["GroupChannelThreadParentMessageInfo.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { TouchableOpacity, View } from 'react-native';\n\nimport {\n Avatar,\n BottomSheetItem,\n Divider,\n Icon,\n Text,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdMessage,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n isVoiceMessage,\n shouldRenderReaction,\n toMegabyte,\n} from '@sendbird/uikit-utils';\n\nimport ThreadParentMessageRenderer, {\n ThreadParentMessageRendererProps,\n} from '../../../components/ThreadParentMessageRenderer';\nimport { useLocalization, usePlatformService, useSBUHandlers, useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelThreadContexts } from '../module/moduleContext';\nimport type { GroupChannelThreadProps } from '../types';\nimport { ReactionAddons } from './../../../components/ReactionAddons';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\n\nconst GroupChannelThreadParentMessageInfo = (props: GroupChannelThreadProps['ParentMessageInfo']) => {\n const { channel, parentMessage, setMessageToEdit } = useContext(GroupChannelThreadContexts.Fragment);\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { sbOptions } = useSendbirdChat();\n\n const nickName = parentMessage.sender?.nickname || STRINGS.LABELS.USER_NO_NAME;\n const messageTimestamp = STRINGS.GROUP_CHANNEL_THREAD.PARENT_MESSAGE_TIME(parentMessage);\n const replyCountText = STRINGS.GROUP_CHANNEL_THREAD.REPLY_COUNT(parentMessage.threadInfo?.replyCount || 0);\n const createMessagePressActions = useCreateMessagePressActions({\n channel: props.channel,\n currentUserId: props.currentUserId,\n onDeleteMessage: props.onDeleteMessage,\n onPressMediaMessage: props.onPressMediaMessage,\n onEditMessage: setMessageToEdit,\n });\n const { onPress, onLongPress, bottomSheetItem } = createMessagePressActions({ message: parentMessage });\n\n const renderMessageInfoAndMenu = () => {\n return (\n <View style={styles.infoAndMenuContainer}>\n <Avatar size={34} uri={parentMessage.sender?.profileUrl} />\n <View style={styles.userNickAndTimeContainer}>\n <Text h2 color={colors.onBackground01} numberOfLines={1} style={styles.userNickname}>\n {nickName}\n </Text>\n <Text caption2 color={colors.onBackground03} style={styles.messageTime}>\n {messageTimestamp}\n </Text>\n </View>\n <TouchableOpacity activeOpacity={0.7} onPress={bottomSheetItem ? onLongPress : undefined}>\n <Icon icon={'more'} color={colors.onBackground02} />\n </TouchableOpacity>\n </View>\n );\n };\n\n const renderReplyCount = (replyCountText: string) => {\n if (replyCountText) {\n return (\n <View style={styles.replyContainer}>\n <Text caption3 color={colors.onBackground03} style={styles.replyText}>\n {replyCountText}\n </Text>\n <Divider />\n </View>\n );\n } else {\n return null;\n }\n };\n\n const renderReactionAddons = () => {\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n if (shouldRenderReaction(channel, channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions)) {\n return (\n <View style={styles.reactionButtonContainer}>\n <ReactionAddons.Message\n channel={props.channel}\n message={parentMessage}\n reactionAddonType={'thread_parent_message'}\n />\n </View>\n );\n } else {\n return null;\n }\n };\n\n const messageProps: ThreadParentMessageRendererProps = {\n parentMessage,\n onPress,\n onLongPress,\n };\n\n return (\n <View>\n <View style={styles.container}>{renderMessageInfoAndMenu()}</View>\n <View style={styles.messageContainer}>\n <ThreadParentMessageRenderer {...messageProps}></ThreadParentMessageRenderer>\n </View>\n {renderReactionAddons()}\n <Divider />\n {renderReplyCount(replyCountText)}\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n flexDirection: 'column',\n },\n infoAndMenuContainer: {\n flexDirection: 'row',\n height: 50,\n padding: 16,\n paddingBottom: 0,\n },\n userNickAndTimeContainer: {\n flexDirection: 'column',\n flex: 1,\n marginLeft: 8,\n },\n userNickname: {\n marginBottom: 2,\n },\n messageTime: {\n marginTop: 2,\n },\n contextMenuButton: {\n width: 34,\n height: 34,\n justifyContent: 'flex-end',\n },\n messageContainer: {\n paddingHorizontal: 16,\n paddingVertical: 8,\n },\n reactionButtonContainer: {\n paddingLeft: 16,\n marginBottom: 16,\n },\n replyContainer: {\n flexDirection: 'column',\n },\n replyText: {\n justifyContent: 'center',\n paddingHorizontal: 16,\n paddingVertical: 12,\n },\n});\n\nconst useCreateMessagePressActions = ({\n channel,\n currentUserId,\n onDeleteMessage,\n onPressMediaMessage,\n onEditMessage,\n}: Pick<\n GroupChannelThreadProps['ParentMessageInfo'],\n 'channel' | 'currentUserId' | 'onDeleteMessage' | 'onPressMediaMessage'\n> & { onEditMessage: (message: HandleableMessage) => void }): CreateMessagePressActions => {\n const handlers = useSBUHandlers();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const onDeleteFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);\n };\n\n const onCopyText = (message: HandleableMessage) => {\n if (message.isUserMessage()) {\n clipboardService.setString(message.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n }\n };\n\n const onDownloadFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n if (toMegabyte(message.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: message.url, fileName: message.name, fileType: message.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n const onOpenFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n const fileType = getFileType(message.type || getFileExtension(message.name));\n if (['image', 'video', 'audio'].includes(fileType)) {\n onPressMediaMessage?.(message, () => onDeleteMessage?.(message), getAvailableUriFromFileMessage(message));\n }\n handlers.onOpenFileURL(message.url);\n }\n };\n\n const alertForMessageDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n { text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage?.(message).catch(onDeleteFailure);\n },\n },\n ],\n });\n };\n\n return ({ message }) => {\n if (!message.isUserMessage() && !message.isFileMessage()) return {};\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const menu = {\n copy: (message: HandleableMessage) => ({\n icon: 'copy' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => onCopyText(message),\n }),\n edit: (message: HandleableMessage) => ({\n icon: 'edit' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage?.(message),\n }),\n delete: (message: HandleableMessage) => ({\n disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,\n icon: 'delete' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => alertForMessageDelete(message),\n }),\n download: (message: HandleableMessage) => ({\n icon: 'download' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: () => onDownloadFile(message),\n }),\n };\n\n if (message.isUserMessage()) {\n sheetItems.push(menu.copy(message));\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.edit(message));\n sheetItems.push(menu.delete(message));\n }\n }\n }\n\n if (message.isFileMessage()) {\n if (!isVoiceMessage(message)) {\n sheetItems.push(menu.download(message));\n }\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.delete(message));\n }\n }\n }\n\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n const bottomSheetItem: BottomSheetItem = {\n sheetItems,\n HeaderComponent: shouldRenderReaction(\n channel,\n channel.isGroupChannel() && (channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions),\n )\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={message} channel={channel} onClose={onClose} />\n : undefined,\n };\n\n if (message.isFileMessage()) {\n return {\n onPress: () => onOpenFile(message),\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n } else {\n return {\n onPress: undefined,\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n };\n};\n\nexport default React.memo(GroupChannelThreadParentMessageInfo);\n"],"mappings":"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"}
@@ -2,8 +2,14 @@ import { useContext } from 'react';
2
2
  import { LocalizationContext } from '../contexts/LocalizationCtx';
3
3
  import { PlatformServiceContext } from '../contexts/PlatformServiceCtx';
4
4
  import { ReactionContext } from '../contexts/ReactionCtx';
5
+ import { SBUHandlersContext } from '../contexts/SBUHandlersCtx';
5
6
  import { SendbirdChatContext } from '../contexts/SendbirdChatCtx';
6
7
  import { UserProfileContext } from '../contexts/UserProfileCtx';
8
+ export const useSBUHandlers = () => {
9
+ const value = useContext(SBUHandlersContext);
10
+ if (!value) throw new Error('SBUHandlersContext is not provided');
11
+ return value;
12
+ };
7
13
  export const useLocalization = () => {
8
14
  const value = useContext(LocalizationContext);
9
15
  if (!value) throw new Error('LocalizationContext is not provided');
@@ -1 +1 @@
1
- {"version":3,"names":["useContext","LocalizationContext","PlatformServiceContext","ReactionContext","SendbirdChatContext","UserProfileContext","useLocalization","value","Error","usePlatformService","useSendbirdChat","useUserProfile","useReaction"],"sources":["useContext.ts"],"sourcesContent":["import { useContext } from 'react';\n\nimport { LocalizationContext } from '../contexts/LocalizationCtx';\nimport { PlatformServiceContext } from '../contexts/PlatformServiceCtx';\nimport { ReactionContext } from '../contexts/ReactionCtx';\nimport { SendbirdChatContext } from '../contexts/SendbirdChatCtx';\nimport { UserProfileContext } from '../contexts/UserProfileCtx';\n\nexport const useLocalization = () => {\n const value = useContext(LocalizationContext);\n if (!value) throw new Error('LocalizationContext is not provided');\n return value;\n};\n\nexport const usePlatformService = () => {\n const value = useContext(PlatformServiceContext);\n if (!value) throw new Error('PlatformServiceContext is not provided');\n return value;\n};\n\nexport const useSendbirdChat = () => {\n const value = useContext(SendbirdChatContext);\n if (!value) throw new Error('SendbirdChatContext is not provided');\n return value;\n};\n\nexport const useUserProfile = () => {\n const value = useContext(UserProfileContext);\n if (!value) throw new Error('UserProfileContext is not provided');\n return value;\n};\n\nexport const useReaction = () => {\n const value = useContext(ReactionContext);\n if (!value) throw new Error('ReactionContext is not provided');\n return value;\n};\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,OAAO;AAElC,SAASC,mBAAmB,QAAQ,6BAA6B;AACjE,SAASC,sBAAsB,QAAQ,gCAAgC;AACvE,SAASC,eAAe,QAAQ,yBAAyB;AACzD,SAASC,mBAAmB,QAAQ,6BAA6B;AACjE,SAASC,kBAAkB,QAAQ,4BAA4B;AAE/D,OAAO,MAAMC,eAAe,GAAGA,CAAA,KAAM;EACnC,MAAMC,KAAK,GAAGP,UAAU,CAACC,mBAAmB,CAAC;EAC7C,IAAI,CAACM,KAAK,EAAE,MAAM,IAAIC,KAAK,CAAC,qCAAqC,CAAC;EAClE,OAAOD,KAAK;AACd,CAAC;AAED,OAAO,MAAME,kBAAkB,GAAGA,CAAA,KAAM;EACtC,MAAMF,KAAK,GAAGP,UAAU,CAACE,sBAAsB,CAAC;EAChD,IAAI,CAACK,KAAK,EAAE,MAAM,IAAIC,KAAK,CAAC,wCAAwC,CAAC;EACrE,OAAOD,KAAK;AACd,CAAC;AAED,OAAO,MAAMG,eAAe,GAAGA,CAAA,KAAM;EACnC,MAAMH,KAAK,GAAGP,UAAU,CAACI,mBAAmB,CAAC;EAC7C,IAAI,CAACG,KAAK,EAAE,MAAM,IAAIC,KAAK,CAAC,qCAAqC,CAAC;EAClE,OAAOD,KAAK;AACd,CAAC;AAED,OAAO,MAAMI,cAAc,GAAGA,CAAA,KAAM;EAClC,MAAMJ,KAAK,GAAGP,UAAU,CAACK,kBAAkB,CAAC;EAC5C,IAAI,CAACE,KAAK,EAAE,MAAM,IAAIC,KAAK,CAAC,oCAAoC,CAAC;EACjE,OAAOD,KAAK;AACd,CAAC;AAED,OAAO,MAAMK,WAAW,GAAGA,CAAA,KAAM;EAC/B,MAAML,KAAK,GAAGP,UAAU,CAACG,eAAe,CAAC;EACzC,IAAI,CAACI,KAAK,EAAE,MAAM,IAAIC,KAAK,CAAC,iCAAiC,CAAC;EAC9D,OAAOD,KAAK;AACd,CAAC"}
1
+ {"version":3,"names":["useContext","LocalizationContext","PlatformServiceContext","ReactionContext","SBUHandlersContext","SendbirdChatContext","UserProfileContext","useSBUHandlers","value","Error","useLocalization","usePlatformService","useSendbirdChat","useUserProfile","useReaction"],"sources":["useContext.ts"],"sourcesContent":["import { useContext } from 'react';\n\nimport { LocalizationContext } from '../contexts/LocalizationCtx';\nimport { PlatformServiceContext } from '../contexts/PlatformServiceCtx';\nimport { ReactionContext } from '../contexts/ReactionCtx';\nimport { SBUHandlersContext } from '../contexts/SBUHandlersCtx';\nimport { SendbirdChatContext } from '../contexts/SendbirdChatCtx';\nimport { UserProfileContext } from '../contexts/UserProfileCtx';\n\nexport const useSBUHandlers = () => {\n const value = useContext(SBUHandlersContext);\n if (!value) throw new Error('SBUHandlersContext is not provided');\n return value;\n};\n\nexport const useLocalization = () => {\n const value = useContext(LocalizationContext);\n if (!value) throw new Error('LocalizationContext is not provided');\n return value;\n};\n\nexport const usePlatformService = () => {\n const value = useContext(PlatformServiceContext);\n if (!value) throw new Error('PlatformServiceContext is not provided');\n return value;\n};\n\nexport const useSendbirdChat = () => {\n const value = useContext(SendbirdChatContext);\n if (!value) throw new Error('SendbirdChatContext is not provided');\n return value;\n};\n\nexport const useUserProfile = () => {\n const value = useContext(UserProfileContext);\n if (!value) throw new Error('UserProfileContext is not provided');\n return value;\n};\n\nexport const useReaction = () => {\n const value = useContext(ReactionContext);\n if (!value) throw new Error('ReactionContext is not provided');\n return value;\n};\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,OAAO;AAElC,SAASC,mBAAmB,QAAQ,6BAA6B;AACjE,SAASC,sBAAsB,QAAQ,gCAAgC;AACvE,SAASC,eAAe,QAAQ,yBAAyB;AACzD,SAASC,kBAAkB,QAAQ,4BAA4B;AAC/D,SAASC,mBAAmB,QAAQ,6BAA6B;AACjE,SAASC,kBAAkB,QAAQ,4BAA4B;AAE/D,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAM;EAClC,MAAMC,KAAK,GAAGR,UAAU,CAACI,kBAAkB,CAAC;EAC5C,IAAI,CAACI,KAAK,EAAE,MAAM,IAAIC,KAAK,CAAC,oCAAoC,CAAC;EACjE,OAAOD,KAAK;AACd,CAAC;AAED,OAAO,MAAME,eAAe,GAAGA,CAAA,KAAM;EACnC,MAAMF,KAAK,GAAGR,UAAU,CAACC,mBAAmB,CAAC;EAC7C,IAAI,CAACO,KAAK,EAAE,MAAM,IAAIC,KAAK,CAAC,qCAAqC,CAAC;EAClE,OAAOD,KAAK;AACd,CAAC;AAED,OAAO,MAAMG,kBAAkB,GAAGA,CAAA,KAAM;EACtC,MAAMH,KAAK,GAAGR,UAAU,CAACE,sBAAsB,CAAC;EAChD,IAAI,CAACM,KAAK,EAAE,MAAM,IAAIC,KAAK,CAAC,wCAAwC,CAAC;EACrE,OAAOD,KAAK;AACd,CAAC;AAED,OAAO,MAAMI,eAAe,GAAGA,CAAA,KAAM;EACnC,MAAMJ,KAAK,GAAGR,UAAU,CAACK,mBAAmB,CAAC;EAC7C,IAAI,CAACG,KAAK,EAAE,MAAM,IAAIC,KAAK,CAAC,qCAAqC,CAAC;EAClE,OAAOD,KAAK;AACd,CAAC;AAED,OAAO,MAAMK,cAAc,GAAGA,CAAA,KAAM;EAClC,MAAML,KAAK,GAAGR,UAAU,CAACM,kBAAkB,CAAC;EAC5C,IAAI,CAACE,KAAK,EAAE,MAAM,IAAIC,KAAK,CAAC,oCAAoC,CAAC;EACjE,OAAOD,KAAK;AACd,CAAC;AAED,OAAO,MAAMM,WAAW,GAAGA,CAAA,KAAM;EAC/B,MAAMN,KAAK,GAAGR,UAAU,CAACG,eAAe,CAAC;EACzC,IAAI,CAACK,KAAK,EAAE,MAAM,IAAIC,KAAK,CAAC,iCAAiC,CAAC;EAC9D,OAAOD,KAAK;AACd,CAAC"}
@@ -1,3 +1,3 @@
1
- const VERSION = '3.7.0';
1
+ const VERSION = '3.7.2';
2
2
  export default VERSION;
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.7.0';\nexport default VERSION;\n"],"mappings":"AAAA,MAAMA,OAAO,GAAG,OAAO;AACvB,eAAeA,OAAO"}
1
+ {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.7.2';\nexport default VERSION;\n"],"mappings":"AAAA,MAAMA,OAAO,GAAG,OAAO;AACvB,eAAeA,OAAO"}
@@ -5,6 +5,7 @@ import { OpenChannelModule } from '@sendbird/chat/openChannel';
5
5
  import type { HeaderStyleContextType, UIKitTheme } from '@sendbird/uikit-react-native-foundation';
6
6
  import { SBUConfig } from '@sendbird/uikit-tools';
7
7
  import { PartialDeep, SendbirdChatSDK, SendbirdGroupChannel, SendbirdGroupChannelCreateParams, SendbirdMember, SendbirdUser } from '@sendbird/uikit-utils';
8
+ import { type SBUHandlers } from '../contexts/SBUHandlersCtx';
8
9
  import type { ChatRelatedFeaturesInUIKit } from '../contexts/SendbirdChatCtx';
9
10
  import type { ImageCompressionConfigInterface } from '../libs/ImageCompressionConfig';
10
11
  import { MentionConfigInterface } from '../libs/MentionConfig';
@@ -13,7 +14,7 @@ import type { StringSet } from '../localization/StringSet.type';
13
14
  import type { ClipboardServiceInterface, FileServiceInterface, MediaServiceInterface, NotificationServiceInterface, PlayerServiceInterface, RecorderServiceInterface } from '../platform/types';
14
15
  import { ErrorBoundaryProps, LocalCacheStorage } from '../types';
15
16
  export declare const SendbirdUIKit: Readonly<{
16
- VERSION: "3.7.0";
17
+ VERSION: "3.7.2";
17
18
  PLATFORM: string;
18
19
  DEFAULT: {
19
20
  AUTO_PUSH_TOKEN_REGISTRATION: boolean;
@@ -64,6 +65,7 @@ export type SendbirdUIKitContainerProps = React.PropsWithChildren<{
64
65
  onError?: (props: ErrorBoundaryProps) => void;
65
66
  ErrorInfoComponent?: (props: ErrorBoundaryProps) => React.ReactNode;
66
67
  };
68
+ handlers?: Partial<SBUHandlers>;
67
69
  toast?: {
68
70
  dismissTimeout?: number;
69
71
  };
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ export interface SBUHandlers {
3
+ /**
4
+ * Callback function to handle opening a URL.
5
+ * This is triggered when a URL needs to be opened.
6
+ */
7
+ onOpenURL: (url: string) => void;
8
+ /**
9
+ * Callback function to handle opening a file URL.
10
+ * This is triggered when a file URL needs to be opened.
11
+ *
12
+ * Note that this function is also called redundantly
13
+ * when `onPressMediaMessage` handler is triggered by clicking on media messages containing images, videos, or audio.
14
+ */
15
+ onOpenFileURL: (url: string) => void;
16
+ }
17
+ type Props = React.PropsWithChildren<SBUHandlers>;
18
+ export type SBUHandlersContextType = SBUHandlers;
19
+ export declare const SBUHandlersContext: React.Context<SBUHandlers | null>;
20
+ export declare const SBUHandlersProvider: ({ children, onOpenURL, onOpenFileURL }: Props) => React.JSX.Element;
21
+ export {};
@@ -1,3 +1,4 @@
1
+ export declare const useSBUHandlers: () => import("../contexts/SBUHandlersCtx").SBUHandlers;
1
2
  export declare const useLocalization: () => import("../contexts/LocalizationCtx").LocalizationContextType;
2
3
  export declare const usePlatformService: () => import("../contexts/PlatformServiceCtx").PlatformServiceContextType;
3
4
  export declare const useSendbirdChat: () => import("../contexts/SendbirdChatCtx").SendbirdChatContextType;
@@ -1,2 +1,2 @@
1
- declare const VERSION = "3.7.0";
1
+ declare const VERSION = "3.7.2";
2
2
  export default VERSION;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sendbird/uikit-react-native",
3
- "version": "3.7.0",
3
+ "version": "3.7.2",
4
4
  "description": "Sendbird UIKit for React Native: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.",
5
5
  "keywords": [
6
6
  "sendbird",
@@ -60,10 +60,10 @@
60
60
  },
61
61
  "dependencies": {
62
62
  "@openspacelabs/react-native-zoomable-view": "^2.1.5",
63
- "@sendbird/uikit-chat-hooks": "3.7.0",
64
- "@sendbird/uikit-react-native-foundation": "3.7.0",
63
+ "@sendbird/uikit-chat-hooks": "3.7.2",
64
+ "@sendbird/uikit-react-native-foundation": "3.7.2",
65
65
  "@sendbird/uikit-tools": "0.0.1-alpha.77",
66
- "@sendbird/uikit-utils": "3.7.0"
66
+ "@sendbird/uikit-utils": "3.7.2"
67
67
  },
68
68
  "devDependencies": {
69
69
  "@bam.tech/react-native-image-resizer": "^3.0.4",
@@ -208,5 +208,5 @@
208
208
  ]
209
209
  ]
210
210
  },
211
- "gitHead": "51d39985ece857b026d311c621ec3c555cf896a1"
211
+ "gitHead": "b865930e985bc4e50ceab20aa9d26e73b940411c"
212
212
  }
@@ -30,8 +30,13 @@ import {
30
30
  } from '@sendbird/uikit-utils';
31
31
 
32
32
  import type { UserProfileContextType } from '../../contexts/UserProfileCtx';
33
- import { useLocalization, usePlatformService, useSendbirdChat, useUserProfile } from '../../hooks/useContext';
34
- import SBUUtils from '../../libs/SBUUtils';
33
+ import {
34
+ useLocalization,
35
+ usePlatformService,
36
+ useSBUHandlers,
37
+ useSendbirdChat,
38
+ useUserProfile,
39
+ } from '../../hooks/useContext';
35
40
  import ChatFlatList from '../ChatFlatList';
36
41
  import { ReactionAddons } from '../ReactionAddons';
37
42
 
@@ -216,6 +221,7 @@ const useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdO
216
221
  | 'onResendFailedMessage'
217
222
  | 'onPressMediaMessage'
218
223
  >): CreateMessagePressActions => {
224
+ const handlers = useSBUHandlers();
219
225
  const { colors } = useUIKitTheme();
220
226
  const { STRINGS } = useLocalization();
221
227
  const toast = useToast();
@@ -265,9 +271,8 @@ const useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdO
265
271
  const fileType = getFileType(message.type || getFileExtension(message.name));
266
272
  if (['image', 'video', 'audio'].includes(fileType)) {
267
273
  onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));
268
- } else {
269
- SBUUtils.openURL(message.url);
270
274
  }
275
+ handlers.onOpenFileURL(message.url);
271
276
  }
272
277
  };
273
278
 
@@ -30,8 +30,13 @@ import {
30
30
  } from '@sendbird/uikit-utils';
31
31
 
32
32
  import type { UserProfileContextType } from '../../contexts/UserProfileCtx';
33
- import { useLocalization, usePlatformService, useSendbirdChat, useUserProfile } from '../../hooks/useContext';
34
- import SBUUtils from '../../libs/SBUUtils';
33
+ import {
34
+ useLocalization,
35
+ usePlatformService,
36
+ useSBUHandlers,
37
+ useSendbirdChat,
38
+ useUserProfile,
39
+ } from '../../hooks/useContext';
35
40
  import { ReactionAddons } from '../ReactionAddons';
36
41
  import ThreadChatFlatList from '../ThreadChatFlatList';
37
42
 
@@ -194,6 +199,7 @@ const useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdO
194
199
  ChannelThreadMessageListProps<T>,
195
200
  'channel' | 'currentUserId' | 'onEditMessage' | 'onDeleteMessage' | 'onResendFailedMessage' | 'onPressMediaMessage'
196
201
  >): CreateMessagePressActions => {
202
+ const handlers = useSBUHandlers();
197
203
  const { colors } = useUIKitTheme();
198
204
  const { STRINGS } = useLocalization();
199
205
  const toast = useToast();
@@ -243,9 +249,8 @@ const useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdO
243
249
  const fileType = getFileType(message.type || getFileExtension(message.name));
244
250
  if (['image', 'video', 'audio'].includes(fileType)) {
245
251
  onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));
246
- } else {
247
- SBUUtils.openURL(message.url);
248
252
  }
253
+ handlers.onOpenFileURL(message.url);
249
254
  }
250
255
  };
251
256
 
@@ -25,8 +25,7 @@ import {
25
25
  import { VOICE_MESSAGE_META_ARRAY_DURATION_KEY } from '../../constants';
26
26
  import { GroupChannelContexts } from '../../domain/groupChannel/module/moduleContext';
27
27
  import type { GroupChannelProps } from '../../domain/groupChannel/types';
28
- import { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';
29
- import SBUUtils from '../../libs/SBUUtils';
28
+ import { useLocalization, usePlatformService, useSBUHandlers, useSendbirdChat } from '../../hooks/useContext';
30
29
  import { TypingIndicatorType } from '../../types';
31
30
  import { ReactionAddons } from '../ReactionAddons';
32
31
  import GroupChannelMessageDateSeparator from './GroupChannelMessageDateSeparator';
@@ -49,6 +48,7 @@ const GroupChannelMessageRenderer: GroupChannelProps['Fragment']['renderMessage'
49
48
  nextMessage,
50
49
  hideParentMessage,
51
50
  }) => {
51
+ const handlers = useSBUHandlers();
52
52
  const playerUnsubscribes = useRef<(() => void)[]>([]);
53
53
  const { palette } = useUIKitTheme();
54
54
  const { sbOptions, currentUser, mentionManager, voiceMessageStatusManager } = useSendbirdChat();
@@ -98,7 +98,7 @@ const GroupChannelMessageRenderer: GroupChannelProps['Fragment']['renderMessage'
98
98
  variant,
99
99
  onPress,
100
100
  onLongPress,
101
- onPressURL: (url) => SBUUtils.openURL(url),
101
+ onPressURL: (url) => handlers.onOpenURL(url),
102
102
  onPressAvatar: () => {
103
103
  if ('sender' in message) onShowUserProfile?.(message.sender);
104
104
  },
@@ -12,8 +12,7 @@ import {
12
12
  } from '@sendbird/uikit-utils';
13
13
 
14
14
  import type { OpenChannelProps } from '../../domain/openChannel/types';
15
- import { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';
16
- import SBUUtils from '../../libs/SBUUtils';
15
+ import { useLocalization, usePlatformService, useSBUHandlers, useSendbirdChat } from '../../hooks/useContext';
17
16
  import OpenChannelMessageDateSeparator from './OpenChannelMessageDateSeparator';
18
17
 
19
18
  const OpenChannelMessageRenderer: OpenChannelProps['Fragment']['renderMessage'] = ({
@@ -26,6 +25,7 @@ const OpenChannelMessageRenderer: OpenChannelProps['Fragment']['renderMessage']
26
25
  prevMessage,
27
26
  nextMessage,
28
27
  }) => {
28
+ const handlers = useSBUHandlers();
29
29
  const { sbOptions } = useSendbirdChat();
30
30
  const { STRINGS } = useLocalization();
31
31
  const { mediaService } = usePlatformService();
@@ -35,7 +35,7 @@ const OpenChannelMessageRenderer: OpenChannelProps['Fragment']['renderMessage']
35
35
  channel,
36
36
  onPress,
37
37
  onLongPress,
38
- onPressURL: (url) => SBUUtils.openURL(url),
38
+ onPressURL: (url) => handlers.onOpenURL(url),
39
39
  onPressAvatar: () => 'sender' in message && onShowUserProfile?.(message.sender, { hideMessageButton: true }),
40
40
  grouped: groupWithPrev,
41
41
  strings: {
@@ -11,8 +11,7 @@ import {
11
11
  } from '@sendbird/uikit-utils';
12
12
 
13
13
  import { VOICE_MESSAGE_META_ARRAY_DURATION_KEY } from '../../constants';
14
- import SBUUtils from '../../libs/SBUUtils';
15
- import { usePlatformService, useSendbirdChat } from './../../hooks/useContext';
14
+ import { usePlatformService, useSBUHandlers, useSendbirdChat } from './../../hooks/useContext';
16
15
  import ThreadParentMessageFile from './ThreadParentMessage.file';
17
16
  import ThreadParentMessageFileImage from './ThreadParentMessage.file.image';
18
17
  import ThreadParentMessageFileVideo from './ThreadParentMessage.file.video';
@@ -33,6 +32,7 @@ export type ThreadParentMessageRendererProps<AdditionalProps = unknown> = {
33
32
  } & AdditionalProps;
34
33
 
35
34
  const ThreadParentMessageRenderer = (props: ThreadParentMessageRendererProps) => {
35
+ const handlers = useSBUHandlers();
36
36
  const playerUnsubscribes = useRef<(() => void)[]>([]);
37
37
  const { sbOptions, currentUser, mentionManager } = useSendbirdChat();
38
38
  const { palette } = useUIKitTheme();
@@ -50,7 +50,7 @@ const ThreadParentMessageRenderer = (props: ThreadParentMessageRendererProps) =>
50
50
  };
51
51
 
52
52
  const messageProps: ThreadParentMessageRendererProps = {
53
- onPressURL: (url) => SBUUtils.openURL(url),
53
+ onPressURL: (url) => handlers.onOpenURL(url),
54
54
  onToggleVoiceMessage: async (state, setState) => {
55
55
  if (isVoiceMessage(parentMessage) && parentMessage.sendingStatus === 'succeeded') {
56
56
  if (playerService.uri === parentMessage.url) {