@sendbird/uikit-react-native 3.10.1 → 3.10.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 (44) hide show
  1. package/lib/commonjs/components/ChannelInput/EditInput.js +5 -3
  2. package/lib/commonjs/components/ChannelInput/EditInput.js.map +1 -1
  3. package/lib/commonjs/components/ChannelInput/SendInput.js +19 -4
  4. package/lib/commonjs/components/ChannelInput/SendInput.js.map +1 -1
  5. package/lib/commonjs/components/ChannelInput/index.js +16 -4
  6. package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
  7. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +29 -5
  8. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  9. package/lib/commonjs/domain/groupChannel/module/moduleContext.js +36 -2
  10. package/lib/commonjs/domain/groupChannel/module/moduleContext.js.map +1 -1
  11. package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
  12. package/lib/commonjs/fragments/createGroupChannelFragment.js +3 -1
  13. package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
  14. package/lib/commonjs/version.js +1 -1
  15. package/lib/commonjs/version.js.map +1 -1
  16. package/lib/module/components/ChannelInput/EditInput.js +5 -3
  17. package/lib/module/components/ChannelInput/EditInput.js.map +1 -1
  18. package/lib/module/components/ChannelInput/SendInput.js +20 -5
  19. package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
  20. package/lib/module/components/ChannelInput/index.js +17 -5
  21. package/lib/module/components/ChannelInput/index.js.map +1 -1
  22. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +29 -5
  23. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  24. package/lib/module/domain/groupChannel/module/moduleContext.js +36 -2
  25. package/lib/module/domain/groupChannel/module/moduleContext.js.map +1 -1
  26. package/lib/module/domain/groupChannel/types.js.map +1 -1
  27. package/lib/module/fragments/createGroupChannelFragment.js +3 -1
  28. package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
  29. package/lib/module/version.js +1 -1
  30. package/lib/module/version.js.map +1 -1
  31. package/lib/typescript/src/components/ChannelInput/index.d.ts +2 -1
  32. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
  33. package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput.d.ts +1 -1
  34. package/lib/typescript/src/domain/groupChannel/types.d.ts +12 -1
  35. package/lib/typescript/src/version.d.ts +1 -1
  36. package/package.json +5 -5
  37. package/src/components/ChannelInput/EditInput.tsx +2 -0
  38. package/src/components/ChannelInput/SendInput.tsx +16 -1
  39. package/src/components/ChannelInput/index.tsx +37 -5
  40. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +25 -4
  41. package/src/domain/groupChannel/module/moduleContext.tsx +40 -5
  42. package/src/domain/groupChannel/types.ts +14 -1
  43. package/src/fragments/createGroupChannelFragment.tsx +2 -0
  44. package/src/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useContext","useEffect","useRef","useState","useToast","useGroupChannelHandler","confirmAndMarkAsRead","isDifferentChannel","useFreshCallback","useIsFirstMount","ChannelMessageList","MESSAGE_FOCUS_ANIMATION_DELAY","MESSAGE_SEARCH_SAFE_SCROLL_DELAY","useLocalization","useSendbirdChat","GroupChannelContexts","GroupChannelMessageList","props","toast","STRINGS","sdk","sbOptions","groupChannelFragmentOptions","setMessageToEdit","setMessageToReply","Fragment","groupChannelPubSub","PubSub","flatListRef","lazyScrollToBottom","lazyScrollToIndex","onPressReplyMessageInThread","MessageList","isFirstMount","hasSeenNewLineRef","isNewLineInViewportRef","isNewLineExistInChannelRef","scrolledAwayFromBottomRef","isVisibleUnreadMessageFloating","setIsVisibleUnreadMessageFloating","viewableMessages","hasUserMarkedAsUnreadRef","unreadFirstMessage","setUnreadFirstMessage","undefined","updateHasSeenNewLine","hasSeenNewLine","current","_props$onNewLineSeenC","onNewLineSeenChange","call","updateHasUserMarkedAsUnread","hasUserMarkedAsUnread","_props$onUserMarkedAs","onUserMarkedAsUnreadChange","scrollToMessageWithCreatedAt","createdAt","focusAnimated","timeout","foundMessageIndex","messages","findIndex","it","isIncludedInList","setTimeout","onUpdateSearchItem","startingPoint","index","animated","channel","messageOffsetTimestamp","onResetMessageListWithStartingPoint","catch","_","onScrolledAwayFromBottom","value","scrollToBottom","hasNext","onResetMessageList","onPressUnreadMessagesFloatingCloseButton","_props$resetNewMessag","resetNewMessages","url","getPrevNonSilentMessage","prevMessageIndex","length","prevMessage","silent","findFirstUnreadMessage","isNewLineExistInChannel","uikit","groupChannel","enableMarkAsUnread","find","msg","_props$hasPrevious","isMarkedAsUnreadMessage","myLastRead","prevNonSilentMessage","hasNoPreviousAndNoPrevMessage","hasPrevious","prevMessageIsRead","isMessageUnread","foundUnreadFirstMessage","processNewLineVisibility","unreadFirstMsg","_viewableMessages$cur","isNewLineInViewport","some","message","messageId","updateUnreadMessagesFloatingProps","newMessages","markAsUnread","markAsRead","onViewableItemsChanged","info","viewableItems","filter","token","item","map","onPressMarkAsUnreadMessage","unreadMessagesFloatingPropsRef","canAutoMarkAsRead","visible","unreadMessageCount","onPressClose","onReactionUpdated","event","recentMessage","isRecentMessage","scrollReachedBottomAndCanScroll","scrolledAwayFromBottom","onChannelChanged","subscribe","type","data","lastMessage","updatedMessage","lastMessageUpdated","isMaybeStreaming","hasAiBot","foundFirstUnreadMessage","pubsub","payload","searchItem","onPressParentMessage","parentMessage","childMessage","replyType","threadReplySelectType","show","TOAST","FIND_PARENT_MSG_ERROR","canScrollToParent","createElement","_extends","ref","onReplyMessage","onReplyInThreadMessage","onEditMessage","onPressNewMessagesButton","onPressScrollToBottomButton","unreadMessagesFloatingProps","memo"],"sources":["GroupChannelMessageList.tsx"],"sourcesContent":["import type { ViewToken } from '@react-native/virtualized-lists';\nimport React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\n\nimport { useToast } from '@sendbird/uikit-react-native-foundation';\nimport { useGroupChannelHandler } from '@sendbird/uikit-tools';\nimport {\n SendbirdMessage,\n SendbirdSendableMessage,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useFreshCallback,\n useIsFirstMount,\n} from '@sendbird/uikit-utils';\n\nimport ChannelMessageList from '../../../components/ChannelMessageList';\nimport { UnreadMessagesFloatingProps } from '../../../components/UnreadMessagesFloating';\nimport { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../../constants';\nimport { GroupChannelFragmentOptionsPubSubContextPayload } from '../../../contexts/SendbirdChatCtx';\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, sbOptions, groupChannelFragmentOptions } = useSendbirdChat();\n const { setMessageToEdit, setMessageToReply } = useContext(GroupChannelContexts.Fragment);\n const groupChannelPubSub = useContext(GroupChannelContexts.PubSub);\n const { flatListRef, lazyScrollToBottom, lazyScrollToIndex, onPressReplyMessageInThread } = useContext(\n GroupChannelContexts.MessageList,\n );\n\n const isFirstMount = useIsFirstMount();\n\n const hasSeenNewLineRef = useRef(false);\n const isNewLineInViewportRef = useRef(false);\n const isNewLineExistInChannelRef = useRef(false);\n const scrolledAwayFromBottomRef = useRef(false);\n const [isVisibleUnreadMessageFloating, setIsVisibleUnreadMessageFloating] = useState(false);\n const viewableMessages = useRef<SendbirdMessage[]>();\n const hasUserMarkedAsUnreadRef = useRef(false);\n const [unreadFirstMessage, setUnreadFirstMessage] = useState<SendbirdMessage | undefined>(undefined);\n\n const updateHasSeenNewLine = useCallback(\n (hasSeenNewLine: boolean) => {\n if (hasSeenNewLineRef.current !== hasSeenNewLine) {\n hasSeenNewLineRef.current = hasSeenNewLine;\n props.onNewLineSeenChange?.(hasSeenNewLine);\n }\n },\n [props.onNewLineSeenChange],\n );\n\n const updateHasUserMarkedAsUnread = useCallback(\n (hasUserMarkedAsUnread: boolean) => {\n if (hasUserMarkedAsUnreadRef.current !== hasUserMarkedAsUnread) {\n hasUserMarkedAsUnreadRef.current = hasUserMarkedAsUnread;\n props.onUserMarkedAsUnreadChange?.(hasUserMarkedAsUnread);\n }\n },\n [props.onUserMarkedAsUnreadChange],\n );\n\n const scrollToMessageWithCreatedAt = useFreshCallback(\n (createdAt: number, focusAnimated: boolean, timeout: number): 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({ index: foundMessageIndex, animated: true, timeout });\n } else {\n if (props.channel.messageOffsetTimestamp <= createdAt) {\n if (focusAnimated) {\n props.onUpdateSearchItem({ startingPoint: createdAt });\n }\n props.onResetMessageListWithStartingPoint(createdAt).catch((_) => {});\n } else {\n return false;\n }\n }\n return true;\n },\n );\n\n const onScrolledAwayFromBottom = useFreshCallback((value: boolean) => {\n scrolledAwayFromBottomRef.current = value;\n props.onScrolledAwayFromBottom(value);\n });\n\n const scrollToBottom = useFreshCallback(async (animated = false) => {\n if (props.hasNext()) {\n props.onUpdateSearchItem(undefined);\n onScrolledAwayFromBottom(false);\n\n await props.onResetMessageList().catch((_) => {});\n onScrolledAwayFromBottom(false);\n lazyScrollToBottom({ animated });\n } else {\n lazyScrollToBottom({ animated });\n }\n });\n\n const onPressUnreadMessagesFloatingCloseButton = useCallback(() => {\n updateHasSeenNewLine(true);\n updateHasUserMarkedAsUnread(false);\n props.resetNewMessages?.();\n confirmAndMarkAsRead([props.channel]);\n }, [updateHasSeenNewLine, updateHasUserMarkedAsUnread, props.channel.url, props.resetNewMessages]);\n\n const getPrevNonSilentMessage = useCallback(\n (messages: SendbirdMessage[], prevMessageIndex: number): SendbirdMessage | null => {\n if (messages.length <= prevMessageIndex) {\n return null;\n }\n\n const prevMessage = messages[prevMessageIndex];\n if (prevMessage) {\n if (prevMessage.silent) {\n return getPrevNonSilentMessage(messages, prevMessageIndex + 1);\n } else {\n return prevMessage;\n }\n }\n return null;\n },\n [],\n );\n\n const findFirstUnreadMessage = useFreshCallback((isNewLineExistInChannel: boolean) => {\n if (!sbOptions.uikit.groupChannel.channel.enableMarkAsUnread || !isNewLineExistInChannel) {\n return;\n }\n\n return props.messages.find((msg, index) => {\n if (msg.silent) {\n return false;\n }\n\n const isMarkedAsUnreadMessage = props.channel.myLastRead === msg.createdAt - 1;\n if (isMarkedAsUnreadMessage) {\n return true;\n }\n\n const prevNonSilentMessage = getPrevNonSilentMessage(props.messages, index + 1);\n const hasNoPreviousAndNoPrevMessage = !props.hasPrevious?.() && prevNonSilentMessage == null;\n const prevMessageIsRead =\n prevNonSilentMessage != null && prevNonSilentMessage.createdAt <= props.channel.myLastRead;\n const isMessageUnread = props.channel.myLastRead < msg.createdAt;\n return (hasNoPreviousAndNoPrevMessage || prevMessageIsRead) && isMessageUnread;\n });\n });\n\n useEffect(() => {\n if (!unreadFirstMessage) {\n const foundUnreadFirstMessage = findFirstUnreadMessage(props.isNewLineExistInChannel ?? false);\n if (foundUnreadFirstMessage) {\n processNewLineVisibility(foundUnreadFirstMessage);\n setUnreadFirstMessage(foundUnreadFirstMessage);\n }\n }\n }, [props.messages, props.channel.myLastRead, sbOptions.uikit.groupChannel.channel.enableMarkAsUnread]);\n\n const processNewLineVisibility = useFreshCallback((unreadFirstMsg: SendbirdMessage | undefined) => {\n const isNewLineInViewport = !!viewableMessages.current?.some(\n (message) => message.messageId === unreadFirstMsg?.messageId,\n );\n\n if (isNewLineInViewportRef.current !== isNewLineInViewport) {\n isNewLineInViewportRef.current = isNewLineInViewport;\n updateUnreadMessagesFloatingProps();\n if (!isNewLineInViewport || hasSeenNewLineRef.current) {\n return;\n }\n\n updateHasSeenNewLine(true);\n if (hasUserMarkedAsUnreadRef.current) {\n return;\n }\n\n if (0 < props.newMessages.length) {\n props.channel.markAsUnread(props.newMessages[0]);\n } else {\n props.channel.markAsRead();\n }\n }\n });\n\n const onViewableItemsChanged = useFreshCallback(\n async (info: { viewableItems: Array<ViewToken<SendbirdMessage>>; changed: Array<ViewToken<SendbirdMessage>> }) => {\n if (!sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {\n return;\n }\n\n viewableMessages.current = info.viewableItems.filter((token) => token.item).map((token) => token.item);\n processNewLineVisibility(unreadFirstMessage);\n },\n );\n\n const onPressMarkAsUnreadMessage = useCallback(\n async (message: SendbirdMessage) => {\n if (sbOptions.uikit.groupChannel.channel.enableMarkAsUnread && message) {\n await props.channel.markAsUnread(message);\n updateHasUserMarkedAsUnread(true);\n }\n },\n [sbOptions.uikit.groupChannel.channel.enableMarkAsUnread, updateHasUserMarkedAsUnread],\n );\n\n useEffect(() => {\n isNewLineExistInChannelRef.current = !!props.isNewLineExistInChannel && !!viewableMessages.current;\n }, [props.isNewLineExistInChannel, viewableMessages.current]);\n\n const unreadMessagesFloatingPropsRef = useRef<UnreadMessagesFloatingProps>();\n const updateUnreadMessagesFloatingProps = useFreshCallback(() => {\n const canAutoMarkAsRead =\n !scrolledAwayFromBottomRef.current &&\n !hasUserMarkedAsUnreadRef.current &&\n (hasSeenNewLineRef.current || !isNewLineExistInChannelRef.current);\n\n unreadMessagesFloatingPropsRef.current = {\n visible:\n sbOptions.uikit.groupChannel.channel.enableMarkAsUnread &&\n !canAutoMarkAsRead &&\n isNewLineExistInChannelRef.current &&\n 0 < props.channel.unreadMessageCount &&\n !isNewLineInViewportRef.current,\n onPressClose: onPressUnreadMessagesFloatingCloseButton,\n unreadMessageCount: props.channel.unreadMessageCount,\n };\n if (isVisibleUnreadMessageFloating !== unreadMessagesFloatingPropsRef.current.visible) {\n setIsVisibleUnreadMessageFloating(unreadMessagesFloatingPropsRef.current.visible);\n }\n });\n\n useEffect(() => {\n updateUnreadMessagesFloatingProps();\n }, [\n isNewLineExistInChannelRef.current,\n props.channel.unreadMessageCount,\n sbOptions.uikit.groupChannel.channel.enableMarkAsUnread,\n ]);\n\n useGroupChannelHandler(sdk, {\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({ animated: true, timeout: 250 });\n }\n },\n onChannelChanged(channel) {\n if (isDifferentChannel(channel, props.channel)) return;\n },\n });\n\n useEffect(() => {\n return groupChannelPubSub.subscribe(({ type, data }) => {\n switch (type) {\n case 'TYPING_BUBBLE_RENDERED':\n case 'MESSAGES_RECEIVED': {\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGES_UPDATED': {\n const lastMessage = props.channel.lastMessage;\n const [updatedMessage] = data.messages;\n\n const lastMessageUpdated =\n updatedMessage && lastMessage && lastMessage.messageId === updatedMessage.messageId;\n\n const isMaybeStreaming = props.channel.hasAiBot && lastMessageUpdated;\n\n if (isMaybeStreaming) {\n scrollToBottom(false);\n } else if (!props.scrolledAwayFromBottom && lastMessageUpdated) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGE_SENT_SUCCESS':\n case 'MESSAGE_SENT_PENDING': {\n scrollToBottom(false);\n break;\n }\n case 'ON_MARKED_AS_READ_BY_CURRENT_USER': {\n updateUnreadMessagesFloatingProps();\n break;\n }\n case 'ON_MARKED_AS_UNREAD_BY_CURRENT_USER': {\n isNewLineExistInChannelRef.current = true;\n const foundFirstUnreadMessage = findFirstUnreadMessage(true);\n processNewLineVisibility(foundFirstUnreadMessage);\n setUnreadFirstMessage(foundFirstUnreadMessage);\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n }\n });\n }, [props.scrolledAwayFromBottom]);\n\n useEffect(() => {\n return groupChannelFragmentOptions.pubsub.subscribe((payload: GroupChannelFragmentOptionsPubSubContextPayload) => {\n switch (payload.type) {\n case 'OVERRIDE_SEARCH_ITEM_STARTING_POINT': {\n scrollToMessageWithCreatedAt(payload.data.startingPoint, false, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);\n break;\n }\n }\n });\n }, []);\n\n useEffect(() => {\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 if (isFirstMount && props.searchItem) {\n scrollToMessageWithCreatedAt(props.searchItem.startingPoint, false, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);\n }\n }, [isFirstMount]);\n\n const onPressParentMessage = useFreshCallback(\n (parentMessage: SendbirdMessage, childMessage: SendbirdSendableMessage) => {\n if (\n onPressReplyMessageInThread &&\n sbOptions.uikit.groupChannel.channel.replyType === 'thread' &&\n sbOptions.uikit.groupChannel.channel.threadReplySelectType === 'thread'\n ) {\n if (parentMessage.createdAt >= props.channel.messageOffsetTimestamp) {\n onPressReplyMessageInThread(parentMessage as SendbirdSendableMessage, childMessage.createdAt);\n } else {\n toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');\n }\n } else {\n const canScrollToParent = scrollToMessageWithCreatedAt(parentMessage.createdAt, true, 0);\n if (!canScrollToParent) toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');\n }\n },\n );\n\n return (\n <ChannelMessageList\n {...props}\n ref={flatListRef}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n onReplyMessage={setMessageToReply}\n onReplyInThreadMessage={setMessageToReply}\n onEditMessage={setMessageToEdit}\n onViewableItemsChanged={onViewableItemsChanged}\n onPressParentMessage={onPressParentMessage}\n onPressNewMessagesButton={scrollToBottom}\n onPressScrollToBottomButton={scrollToBottom}\n onPressMarkAsUnreadMessage={onPressMarkAsUnreadMessage}\n unreadFirstMessage={unreadFirstMessage}\n unreadMessagesFloatingProps={unreadMessagesFloatingPropsRef.current}\n />\n );\n};\n\nexport default React.memo(GroupChannelMessageList);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useContext","useEffect","useRef","useState","useToast","useGroupChannelHandler","confirmAndMarkAsRead","isDifferentChannel","useFreshCallback","useIsFirstMount","ChannelMessageList","MESSAGE_FOCUS_ANIMATION_DELAY","MESSAGE_SEARCH_SAFE_SCROLL_DELAY","useLocalization","useSendbirdChat","GroupChannelContexts","GroupChannelMessageList","props","toast","STRINGS","sdk","sbOptions","groupChannelFragmentOptions","setMessageToEdit","setMessageToReply","Fragment","groupChannelPubSub","PubSub","flatListRef","lazyScrollToBottom","lazyScrollToMessageId","onPressReplyMessageInThread","MessageList","isFirstMount","hasSeenNewLineRef","isNewLineInViewportRef","isNewLineExistInChannelRef","scrolledAwayFromBottomRef","isVisibleUnreadMessageFloating","setIsVisibleUnreadMessageFloating","viewableMessages","hasUserMarkedAsUnreadRef","unreadFirstMessage","setUnreadFirstMessage","undefined","pendingBottomReachedRef","updateHasSeenNewLine","hasSeenNewLine","current","_props$onNewLineSeenC","onNewLineSeenChange","call","updateHasUserMarkedAsUnread","hasUserMarkedAsUnread","_props$onUserMarkedAs","onUserMarkedAsUnreadChange","scrollToMessageWithCreatedAt","createdAt","focusAnimated","timeout","foundMessage","messages","find","it","isIncludedInList","setTimeout","onUpdateSearchItem","startingPoint","timestamp","Date","now","messageId","animated","channel","messageOffsetTimestamp","onResetMessageListWithStartingPoint","catch","_","onScrolledAwayFromBottom","value","scrollToBottom","hasNext","onResetMessageList","onPressUnreadMessagesFloatingCloseButton","_props$resetNewMessag","resetNewMessages","url","getPrevNonSilentMessage","prevMessageIndex","length","prevMessage","silent","findFirstUnreadMessage","isNewLineExistInChannel","uikit","groupChannel","enableMarkAsUnread","msg","index","_props$hasPrevious","isMarkedAsUnreadMessage","myLastRead","prevNonSilentMessage","hasNoPreviousAndNoPrevMessage","hasPrevious","prevMessageIsRead","isMessageUnread","foundUnreadFirstMessage","processNewLineVisibility","unreadFirstMsg","_viewableMessages$cur","isNewLineInViewport","some","message","updateUnreadMessagesFloatingProps","newMessages","markAsUnread","markAsRead","onViewableItemsChanged","info","viewableItems","filter","token","item","map","onPressMarkAsUnreadMessage","unreadMessagesFloatingPropsRef","canAutoMarkAsRead","visible","unreadMessageCount","onPressClose","onReactionUpdated","event","recentMessage","isRecentMessage","scrollReachedBottomAndCanScroll","scrolledAwayFromBottom","onChannelChanged","subscribe","type","data","lastMessage","updatedMessage","lastMessageUpdated","isMaybeStreaming","hasAiBot","foundFirstUnreadMessage","pubsub","payload","searchItem","onPressParentMessage","parentMessage","childMessage","replyType","threadReplySelectType","show","TOAST","FIND_PARENT_MSG_ERROR","canScrollToParent","onBottomReached","currentTime","elapsedTime","timeoutThreshold","_props$onBottomReache","_props$onBottomReache2","createElement","_extends","ref","onReplyMessage","onReplyInThreadMessage","onEditMessage","onPressNewMessagesButton","onPressScrollToBottomButton","unreadMessagesFloatingProps","memo"],"sources":["GroupChannelMessageList.tsx"],"sourcesContent":["import type { ViewToken } from '@react-native/virtualized-lists';\nimport React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\n\nimport { useToast } from '@sendbird/uikit-react-native-foundation';\nimport { useGroupChannelHandler } from '@sendbird/uikit-tools';\nimport {\n SendbirdMessage,\n SendbirdSendableMessage,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useFreshCallback,\n useIsFirstMount,\n} from '@sendbird/uikit-utils';\n\nimport ChannelMessageList from '../../../components/ChannelMessageList';\nimport { UnreadMessagesFloatingProps } from '../../../components/UnreadMessagesFloating';\nimport { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../../constants';\nimport { GroupChannelFragmentOptionsPubSubContextPayload } from '../../../contexts/SendbirdChatCtx';\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, sbOptions, groupChannelFragmentOptions } = useSendbirdChat();\n const { setMessageToEdit, setMessageToReply } = useContext(GroupChannelContexts.Fragment);\n const groupChannelPubSub = useContext(GroupChannelContexts.PubSub);\n const { flatListRef, lazyScrollToBottom, lazyScrollToMessageId, onPressReplyMessageInThread } = useContext(\n GroupChannelContexts.MessageList,\n );\n\n const isFirstMount = useIsFirstMount();\n\n const hasSeenNewLineRef = useRef(false);\n const isNewLineInViewportRef = useRef(false);\n const isNewLineExistInChannelRef = useRef(false);\n const scrolledAwayFromBottomRef = useRef(false);\n const [isVisibleUnreadMessageFloating, setIsVisibleUnreadMessageFloating] = useState(false);\n const viewableMessages = useRef<SendbirdMessage[]>();\n const hasUserMarkedAsUnreadRef = useRef(false);\n const [unreadFirstMessage, setUnreadFirstMessage] = useState<SendbirdMessage | undefined>(undefined);\n const pendingBottomReachedRef = useRef<{ timeout: number; timestamp: number } | null>(null);\n\n const updateHasSeenNewLine = useCallback(\n (hasSeenNewLine: boolean) => {\n if (hasSeenNewLineRef.current !== hasSeenNewLine) {\n hasSeenNewLineRef.current = hasSeenNewLine;\n props.onNewLineSeenChange?.(hasSeenNewLine);\n }\n },\n [props.onNewLineSeenChange],\n );\n\n const updateHasUserMarkedAsUnread = useCallback(\n (hasUserMarkedAsUnread: boolean) => {\n if (hasUserMarkedAsUnreadRef.current !== hasUserMarkedAsUnread) {\n hasUserMarkedAsUnreadRef.current = hasUserMarkedAsUnread;\n props.onUserMarkedAsUnreadChange?.(hasUserMarkedAsUnread);\n }\n },\n [props.onUserMarkedAsUnreadChange],\n );\n\n const scrollToMessageWithCreatedAt = useFreshCallback(\n (createdAt: number, focusAnimated: boolean, timeout: number): boolean => {\n const foundMessage = props.messages.find((it) => it.createdAt === createdAt);\n const isIncludedInList = !!foundMessage;\n pendingBottomReachedRef.current = null;\n\n if (isIncludedInList) {\n if (focusAnimated) {\n setTimeout(() => props.onUpdateSearchItem({ startingPoint: createdAt }), MESSAGE_FOCUS_ANIMATION_DELAY);\n }\n pendingBottomReachedRef.current = { timeout, timestamp: Date.now() };\n lazyScrollToMessageId({ messageId: foundMessage.messageId, animated: true, timeout });\n } else {\n if (props.channel.messageOffsetTimestamp <= createdAt) {\n if (focusAnimated) {\n props.onUpdateSearchItem({ startingPoint: createdAt });\n }\n props.onResetMessageListWithStartingPoint(createdAt).catch((_) => {});\n } else {\n return false;\n }\n }\n return true;\n },\n );\n\n const onScrolledAwayFromBottom = useFreshCallback((value: boolean) => {\n scrolledAwayFromBottomRef.current = value;\n props.onScrolledAwayFromBottom(value);\n });\n\n const scrollToBottom = useFreshCallback(async (animated = false) => {\n if (props.hasNext()) {\n props.onUpdateSearchItem(undefined);\n onScrolledAwayFromBottom(false);\n\n await props.onResetMessageList().catch((_) => {});\n onScrolledAwayFromBottom(false);\n lazyScrollToBottom({ animated });\n } else {\n lazyScrollToBottom({ animated });\n }\n });\n\n const onPressUnreadMessagesFloatingCloseButton = useCallback(() => {\n updateHasSeenNewLine(true);\n updateHasUserMarkedAsUnread(false);\n props.resetNewMessages?.();\n confirmAndMarkAsRead([props.channel]);\n }, [updateHasSeenNewLine, updateHasUserMarkedAsUnread, props.channel.url, props.resetNewMessages]);\n\n const getPrevNonSilentMessage = useCallback(\n (messages: SendbirdMessage[], prevMessageIndex: number): SendbirdMessage | null => {\n if (messages.length <= prevMessageIndex) {\n return null;\n }\n\n const prevMessage = messages[prevMessageIndex];\n if (prevMessage) {\n if (prevMessage.silent) {\n return getPrevNonSilentMessage(messages, prevMessageIndex + 1);\n } else {\n return prevMessage;\n }\n }\n return null;\n },\n [],\n );\n\n const findFirstUnreadMessage = useFreshCallback((isNewLineExistInChannel: boolean) => {\n if (!sbOptions.uikit.groupChannel.channel.enableMarkAsUnread || !isNewLineExistInChannel) {\n return;\n }\n\n return props.messages.find((msg, index) => {\n if (msg.silent) {\n return false;\n }\n\n const isMarkedAsUnreadMessage = props.channel.myLastRead === msg.createdAt - 1;\n if (isMarkedAsUnreadMessage) {\n return true;\n }\n\n const prevNonSilentMessage = getPrevNonSilentMessage(props.messages, index + 1);\n const hasNoPreviousAndNoPrevMessage = !props.hasPrevious?.() && prevNonSilentMessage == null;\n const prevMessageIsRead =\n prevNonSilentMessage != null && prevNonSilentMessage.createdAt <= props.channel.myLastRead;\n const isMessageUnread = props.channel.myLastRead < msg.createdAt;\n return (hasNoPreviousAndNoPrevMessage || prevMessageIsRead) && isMessageUnread;\n });\n });\n\n useEffect(() => {\n if (!unreadFirstMessage) {\n const foundUnreadFirstMessage = findFirstUnreadMessage(props.isNewLineExistInChannel ?? false);\n if (foundUnreadFirstMessage) {\n processNewLineVisibility(foundUnreadFirstMessage);\n setUnreadFirstMessage(foundUnreadFirstMessage);\n }\n }\n }, [props.messages, props.channel.myLastRead, sbOptions.uikit.groupChannel.channel.enableMarkAsUnread]);\n\n const processNewLineVisibility = useFreshCallback((unreadFirstMsg: SendbirdMessage | undefined) => {\n const isNewLineInViewport = !!viewableMessages.current?.some(\n (message) => message.messageId === unreadFirstMsg?.messageId,\n );\n\n if (isNewLineInViewportRef.current !== isNewLineInViewport) {\n isNewLineInViewportRef.current = isNewLineInViewport;\n updateUnreadMessagesFloatingProps();\n if (!isNewLineInViewport || hasSeenNewLineRef.current) {\n return;\n }\n\n updateHasSeenNewLine(true);\n if (hasUserMarkedAsUnreadRef.current) {\n return;\n }\n\n if (0 < props.newMessages.length) {\n props.channel.markAsUnread(props.newMessages[0]);\n } else {\n props.channel.markAsRead();\n }\n }\n });\n\n const onViewableItemsChanged = useFreshCallback(\n async (info: { viewableItems: Array<ViewToken<SendbirdMessage>>; changed: Array<ViewToken<SendbirdMessage>> }) => {\n if (!sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {\n return;\n }\n\n viewableMessages.current = info.viewableItems.filter((token) => token.item).map((token) => token.item);\n processNewLineVisibility(unreadFirstMessage);\n },\n );\n\n const onPressMarkAsUnreadMessage = useCallback(\n async (message: SendbirdMessage) => {\n if (sbOptions.uikit.groupChannel.channel.enableMarkAsUnread && message) {\n await props.channel.markAsUnread(message);\n updateHasUserMarkedAsUnread(true);\n }\n },\n [sbOptions.uikit.groupChannel.channel.enableMarkAsUnread, updateHasUserMarkedAsUnread],\n );\n\n useEffect(() => {\n isNewLineExistInChannelRef.current = !!props.isNewLineExistInChannel && !!viewableMessages.current;\n }, [props.isNewLineExistInChannel, viewableMessages.current]);\n\n const unreadMessagesFloatingPropsRef = useRef<UnreadMessagesFloatingProps>();\n const updateUnreadMessagesFloatingProps = useFreshCallback(() => {\n const canAutoMarkAsRead =\n !scrolledAwayFromBottomRef.current &&\n !hasUserMarkedAsUnreadRef.current &&\n (hasSeenNewLineRef.current || !isNewLineExistInChannelRef.current);\n\n unreadMessagesFloatingPropsRef.current = {\n visible:\n sbOptions.uikit.groupChannel.channel.enableMarkAsUnread &&\n !canAutoMarkAsRead &&\n isNewLineExistInChannelRef.current &&\n 0 < props.channel.unreadMessageCount &&\n !isNewLineInViewportRef.current,\n onPressClose: onPressUnreadMessagesFloatingCloseButton,\n unreadMessageCount: props.channel.unreadMessageCount,\n };\n if (isVisibleUnreadMessageFloating !== unreadMessagesFloatingPropsRef.current.visible) {\n setIsVisibleUnreadMessageFloating(unreadMessagesFloatingPropsRef.current.visible);\n }\n });\n\n useEffect(() => {\n updateUnreadMessagesFloatingProps();\n }, [\n isNewLineExistInChannelRef.current,\n props.channel.unreadMessageCount,\n sbOptions.uikit.groupChannel.channel.enableMarkAsUnread,\n ]);\n\n useGroupChannelHandler(sdk, {\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({ animated: true, timeout: 250 });\n }\n },\n onChannelChanged(channel) {\n if (isDifferentChannel(channel, props.channel)) return;\n },\n });\n\n useEffect(() => {\n return groupChannelPubSub.subscribe(({ type, data }) => {\n switch (type) {\n case 'TYPING_BUBBLE_RENDERED':\n case 'MESSAGES_RECEIVED': {\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGES_UPDATED': {\n const lastMessage = props.channel.lastMessage;\n const [updatedMessage] = data.messages;\n\n const lastMessageUpdated =\n updatedMessage && lastMessage && lastMessage.messageId === updatedMessage.messageId;\n\n const isMaybeStreaming = props.channel.hasAiBot && lastMessageUpdated;\n\n if (isMaybeStreaming) {\n scrollToBottom(false);\n } else if (!props.scrolledAwayFromBottom && lastMessageUpdated) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGE_SENT_SUCCESS':\n case 'MESSAGE_SENT_PENDING': {\n scrollToBottom(false);\n break;\n }\n case 'ON_MARKED_AS_READ_BY_CURRENT_USER': {\n updateUnreadMessagesFloatingProps();\n break;\n }\n case 'ON_MARKED_AS_UNREAD_BY_CURRENT_USER': {\n isNewLineExistInChannelRef.current = true;\n const foundFirstUnreadMessage = findFirstUnreadMessage(true);\n processNewLineVisibility(foundFirstUnreadMessage);\n setUnreadFirstMessage(foundFirstUnreadMessage);\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n }\n });\n }, [props.scrolledAwayFromBottom]);\n\n useEffect(() => {\n return groupChannelFragmentOptions.pubsub.subscribe((payload: GroupChannelFragmentOptionsPubSubContextPayload) => {\n switch (payload.type) {\n case 'OVERRIDE_SEARCH_ITEM_STARTING_POINT': {\n scrollToMessageWithCreatedAt(payload.data.startingPoint, false, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);\n break;\n }\n }\n });\n }, []);\n\n useEffect(() => {\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 if (isFirstMount && props.searchItem) {\n scrollToMessageWithCreatedAt(props.searchItem.startingPoint, false, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);\n }\n }, [isFirstMount]);\n\n const onPressParentMessage = useFreshCallback(\n (parentMessage: SendbirdMessage, childMessage: SendbirdSendableMessage) => {\n if (\n onPressReplyMessageInThread &&\n sbOptions.uikit.groupChannel.channel.replyType === 'thread' &&\n sbOptions.uikit.groupChannel.channel.threadReplySelectType === 'thread'\n ) {\n if (parentMessage.createdAt >= props.channel.messageOffsetTimestamp) {\n onPressReplyMessageInThread(parentMessage as SendbirdSendableMessage, childMessage.createdAt);\n } else {\n toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');\n }\n } else {\n const canScrollToParent = scrollToMessageWithCreatedAt(parentMessage.createdAt, true, 0);\n if (!canScrollToParent) toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');\n }\n },\n );\n\n const onBottomReached = useFreshCallback(() => {\n if (props.hasNext()) {\n if (pendingBottomReachedRef.current) {\n const currentTime = Date.now();\n const elapsedTime = currentTime - pendingBottomReachedRef.current.timestamp;\n\n const timeoutThreshold = 500;\n if (elapsedTime >= pendingBottomReachedRef.current.timeout + timeoutThreshold) {\n props.onBottomReached?.();\n pendingBottomReachedRef.current = null;\n }\n } else {\n props.onBottomReached?.();\n }\n }\n });\n\n return (\n <ChannelMessageList\n {...props}\n ref={flatListRef}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n onReplyMessage={setMessageToReply}\n onReplyInThreadMessage={setMessageToReply}\n onEditMessage={setMessageToEdit}\n onViewableItemsChanged={onViewableItemsChanged}\n onPressParentMessage={onPressParentMessage}\n onPressNewMessagesButton={scrollToBottom}\n onPressScrollToBottomButton={scrollToBottom}\n onPressMarkAsUnreadMessage={onPressMarkAsUnreadMessage}\n onBottomReached={onBottomReached}\n unreadFirstMessage={unreadFirstMessage}\n unreadMessagesFloatingProps={unreadMessagesFloatingPropsRef.current}\n />\n );\n};\n\nexport default React.memo(GroupChannelMessageList);\n"],"mappings":"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","ignoreList":[]}
@@ -28,6 +28,9 @@ export const GroupChannelContexts = {
28
28
  },
29
29
  lazyScrollToIndex: () => {
30
30
  // noop
31
+ },
32
+ lazyScrollToMessageId: () => {
33
+ // noop
31
34
  }
32
35
  })
33
36
  };
@@ -57,7 +60,8 @@ export const GroupChannelContextsProvider = ({
57
60
  flatListRef,
58
61
  lazyScrollToIndex,
59
62
  lazyScrollToBottom,
60
- scrollToMessage
63
+ scrollToMessage,
64
+ lazyScrollToMessageId
61
65
  } = useScrollActions({
62
66
  messages,
63
67
  onUpdateSearchItem
@@ -131,6 +135,7 @@ export const GroupChannelContextsProvider = ({
131
135
  scrollToMessage,
132
136
  lazyScrollToIndex,
133
137
  lazyScrollToBottom,
138
+ lazyScrollToMessageId,
134
139
  onPressReplyMessageInThread
135
140
  }
136
141
  }, children)))));
@@ -141,6 +146,8 @@ const useScrollActions = params => {
141
146
  onUpdateSearchItem
142
147
  } = params;
143
148
  const flatListRef = useRef(null);
149
+ const messagesRef = useRef(messages);
150
+ messagesRef.current = messages;
144
151
 
145
152
  // FIXME: Workaround, should run after data has been applied to UI.
146
153
  const lazyScrollToBottom = useFreshCallback(params => {
@@ -172,6 +179,32 @@ const useScrollActions = params => {
172
179
  });
173
180
  }, (params === null || params === void 0 ? void 0 : params.timeout) ?? 0);
174
181
  });
182
+
183
+ // FIXME: Workaround, should run after data has been applied to UI.
184
+ const lazyScrollToMessageId = useFreshCallback(params => {
185
+ if (!flatListRef.current) {
186
+ logFlatListRefWarning();
187
+ return;
188
+ }
189
+ setTimeout(() => {
190
+ var _flatListRef$current3;
191
+ let messageIndex = 0;
192
+ if (params !== null && params !== void 0 && params.messageId) {
193
+ const foundMessageIndex = messagesRef.current.findIndex(it => it.messageId === params.messageId);
194
+ if (foundMessageIndex > -1) {
195
+ messageIndex = foundMessageIndex;
196
+ } else {
197
+ Logger.warn('Message with messageId not found:', params.messageId);
198
+ return;
199
+ }
200
+ }
201
+ (_flatListRef$current3 = flatListRef.current) === null || _flatListRef$current3 === void 0 || _flatListRef$current3.scrollToIndex({
202
+ index: messageIndex,
203
+ animated: (params === null || params === void 0 ? void 0 : params.animated) ?? false,
204
+ viewPosition: (params === null || params === void 0 ? void 0 : params.viewPosition) ?? 0.5
205
+ });
206
+ }, (params === null || params === void 0 ? void 0 : params.timeout) ?? 0);
207
+ });
175
208
  const scrollToMessage = useFreshCallback((messageId, options) => {
176
209
  if (!flatListRef.current) {
177
210
  logFlatListRefWarning();
@@ -200,7 +233,8 @@ const useScrollActions = params => {
200
233
  flatListRef,
201
234
  lazyScrollToIndex,
202
235
  lazyScrollToBottom,
203
- scrollToMessage
236
+ scrollToMessage,
237
+ lazyScrollToMessageId
204
238
  };
205
239
  };
206
240
  const logFlatListRefWarning = () => {
@@ -1 +1 @@
1
- {"version":3,"names":["React","createContext","useCallback","useRef","useState","useGroupChannelHandler","Logger","NOOP","getGroupChannelChatAvailableState","isDifferentChannel","useFreshCallback","ProviderLayout","MESSAGE_FOCUS_ANIMATION_DELAY","useLocalization","useSendbirdChat","GroupChannelContexts","Fragment","headerTitle","channel","setMessageToEdit","setMessageToReply","TypingIndicator","typingUsers","PubSub","publish","subscribe","MessageList","flatListRef","current","scrollToMessage","lazyScrollToBottom","lazyScrollToIndex","GroupChannelContextsProvider","children","enableTypingIndicator","keyboardAvoidOffset","groupChannelPubSub","messages","onUpdateSearchItem","onPressReplyMessageInThread","Error","STRINGS","currentUser","sdk","sbOptions","setTypingUsers","messageToEdit","messageToReply","useScrollActions","updateInputMode","mode","message","undefined","onPressMessageToReply","parentMessage","uikit","groupChannel","replyType","Number","MAX_SAFE_INTEGER","onMessageDeleted","_","messageId","onChannelFrozen","frozenChannel","url","isGroupChannel","frozen","onUserMuted","mutedChannel","user","_sdk$currentUser","userId","onTypingStatusUpdated","eventChannel","getTypingUsers","createElement","Provider","value","GROUP_CHANNEL","HEADER_TITLE","params","logFlatListRefWarning","setTimeout","_flatListRef$current","scrollToOffset","offset","animated","timeout","_flatListRef$current2","scrollToIndex","index","viewPosition","options","foundMessageIndex","findIndex","it","isIncludedInList","focusAnimated","startingPoint","createdAt","warn"],"sources":["moduleContext.tsx"],"sourcesContent":["import React, { createContext, useCallback, useRef, useState } from 'react';\nimport type { FlatList } from 'react-native';\n\nimport { useGroupChannelHandler } from '@sendbird/uikit-tools';\nimport {\n ContextValue,\n Logger,\n NOOP,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUser,\n SendbirdUserMessage,\n getGroupChannelChatAvailableState,\n isDifferentChannel,\n useFreshCallback,\n} from '@sendbird/uikit-utils';\n\nimport ProviderLayout from '../../../components/ProviderLayout';\nimport { MESSAGE_FOCUS_ANIMATION_DELAY } from '../../../constants';\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport type { PubSub } from '../../../utils/pubsub';\nimport type { GroupChannelContextsType, GroupChannelModule, GroupChannelPubSubContextPayload } from '../types';\nimport { GroupChannelProps } 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 MessageList: createContext({\n flatListRef: { current: null },\n scrollToMessage: () => false,\n lazyScrollToBottom: () => {\n // noop\n },\n lazyScrollToIndex: () => {\n // noop\n },\n } as MessageListContextValue),\n};\n\nexport const GroupChannelContextsProvider: GroupChannelModule['Provider'] = ({\n children,\n channel,\n enableTypingIndicator,\n keyboardAvoidOffset = 0,\n groupChannelPubSub,\n messages,\n onUpdateSearchItem,\n onPressReplyMessageInThread,\n}) => {\n if (!channel) throw new Error('GroupChannel is not provided to GroupChannelModule');\n\n const { STRINGS } = useLocalization();\n const { currentUser, sdk, sbOptions } = 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 { flatListRef, lazyScrollToIndex, lazyScrollToBottom, scrollToMessage } = useScrollActions({\n messages,\n onUpdateSearchItem,\n });\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 const onPressMessageToReply = (parentMessage?: SendbirdUserMessage | SendbirdFileMessage) => {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && parentMessage) {\n onPressReplyMessageInThread?.(parentMessage, Number.MAX_SAFE_INTEGER);\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n updateInputMode('reply', parentMessage);\n }\n };\n\n useGroupChannelHandler(sdk, {\n onMessageDeleted(_, messageId) {\n if (messageToReply?.messageId === messageId) {\n setMessageToReply(undefined);\n }\n },\n onChannelFrozen(frozenChannel) {\n if (frozenChannel.url === channel.url) {\n if (frozenChannel.isGroupChannel() && getGroupChannelChatAvailableState(channel).frozen) {\n setMessageToReply(undefined);\n }\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) => onPressMessageToReply(message), []),\n }}\n >\n <GroupChannelContexts.PubSub.Provider value={groupChannelPubSub}>\n <GroupChannelContexts.TypingIndicator.Provider value={{ typingUsers }}>\n <GroupChannelContexts.MessageList.Provider\n value={{\n flatListRef,\n scrollToMessage,\n lazyScrollToIndex,\n lazyScrollToBottom,\n onPressReplyMessageInThread,\n }}\n >\n {children}\n </GroupChannelContexts.MessageList.Provider>\n </GroupChannelContexts.TypingIndicator.Provider>\n </GroupChannelContexts.PubSub.Provider>\n </GroupChannelContexts.Fragment.Provider>\n </ProviderLayout>\n );\n};\n\ntype MessageListContextValue = ContextValue<GroupChannelContextsType['MessageList']>;\nconst useScrollActions = (params: Pick<GroupChannelProps['Provider'], 'messages' | 'onUpdateSearchItem'>) => {\n const { messages, onUpdateSearchItem } = params;\n const flatListRef = useRef<FlatList<SendbirdMessage>>(null);\n\n // FIXME: Workaround, should run after data has been applied to UI.\n const lazyScrollToBottom = useFreshCallback<MessageListContextValue['lazyScrollToIndex']>((params) => {\n if (!flatListRef.current) {\n logFlatListRefWarning();\n return;\n }\n\n setTimeout(() => {\n flatListRef.current?.scrollToOffset({ offset: 0, animated: params?.animated ?? false });\n }, params?.timeout ?? 0);\n });\n\n // FIXME: Workaround, should run after data has been applied to UI.\n const lazyScrollToIndex = useFreshCallback<MessageListContextValue['lazyScrollToIndex']>((params) => {\n if (!flatListRef.current) {\n logFlatListRefWarning();\n return;\n }\n\n setTimeout(() => {\n flatListRef.current?.scrollToIndex({\n index: params?.index ?? 0,\n animated: params?.animated ?? false,\n viewPosition: params?.viewPosition ?? 0.5,\n });\n }, params?.timeout ?? 0);\n });\n\n const scrollToMessage = useFreshCallback<MessageListContextValue['scrollToMessage']>((messageId, options) => {\n if (!flatListRef.current) {\n logFlatListRefWarning();\n return false;\n }\n\n const foundMessageIndex = messages.findIndex((it) => it.messageId === messageId);\n const isIncludedInList = foundMessageIndex > -1;\n\n if (isIncludedInList) {\n if (options?.focusAnimated) {\n setTimeout(\n () => onUpdateSearchItem({ startingPoint: messages[foundMessageIndex].createdAt }),\n MESSAGE_FOCUS_ANIMATION_DELAY,\n );\n }\n lazyScrollToIndex({\n index: foundMessageIndex,\n animated: true,\n timeout: 0,\n viewPosition: options?.viewPosition,\n });\n return true;\n } else {\n return false;\n }\n });\n\n return {\n flatListRef,\n lazyScrollToIndex,\n lazyScrollToBottom,\n scrollToMessage,\n };\n};\n\nconst logFlatListRefWarning = () => {\n Logger.warn(\n 'Cannot find flatListRef.current, please render FlatList and pass the flatListRef' +\n 'or please try again after FlatList has been rendered.',\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","createContext","useCallback","useRef","useState","useGroupChannelHandler","Logger","NOOP","getGroupChannelChatAvailableState","isDifferentChannel","useFreshCallback","ProviderLayout","MESSAGE_FOCUS_ANIMATION_DELAY","useLocalization","useSendbirdChat","GroupChannelContexts","Fragment","headerTitle","channel","setMessageToEdit","setMessageToReply","TypingIndicator","typingUsers","PubSub","publish","subscribe","MessageList","flatListRef","current","scrollToMessage","lazyScrollToBottom","lazyScrollToIndex","lazyScrollToMessageId","GroupChannelContextsProvider","children","enableTypingIndicator","keyboardAvoidOffset","groupChannelPubSub","messages","onUpdateSearchItem","onPressReplyMessageInThread","Error","STRINGS","currentUser","sdk","sbOptions","setTypingUsers","messageToEdit","messageToReply","useScrollActions","updateInputMode","mode","message","undefined","onPressMessageToReply","parentMessage","uikit","groupChannel","replyType","Number","MAX_SAFE_INTEGER","onMessageDeleted","_","messageId","onChannelFrozen","frozenChannel","url","isGroupChannel","frozen","onUserMuted","mutedChannel","user","_sdk$currentUser","userId","onTypingStatusUpdated","eventChannel","getTypingUsers","createElement","Provider","value","GROUP_CHANNEL","HEADER_TITLE","params","messagesRef","logFlatListRefWarning","setTimeout","_flatListRef$current","scrollToOffset","offset","animated","timeout","_flatListRef$current2","scrollToIndex","index","viewPosition","_flatListRef$current3","messageIndex","foundMessageIndex","findIndex","it","warn","options","isIncludedInList","focusAnimated","startingPoint","createdAt"],"sources":["moduleContext.tsx"],"sourcesContent":["import React, { createContext, useCallback, useRef, useState } from 'react';\nimport type { FlatList } from 'react-native';\n\nimport { useGroupChannelHandler } from '@sendbird/uikit-tools';\nimport {\n ContextValue,\n Logger,\n NOOP,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUser,\n SendbirdUserMessage,\n getGroupChannelChatAvailableState,\n isDifferentChannel,\n useFreshCallback,\n} from '@sendbird/uikit-utils';\n\nimport ProviderLayout from '../../../components/ProviderLayout';\nimport { MESSAGE_FOCUS_ANIMATION_DELAY } from '../../../constants';\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport type { PubSub } from '../../../utils/pubsub';\nimport type { GroupChannelContextsType, GroupChannelModule, GroupChannelPubSubContextPayload } from '../types';\nimport { GroupChannelProps } 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 MessageList: createContext({\n flatListRef: { current: null },\n scrollToMessage: () => false,\n lazyScrollToBottom: () => {\n // noop\n },\n lazyScrollToIndex: () => {\n // noop\n },\n lazyScrollToMessageId: () => {\n // noop\n },\n } as MessageListContextValue),\n};\n\nexport const GroupChannelContextsProvider: GroupChannelModule['Provider'] = ({\n children,\n channel,\n enableTypingIndicator,\n keyboardAvoidOffset = 0,\n groupChannelPubSub,\n messages,\n onUpdateSearchItem,\n onPressReplyMessageInThread,\n}) => {\n if (!channel) throw new Error('GroupChannel is not provided to GroupChannelModule');\n\n const { STRINGS } = useLocalization();\n const { currentUser, sdk, sbOptions } = 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 { flatListRef, lazyScrollToIndex, lazyScrollToBottom, scrollToMessage, lazyScrollToMessageId } =\n useScrollActions({\n messages,\n onUpdateSearchItem,\n });\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 const onPressMessageToReply = (parentMessage?: SendbirdUserMessage | SendbirdFileMessage) => {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && parentMessage) {\n onPressReplyMessageInThread?.(parentMessage, Number.MAX_SAFE_INTEGER);\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n updateInputMode('reply', parentMessage);\n }\n };\n\n useGroupChannelHandler(sdk, {\n onMessageDeleted(_, messageId) {\n if (messageToReply?.messageId === messageId) {\n setMessageToReply(undefined);\n }\n },\n onChannelFrozen(frozenChannel) {\n if (frozenChannel.url === channel.url) {\n if (frozenChannel.isGroupChannel() && getGroupChannelChatAvailableState(channel).frozen) {\n setMessageToReply(undefined);\n }\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) => onPressMessageToReply(message), []),\n }}\n >\n <GroupChannelContexts.PubSub.Provider value={groupChannelPubSub}>\n <GroupChannelContexts.TypingIndicator.Provider value={{ typingUsers }}>\n <GroupChannelContexts.MessageList.Provider\n value={{\n flatListRef,\n scrollToMessage,\n lazyScrollToIndex,\n lazyScrollToBottom,\n lazyScrollToMessageId,\n onPressReplyMessageInThread,\n }}\n >\n {children}\n </GroupChannelContexts.MessageList.Provider>\n </GroupChannelContexts.TypingIndicator.Provider>\n </GroupChannelContexts.PubSub.Provider>\n </GroupChannelContexts.Fragment.Provider>\n </ProviderLayout>\n );\n};\n\ntype MessageListContextValue = ContextValue<GroupChannelContextsType['MessageList']>;\nconst useScrollActions = (params: Pick<GroupChannelProps['Provider'], 'messages' | 'onUpdateSearchItem'>) => {\n const { messages, onUpdateSearchItem } = params;\n const flatListRef = useRef<FlatList<SendbirdMessage>>(null);\n const messagesRef = useRef(messages);\n messagesRef.current = messages;\n\n // FIXME: Workaround, should run after data has been applied to UI.\n const lazyScrollToBottom = useFreshCallback<MessageListContextValue['lazyScrollToBottom']>((params) => {\n if (!flatListRef.current) {\n logFlatListRefWarning();\n return;\n }\n\n setTimeout(() => {\n flatListRef.current?.scrollToOffset({ offset: 0, animated: params?.animated ?? false });\n }, params?.timeout ?? 0);\n });\n\n // FIXME: Workaround, should run after data has been applied to UI.\n const lazyScrollToIndex = useFreshCallback<MessageListContextValue['lazyScrollToIndex']>((params) => {\n if (!flatListRef.current) {\n logFlatListRefWarning();\n return;\n }\n\n setTimeout(() => {\n flatListRef.current?.scrollToIndex({\n index: params?.index ?? 0,\n animated: params?.animated ?? false,\n viewPosition: params?.viewPosition ?? 0.5,\n });\n }, params?.timeout ?? 0);\n });\n\n // FIXME: Workaround, should run after data has been applied to UI.\n const lazyScrollToMessageId = useFreshCallback<MessageListContextValue['lazyScrollToMessageId']>((params) => {\n if (!flatListRef.current) {\n logFlatListRefWarning();\n return;\n }\n\n setTimeout(() => {\n let messageIndex = 0;\n if (params?.messageId) {\n const foundMessageIndex = messagesRef.current.findIndex((it) => it.messageId === params.messageId);\n if (foundMessageIndex > -1) {\n messageIndex = foundMessageIndex;\n } else {\n Logger.warn('Message with messageId not found:', params.messageId);\n return;\n }\n }\n\n flatListRef.current?.scrollToIndex({\n index: messageIndex,\n animated: params?.animated ?? false,\n viewPosition: params?.viewPosition ?? 0.5,\n });\n }, params?.timeout ?? 0);\n });\n\n const scrollToMessage = useFreshCallback<MessageListContextValue['scrollToMessage']>((messageId, options) => {\n if (!flatListRef.current) {\n logFlatListRefWarning();\n return false;\n }\n\n const foundMessageIndex = messages.findIndex((it) => it.messageId === messageId);\n const isIncludedInList = foundMessageIndex > -1;\n\n if (isIncludedInList) {\n if (options?.focusAnimated) {\n setTimeout(\n () => onUpdateSearchItem({ startingPoint: messages[foundMessageIndex].createdAt }),\n MESSAGE_FOCUS_ANIMATION_DELAY,\n );\n }\n lazyScrollToIndex({\n index: foundMessageIndex,\n animated: true,\n timeout: 0,\n viewPosition: options?.viewPosition,\n });\n return true;\n } else {\n return false;\n }\n });\n\n return {\n flatListRef,\n lazyScrollToIndex,\n lazyScrollToBottom,\n scrollToMessage,\n lazyScrollToMessageId,\n };\n};\n\nconst logFlatListRefWarning = () => {\n Logger.warn(\n 'Cannot find flatListRef.current, please render FlatList and pass the flatListRef' +\n 'or please try again after FlatList has been rendered.',\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from 'react';\nimport type { FlatList } from 'react-native';\n\nimport type { MessageCollectionParams, MessageFilterParams } from '@sendbird/chat/groupChannel';\nimport type { UseGroupChannelMessagesOptions } from '@sendbird/uikit-chat-hooks';\nimport type {\n OnBeforeHandler,\n PickPartial,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdSendableMessage,\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 type MessageListQueryParamsType = Omit<MessageCollectionParams, 'filter'> & MessageFilterParams;\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 onPressReplyMessageInThread?: GroupChannelProps['Provider']['onPressReplyMessageInThread'];\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 renderUnreadMessagesFloating?: GroupChannelProps['MessageList']['renderUnreadMessagesFloating'];\n\n enableTypingIndicator?: GroupChannelProps['Provider']['enableTypingIndicator'];\n enableMessageGrouping?: GroupChannelProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];\n flatListComponent?: GroupChannelProps['MessageList']['flatListComponent'];\n flatListProps?: GroupChannelProps['MessageList']['flatListProps'];\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];\n\n searchItem?: GroupChannelProps['MessageList']['searchItem'];\n\n /**\n * @description You can specify the query parameters for the message list.\n * @example\n * ```\n * <GroupChannelFragment messageListQueryParams={{ prevResultLimit: 20, customTypesFilter: ['filter'] }} />\n * ```\n * */\n messageListQueryParams?: MessageListQueryParamsType;\n /** @deprecated Please use `messageListQueryParams` instead */\n collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];\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 | 'renderUnreadMessagesFloating'\n | 'flatListComponent'\n | 'flatListProps'\n | 'hasNext'\n | 'searchItem'\n > & {\n onResetMessageList: () => Promise<void>;\n onResetMessageListWithStartingPoint: (startingPoint: number) => Promise<void>;\n\n // Changing the search item will trigger the focus animation on messages.\n onUpdateSearchItem: (searchItem?: GroupChannelProps['MessageList']['searchItem']) => void;\n hasPrevious?: () => boolean;\n resetNewMessages?: () => void;\n isNewLineExistInChannel?: boolean;\n onNewLineSeenChange?: (hasSeenNewLine: boolean) => void;\n onUserMarkedAsUnreadChange?: (hasUserMarkedAsUnread: boolean) => void;\n };\n Input: PickPartial<\n ChannelInputProps,\n | 'shouldRenderInput'\n | 'onPressSendUserMessage'\n | 'onPressSendFileMessage'\n | 'onPressUpdateUserMessage'\n | 'onPressUpdateFileMessage'\n | 'SuggestedMentionList'\n | 'AttachmentsButton',\n 'inputDisabled'\n >;\n\n SuggestedMentionList: SuggestedMentionListProps;\n Provider: {\n channel: SendbirdGroupChannel;\n enableTypingIndicator: boolean;\n keyboardAvoidOffset?: number;\n groupChannelPubSub: PubSub<GroupChannelPubSubContextPayload>;\n\n messages: SendbirdMessage[];\n // Changing the search item will trigger the focus animation on messages.\n onUpdateSearchItem: (searchItem?: GroupChannelProps['MessageList']['searchItem']) => void;\n onPressReplyMessageInThread: (parentMessage: SendbirdSendableMessage, startingPoint?: number) => void;\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 MessageList: React.Context<{\n /**\n * ref object for FlatList of MessageList\n * */\n flatListRef: React.MutableRefObject<FlatList | null>;\n /**\n * Function that scrolls to a message within a group channel.\n * @param messageId {number} - The id of the message to scroll.\n * @param options {object} - Scroll options (optional).\n * @param options.focusAnimated {boolean} - Enable a shake animation on the message component upon completion of scrolling.\n * @param options.viewPosition {number} - Position information to adjust the visible area during scrolling. bottom(0) ~ top(1.0)\n *\n * @example\n * ```\n * const { scrollToMessage } = useContext(GroupChannelContexts.MessageList);\n * const messageIncludedInMessageList = scrollToMessage(lastMessage.messageId, { focusAnimated: true, viewPosition: 1 });\n * if (!messageIncludedInMessageList) console.warn('Message not found in the message list.');\n * ```\n * */\n scrollToMessage: (messageId: number, options?: { focusAnimated?: boolean; viewPosition?: number }) => boolean;\n /**\n * Call the FlatList function asynchronously to scroll to bottom lazily\n * to avoid scrolling before data rendering has been committed.\n * */\n lazyScrollToBottom: (params?: { animated?: boolean; timeout?: number }) => void;\n /**\n * Call the FlatList function asynchronously to scroll to index lazily.\n * to avoid scrolling before data rendering has been committed.\n * */\n lazyScrollToIndex: (params?: {\n index?: number;\n animated?: boolean;\n timeout?: number;\n viewPosition?: number;\n }) => void;\n\n onPressReplyMessageInThread?: (parentMessage: SendbirdSendableMessage, startingPoint?: number) => void;\n }>;\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 = React.FC<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 | {\n type: 'TYPING_BUBBLE_RENDERED';\n data?: undefined;\n }\n | {\n type: 'ON_MARKED_AS_READ_BY_CURRENT_USER';\n data?: undefined;\n }\n | {\n type: 'ON_MARKED_AS_UNREAD_BY_CURRENT_USER';\n data?: undefined;\n };\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from 'react';\nimport type { FlatList } from 'react-native';\n\nimport type { MessageCollectionParams, MessageFilterParams } from '@sendbird/chat/groupChannel';\nimport type { UseGroupChannelMessagesOptions } from '@sendbird/uikit-chat-hooks';\nimport type {\n OnBeforeHandler,\n PickPartial,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdSendableMessage,\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 type MessageListQueryParamsType = Omit<MessageCollectionParams, 'filter'> & MessageFilterParams;\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 onPressReplyMessageInThread?: GroupChannelProps['Provider']['onPressReplyMessageInThread'];\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 renderUnreadMessagesFloating?: GroupChannelProps['MessageList']['renderUnreadMessagesFloating'];\n\n enableTypingIndicator?: GroupChannelProps['Provider']['enableTypingIndicator'];\n enableMessageGrouping?: GroupChannelProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];\n flatListComponent?: GroupChannelProps['MessageList']['flatListComponent'];\n flatListProps?: GroupChannelProps['MessageList']['flatListProps'];\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];\n\n searchItem?: GroupChannelProps['MessageList']['searchItem'];\n\n partialTextInputProps?: GroupChannelProps['Input']['partialTextInputProps'];\n\n /**\n * @description You can specify the query parameters for the message list.\n * @example\n * ```\n * <GroupChannelFragment messageListQueryParams={{ prevResultLimit: 20, customTypesFilter: ['filter'] }} />\n * ```\n * */\n messageListQueryParams?: MessageListQueryParamsType;\n /** @deprecated Please use `messageListQueryParams` instead */\n collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];\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 | 'renderUnreadMessagesFloating'\n | 'flatListComponent'\n | 'flatListProps'\n | 'hasNext'\n | 'searchItem'\n > & {\n onResetMessageList: () => Promise<void>;\n onResetMessageListWithStartingPoint: (startingPoint: number) => Promise<void>;\n\n // Changing the search item will trigger the focus animation on messages.\n onUpdateSearchItem: (searchItem?: GroupChannelProps['MessageList']['searchItem']) => void;\n hasPrevious?: () => boolean;\n resetNewMessages?: () => void;\n isNewLineExistInChannel?: boolean;\n onNewLineSeenChange?: (hasSeenNewLine: boolean) => void;\n onUserMarkedAsUnreadChange?: (hasUserMarkedAsUnread: boolean) => void;\n };\n Input: PickPartial<\n ChannelInputProps,\n | 'shouldRenderInput'\n | 'onPressSendUserMessage'\n | 'onPressSendFileMessage'\n | 'onPressUpdateUserMessage'\n | 'onPressUpdateFileMessage'\n | 'SuggestedMentionList'\n | 'AttachmentsButton'\n | 'partialTextInputProps',\n 'inputDisabled'\n >;\n\n SuggestedMentionList: SuggestedMentionListProps;\n Provider: {\n channel: SendbirdGroupChannel;\n enableTypingIndicator: boolean;\n keyboardAvoidOffset?: number;\n groupChannelPubSub: PubSub<GroupChannelPubSubContextPayload>;\n\n messages: SendbirdMessage[];\n // Changing the search item will trigger the focus animation on messages.\n onUpdateSearchItem: (searchItem?: GroupChannelProps['MessageList']['searchItem']) => void;\n onPressReplyMessageInThread: (parentMessage: SendbirdSendableMessage, startingPoint?: number) => void;\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 MessageList: React.Context<{\n /**\n * ref object for FlatList of MessageList\n * */\n flatListRef: React.MutableRefObject<FlatList | null>;\n /**\n * Function that scrolls to a message within a group channel.\n * @param messageId {number} - The id of the message to scroll.\n * @param options {object} - Scroll options (optional).\n * @param options.focusAnimated {boolean} - Enable a shake animation on the message component upon completion of scrolling.\n * @param options.viewPosition {number} - Position information to adjust the visible area during scrolling. bottom(0) ~ top(1.0)\n *\n * @example\n * ```\n * const { scrollToMessage } = useContext(GroupChannelContexts.MessageList);\n * const messageIncludedInMessageList = scrollToMessage(lastMessage.messageId, { focusAnimated: true, viewPosition: 1 });\n * if (!messageIncludedInMessageList) console.warn('Message not found in the message list.');\n * ```\n * */\n scrollToMessage: (messageId: number, options?: { focusAnimated?: boolean; viewPosition?: number }) => boolean;\n /**\n * Call the FlatList function asynchronously to scroll to bottom lazily\n * to avoid scrolling before data rendering has been committed.\n * */\n lazyScrollToBottom: (params?: { animated?: boolean; timeout?: number }) => void;\n /**\n * Call the FlatList function asynchronously to scroll to index lazily.\n * to avoid scrolling before data rendering has been committed.\n * */\n lazyScrollToIndex: (params?: {\n index?: number;\n animated?: boolean;\n timeout?: number;\n viewPosition?: number;\n }) => void;\n /**\n * Call the FlatList function asynchronously to scroll to a message by messageId lazily.\n * to avoid scrolling before data rendering has been committed.\n * */\n lazyScrollToMessageId: (params?: {\n messageId?: number;\n animated?: boolean;\n timeout?: number;\n viewPosition?: number;\n }) => void;\n\n onPressReplyMessageInThread?: (parentMessage: SendbirdSendableMessage, startingPoint?: number) => void;\n }>;\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 = React.FC<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 | {\n type: 'TYPING_BUBBLE_RENDERED';\n data?: undefined;\n }\n | {\n type: 'ON_MARKED_AS_READ_BY_CURRENT_USER';\n data?: undefined;\n }\n | {\n type: 'ON_MARKED_AS_UNREAD_BY_CURRENT_USER';\n data?: undefined;\n };\n"],"mappings":"","ignoreList":[]}
@@ -38,6 +38,7 @@ const createGroupChannelFragment = initModule => {
38
38
  flatListComponent,
39
39
  flatListProps,
40
40
  messageListQueryParams,
41
+ partialTextInputProps,
41
42
  collectionCreator
42
43
  }) => {
43
44
  const {
@@ -300,7 +301,8 @@ const createGroupChannelFragment = initModule => {
300
301
  onPressSendUserMessage: onPressSendUserMessage,
301
302
  onPressSendFileMessage: onPressSendFileMessage,
302
303
  onPressUpdateUserMessage: onPressUpdateUserMessage,
303
- onPressUpdateFileMessage: onPressUpdateFileMessage
304
+ onPressUpdateFileMessage: onPressUpdateFileMessage,
305
+ partialTextInputProps: partialTextInputProps
304
306
  })));
305
307
  };
306
308
  };
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","GroupChannelEventSource","MessageFilter","ReplyType","Box","useToast","useGroupChannelMessages","getReadableFileSize","NOOP","PASS","confirmAndMarkAsRead","messageComparator","useFreshCallback","useIIFE","useRefTracker","GroupChannelMessageRenderer","GroupChannelTypingIndicatorBubble","NewMessagesButton","ScrollToBottomButton","StatusComposition","UnreadMessagesFloating","createGroupChannelModule","useLocalization","usePlatformService","useSendbirdChat","pubsub","createGroupChannelFragment","initModule","GroupChannelModule","searchItem","renderUnreadMessagesFloating","props","createElement","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","enableMessageGrouping","enableTypingIndicator","onPressHeaderLeft","onPressHeaderRight","onPressMediaMessage","onChannelDeleted","onPressReplyMessageInThread","onBeforeSendUserMessage","onBeforeSendFileMessage","onBeforeUpdateUserMessage","onBeforeUpdateFileMessage","channel","keyboardAvoidOffset","sortComparator","flatListComponent","flatListProps","messageListQueryParams","collectionCreator","playerService","recorderService","sdk","currentUser","sbOptions","voiceMessageStatusManager","toast","STRINGS","internalSearchItem","setInternalSearchItem","navigateFromMessageSearch","Boolean","groupChannelPubSub","scrolledAwayFromBottom","setScrolledAwayFromBottom","scrolledAwayFromBottomRef","replyType","uikit","groupChannel","NONE","ONLY_REPLY_TO_CHANNEL","isNewLineExistInChannel","setIsNewLineExistInChannel","hasSeenNewLineRef","hasUserMarkedAsUnreadRef","_channel$lastMessage","myLastRead","lastMessage","createdAt","Number","MIN_SAFE_INTEGER","url","onNewLineSeenChange","hasSeenNewLine","current","onUserMarkedAsUnreadChange","hasUserMarkedAsUnread","markAsRead","channels","enableMarkAsUnread","loading","messages","newMessages","resetNewMessages","loadNext","loadPrevious","hasNext","hasPrevious","sendFileMessage","sendUserMessage","updateFileMessage","updateUserMessage","resendMessage","deleteMessage","resetWithStartingPoint","shouldCountNewMessages","onMessagesReceived","publish","type","data","onMessagesUpdated","onChannelUpdated","_","ctx","source","EVENT_CHANNEL_READ","userIds","includes","userId","EVENT_CHANNEL_UNREAD","onCurrentUserBanned","getCollectionCreator","startingPoint","onBlurFragment","reset","catch","_onPressHeaderLeft","_onPressHeaderRight","_onPressMediaMessage","message","uri","_onPressReplyMessageInThread","clear","renderItem","content","isFirstItem","memoizedFlatListProps","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","onResetMessageList","MAX_SAFE_INTEGER","onResetMessageListWithStartingPoint","onUpdateSearchItem","undefined","onPending","onSent","onPressSendUserMessage","params","processedParams","onPressSendFileMessage","_processedParams$file","fileSize","file","size","uploadSizeLimit","appInfo","sizeLimitString","show","TOAST","FILE_UPLOAD_SIZE_LIMIT_EXCEEDED_ERROR","onPressUpdateUserMessage","messageId","onPressUpdateFileMessage","onScrolledAwayFromBottom","value","Provider","Header","shouldHideRight","LoadingComponent","StatusLoading","MessageList","currentUserId","onTopReached","onBottomReached","onResendFailedMessage","onDeleteMessage","Input","SuggestedMentionList","shouldRenderInput","isBroadcast","myRole","deprecatedCreatorProp","defaultParams","createMessageCollection","filter"],"sources":["createGroupChannelFragment.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n type GroupChannel,\n GroupChannelEventSource,\n MessageCollection,\n MessageFilter,\n} from '@sendbird/chat/groupChannel';\nimport { ReplyType } from '@sendbird/chat/message';\nimport { Box, useToast } from '@sendbird/uikit-react-native-foundation';\nimport { useGroupChannelMessages } from '@sendbird/uikit-tools';\nimport {\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdSendableMessage,\n SendbirdUserMessage,\n getReadableFileSize,\n} from '@sendbird/uikit-utils';\nimport {\n NOOP,\n PASS,\n confirmAndMarkAsRead,\n messageComparator,\n useFreshCallback,\n useIIFE,\n useRefTracker,\n} from '@sendbird/uikit-utils';\n\nimport GroupChannelMessageRenderer, {\n GroupChannelTypingIndicatorBubble,\n} from '../components/GroupChannelMessageRenderer';\nimport NewMessagesButton from '../components/NewMessagesButton';\nimport ScrollToBottomButton from '../components/ScrollToBottomButton';\nimport StatusComposition from '../components/StatusComposition';\nimport UnreadMessagesFloating from '../components/UnreadMessagesFloating';\nimport createGroupChannelModule from '../domain/groupChannel/module/createGroupChannelModule';\nimport type {\n GroupChannelFragment,\n GroupChannelModule,\n GroupChannelProps,\n GroupChannelPubSubContextPayload,\n} from '../domain/groupChannel/types';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../hooks/useContext';\nimport { FileType } from '../platform/types';\nimport pubsub from '../utils/pubsub';\n\nconst createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): GroupChannelFragment => {\n const GroupChannelModule = createGroupChannelModule(initModule);\n\n return ({\n searchItem,\n renderUnreadMessagesFloating = (props) => <UnreadMessagesFloating {...props} />,\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 onPressReplyMessageInThread = NOOP,\n onBeforeSendUserMessage = PASS,\n onBeforeSendFileMessage = PASS,\n onBeforeUpdateUserMessage = PASS,\n onBeforeUpdateFileMessage = PASS,\n channel,\n keyboardAvoidOffset,\n sortComparator = messageComparator,\n flatListComponent,\n flatListProps,\n messageListQueryParams,\n collectionCreator,\n }) => {\n const { playerService, recorderService } = usePlatformService();\n const { sdk, currentUser, sbOptions, voiceMessageStatusManager } = useSendbirdChat();\n const toast = useToast();\n const { STRINGS } = useLocalization();\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') {\n return ReplyType.NONE;\n } else {\n return ReplyType.ONLY_REPLY_TO_CHANNEL;\n }\n });\n\n const [isNewLineExistInChannel, setIsNewLineExistInChannel] = useState(false);\n const hasSeenNewLineRef = useRef(false);\n const hasUserMarkedAsUnreadRef = useRef(false);\n\n useEffect(() => {\n setIsNewLineExistInChannel(channel.myLastRead < (channel.lastMessage?.createdAt ?? Number.MIN_SAFE_INTEGER));\n }, [channel.url]);\n\n const onNewLineSeenChange = useFreshCallback((hasSeenNewLine: boolean) => {\n hasSeenNewLineRef.current = hasSeenNewLine;\n });\n\n const onUserMarkedAsUnreadChange = useFreshCallback((hasUserMarkedAsUnread: boolean) => {\n hasUserMarkedAsUnreadRef.current = hasUserMarkedAsUnread;\n });\n\n const markAsRead = useFreshCallback((channels: GroupChannel[]) => {\n if (sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {\n if (\n !scrolledAwayFromBottom &&\n !hasUserMarkedAsUnreadRef.current &&\n (hasSeenNewLineRef.current || !isNewLineExistInChannel)\n ) {\n confirmAndMarkAsRead(channels, true);\n }\n } else {\n confirmAndMarkAsRead(channels);\n }\n });\n\n const {\n loading,\n messages,\n newMessages,\n resetNewMessages,\n loadNext,\n loadPrevious,\n hasNext,\n hasPrevious,\n sendFileMessage,\n sendUserMessage,\n updateFileMessage,\n updateUserMessage,\n resendMessage,\n deleteMessage,\n resetWithStartingPoint,\n } = useGroupChannelMessages(sdk, channel, {\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 onChannelUpdated(_, ctx) {\n if (ctx?.source === GroupChannelEventSource.EVENT_CHANNEL_READ) {\n if (ctx.userIds.includes(currentUser?.userId ?? '')) {\n groupChannelPubSub.publish({ type: 'ON_MARKED_AS_READ_BY_CURRENT_USER' });\n }\n } else if (ctx?.source === GroupChannelEventSource.EVENT_CHANNEL_UNREAD) {\n if (ctx.userIds.includes(currentUser?.userId ?? '')) {\n setIsNewLineExistInChannel(true);\n groupChannelPubSub.publish({ type: 'ON_MARKED_AS_UNREAD_BY_CURRENT_USER' });\n }\n }\n },\n onChannelDeleted,\n onCurrentUserBanned: onChannelDeleted,\n collectionCreator: getCollectionCreator(channel, messageListQueryParams, collectionCreator),\n sortComparator,\n markAsRead: markAsRead,\n replyType,\n startingPoint: internalSearchItem?.startingPoint,\n });\n\n const onBlurFragment = async () => {\n await playerService.reset().catch(() => {});\n await recorderService.reset().catch(() => {});\n };\n const _onPressHeaderLeft = useFreshCallback(async () => {\n await onBlurFragment();\n onPressHeaderLeft();\n });\n const _onPressHeaderRight = useFreshCallback(async () => {\n await onBlurFragment();\n onPressHeaderRight();\n });\n const _onPressMediaMessage: NonNullable<GroupChannelProps['MessageList']['onPressMediaMessage']> = useFreshCallback(\n async (message, deleteMessage, uri) => {\n await onBlurFragment();\n onPressMediaMessage(message, deleteMessage, uri);\n },\n );\n const _onPressReplyMessageInThread = useFreshCallback(\n async (message: SendbirdSendableMessage, startingPoint?: number) => {\n await onBlurFragment();\n onPressReplyMessageInThread(message, startingPoint);\n },\n );\n\n useEffect(() => {\n return () => {\n voiceMessageStatusManager.clear();\n onBlurFragment();\n };\n }, []);\n\n const renderItem: GroupChannelProps['MessageList']['renderMessage'] = useFreshCallback((props) => {\n const content = renderMessage ? renderMessage(props) : <GroupChannelMessageRenderer {...props} />;\n return (\n <Box>\n {content}\n {props.isFirstItem && !hasNext() && <GroupChannelTypingIndicatorBubble />}\n </Box>\n );\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(async () => {\n return await resetWithStartingPoint(Number.MAX_SAFE_INTEGER);\n }, []);\n\n const onResetMessageListWithStartingPoint = useCallback(async (startingPoint: number) => {\n return await resetWithStartingPoint(startingPoint);\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 fileSize = (processedParams.file as FileType)?.size ?? processedParams.fileSize;\n const uploadSizeLimit = sbOptions.appInfo.uploadSizeLimit;\n\n if (fileSize && uploadSizeLimit && fileSize > uploadSizeLimit) {\n const sizeLimitString = `${getReadableFileSize(uploadSizeLimit)}`;\n toast.show(STRINGS.TOAST.FILE_UPLOAD_SIZE_LIMIT_EXCEEDED_ERROR(sizeLimitString), 'error');\n return;\n } else {\n const message = await sendFileMessage(processedParams, onPending);\n onSent(message);\n }\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) {\n resetNewMessages();\n if (sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {\n if (!hasUserMarkedAsUnreadRef.current && (hasSeenNewLineRef.current || !isNewLineExistInChannel)) {\n confirmAndMarkAsRead([channel]);\n }\n }\n }\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 messages={messages}\n onUpdateSearchItem={onUpdateSearchItem}\n onPressReplyMessageInThread={_onPressReplyMessageInThread}\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={loadPrevious}\n onBottomReached={loadNext}\n hasNext={hasNext}\n hasPrevious={hasPrevious}\n resetNewMessages={resetNewMessages}\n scrolledAwayFromBottom={scrolledAwayFromBottom}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n renderNewMessagesButton={renderNewMessagesButton}\n renderScrollToBottomButton={renderScrollToBottomButton}\n renderUnreadMessagesFloating={renderUnreadMessagesFloating}\n onResendFailedMessage={resendMessage}\n onDeleteMessage={deleteMessage}\n onPressMediaMessage={_onPressMediaMessage}\n flatListComponent={flatListComponent}\n flatListProps={memoizedFlatListProps}\n isNewLineExistInChannel={isNewLineExistInChannel}\n onNewLineSeenChange={onNewLineSeenChange}\n onUserMarkedAsUnreadChange={onUserMarkedAsUnreadChange}\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\nfunction getCollectionCreator(\n channel: SendbirdGroupChannel,\n messageListQueryParams?: GroupChannelProps['Fragment']['messageListQueryParams'],\n deprecatedCreatorProp?: () => MessageCollection,\n) {\n if (!messageListQueryParams && deprecatedCreatorProp) return deprecatedCreatorProp;\n\n return (defaultParams: GroupChannelProps['Fragment']['messageListQueryParams']) => {\n const params = { ...defaultParams, ...messageListQueryParams };\n return channel.createMessageCollection({\n ...params,\n filter: new MessageFilter(params),\n });\n };\n}\n\nexport default createGroupChannelFragment;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","GroupChannelEventSource","MessageFilter","ReplyType","Box","useToast","useGroupChannelMessages","getReadableFileSize","NOOP","PASS","confirmAndMarkAsRead","messageComparator","useFreshCallback","useIIFE","useRefTracker","GroupChannelMessageRenderer","GroupChannelTypingIndicatorBubble","NewMessagesButton","ScrollToBottomButton","StatusComposition","UnreadMessagesFloating","createGroupChannelModule","useLocalization","usePlatformService","useSendbirdChat","pubsub","createGroupChannelFragment","initModule","GroupChannelModule","searchItem","renderUnreadMessagesFloating","props","createElement","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","enableMessageGrouping","enableTypingIndicator","onPressHeaderLeft","onPressHeaderRight","onPressMediaMessage","onChannelDeleted","onPressReplyMessageInThread","onBeforeSendUserMessage","onBeforeSendFileMessage","onBeforeUpdateUserMessage","onBeforeUpdateFileMessage","channel","keyboardAvoidOffset","sortComparator","flatListComponent","flatListProps","messageListQueryParams","partialTextInputProps","collectionCreator","playerService","recorderService","sdk","currentUser","sbOptions","voiceMessageStatusManager","toast","STRINGS","internalSearchItem","setInternalSearchItem","navigateFromMessageSearch","Boolean","groupChannelPubSub","scrolledAwayFromBottom","setScrolledAwayFromBottom","scrolledAwayFromBottomRef","replyType","uikit","groupChannel","NONE","ONLY_REPLY_TO_CHANNEL","isNewLineExistInChannel","setIsNewLineExistInChannel","hasSeenNewLineRef","hasUserMarkedAsUnreadRef","_channel$lastMessage","myLastRead","lastMessage","createdAt","Number","MIN_SAFE_INTEGER","url","onNewLineSeenChange","hasSeenNewLine","current","onUserMarkedAsUnreadChange","hasUserMarkedAsUnread","markAsRead","channels","enableMarkAsUnread","loading","messages","newMessages","resetNewMessages","loadNext","loadPrevious","hasNext","hasPrevious","sendFileMessage","sendUserMessage","updateFileMessage","updateUserMessage","resendMessage","deleteMessage","resetWithStartingPoint","shouldCountNewMessages","onMessagesReceived","publish","type","data","onMessagesUpdated","onChannelUpdated","_","ctx","source","EVENT_CHANNEL_READ","userIds","includes","userId","EVENT_CHANNEL_UNREAD","onCurrentUserBanned","getCollectionCreator","startingPoint","onBlurFragment","reset","catch","_onPressHeaderLeft","_onPressHeaderRight","_onPressMediaMessage","message","uri","_onPressReplyMessageInThread","clear","renderItem","content","isFirstItem","memoizedFlatListProps","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","onResetMessageList","MAX_SAFE_INTEGER","onResetMessageListWithStartingPoint","onUpdateSearchItem","undefined","onPending","onSent","onPressSendUserMessage","params","processedParams","onPressSendFileMessage","_processedParams$file","fileSize","file","size","uploadSizeLimit","appInfo","sizeLimitString","show","TOAST","FILE_UPLOAD_SIZE_LIMIT_EXCEEDED_ERROR","onPressUpdateUserMessage","messageId","onPressUpdateFileMessage","onScrolledAwayFromBottom","value","Provider","Header","shouldHideRight","LoadingComponent","StatusLoading","MessageList","currentUserId","onTopReached","onBottomReached","onResendFailedMessage","onDeleteMessage","Input","SuggestedMentionList","shouldRenderInput","isBroadcast","myRole","deprecatedCreatorProp","defaultParams","createMessageCollection","filter"],"sources":["createGroupChannelFragment.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n type GroupChannel,\n GroupChannelEventSource,\n MessageCollection,\n MessageFilter,\n} from '@sendbird/chat/groupChannel';\nimport { ReplyType } from '@sendbird/chat/message';\nimport { Box, useToast } from '@sendbird/uikit-react-native-foundation';\nimport { useGroupChannelMessages } from '@sendbird/uikit-tools';\nimport {\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdSendableMessage,\n SendbirdUserMessage,\n getReadableFileSize,\n} from '@sendbird/uikit-utils';\nimport {\n NOOP,\n PASS,\n confirmAndMarkAsRead,\n messageComparator,\n useFreshCallback,\n useIIFE,\n useRefTracker,\n} from '@sendbird/uikit-utils';\n\nimport GroupChannelMessageRenderer, {\n GroupChannelTypingIndicatorBubble,\n} from '../components/GroupChannelMessageRenderer';\nimport NewMessagesButton from '../components/NewMessagesButton';\nimport ScrollToBottomButton from '../components/ScrollToBottomButton';\nimport StatusComposition from '../components/StatusComposition';\nimport UnreadMessagesFloating from '../components/UnreadMessagesFloating';\nimport createGroupChannelModule from '../domain/groupChannel/module/createGroupChannelModule';\nimport type {\n GroupChannelFragment,\n GroupChannelModule,\n GroupChannelProps,\n GroupChannelPubSubContextPayload,\n} from '../domain/groupChannel/types';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../hooks/useContext';\nimport { FileType } from '../platform/types';\nimport pubsub from '../utils/pubsub';\n\nconst createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): GroupChannelFragment => {\n const GroupChannelModule = createGroupChannelModule(initModule);\n\n return ({\n searchItem,\n renderUnreadMessagesFloating = (props) => <UnreadMessagesFloating {...props} />,\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 onPressReplyMessageInThread = NOOP,\n onBeforeSendUserMessage = PASS,\n onBeforeSendFileMessage = PASS,\n onBeforeUpdateUserMessage = PASS,\n onBeforeUpdateFileMessage = PASS,\n channel,\n keyboardAvoidOffset,\n sortComparator = messageComparator,\n flatListComponent,\n flatListProps,\n messageListQueryParams,\n partialTextInputProps,\n collectionCreator,\n }) => {\n const { playerService, recorderService } = usePlatformService();\n const { sdk, currentUser, sbOptions, voiceMessageStatusManager } = useSendbirdChat();\n const toast = useToast();\n const { STRINGS } = useLocalization();\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') {\n return ReplyType.NONE;\n } else {\n return ReplyType.ONLY_REPLY_TO_CHANNEL;\n }\n });\n\n const [isNewLineExistInChannel, setIsNewLineExistInChannel] = useState(false);\n const hasSeenNewLineRef = useRef(false);\n const hasUserMarkedAsUnreadRef = useRef(false);\n\n useEffect(() => {\n setIsNewLineExistInChannel(channel.myLastRead < (channel.lastMessage?.createdAt ?? Number.MIN_SAFE_INTEGER));\n }, [channel.url]);\n\n const onNewLineSeenChange = useFreshCallback((hasSeenNewLine: boolean) => {\n hasSeenNewLineRef.current = hasSeenNewLine;\n });\n\n const onUserMarkedAsUnreadChange = useFreshCallback((hasUserMarkedAsUnread: boolean) => {\n hasUserMarkedAsUnreadRef.current = hasUserMarkedAsUnread;\n });\n\n const markAsRead = useFreshCallback((channels: GroupChannel[]) => {\n if (sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {\n if (\n !scrolledAwayFromBottom &&\n !hasUserMarkedAsUnreadRef.current &&\n (hasSeenNewLineRef.current || !isNewLineExistInChannel)\n ) {\n confirmAndMarkAsRead(channels, true);\n }\n } else {\n confirmAndMarkAsRead(channels);\n }\n });\n\n const {\n loading,\n messages,\n newMessages,\n resetNewMessages,\n loadNext,\n loadPrevious,\n hasNext,\n hasPrevious,\n sendFileMessage,\n sendUserMessage,\n updateFileMessage,\n updateUserMessage,\n resendMessage,\n deleteMessage,\n resetWithStartingPoint,\n } = useGroupChannelMessages(sdk, channel, {\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 onChannelUpdated(_, ctx) {\n if (ctx?.source === GroupChannelEventSource.EVENT_CHANNEL_READ) {\n if (ctx.userIds.includes(currentUser?.userId ?? '')) {\n groupChannelPubSub.publish({ type: 'ON_MARKED_AS_READ_BY_CURRENT_USER' });\n }\n } else if (ctx?.source === GroupChannelEventSource.EVENT_CHANNEL_UNREAD) {\n if (ctx.userIds.includes(currentUser?.userId ?? '')) {\n setIsNewLineExistInChannel(true);\n groupChannelPubSub.publish({ type: 'ON_MARKED_AS_UNREAD_BY_CURRENT_USER' });\n }\n }\n },\n onChannelDeleted,\n onCurrentUserBanned: onChannelDeleted,\n collectionCreator: getCollectionCreator(channel, messageListQueryParams, collectionCreator),\n sortComparator,\n markAsRead: markAsRead,\n replyType,\n startingPoint: internalSearchItem?.startingPoint,\n });\n\n const onBlurFragment = async () => {\n await playerService.reset().catch(() => {});\n await recorderService.reset().catch(() => {});\n };\n const _onPressHeaderLeft = useFreshCallback(async () => {\n await onBlurFragment();\n onPressHeaderLeft();\n });\n const _onPressHeaderRight = useFreshCallback(async () => {\n await onBlurFragment();\n onPressHeaderRight();\n });\n const _onPressMediaMessage: NonNullable<GroupChannelProps['MessageList']['onPressMediaMessage']> = useFreshCallback(\n async (message, deleteMessage, uri) => {\n await onBlurFragment();\n onPressMediaMessage(message, deleteMessage, uri);\n },\n );\n const _onPressReplyMessageInThread = useFreshCallback(\n async (message: SendbirdSendableMessage, startingPoint?: number) => {\n await onBlurFragment();\n onPressReplyMessageInThread(message, startingPoint);\n },\n );\n\n useEffect(() => {\n return () => {\n voiceMessageStatusManager.clear();\n onBlurFragment();\n };\n }, []);\n\n const renderItem: GroupChannelProps['MessageList']['renderMessage'] = useFreshCallback((props) => {\n const content = renderMessage ? renderMessage(props) : <GroupChannelMessageRenderer {...props} />;\n return (\n <Box>\n {content}\n {props.isFirstItem && !hasNext() && <GroupChannelTypingIndicatorBubble />}\n </Box>\n );\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(async () => {\n return await resetWithStartingPoint(Number.MAX_SAFE_INTEGER);\n }, []);\n\n const onResetMessageListWithStartingPoint = useCallback(async (startingPoint: number) => {\n return await resetWithStartingPoint(startingPoint);\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 fileSize = (processedParams.file as FileType)?.size ?? processedParams.fileSize;\n const uploadSizeLimit = sbOptions.appInfo.uploadSizeLimit;\n\n if (fileSize && uploadSizeLimit && fileSize > uploadSizeLimit) {\n const sizeLimitString = `${getReadableFileSize(uploadSizeLimit)}`;\n toast.show(STRINGS.TOAST.FILE_UPLOAD_SIZE_LIMIT_EXCEEDED_ERROR(sizeLimitString), 'error');\n return;\n } else {\n const message = await sendFileMessage(processedParams, onPending);\n onSent(message);\n }\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) {\n resetNewMessages();\n if (sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {\n if (!hasUserMarkedAsUnreadRef.current && (hasSeenNewLineRef.current || !isNewLineExistInChannel)) {\n confirmAndMarkAsRead([channel]);\n }\n }\n }\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 messages={messages}\n onUpdateSearchItem={onUpdateSearchItem}\n onPressReplyMessageInThread={_onPressReplyMessageInThread}\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={loadPrevious}\n onBottomReached={loadNext}\n hasNext={hasNext}\n hasPrevious={hasPrevious}\n resetNewMessages={resetNewMessages}\n scrolledAwayFromBottom={scrolledAwayFromBottom}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n renderNewMessagesButton={renderNewMessagesButton}\n renderScrollToBottomButton={renderScrollToBottomButton}\n renderUnreadMessagesFloating={renderUnreadMessagesFloating}\n onResendFailedMessage={resendMessage}\n onDeleteMessage={deleteMessage}\n onPressMediaMessage={_onPressMediaMessage}\n flatListComponent={flatListComponent}\n flatListProps={memoizedFlatListProps}\n isNewLineExistInChannel={isNewLineExistInChannel}\n onNewLineSeenChange={onNewLineSeenChange}\n onUserMarkedAsUnreadChange={onUserMarkedAsUnreadChange}\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 partialTextInputProps={partialTextInputProps}\n />\n </StatusComposition>\n </GroupChannelModule.Provider>\n );\n };\n};\n\nfunction shouldRenderInput(channel: SendbirdGroupChannel) {\n if (channel.isBroadcast) {\n return channel.myRole === 'operator';\n }\n\n return true;\n}\n\nfunction getCollectionCreator(\n channel: SendbirdGroupChannel,\n messageListQueryParams?: GroupChannelProps['Fragment']['messageListQueryParams'],\n deprecatedCreatorProp?: () => MessageCollection,\n) {\n if (!messageListQueryParams && deprecatedCreatorProp) return deprecatedCreatorProp;\n\n return (defaultParams: GroupChannelProps['Fragment']['messageListQueryParams']) => {\n const params = { ...defaultParams, ...messageListQueryParams };\n return channel.createMessageCollection({\n ...params,\n filter: new MessageFilter(params),\n });\n };\n}\n\nexport default createGroupChannelFragment;\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,3 @@
1
- const VERSION = '3.10.1';
1
+ const VERSION = '3.10.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.10.1';\nexport default VERSION;\n"],"mappings":"AAAA,MAAMA,OAAO,GAAG,QAAQ;AACxB,eAAeA,OAAO","ignoreList":[]}
1
+ {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.10.2';\nexport default VERSION;\n"],"mappings":"AAAA,MAAMA,OAAO,GAAG,QAAQ;AACxB,eAAeA,OAAO","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { StyleProp, TextStyle } from 'react-native';
2
+ import { StyleProp, TextInputProps, TextStyle } from 'react-native';
3
3
  import { SendbirdBaseChannel, SendbirdFileMessage, SendbirdFileMessageCreateParams, SendbirdFileMessageUpdateParams, SendbirdMember, SendbirdUserMessage, SendbirdUserMessageCreateParams, SendbirdUserMessageUpdateParams } from '@sendbird/uikit-utils';
4
4
  import type { CommonComponent, MentionedUser, Range } from '../../types';
5
5
  import type { AttachmentsButtonProps } from './AttachmentsButton';
@@ -39,6 +39,7 @@ export type ChannelInputProps = {
39
39
  AttachmentsButton?: (props: AttachmentsButtonProps) => React.ReactNode | null;
40
40
  MessageToReplyPreview?: (props: MessageToReplyPreviewProps) => React.ReactNode | null;
41
41
  VoiceMessageInput?: (props: VoiceMessageInputProps) => React.ReactNode | null;
42
+ partialTextInputProps?: Partial<Pick<TextInputProps, 'autoCorrect'>>;
42
43
  };
43
44
  declare const _default: React.MemoExoticComponent<(props: ChannelInputProps) => React.JSX.Element>;
44
45
  export default _default;
@@ -14,7 +14,7 @@ import type { StringSet } from '../localization/StringSet.type';
14
14
  import type { ClipboardServiceInterface, FileServiceInterface, MediaServiceInterface, NotificationServiceInterface, PlayerServiceInterface, RecorderServiceInterface } from '../platform/types';
15
15
  import { ErrorBoundaryProps, LocalCacheStorage } from '../types';
16
16
  export declare const SendbirdUIKit: Readonly<{
17
- VERSION: "3.10.1";
17
+ VERSION: "3.10.2";
18
18
  PLATFORM: string;
19
19
  DEFAULT: {
20
20
  AUTO_PUSH_TOKEN_REGISTRATION: boolean;
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
- declare const _default: React.MemoExoticComponent<({ inputDisabled, ...props }: import("@sendbird/uikit-utils").PickPartial<import("../../../components/ChannelInput").ChannelInputProps, "shouldRenderInput" | "onPressSendUserMessage" | "onPressSendFileMessage" | "onPressUpdateUserMessage" | "onPressUpdateFileMessage" | "SuggestedMentionList" | "AttachmentsButton", "inputDisabled">) => React.JSX.Element>;
2
+ declare const _default: React.MemoExoticComponent<({ inputDisabled, ...props }: import("@sendbird/uikit-utils").PickPartial<import("../../../components/ChannelInput").ChannelInputProps, "shouldRenderInput" | "onPressSendUserMessage" | "onPressSendFileMessage" | "onPressUpdateUserMessage" | "onPressUpdateFileMessage" | "SuggestedMentionList" | "AttachmentsButton" | "partialTextInputProps", "inputDisabled">) => React.JSX.Element>;
3
3
  export default _default;