@sendbird/uikit-react-native 3.9.4 → 3.9.5

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 (30) hide show
  1. package/lib/commonjs/components/ChannelMessageList/index.js +4 -1
  2. package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
  3. package/lib/commonjs/components/ChatFlatList/index.js +3 -1
  4. package/lib/commonjs/components/ChatFlatList/index.js.map +1 -1
  5. package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
  6. package/lib/commonjs/fragments/createGroupChannelFragment.js +2 -0
  7. package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
  8. package/lib/commonjs/version.js +1 -1
  9. package/lib/commonjs/version.js.map +1 -1
  10. package/lib/module/components/ChannelMessageList/index.js +4 -1
  11. package/lib/module/components/ChannelMessageList/index.js.map +1 -1
  12. package/lib/module/components/ChatFlatList/index.js +3 -1
  13. package/lib/module/components/ChatFlatList/index.js.map +1 -1
  14. package/lib/module/domain/groupChannel/types.js.map +1 -1
  15. package/lib/module/fragments/createGroupChannelFragment.js +2 -0
  16. package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
  17. package/lib/module/version.js +1 -1
  18. package/lib/module/version.js.map +1 -1
  19. package/lib/typescript/src/components/ChannelMessageList/index.d.ts +2 -1
  20. package/lib/typescript/src/components/ChatFlatList/index.d.ts +1 -0
  21. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
  22. package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +1 -1
  23. package/lib/typescript/src/domain/groupChannel/types.d.ts +2 -1
  24. package/lib/typescript/src/version.d.ts +1 -1
  25. package/package.json +5 -5
  26. package/src/components/ChannelMessageList/index.tsx +3 -0
  27. package/src/components/ChatFlatList/index.tsx +5 -2
  28. package/src/domain/groupChannel/types.ts +2 -0
  29. package/src/fragments/createGroupChannelFragment.tsx +2 -0
  30. package/src/version.ts +1 -1
@@ -36,6 +36,7 @@ const ChannelMessageList = ({
36
36
  scrolledAwayFromBottom,
37
37
  onBottomReached,
38
38
  onTopReached,
39
+ flatListComponent,
39
40
  flatListProps,
40
41
  onPressNewMessagesButton,
41
42
  onPressScrollToBottomButton
@@ -96,7 +97,9 @@ const ChannelMessageList = ({
96
97
  }, channel.isFrozen && /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.ChannelFrozenBanner, {
97
98
  style: styles.frozenBanner,
98
99
  text: STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN
99
- }), /*#__PURE__*/_react.default.createElement(_ChatFlatList.default, _extends({}, flatListProps, {
100
+ }), /*#__PURE__*/_react.default.createElement(_ChatFlatList.default, _extends({
101
+ flatListComponent: flatListComponent
102
+ }, flatListProps, {
100
103
  onTopReached: onTopReached,
101
104
  onBottomReached: onBottomReached,
102
105
  onScrolledAwayFromBottom: onScrolledAwayFromBottom,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_uikitReactNativeFoundation","_uikitUtils","_useContext","_SBUUtils","_ChatFlatList","_ReactionAddons","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","ChannelMessageList","searchItem","hasNext","channel","onEditMessage","onReplyMessage","onReplyInThreadMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","onPressParentMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","ref","STRINGS","useLocalization","colors","useUIKitTheme","show","useUserProfile","safeAreaLayout","useSafeAreaPadding","createMessagePressActions","useCreateMessagePressActions","renderItem","useFreshCallback","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","View","style","flex","backgroundColor","background","isFrozen","ChannelFrozenBanner","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","data","keyExtractor","messageKeyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","scrollButton","handlers","useSBUHandlers","toast","useToast","openSheet","useBottomSheet","alert","useAlert","clipboardService","fileService","usePlatformService","sbOptions","useSendbirdChat","onResendFailure","error","TOAST","RESEND_MSG_ERROR","Logger","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","toMegabyte","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","getFileType","getFileExtension","includes","_handlers$onOpenFileU","getAvailableUriFromFileMessage","onOpenFileURL","openFile","SBUUtils","openURL","openSheetForFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","none","destructive","alertForMessageDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","menu","copy","icon","CHANNEL_MESSAGE_COPY","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","threadInfo","replyCount","undefined","CHANNEL_MESSAGE_DELETE","reply","Boolean","parentMessageId","CHANNEL_MESSAGE_REPLY","replyInThread","CHANNEL_MESSAGE_THREAD","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","isMyMessage","sendingStatus","isGroupChannel","uikit","groupChannel","replyType","isVoiceMessage","configs","uikitWithAppInfo","HeaderComponent","shouldRenderReaction","isSuper","enableReactionsSupergroup","enableReactions","onClose","ReactionAddons","BottomSheet","createStyleSheet","position","zIndex","top","start","end","paddingBottom","bottom","alignSelf","_default","exports","React","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\n\nimport {\n BottomSheetItem,\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n isVoiceMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n useSafeAreaPadding,\n} from '@sendbird/uikit-utils';\n\nimport type { UserProfileContextType } from '../../contexts/UserProfileCtx';\nimport {\n useLocalization,\n usePlatformService,\n useSBUHandlers,\n useSendbirdChat,\n useUserProfile,\n} from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport ChatFlatList from '../ChatFlatList';\nimport { ReactionAddons } from '../ReactionAddons';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\nexport type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpenChannel> = {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: T;\n messages: SendbirdMessage[];\n newMessages: SendbirdMessage[];\n searchItem?: { startingPoint: number };\n\n scrolledAwayFromBottom: boolean;\n onScrolledAwayFromBottom: (value: boolean) => void;\n onTopReached: () => void;\n onBottomReached: () => void;\n hasNext: () => boolean;\n\n onPressNewMessagesButton: (animated?: boolean) => void;\n onPressScrollToBottomButton: (animated?: boolean) => void;\n\n onEditMessage: (message: HandleableMessage) => void;\n onReplyMessage?: (message: HandleableMessage) => void; // only available on group channel\n onReplyInThreadMessage?: (message: HandleableMessage) => void; // only available on group channel\n onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<HandleableMessage | void>;\n onPressParentMessage?: (parentMessage: SendbirdMessage, childMessage: HandleableMessage) => void;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n\n renderMessage: (props: {\n focused: boolean;\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n onPressParentMessage?: ChannelMessageListProps<T>['onPressParentMessage'];\n onReplyInThreadMessage?: ChannelMessageListProps<T>['onReplyInThreadMessage'];\n onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];\n bottomSheetItem?: BottomSheetItem;\n isFirstItem: boolean;\n hideParentMessage?: boolean;\n }) => React.ReactElement | null;\n renderNewMessagesButton:\n | null\n | ((props: { visible: boolean; onPress: () => void; newMessages: SendbirdMessage[] }) => React.ReactElement | null);\n renderScrollToBottomButton: null | ((props: { visible: boolean; onPress: () => void }) => React.ReactElement | null);\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n onPressParentMessage,\n currentUserId,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListProps,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n }: ChannelMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const safeAreaLayout = useSafeAreaPadding(['left', 'right']);\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n });\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress, bottomSheetItem } = createMessagePressActions({ message: item });\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n onPress,\n onLongPress,\n onPressParentMessage,\n onReplyInThreadMessage,\n onShowUserProfile: show,\n enableMessageGrouping,\n channel,\n currentUserId,\n focused: (searchItem?.startingPoint ?? -1) === item.createdAt,\n bottomSheetItem,\n isFirstItem: index === 0,\n });\n });\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />\n )}\n <ChatFlatList\n {...flatListProps}\n onTopReached={onTopReached}\n onBottomReached={onBottomReached}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n ref={ref}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),\n onPress: () => onPressNewMessagesButton(),\n newMessages,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: hasNext() || scrolledAwayFromBottom,\n onPress: () => onPressScrollToBottomButton(),\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpenChannel>({\n channel,\n currentUserId,\n onResendFailedMessage,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onPressMediaMessage,\n}: Pick<\n ChannelMessageListProps<T>,\n | 'channel'\n | 'currentUserId'\n | 'onEditMessage'\n | 'onReplyMessage'\n | 'onReplyInThreadMessage'\n | 'onDeleteMessage'\n | 'onResendFailedMessage'\n | 'onPressMediaMessage'\n>): CreateMessagePressActions => {\n const handlers = useSBUHandlers();\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const onResendFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.RESEND_MSG_ERROR, error);\n };\n\n const onDeleteFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);\n };\n\n const onCopyText = (message: HandleableMessage) => {\n if (message.isUserMessage()) {\n clipboardService.setString(message.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n }\n };\n\n const onDownloadFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n if (toMegabyte(message.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: message.url, fileName: message.name, fileType: message.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n const onOpenFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n const fileType = getFileType(message.type || getFileExtension(message.name));\n if (['image', 'video', 'audio'].includes(fileType)) {\n onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));\n handlers.onOpenFileURL?.(message.url);\n } else {\n const openFile = handlers.onOpenFileURL ?? SBUUtils.openURL;\n openFile(message.url);\n }\n }\n };\n\n const openSheetForFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n },\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => alertForMessageDelete(message),\n },\n ],\n });\n };\n\n const alertForMessageDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n { text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage(message).catch(onDeleteFailure);\n },\n },\n ],\n });\n };\n\n return ({ message }) => {\n if (!message.isUserMessage() && !message.isFileMessage()) return {};\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const menu = {\n copy: (message: HandleableMessage) => ({\n icon: 'copy' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => onCopyText(message),\n }),\n edit: (message: HandleableMessage) => ({\n icon: 'edit' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage(message),\n }),\n delete: (message: HandleableMessage) => ({\n disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,\n icon: 'delete' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => alertForMessageDelete(message),\n }),\n reply: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'reply' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_REPLY,\n onPress: () => onReplyMessage?.(message),\n }),\n replyInThread: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'thread' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_THREAD,\n onPress: () => onReplyInThreadMessage?.(message),\n }),\n download: (message: HandleableMessage) => ({\n icon: 'download' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: () => onDownloadFile(message),\n }),\n };\n\n if (message.isUserMessage()) {\n sheetItems.push(menu.copy(message));\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.edit(message));\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n if (message.isFileMessage()) {\n if (!isVoiceMessage(message)) {\n sheetItems.push(menu.download(message));\n }\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n const bottomSheetItem: BottomSheetItem = {\n sheetItems,\n HeaderComponent: shouldRenderReaction(\n channel,\n channel.isGroupChannel() && (channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions),\n )\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={message} channel={channel} onClose={onClose} />\n : undefined,\n };\n\n switch (true) {\n case message.sendingStatus === 'pending': {\n return {\n onPress: undefined,\n onLongPress: undefined,\n bottomSheetItem: undefined,\n };\n }\n\n case message.sendingStatus === 'failed': {\n return {\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n onLongPress: () => openSheetForFailedMessage(message),\n bottomSheetItem,\n };\n }\n\n case message.isFileMessage(): {\n return {\n onPress: () => onOpenFile(message),\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n\n default: {\n return {\n onPress: undefined,\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n }\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n start: 8,\n end: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n end: 16,\n },\n});\n\n// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it as typeof ChannelMessageList and implicit `ref` prop\nexport default React.forwardRef(ChannelMessageList) as typeof ChannelMessageList;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,2BAAA,GAAAF,OAAA;AASA,IAAAG,WAAA,GAAAH,OAAA;AAoBA,IAAAI,WAAA,GAAAJ,OAAA;AAOA,IAAAK,SAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,aAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,eAAA,GAAAP,OAAA;AAAmD,SAAAD,uBAAAS,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,SAAA,WAAAA,QAAA,GAAAC,MAAA,CAAAC,MAAA,GAAAD,MAAA,CAAAC,MAAA,CAAAC,IAAA,eAAAC,CAAA,aAAAP,CAAA,MAAAA,CAAA,GAAAQ,SAAA,CAAAC,MAAA,EAAAT,CAAA,UAAAU,CAAA,GAAAF,SAAA,CAAAR,CAAA,YAAAW,CAAA,IAAAD,CAAA,OAAAE,cAAA,CAAAC,IAAA,CAAAH,CAAA,EAAAC,CAAA,MAAAJ,CAAA,CAAAI,CAAA,IAAAD,CAAA,CAAAC,CAAA,aAAAJ,CAAA,KAAAJ,QAAA,CAAAW,KAAA,OAAAN,SAAA;AAwDnD,MAAMO,kBAAkB,GAAGA,CACzB;EACEC,UAAU;EACVC,OAAO;EACPC,OAAO;EACPC,aAAa;EACbC,cAAc;EACdC,sBAAsB;EACtBC,eAAe;EACfC,qBAAqB;EACrBC,mBAAmB;EACnBC,oBAAoB;EACpBC,aAAa;EACbC,uBAAuB;EACvBC,0BAA0B;EAC1BC,aAAa;EACbC,QAAQ;EACRC,WAAW;EACXC,qBAAqB;EACrBC,wBAAwB;EACxBC,sBAAsB;EACtBC,eAAe;EACfC,YAAY;EACZC,aAAa;EACbC,wBAAwB;EACxBC;AAC0B,CAAC,EAC7BC,GAAkD,KAC/C;EACH,MAAM;IAAEC;EAAQ,CAAC,GAAG,IAAAC,2BAAe,EAAC,CAAC;EACrC,MAAM;IAAEC;EAAO,CAAC,GAAG,IAAAC,yCAAa,EAAC,CAAC;EAClC,MAAM;IAAEC;EAAK,CAAC,GAAG,IAAAC,0BAAc,EAAC,CAAC;EACjC,MAAMC,cAAc,GAAG,IAAAC,8BAAkB,EAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;EAC5D,MAAMC,yBAAyB,GAAGC,4BAA4B,CAAC;IAC7DhC,OAAO;IACPQ,aAAa;IACbP,aAAa;IACbC,cAAc;IACdC,sBAAsB;IACtBC,eAAe;IACfC,qBAAqB;IACrBC;EACF,CAAC,CAAC;EAEF,MAAM2B,UAA2C,GAAG,IAAAC,4BAAgB,EAAC,CAAC;IAAEC,IAAI;IAAEC;EAAM,CAAC,KAAK;IACxF,MAAM;MAAEC,OAAO;MAAEC,WAAW;MAAEC;IAAgB,CAAC,GAAGR,yBAAyB,CAAC;MAAES,OAAO,EAAEL;IAAK,CAAC,CAAC;IAC9F,OAAOxB,aAAa,CAAC;MACnB6B,OAAO,EAAEL,IAAI;MACbM,WAAW,EAAE7B,QAAQ,CAACwB,KAAK,GAAG,CAAC,CAAC;MAChCM,WAAW,EAAE9B,QAAQ,CAACwB,KAAK,GAAG,CAAC,CAAC;MAChCC,OAAO;MACPC,WAAW;MACX/B,oBAAoB;MACpBJ,sBAAsB;MACtBwC,iBAAiB,EAAEhB,IAAI;MACvBb,qBAAqB;MACrBd,OAAO;MACPQ,aAAa;MACboC,OAAO,EAAE,CAAC,CAAA9C,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE+C,aAAa,KAAI,CAAC,CAAC,MAAMV,IAAI,CAACW,SAAS;MAC7DP,eAAe;MACfQ,WAAW,EAAEX,KAAK,KAAK;IACzB,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,oBACEhE,MAAA,CAAAY,OAAA,CAAAgE,aAAA,CAACzE,YAAA,CAAA0E,IAAI;IAACC,KAAK,EAAE,CAAC;MAAEC,IAAI,EAAE,CAAC;MAAEC,eAAe,EAAE3B,MAAM,CAAC4B;IAAW,CAAC,EAAExB,cAAc;EAAE,GAC5E7B,OAAO,CAACsD,QAAQ,iBACflF,MAAA,CAAAY,OAAA,CAAAgE,aAAA,CAACxE,2BAAA,CAAA+E,mBAAmB;IAACL,KAAK,EAAEM,MAAM,CAACC,YAAa;IAACC,IAAI,EAAEnC,OAAO,CAACoC,MAAM,CAACC;EAA4B,CAAE,CACrG,eACDxF,MAAA,CAAAY,OAAA,CAAAgE,aAAA,CAACpE,aAAA,CAAAI,OAAY,EAAAC,QAAA,KACPkC,aAAa;IACjBD,YAAY,EAAEA,YAAa;IAC3BD,eAAe,EAAEA,eAAgB;IACjCF,wBAAwB,EAAEA,wBAAyB;IACnDO,GAAG,EAAEA,GAAI;IACTuC,IAAI,EAAEjD,QAAS;IACfqB,UAAU,EAAEA,UAAW;IACvB6B,YAAY,EAAEC,+BAAoB;IAClCC,qBAAqB,EAAE;IACrB;IACAhE,OAAO,CAACsD,QAAQ,IAAIE,MAAM,CAACS,iBAAiB,EAC5C9C,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAE6C,qBAAqB;EACpC,EACH,CAAC,EACDvD,uBAAuB,iBACtBrC,MAAA,CAAAY,OAAA,CAAAgE,aAAA,CAACzE,YAAA,CAAA0E,IAAI;IAACC,KAAK,EAAE,CAACM,MAAM,CAACU,YAAY,EAAErC,cAAc;EAAE,GAChDpB,uBAAuB,CAAC;IACvB0D,OAAO,EAAEtD,WAAW,CAACtB,MAAM,GAAG,CAAC,KAAKQ,OAAO,CAAC,CAAC,IAAIiB,sBAAsB,CAAC;IACxEqB,OAAO,EAAEA,CAAA,KAAMjB,wBAAwB,CAAC,CAAC;IACzCP;EACF,CAAC,CACG,CACP,EACAH,0BAA0B,iBACzBtC,MAAA,CAAAY,OAAA,CAAAgE,aAAA,CAACzE,YAAA,CAAA0E,IAAI;IAACC,KAAK,EAAE,CAACM,MAAM,CAACY,YAAY,EAAEvC,cAAc;EAAE,GAChDnB,0BAA0B,CAAC;IAC1ByD,OAAO,EAAEpE,OAAO,CAAC,CAAC,IAAIiB,sBAAsB;IAC5CqB,OAAO,EAAEA,CAAA,KAAMhB,2BAA2B,CAAC;EAC7C,CAAC,CACG,CAEJ,CAAC;AAEX,CAAC;AAED,MAAMW,4BAA4B,GAAGA,CAAuD;EAC1FhC,OAAO;EACPQ,aAAa;EACbH,qBAAqB;EACrBJ,aAAa;EACbC,cAAc;EACdC,sBAAsB;EACtBC,eAAe;EACfE;AAWF,CAAC,KAAgC;EAC/B,MAAM+D,QAAQ,GAAG,IAAAC,0BAAc,EAAC,CAAC;EACjC,MAAM;IAAE7C;EAAO,CAAC,GAAG,IAAAC,yCAAa,EAAC,CAAC;EAClC,MAAM;IAAEH;EAAQ,CAAC,GAAG,IAAAC,2BAAe,EAAC,CAAC;EACrC,MAAM+C,KAAK,GAAG,IAAAC,oCAAQ,EAAC,CAAC;EACxB,MAAM;IAAEC;EAAU,CAAC,GAAG,IAAAC,0CAAc,EAAC,CAAC;EACtC,MAAM;IAAEC;EAAM,CAAC,GAAG,IAAAC,oCAAQ,EAAC,CAAC;EAC5B,MAAM;IAAEC,gBAAgB;IAAEC;EAAY,CAAC,GAAG,IAAAC,8BAAkB,EAAC,CAAC;EAC9D,MAAM;IAAEC;EAAU,CAAC,GAAG,IAAAC,2BAAe,EAAC,CAAC;EAEvC,MAAMC,eAAe,GAAIC,KAAY,IAAK;IACxCZ,KAAK,CAAC5C,IAAI,CAACJ,OAAO,CAAC6D,KAAK,CAACC,gBAAgB,EAAE,OAAO,CAAC;IACnDC,kBAAM,CAACH,KAAK,CAAC5D,OAAO,CAAC6D,KAAK,CAACC,gBAAgB,EAAEF,KAAK,CAAC;EACrD,CAAC;EAED,MAAMI,eAAe,GAAIJ,KAAY,IAAK;IACxCZ,KAAK,CAAC5C,IAAI,CAACJ,OAAO,CAAC6D,KAAK,CAACI,gBAAgB,EAAE,OAAO,CAAC;IACnDF,kBAAM,CAACH,KAAK,CAAC5D,OAAO,CAAC6D,KAAK,CAACI,gBAAgB,EAAEL,KAAK,CAAC;EACrD,CAAC;EAED,MAAMM,UAAU,GAAIjD,OAA0B,IAAK;IACjD,IAAIA,OAAO,CAACkD,aAAa,CAAC,CAAC,EAAE;MAC3Bb,gBAAgB,CAACc,SAAS,CAACnD,OAAO,CAACA,OAAO,IAAI,EAAE,CAAC;MACjD+B,KAAK,CAAC5C,IAAI,CAACJ,OAAO,CAAC6D,KAAK,CAACQ,OAAO,EAAE,SAAS,CAAC;IAC9C;EACF,CAAC;EAED,MAAMC,cAAc,GAAIrD,OAA0B,IAAK;IACrD,IAAIA,OAAO,CAACsD,aAAa,CAAC,CAAC,EAAE;MAC3B,IAAI,IAAAC,sBAAU,EAACvD,OAAO,CAACwD,IAAI,CAAC,GAAG,CAAC,EAAE;QAChCzB,KAAK,CAAC5C,IAAI,CAACJ,OAAO,CAAC6D,KAAK,CAACa,cAAc,EAAE,SAAS,CAAC;MACrD;MAEAnB,WAAW,CACRoB,IAAI,CAAC;QAAEC,OAAO,EAAE3D,OAAO,CAAC4D,GAAG;QAAEC,QAAQ,EAAE7D,OAAO,CAAC8D,IAAI;QAAEC,QAAQ,EAAE/D,OAAO,CAACgE;MAAK,CAAC,CAAC,CAC9EC,IAAI,CAAEC,QAAQ,IAAK;QAClBnC,KAAK,CAAC5C,IAAI,CAACJ,OAAO,CAAC6D,KAAK,CAACuB,WAAW,EAAE,SAAS,CAAC;QAChDrB,kBAAM,CAACsB,GAAG,CAAC,eAAe,EAAEF,QAAQ,CAAC;MACvC,CAAC,CAAC,CACDG,KAAK,CAAEC,GAAG,IAAK;QACdvC,KAAK,CAAC5C,IAAI,CAACJ,OAAO,CAAC6D,KAAK,CAAC2B,cAAc,EAAE,OAAO,CAAC;QACjDzB,kBAAM,CAACsB,GAAG,CAAC,mBAAmB,EAAEE,GAAG,CAAC;MACtC,CAAC,CAAC;IACN;EACF,CAAC;EAED,MAAME,UAAU,GAAIxE,OAA0B,IAAK;IACjD,IAAIA,OAAO,CAACsD,aAAa,CAAC,CAAC,EAAE;MAC3B,MAAMS,QAAQ,GAAG,IAAAU,uBAAW,EAACzE,OAAO,CAACgE,IAAI,IAAI,IAAAU,4BAAgB,EAAC1E,OAAO,CAAC8D,IAAI,CAAC,CAAC;MAC5E,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAACa,QAAQ,CAACZ,QAAQ,CAAC,EAAE;QAAA,IAAAa,qBAAA;QAClD9G,mBAAmB,aAAnBA,mBAAmB,eAAnBA,mBAAmB,CAAGkC,OAAO,EAAE,MAAMpC,eAAe,CAACoC,OAAO,CAAC,EAAE,IAAA6E,0CAA8B,EAAC7E,OAAO,CAAC,CAAC;QACvG,CAAA4E,qBAAA,GAAA/C,QAAQ,CAACiD,aAAa,cAAAF,qBAAA,eAAtBA,qBAAA,CAAAzH,IAAA,CAAA0E,QAAQ,EAAiB7B,OAAO,CAAC4D,GAAG,CAAC;MACvC,CAAC,MAAM;QACL,MAAMmB,QAAQ,GAAGlD,QAAQ,CAACiD,aAAa,IAAIE,iBAAQ,CAACC,OAAO;QAC3DF,QAAQ,CAAC/E,OAAO,CAAC4D,GAAG,CAAC;MACvB;IACF;EACF,CAAC;EAED,MAAMsB,yBAAyB,GAAIlF,OAA0B,IAAK;IAChEiC,SAAS,CAAC;MACRkD,UAAU,EAAE,CACV;QACEC,KAAK,EAAErG,OAAO,CAACoC,MAAM,CAACkE,4BAA4B;QAClDxF,OAAO,EAAEA,CAAA,KAAMhC,qBAAqB,CAACmC,OAAO,CAAC,CAACqE,KAAK,CAAC3B,eAAe;MACrE,CAAC,EACD;QACE0C,KAAK,EAAErG,OAAO,CAACoC,MAAM,CAACmE,6BAA6B;QACnDC,UAAU,EAAEtG,MAAM,CAACuG,EAAE,CAACC,MAAM,CAACjJ,OAAO,CAACkJ,IAAI,CAACC,WAAW;QACrD9F,OAAO,EAAEA,CAAA,KAAM+F,qBAAqB,CAAC5F,OAAO;MAC9C,CAAC;IAEL,CAAC,CAAC;EACJ,CAAC;EAED,MAAM4F,qBAAqB,GAAI5F,OAA0B,IAAK;IAC5DmC,KAAK,CAAC;MACJiD,KAAK,EAAErG,OAAO,CAACoC,MAAM,CAAC0E,oCAAoC;MAC1DC,OAAO,EAAE,CACP;QAAE5E,IAAI,EAAEnC,OAAO,CAACoC,MAAM,CAAC4E;MAAsC,CAAC,EAC9D;QACE7E,IAAI,EAAEnC,OAAO,CAACoC,MAAM,CAAC6E,iCAAiC;QACtDtF,KAAK,EAAE,aAAa;QACpBb,OAAO,EAAEA,CAAA,KAAM;UACbjC,eAAe,CAACoC,OAAO,CAAC,CAACqE,KAAK,CAACtB,eAAe,CAAC;QACjD;MACF,CAAC;IAEL,CAAC,CAAC;EACJ,CAAC;EAED,OAAO,CAAC;IAAE/C;EAAQ,CAAC,KAAK;IACtB,IAAI,CAACA,OAAO,CAACkD,aAAa,CAAC,CAAC,IAAI,CAAClD,OAAO,CAACsD,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAEnE,MAAM6B,UAAyC,GAAG,EAAE;IACpD,MAAMc,IAAI,GAAG;MACXC,IAAI,EAAGlG,OAA0B,KAAM;QACrCmG,IAAI,EAAE,MAAe;QACrBf,KAAK,EAAErG,OAAO,CAACoC,MAAM,CAACiF,oBAAoB;QAC1CvG,OAAO,EAAEA,CAAA,KAAMoD,UAAU,CAACjD,OAAO;MACnC,CAAC,CAAC;MACFqG,IAAI,EAAGrG,OAA0B,KAAM;QACrCmG,IAAI,EAAE,MAAe;QACrBf,KAAK,EAAErG,OAAO,CAACoC,MAAM,CAACmF,oBAAoB;QAC1CzG,OAAO,EAAEA,CAAA,KAAMpC,aAAa,CAACuC,OAAO;MACtC,CAAC,CAAC;MACFuG,MAAM,EAAGvG,OAA0B,KAAM;QACvCwG,QAAQ,EAAExG,OAAO,CAACyG,UAAU,GAAGzG,OAAO,CAACyG,UAAU,CAACC,UAAU,GAAG,CAAC,GAAGC,SAAS;QAC5ER,IAAI,EAAE,QAAiB;QACvBf,KAAK,EAAErG,OAAO,CAACoC,MAAM,CAACyF,sBAAsB;QAC5C/G,OAAO,EAAEA,CAAA,KAAM+F,qBAAqB,CAAC5F,OAAO;MAC9C,CAAC,CAAC;MACF6G,KAAK,EAAG7G,OAA0B,KAAM;QACtCwG,QAAQ,EAAEM,OAAO,CAAC9G,OAAO,CAAC+G,eAAe,CAAC;QAC1CZ,IAAI,EAAE,OAAgB;QACtBf,KAAK,EAAErG,OAAO,CAACoC,MAAM,CAAC6F,qBAAqB;QAC3CnH,OAAO,EAAEA,CAAA,KAAMnC,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGsC,OAAO;MACzC,CAAC,CAAC;MACFiH,aAAa,EAAGjH,OAA0B,KAAM;QAC9CwG,QAAQ,EAAEM,OAAO,CAAC9G,OAAO,CAAC+G,eAAe,CAAC;QAC1CZ,IAAI,EAAE,QAAiB;QACvBf,KAAK,EAAErG,OAAO,CAACoC,MAAM,CAAC+F,sBAAsB;QAC5CrH,OAAO,EAAEA,CAAA,KAAMlC,sBAAsB,aAAtBA,sBAAsB,uBAAtBA,sBAAsB,CAAGqC,OAAO;MACjD,CAAC,CAAC;MACFmH,QAAQ,EAAGnH,OAA0B,KAAM;QACzCmG,IAAI,EAAE,UAAmB;QACzBf,KAAK,EAAErG,OAAO,CAACoC,MAAM,CAACiG,oBAAoB;QAC1CvH,OAAO,EAAEA,CAAA,KAAMwD,cAAc,CAACrD,OAAO;MACvC,CAAC;IACH,CAAC;IAED,IAAIA,OAAO,CAACkD,aAAa,CAAC,CAAC,EAAE;MAC3BiC,UAAU,CAACkC,IAAI,CAACpB,IAAI,CAACC,IAAI,CAAClG,OAAO,CAAC,CAAC;MACnC,IAAI,CAACxC,OAAO,CAAC8J,WAAW,EAAE;QACxB,IAAI,IAAAC,uBAAW,EAACvH,OAAO,EAAEhC,aAAa,CAAC,IAAIgC,OAAO,CAACwH,aAAa,KAAK,WAAW,EAAE;UAChFrC,UAAU,CAACkC,IAAI,CAACpB,IAAI,CAACI,IAAI,CAACrG,OAAO,CAAC,CAAC;UACnCmF,UAAU,CAACkC,IAAI,CAACpB,IAAI,CAACM,MAAM,CAACvG,OAAO,CAAC,CAAC;QACvC;QACA,IAAIxC,OAAO,CAACiK,cAAc,CAAC,CAAC,EAAE;UAC5B,IAAIjF,SAAS,CAACkF,KAAK,CAACC,YAAY,CAACnK,OAAO,CAACoK,SAAS,KAAK,QAAQ,IAAIjK,sBAAsB,KAAKgJ,SAAS,EAAE;YACvGxB,UAAU,CAACkC,IAAI,CAACpB,IAAI,CAACgB,aAAa,CAACjH,OAAO,CAAC,CAAC;UAC9C,CAAC,MAAM,IAAIwC,SAAS,CAACkF,KAAK,CAACC,YAAY,CAACnK,OAAO,CAACoK,SAAS,KAAK,aAAa,EAAE;YAC3EzC,UAAU,CAACkC,IAAI,CAACpB,IAAI,CAACY,KAAK,CAAC7G,OAAO,CAAC,CAAC;UACtC;QACF;MACF;IACF;IAEA,IAAIA,OAAO,CAACsD,aAAa,CAAC,CAAC,EAAE;MAC3B,IAAI,CAAC,IAAAuE,0BAAc,EAAC7H,OAAO,CAAC,EAAE;QAC5BmF,UAAU,CAACkC,IAAI,CAACpB,IAAI,CAACkB,QAAQ,CAACnH,OAAO,CAAC,CAAC;MACzC;MACA,IAAI,CAACxC,OAAO,CAAC8J,WAAW,EAAE;QACxB,IAAI,IAAAC,uBAAW,EAACvH,OAAO,EAAEhC,aAAa,CAAC,IAAIgC,OAAO,CAACwH,aAAa,KAAK,WAAW,EAAE;UAChFrC,UAAU,CAACkC,IAAI,CAACpB,IAAI,CAACM,MAAM,CAACvG,OAAO,CAAC,CAAC;QACvC;QACA,IAAIxC,OAAO,CAACiK,cAAc,CAAC,CAAC,EAAE;UAC5B,IAAIjF,SAAS,CAACkF,KAAK,CAACC,YAAY,CAACnK,OAAO,CAACoK,SAAS,KAAK,QAAQ,IAAIjK,sBAAsB,KAAKgJ,SAAS,EAAE;YACvGxB,UAAU,CAACkC,IAAI,CAACpB,IAAI,CAACgB,aAAa,CAACjH,OAAO,CAAC,CAAC;UAC9C,CAAC,MAAM,IAAIwC,SAAS,CAACkF,KAAK,CAACC,YAAY,CAACnK,OAAO,CAACoK,SAAS,KAAK,aAAa,EAAE;YAC3EzC,UAAU,CAACkC,IAAI,CAACpB,IAAI,CAACY,KAAK,CAAC7G,OAAO,CAAC,CAAC;UACtC;QACF;MACF;IACF;IAEA,MAAM8H,OAAO,GAAGtF,SAAS,CAACuF,gBAAgB,CAACJ,YAAY,CAACnK,OAAO;IAC/D,MAAMuC,eAAgC,GAAG;MACvCoF,UAAU;MACV6C,eAAe,EAAE,IAAAC,gCAAoB,EACnCzK,OAAO,EACPA,OAAO,CAACiK,cAAc,CAAC,CAAC,KAAKjK,OAAO,CAAC0K,OAAO,GAAGJ,OAAO,CAACK,yBAAyB,GAAGL,OAAO,CAACM,eAAe,CAC5G,CAAC,GACG,CAAC;QAAEC;MAAQ,CAAC,kBAAKzM,MAAA,CAAAY,OAAA,CAAAgE,aAAA,CAACnE,eAAA,CAAAiM,cAAc,CAACC,WAAW;QAACvI,OAAO,EAAEA,OAAQ;QAACxC,OAAO,EAAEA,OAAQ;QAAC6K,OAAO,EAAEA;MAAQ,CAAE,CAAC,GACrG1B;IACN,CAAC;IAED,QAAQ,IAAI;MACV,KAAK3G,OAAO,CAACwH,aAAa,KAAK,SAAS;QAAE;UACxC,OAAO;YACL3H,OAAO,EAAE8G,SAAS;YAClB7G,WAAW,EAAE6G,SAAS;YACtB5G,eAAe,EAAE4G;UACnB,CAAC;QACH;MAEA,KAAK3G,OAAO,CAACwH,aAAa,KAAK,QAAQ;QAAE;UACvC,OAAO;YACL3H,OAAO,EAAEA,CAAA,KAAMhC,qBAAqB,CAACmC,OAAO,CAAC,CAACqE,KAAK,CAAC3B,eAAe,CAAC;YACpE5C,WAAW,EAAEA,CAAA,KAAMoF,yBAAyB,CAAClF,OAAO,CAAC;YACrDD;UACF,CAAC;QACH;MAEA,KAAKC,OAAO,CAACsD,aAAa,CAAC,CAAC;QAAE;UAC5B,OAAO;YACLzD,OAAO,EAAEA,CAAA,KAAM2E,UAAU,CAACxE,OAAO,CAAC;YAClCF,WAAW,EAAEA,CAAA,KAAMmC,SAAS,CAAClC,eAAe,CAAC;YAC7CA;UACF,CAAC;QACH;MAEA;QAAS;UACP,OAAO;YACLF,OAAO,EAAE8G,SAAS;YAClB7G,WAAW,EAAEA,CAAA,KAAMmC,SAAS,CAAClC,eAAe,CAAC;YAC7CA;UACF,CAAC;QACH;IACF;EACF,CAAC;AACH,CAAC;AAED,MAAMiB,MAAM,GAAG,IAAAwH,4CAAgB,EAAC;EAC9BvH,YAAY,EAAE;IACZwH,QAAQ,EAAE,UAAU;IACpBC,MAAM,EAAE,GAAG;IACXC,GAAG,EAAE,CAAC;IACNC,KAAK,EAAE,CAAC;IACRC,GAAG,EAAE;EACP,CAAC;EACDpH,iBAAiB,EAAE;IACjBqH,aAAa,EAAE;EACjB,CAAC;EACDpH,YAAY,EAAE;IACZ+G,QAAQ,EAAE,UAAU;IACpBC,MAAM,EAAE,GAAG;IACXK,MAAM,EAAE,EAAE;IACVC,SAAS,EAAE;EACb,CAAC;EACDpH,YAAY,EAAE;IACZ6G,QAAQ,EAAE,UAAU;IACpBC,MAAM,EAAE,GAAG;IACXK,MAAM,EAAE,EAAE;IACVF,GAAG,EAAE;EACP;AACF,CAAC,CAAC;;AAEF;AAAA,IAAAI,QAAA,GAAAC,OAAA,CAAA1M,OAAA,gBACe2M,cAAK,CAACC,UAAU,CAAC/L,kBAAkB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_uikitReactNativeFoundation","_uikitUtils","_useContext","_SBUUtils","_ChatFlatList","_ReactionAddons","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","ChannelMessageList","searchItem","hasNext","channel","onEditMessage","onReplyMessage","onReplyInThreadMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","onPressParentMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListComponent","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","ref","STRINGS","useLocalization","colors","useUIKitTheme","show","useUserProfile","safeAreaLayout","useSafeAreaPadding","createMessagePressActions","useCreateMessagePressActions","renderItem","useFreshCallback","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","View","style","flex","backgroundColor","background","isFrozen","ChannelFrozenBanner","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","data","keyExtractor","messageKeyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","scrollButton","handlers","useSBUHandlers","toast","useToast","openSheet","useBottomSheet","alert","useAlert","clipboardService","fileService","usePlatformService","sbOptions","useSendbirdChat","onResendFailure","error","TOAST","RESEND_MSG_ERROR","Logger","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","toMegabyte","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","getFileType","getFileExtension","includes","_handlers$onOpenFileU","getAvailableUriFromFileMessage","onOpenFileURL","openFile","SBUUtils","openURL","openSheetForFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","none","destructive","alertForMessageDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","menu","copy","icon","CHANNEL_MESSAGE_COPY","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","threadInfo","replyCount","undefined","CHANNEL_MESSAGE_DELETE","reply","Boolean","parentMessageId","CHANNEL_MESSAGE_REPLY","replyInThread","CHANNEL_MESSAGE_THREAD","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","isMyMessage","sendingStatus","isGroupChannel","uikit","groupChannel","replyType","isVoiceMessage","configs","uikitWithAppInfo","HeaderComponent","shouldRenderReaction","isSuper","enableReactionsSupergroup","enableReactions","onClose","ReactionAddons","BottomSheet","createStyleSheet","position","zIndex","top","start","end","paddingBottom","bottom","alignSelf","_default","exports","React","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\n\nimport {\n BottomSheetItem,\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n isVoiceMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n useSafeAreaPadding,\n} from '@sendbird/uikit-utils';\n\nimport type { UserProfileContextType } from '../../contexts/UserProfileCtx';\nimport {\n useLocalization,\n usePlatformService,\n useSBUHandlers,\n useSendbirdChat,\n useUserProfile,\n} from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport ChatFlatList from '../ChatFlatList';\nimport { ReactionAddons } from '../ReactionAddons';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\nexport type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpenChannel> = {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: T;\n messages: SendbirdMessage[];\n newMessages: SendbirdMessage[];\n searchItem?: { startingPoint: number };\n\n scrolledAwayFromBottom: boolean;\n onScrolledAwayFromBottom: (value: boolean) => void;\n onTopReached: () => void;\n onBottomReached: () => void;\n hasNext: () => boolean;\n\n onPressNewMessagesButton: (animated?: boolean) => void;\n onPressScrollToBottomButton: (animated?: boolean) => void;\n\n onEditMessage: (message: HandleableMessage) => void;\n onReplyMessage?: (message: HandleableMessage) => void; // only available on group channel\n onReplyInThreadMessage?: (message: HandleableMessage) => void; // only available on group channel\n onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<HandleableMessage | void>;\n onPressParentMessage?: (parentMessage: SendbirdMessage, childMessage: HandleableMessage) => void;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n\n renderMessage: (props: {\n focused: boolean;\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n onPressParentMessage?: ChannelMessageListProps<T>['onPressParentMessage'];\n onReplyInThreadMessage?: ChannelMessageListProps<T>['onReplyInThreadMessage'];\n onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];\n bottomSheetItem?: BottomSheetItem;\n isFirstItem: boolean;\n hideParentMessage?: boolean;\n }) => React.ReactElement | null;\n renderNewMessagesButton:\n | null\n | ((props: { visible: boolean; onPress: () => void; newMessages: SendbirdMessage[] }) => React.ReactElement | null);\n renderScrollToBottomButton: null | ((props: { visible: boolean; onPress: () => void }) => React.ReactElement | null);\n flatListComponent?: React.ComponentType<FlatListProps<SendbirdMessage>>;\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n onPressParentMessage,\n currentUserId,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListComponent,\n flatListProps,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n }: ChannelMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const safeAreaLayout = useSafeAreaPadding(['left', 'right']);\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n });\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress, bottomSheetItem } = createMessagePressActions({ message: item });\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n onPress,\n onLongPress,\n onPressParentMessage,\n onReplyInThreadMessage,\n onShowUserProfile: show,\n enableMessageGrouping,\n channel,\n currentUserId,\n focused: (searchItem?.startingPoint ?? -1) === item.createdAt,\n bottomSheetItem,\n isFirstItem: index === 0,\n });\n });\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />\n )}\n <ChatFlatList\n flatListComponent={flatListComponent}\n {...flatListProps}\n onTopReached={onTopReached}\n onBottomReached={onBottomReached}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n ref={ref}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),\n onPress: () => onPressNewMessagesButton(),\n newMessages,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: hasNext() || scrolledAwayFromBottom,\n onPress: () => onPressScrollToBottomButton(),\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpenChannel>({\n channel,\n currentUserId,\n onResendFailedMessage,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onPressMediaMessage,\n}: Pick<\n ChannelMessageListProps<T>,\n | 'channel'\n | 'currentUserId'\n | 'onEditMessage'\n | 'onReplyMessage'\n | 'onReplyInThreadMessage'\n | 'onDeleteMessage'\n | 'onResendFailedMessage'\n | 'onPressMediaMessage'\n>): CreateMessagePressActions => {\n const handlers = useSBUHandlers();\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const onResendFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.RESEND_MSG_ERROR, error);\n };\n\n const onDeleteFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);\n };\n\n const onCopyText = (message: HandleableMessage) => {\n if (message.isUserMessage()) {\n clipboardService.setString(message.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n }\n };\n\n const onDownloadFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n if (toMegabyte(message.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: message.url, fileName: message.name, fileType: message.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n const onOpenFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n const fileType = getFileType(message.type || getFileExtension(message.name));\n if (['image', 'video', 'audio'].includes(fileType)) {\n onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));\n handlers.onOpenFileURL?.(message.url);\n } else {\n const openFile = handlers.onOpenFileURL ?? SBUUtils.openURL;\n openFile(message.url);\n }\n }\n };\n\n const openSheetForFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n },\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => alertForMessageDelete(message),\n },\n ],\n });\n };\n\n const alertForMessageDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n { text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage(message).catch(onDeleteFailure);\n },\n },\n ],\n });\n };\n\n return ({ message }) => {\n if (!message.isUserMessage() && !message.isFileMessage()) return {};\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const menu = {\n copy: (message: HandleableMessage) => ({\n icon: 'copy' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => onCopyText(message),\n }),\n edit: (message: HandleableMessage) => ({\n icon: 'edit' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage(message),\n }),\n delete: (message: HandleableMessage) => ({\n disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,\n icon: 'delete' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => alertForMessageDelete(message),\n }),\n reply: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'reply' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_REPLY,\n onPress: () => onReplyMessage?.(message),\n }),\n replyInThread: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'thread' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_THREAD,\n onPress: () => onReplyInThreadMessage?.(message),\n }),\n download: (message: HandleableMessage) => ({\n icon: 'download' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: () => onDownloadFile(message),\n }),\n };\n\n if (message.isUserMessage()) {\n sheetItems.push(menu.copy(message));\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.edit(message));\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n if (message.isFileMessage()) {\n if (!isVoiceMessage(message)) {\n sheetItems.push(menu.download(message));\n }\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n const bottomSheetItem: BottomSheetItem = {\n sheetItems,\n HeaderComponent: shouldRenderReaction(\n channel,\n channel.isGroupChannel() && (channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions),\n )\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={message} channel={channel} onClose={onClose} />\n : undefined,\n };\n\n switch (true) {\n case message.sendingStatus === 'pending': {\n return {\n onPress: undefined,\n onLongPress: undefined,\n bottomSheetItem: undefined,\n };\n }\n\n case message.sendingStatus === 'failed': {\n return {\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n onLongPress: () => openSheetForFailedMessage(message),\n bottomSheetItem,\n };\n }\n\n case message.isFileMessage(): {\n return {\n onPress: () => onOpenFile(message),\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n\n default: {\n return {\n onPress: undefined,\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n }\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n start: 8,\n end: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n end: 16,\n },\n});\n\n// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it as typeof ChannelMessageList and implicit `ref` prop\nexport default React.forwardRef(ChannelMessageList) as typeof ChannelMessageList;\n"],"mappings":"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","ignoreList":[]}
@@ -34,6 +34,7 @@ const ChatFlatList = /*#__PURE__*/(0, _react.forwardRef)(function ChatFlatList({
34
34
  onBottomReached,
35
35
  onScrolledAwayFromBottom,
36
36
  onScroll,
37
+ flatListComponent,
37
38
  ...props
38
39
  }, ref) {
39
40
  var _props$data;
@@ -60,7 +61,8 @@ const ChatFlatList = /*#__PURE__*/(0, _react.forwardRef)(function ChatFlatList({
60
61
  // eslint-disable-next-line no-console
61
62
  console.warn('UIKit Warning: The Inverted FlatList had performance issues on Android.\n' + 'This issue was fixed in 0.72.4+\n' + 'Please refer to the link: https://github.com/facebook/react-native/issues/30034');
62
63
  }
63
- return /*#__PURE__*/_react.default.createElement(_FlatListInternal.default, _extends({
64
+ const FlatList = flatListComponent ?? _FlatListInternal.default;
65
+ return /*#__PURE__*/_react.default.createElement(FlatList, _extends({
64
66
  bounces: false,
65
67
  removeClippedSubviews: true,
66
68
  keyboardDismissMode: 'on-drag',
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_uikitReactNativeFoundation","_uikitUtils","_FlatListInternal","_interopRequireDefault","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","isInvertedFlatListFixedVersion","_Platform$constants$r","Platform","constants","reactNativeVersion","major","_Platform$constants$r2","minor","_Platform$constants$r3","patch","ANDROID_BUG_ALERT_SHOWED","OS","BOTTOM_DETECT_THRESHOLD","UNREACHABLE_THRESHOLD","Number","MIN_SAFE_INTEGER","ChatFlatList","forwardRef","onTopReached","onBottomReached","onScrolledAwayFromBottom","onScroll","props","ref","_props$data","select","useUIKitTheme","contentOffsetY","useRef","_onScroll","useFreshCallback","event","contentOffset","nativeEvent","prevOffsetY","current","currOffsetY","y","__DEV__","console","warn","createElement","bounces","removeClippedSubviews","keyboardDismissMode","keyboardShouldPersistTaps","indicatorStyle","light","dark","inverted","Boolean","data","onEndReached","onScrollToIndexFailed","NOOP","onStartReached","scrollEventThrottle","keyExtractor","getMessageUniqId","style","flex","StyleSheet","flatten","maintainVisibleContentPosition","minIndexForVisible","autoscrollToTopThreshold","_default","exports"],"sources":["index.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from 'react';\nimport { FlatListProps, Platform, FlatList as RNFlatList, StyleSheet } from 'react-native';\n\nimport { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { NOOP, SendbirdMessage, getMessageUniqId, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport FlatListInternal from './FlatListInternal';\n\nfunction isInvertedFlatListFixedVersion() {\n if (Platform.constants.reactNativeVersion?.major < 1) {\n if (Platform.constants.reactNativeVersion?.minor < 73) {\n if (Platform.constants.reactNativeVersion?.patch < 4) {\n return false;\n }\n }\n }\n return true;\n}\n\nlet ANDROID_BUG_ALERT_SHOWED = Platform.OS !== 'android' || isInvertedFlatListFixedVersion();\nconst BOTTOM_DETECT_THRESHOLD = 50;\nconst UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;\n\ntype Props = Omit<FlatListProps<SendbirdMessage>, 'onEndReached'> & {\n onBottomReached: () => void;\n onTopReached: () => void;\n onScrolledAwayFromBottom: (value: boolean) => void;\n};\nconst ChatFlatList = forwardRef<RNFlatList, Props>(function ChatFlatList(\n { onTopReached, onBottomReached, onScrolledAwayFromBottom, onScroll, ...props },\n ref,\n) {\n const { select } = useUIKitTheme();\n const contentOffsetY = useRef(0);\n\n const _onScroll = useFreshCallback<NonNullable<Props['onScroll']>>((event) => {\n onScroll?.(event);\n\n const { contentOffset } = event.nativeEvent;\n\n const prevOffsetY = contentOffsetY.current;\n const currOffsetY = contentOffset.y;\n\n if (BOTTOM_DETECT_THRESHOLD < prevOffsetY && currOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(false);\n } else if (BOTTOM_DETECT_THRESHOLD < currOffsetY && prevOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(true);\n }\n\n contentOffsetY.current = contentOffset.y;\n });\n\n if (__DEV__ && !ANDROID_BUG_ALERT_SHOWED) {\n ANDROID_BUG_ALERT_SHOWED = true;\n // eslint-disable-next-line no-console\n console.warn(\n 'UIKit Warning: The Inverted FlatList had performance issues on Android.\\n' +\n 'This issue was fixed in 0.72.4+\\n' +\n 'Please refer to the link: https://github.com/facebook/react-native/issues/30034',\n );\n }\n\n return (\n <FlatListInternal\n bounces={false}\n removeClippedSubviews\n keyboardDismissMode={'on-drag'}\n keyboardShouldPersistTaps={'handled'}\n indicatorStyle={select({ light: 'black', dark: 'white' })}\n {...props}\n // FIXME: inverted list of ListEmptyComponent is reversed {@link https://github.com/facebook/react-native/issues/21196#issuecomment-836937743}\n inverted={Boolean(props.data?.length)}\n ref={ref}\n onEndReached={onTopReached}\n onScrollToIndexFailed={NOOP}\n onStartReached={onBottomReached}\n scrollEventThrottle={16}\n onScroll={_onScroll}\n keyExtractor={getMessageUniqId}\n style={{ flex: 1, ...StyleSheet.flatten(props.style) }}\n maintainVisibleContentPosition={{ minIndexForVisible: 0, autoscrollToTopThreshold: UNREACHABLE_THRESHOLD }}\n />\n );\n});\n\nexport default ChatFlatList;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_uikitReactNativeFoundation","_uikitUtils","_FlatListInternal","_interopRequireDefault","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","isInvertedFlatListFixedVersion","_Platform$constants$r","Platform","constants","reactNativeVersion","major","_Platform$constants$r2","minor","_Platform$constants$r3","patch","ANDROID_BUG_ALERT_SHOWED","OS","BOTTOM_DETECT_THRESHOLD","UNREACHABLE_THRESHOLD","Number","MIN_SAFE_INTEGER","ChatFlatList","forwardRef","onTopReached","onBottomReached","onScrolledAwayFromBottom","onScroll","flatListComponent","props","ref","_props$data","select","useUIKitTheme","contentOffsetY","useRef","_onScroll","useFreshCallback","event","contentOffset","nativeEvent","prevOffsetY","current","currOffsetY","y","__DEV__","console","warn","FlatList","FlatListInternal","createElement","bounces","removeClippedSubviews","keyboardDismissMode","keyboardShouldPersistTaps","indicatorStyle","light","dark","inverted","Boolean","data","onEndReached","onScrollToIndexFailed","NOOP","onStartReached","scrollEventThrottle","keyExtractor","getMessageUniqId","style","flex","StyleSheet","flatten","maintainVisibleContentPosition","minIndexForVisible","autoscrollToTopThreshold","_default","exports"],"sources":["index.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from 'react';\nimport { FlatListProps, Platform, FlatList as RNFlatList, StyleSheet } from 'react-native';\n\nimport { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { NOOP, SendbirdMessage, getMessageUniqId, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport FlatListInternal from './FlatListInternal';\n\nfunction isInvertedFlatListFixedVersion() {\n if (Platform.constants.reactNativeVersion?.major < 1) {\n if (Platform.constants.reactNativeVersion?.minor < 73) {\n if (Platform.constants.reactNativeVersion?.patch < 4) {\n return false;\n }\n }\n }\n return true;\n}\n\nlet ANDROID_BUG_ALERT_SHOWED = Platform.OS !== 'android' || isInvertedFlatListFixedVersion();\nconst BOTTOM_DETECT_THRESHOLD = 50;\nconst UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;\n\ntype Props = Omit<FlatListProps<SendbirdMessage>, 'onEndReached'> & {\n onBottomReached: () => void;\n onTopReached: () => void;\n onScrolledAwayFromBottom: (value: boolean) => void;\n flatListComponent?: React.ComponentType<FlatListProps<SendbirdMessage>>;\n};\nconst ChatFlatList = forwardRef<RNFlatList, Props>(function ChatFlatList(\n { onTopReached, onBottomReached, onScrolledAwayFromBottom, onScroll, flatListComponent, ...props },\n ref,\n) {\n const { select } = useUIKitTheme();\n const contentOffsetY = useRef(0);\n\n const _onScroll = useFreshCallback<NonNullable<Props['onScroll']>>((event) => {\n onScroll?.(event);\n\n const { contentOffset } = event.nativeEvent;\n\n const prevOffsetY = contentOffsetY.current;\n const currOffsetY = contentOffset.y;\n\n if (BOTTOM_DETECT_THRESHOLD < prevOffsetY && currOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(false);\n } else if (BOTTOM_DETECT_THRESHOLD < currOffsetY && prevOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(true);\n }\n\n contentOffsetY.current = contentOffset.y;\n });\n\n if (__DEV__ && !ANDROID_BUG_ALERT_SHOWED) {\n ANDROID_BUG_ALERT_SHOWED = true;\n // eslint-disable-next-line no-console\n console.warn(\n 'UIKit Warning: The Inverted FlatList had performance issues on Android.\\n' +\n 'This issue was fixed in 0.72.4+\\n' +\n 'Please refer to the link: https://github.com/facebook/react-native/issues/30034',\n );\n }\n\n const FlatList = flatListComponent ?? FlatListInternal;\n\n return (\n <FlatList\n bounces={false}\n removeClippedSubviews\n keyboardDismissMode={'on-drag'}\n keyboardShouldPersistTaps={'handled'}\n indicatorStyle={select({ light: 'black', dark: 'white' })}\n {...props}\n // FIXME: inverted list of ListEmptyComponent is reversed {@link https://github.com/facebook/react-native/issues/21196#issuecomment-836937743}\n inverted={Boolean(props.data?.length)}\n ref={ref}\n onEndReached={onTopReached}\n onScrollToIndexFailed={NOOP}\n onStartReached={onBottomReached}\n scrollEventThrottle={16}\n onScroll={_onScroll}\n keyExtractor={getMessageUniqId}\n style={{ flex: 1, ...StyleSheet.flatten(props.style) }}\n maintainVisibleContentPosition={{ minIndexForVisible: 0, autoscrollToTopThreshold: UNREACHABLE_THRESHOLD }}\n />\n );\n});\n\nexport default ChatFlatList;\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\n enableTypingIndicator?: GroupChannelProps['Provider']['enableTypingIndicator'];\n enableMessageGrouping?: GroupChannelProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];\n flatListProps?: GroupChannelProps['MessageList']['flatListProps'];\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];\n\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 | '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 };\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"],"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\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 | '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 };\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"],"mappings":"","ignoreList":[]}
@@ -41,6 +41,7 @@ const createGroupChannelFragment = initModule => {
41
41
  channel,
42
42
  keyboardAvoidOffset,
43
43
  sortComparator = _uikitUtils.messageComparator,
44
+ flatListComponent,
44
45
  flatListProps,
45
46
  messageListQueryParams,
46
47
  collectionCreator
@@ -245,6 +246,7 @@ const createGroupChannelFragment = initModule => {
245
246
  onResendFailedMessage: resendMessage,
246
247
  onDeleteMessage: deleteMessage,
247
248
  onPressMediaMessage: _onPressMediaMessage,
249
+ flatListComponent: flatListComponent,
248
250
  flatListProps: memoizedFlatListProps
249
251
  }), /*#__PURE__*/_react.default.createElement(GroupChannelModule.Input, {
250
252
  SuggestedMentionList: GroupChannelModule.SuggestedMentionList,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_groupChannel","_message","_uikitReactNativeFoundation","_uikitTools","_uikitUtils","_GroupChannelMessageRenderer","_NewMessagesButton","_interopRequireDefault","_ScrollToBottomButton","_StatusComposition","_createGroupChannelModule","_useContext","_pubsub","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","createGroupChannelFragment","initModule","GroupChannelModule","createGroupChannelModule","searchItem","renderNewMessagesButton","props","createElement","renderScrollToBottomButton","renderMessage","enableMessageGrouping","enableTypingIndicator","onPressHeaderLeft","NOOP","onPressHeaderRight","onPressMediaMessage","onChannelDeleted","onPressReplyMessageInThread","onBeforeSendUserMessage","PASS","onBeforeSendFileMessage","onBeforeUpdateUserMessage","onBeforeUpdateFileMessage","channel","keyboardAvoidOffset","sortComparator","messageComparator","flatListProps","messageListQueryParams","collectionCreator","playerService","recorderService","usePlatformService","sdk","currentUser","sbOptions","voiceMessageStatusManager","useSendbirdChat","toast","useToast","STRINGS","useLocalization","internalSearchItem","setInternalSearchItem","useState","navigateFromMessageSearch","useCallback","Boolean","groupChannelPubSub","pubsub","scrolledAwayFromBottom","setScrolledAwayFromBottom","scrolledAwayFromBottomRef","useRefTracker","replyType","useIIFE","uikit","groupChannel","ReplyType","NONE","ONLY_REPLY_TO_CHANNEL","loading","messages","newMessages","resetNewMessages","loadNext","loadPrevious","hasNext","sendFileMessage","sendUserMessage","updateFileMessage","updateUserMessage","resendMessage","deleteMessage","resetWithStartingPoint","useGroupChannelMessages","shouldCountNewMessages","current","onMessagesReceived","publish","type","data","onMessagesUpdated","onCurrentUserBanned","getCollectionCreator","markAsRead","confirmAndMarkAsRead","startingPoint","onBlurFragment","reset","catch","_onPressHeaderLeft","useFreshCallback","_onPressHeaderRight","_onPressMediaMessage","message","uri","_onPressReplyMessageInThread","useEffect","clear","renderItem","content","Box","isFirstItem","GroupChannelTypingIndicatorBubble","memoizedFlatListProps","useMemo","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","onResetMessageList","Number","MAX_SAFE_INTEGER","onResetMessageListWithStartingPoint","onUpdateSearchItem","undefined","onPending","onSent","onPressSendUserMessage","params","processedParams","onPressSendFileMessage","_processedParams$file","fileSize","file","size","uploadSizeLimit","appInfo","sizeLimitString","getReadableFileSize","show","TOAST","FILE_UPLOAD_SIZE_LIMIT_EXCEEDED_ERROR","onPressUpdateUserMessage","messageId","onPressUpdateFileMessage","onScrolledAwayFromBottom","value","Provider","Header","shouldHideRight","LoadingComponent","StatusLoading","MessageList","currentUserId","userId","onTopReached","onBottomReached","onResendFailedMessage","onDeleteMessage","Input","SuggestedMentionList","shouldRenderInput","isBroadcast","myRole","deprecatedCreatorProp","defaultParams","createMessageCollection","filter","MessageFilter","_default","exports"],"sources":["createGroupChannelFragment.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { MessageCollection, MessageFilter } 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 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 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 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 {\n loading,\n messages,\n newMessages,\n resetNewMessages,\n loadNext,\n loadPrevious,\n hasNext,\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 onChannelDeleted,\n onCurrentUserBanned: onChannelDeleted,\n collectionCreator: getCollectionCreator(channel, messageListQueryParams, collectionCreator),\n sortComparator,\n markAsRead: confirmAndMarkAsRead,\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) resetNewMessages();\n setScrolledAwayFromBottom(value);\n });\n\n return (\n <GroupChannelModule.Provider\n channel={channel}\n groupChannelPubSub={groupChannelPubSub}\n enableTypingIndicator={enableTypingIndicator ?? sbOptions.uikit.groupChannel.channel.enableTypingIndicator}\n keyboardAvoidOffset={keyboardAvoidOffset}\n 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 scrolledAwayFromBottom={scrolledAwayFromBottom}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n renderNewMessagesButton={renderNewMessagesButton}\n renderScrollToBottomButton={renderScrollToBottomButton}\n onResendFailedMessage={resendMessage}\n onDeleteMessage={deleteMessage}\n onPressMediaMessage={_onPressMediaMessage}\n flatListProps={memoizedFlatListProps}\n />\n <GroupChannelModule.Input\n SuggestedMentionList={GroupChannelModule.SuggestedMentionList}\n shouldRenderInput={shouldRenderInput(channel)}\n onPressSendUserMessage={onPressSendUserMessage}\n onPressSendFileMessage={onPressSendFileMessage}\n onPressUpdateUserMessage={onPressUpdateUserMessage}\n onPressUpdateFileMessage={onPressUpdateFileMessage}\n />\n </StatusComposition>\n </GroupChannelModule.Provider>\n );\n };\n};\n\nfunction shouldRenderInput(channel: SendbirdGroupChannel) {\n if (channel.isBroadcast) {\n return channel.myRole === 'operator';\n }\n\n return true;\n}\n\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","_interopRequireWildcard","require","_groupChannel","_message","_uikitReactNativeFoundation","_uikitTools","_uikitUtils","_GroupChannelMessageRenderer","_NewMessagesButton","_interopRequireDefault","_ScrollToBottomButton","_StatusComposition","_createGroupChannelModule","_useContext","_pubsub","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","createGroupChannelFragment","initModule","GroupChannelModule","createGroupChannelModule","searchItem","renderNewMessagesButton","props","createElement","renderScrollToBottomButton","renderMessage","enableMessageGrouping","enableTypingIndicator","onPressHeaderLeft","NOOP","onPressHeaderRight","onPressMediaMessage","onChannelDeleted","onPressReplyMessageInThread","onBeforeSendUserMessage","PASS","onBeforeSendFileMessage","onBeforeUpdateUserMessage","onBeforeUpdateFileMessage","channel","keyboardAvoidOffset","sortComparator","messageComparator","flatListComponent","flatListProps","messageListQueryParams","collectionCreator","playerService","recorderService","usePlatformService","sdk","currentUser","sbOptions","voiceMessageStatusManager","useSendbirdChat","toast","useToast","STRINGS","useLocalization","internalSearchItem","setInternalSearchItem","useState","navigateFromMessageSearch","useCallback","Boolean","groupChannelPubSub","pubsub","scrolledAwayFromBottom","setScrolledAwayFromBottom","scrolledAwayFromBottomRef","useRefTracker","replyType","useIIFE","uikit","groupChannel","ReplyType","NONE","ONLY_REPLY_TO_CHANNEL","loading","messages","newMessages","resetNewMessages","loadNext","loadPrevious","hasNext","sendFileMessage","sendUserMessage","updateFileMessage","updateUserMessage","resendMessage","deleteMessage","resetWithStartingPoint","useGroupChannelMessages","shouldCountNewMessages","current","onMessagesReceived","publish","type","data","onMessagesUpdated","onCurrentUserBanned","getCollectionCreator","markAsRead","confirmAndMarkAsRead","startingPoint","onBlurFragment","reset","catch","_onPressHeaderLeft","useFreshCallback","_onPressHeaderRight","_onPressMediaMessage","message","uri","_onPressReplyMessageInThread","useEffect","clear","renderItem","content","Box","isFirstItem","GroupChannelTypingIndicatorBubble","memoizedFlatListProps","useMemo","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","onResetMessageList","Number","MAX_SAFE_INTEGER","onResetMessageListWithStartingPoint","onUpdateSearchItem","undefined","onPending","onSent","onPressSendUserMessage","params","processedParams","onPressSendFileMessage","_processedParams$file","fileSize","file","size","uploadSizeLimit","appInfo","sizeLimitString","getReadableFileSize","show","TOAST","FILE_UPLOAD_SIZE_LIMIT_EXCEEDED_ERROR","onPressUpdateUserMessage","messageId","onPressUpdateFileMessage","onScrolledAwayFromBottom","value","Provider","Header","shouldHideRight","LoadingComponent","StatusLoading","MessageList","currentUserId","userId","onTopReached","onBottomReached","onResendFailedMessage","onDeleteMessage","Input","SuggestedMentionList","shouldRenderInput","isBroadcast","myRole","deprecatedCreatorProp","defaultParams","createMessageCollection","filter","MessageFilter","_default","exports"],"sources":["createGroupChannelFragment.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { MessageCollection, MessageFilter } 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 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 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 {\n loading,\n messages,\n newMessages,\n resetNewMessages,\n loadNext,\n loadPrevious,\n hasNext,\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 onChannelDeleted,\n onCurrentUserBanned: onChannelDeleted,\n collectionCreator: getCollectionCreator(channel, messageListQueryParams, collectionCreator),\n sortComparator,\n markAsRead: confirmAndMarkAsRead,\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) resetNewMessages();\n setScrolledAwayFromBottom(value);\n });\n\n return (\n <GroupChannelModule.Provider\n channel={channel}\n groupChannelPubSub={groupChannelPubSub}\n enableTypingIndicator={enableTypingIndicator ?? sbOptions.uikit.groupChannel.channel.enableTypingIndicator}\n keyboardAvoidOffset={keyboardAvoidOffset}\n 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 scrolledAwayFromBottom={scrolledAwayFromBottom}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n renderNewMessagesButton={renderNewMessagesButton}\n renderScrollToBottomButton={renderScrollToBottomButton}\n onResendFailedMessage={resendMessage}\n onDeleteMessage={deleteMessage}\n onPressMediaMessage={_onPressMediaMessage}\n flatListComponent={flatListComponent}\n flatListProps={memoizedFlatListProps}\n />\n <GroupChannelModule.Input\n SuggestedMentionList={GroupChannelModule.SuggestedMentionList}\n shouldRenderInput={shouldRenderInput(channel)}\n onPressSendUserMessage={onPressSendUserMessage}\n onPressSendFileMessage={onPressSendFileMessage}\n onPressUpdateUserMessage={onPressUpdateUserMessage}\n onPressUpdateFileMessage={onPressUpdateFileMessage}\n />\n </StatusComposition>\n </GroupChannelModule.Provider>\n );\n };\n};\n\nfunction shouldRenderInput(channel: SendbirdGroupChannel) {\n if (channel.isBroadcast) {\n return channel.myRole === 'operator';\n }\n\n return true;\n}\n\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":[]}
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- const VERSION = '3.9.4';
7
+ const VERSION = '3.9.5';
8
8
  var _default = exports.default = VERSION;
9
9
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["VERSION","_default","exports","default"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.9.4';\nexport default VERSION;\n"],"mappings":";;;;;;AAAA,MAAMA,OAAO,GAAG,OAAO;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GACTH,OAAO","ignoreList":[]}
1
+ {"version":3,"names":["VERSION","_default","exports","default"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.9.5';\nexport default VERSION;\n"],"mappings":";;;;;;AAAA,MAAMA,OAAO,GAAG,OAAO;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GACTH,OAAO","ignoreList":[]}
@@ -29,6 +29,7 @@ const ChannelMessageList = ({
29
29
  scrolledAwayFromBottom,
30
30
  onBottomReached,
31
31
  onTopReached,
32
+ flatListComponent,
32
33
  flatListProps,
33
34
  onPressNewMessagesButton,
34
35
  onPressScrollToBottomButton
@@ -89,7 +90,9 @@ const ChannelMessageList = ({
89
90
  }, channel.isFrozen && /*#__PURE__*/React.createElement(ChannelFrozenBanner, {
90
91
  style: styles.frozenBanner,
91
92
  text: STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN
92
- }), /*#__PURE__*/React.createElement(ChatFlatList, _extends({}, flatListProps, {
93
+ }), /*#__PURE__*/React.createElement(ChatFlatList, _extends({
94
+ flatListComponent: flatListComponent
95
+ }, flatListProps, {
93
96
  onTopReached: onTopReached,
94
97
  onBottomReached: onBottomReached,
95
98
  onScrolledAwayFromBottom: onScrolledAwayFromBottom,
@@ -1 +1 @@
1
- {"version":3,"names":["React","View","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","isVoiceMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","useSafeAreaPadding","useLocalization","usePlatformService","useSBUHandlers","useSendbirdChat","useUserProfile","SBUUtils","ChatFlatList","ReactionAddons","ChannelMessageList","searchItem","hasNext","channel","onEditMessage","onReplyMessage","onReplyInThreadMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","onPressParentMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","ref","STRINGS","colors","show","safeAreaLayout","createMessagePressActions","useCreateMessagePressActions","renderItem","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","style","flex","backgroundColor","background","isFrozen","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","_extends","data","keyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","length","scrollButton","handlers","toast","openSheet","alert","clipboardService","fileService","sbOptions","onResendFailure","error","TOAST","RESEND_MSG_ERROR","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","includes","_handlers$onOpenFileU","onOpenFileURL","call","openFile","openURL","openSheetForFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","default","none","destructive","alertForMessageDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","menu","copy","icon","CHANNEL_MESSAGE_COPY","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","threadInfo","replyCount","undefined","CHANNEL_MESSAGE_DELETE","reply","Boolean","parentMessageId","CHANNEL_MESSAGE_REPLY","replyInThread","CHANNEL_MESSAGE_THREAD","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","sendingStatus","isGroupChannel","uikit","groupChannel","replyType","configs","uikitWithAppInfo","HeaderComponent","isSuper","enableReactionsSupergroup","enableReactions","onClose","BottomSheet","position","zIndex","top","start","end","paddingBottom","bottom","alignSelf","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\n\nimport {\n BottomSheetItem,\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n isVoiceMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n useSafeAreaPadding,\n} from '@sendbird/uikit-utils';\n\nimport type { UserProfileContextType } from '../../contexts/UserProfileCtx';\nimport {\n useLocalization,\n usePlatformService,\n useSBUHandlers,\n useSendbirdChat,\n useUserProfile,\n} from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport ChatFlatList from '../ChatFlatList';\nimport { ReactionAddons } from '../ReactionAddons';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\nexport type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpenChannel> = {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: T;\n messages: SendbirdMessage[];\n newMessages: SendbirdMessage[];\n searchItem?: { startingPoint: number };\n\n scrolledAwayFromBottom: boolean;\n onScrolledAwayFromBottom: (value: boolean) => void;\n onTopReached: () => void;\n onBottomReached: () => void;\n hasNext: () => boolean;\n\n onPressNewMessagesButton: (animated?: boolean) => void;\n onPressScrollToBottomButton: (animated?: boolean) => void;\n\n onEditMessage: (message: HandleableMessage) => void;\n onReplyMessage?: (message: HandleableMessage) => void; // only available on group channel\n onReplyInThreadMessage?: (message: HandleableMessage) => void; // only available on group channel\n onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<HandleableMessage | void>;\n onPressParentMessage?: (parentMessage: SendbirdMessage, childMessage: HandleableMessage) => void;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n\n renderMessage: (props: {\n focused: boolean;\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n onPressParentMessage?: ChannelMessageListProps<T>['onPressParentMessage'];\n onReplyInThreadMessage?: ChannelMessageListProps<T>['onReplyInThreadMessage'];\n onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];\n bottomSheetItem?: BottomSheetItem;\n isFirstItem: boolean;\n hideParentMessage?: boolean;\n }) => React.ReactElement | null;\n renderNewMessagesButton:\n | null\n | ((props: { visible: boolean; onPress: () => void; newMessages: SendbirdMessage[] }) => React.ReactElement | null);\n renderScrollToBottomButton: null | ((props: { visible: boolean; onPress: () => void }) => React.ReactElement | null);\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n onPressParentMessage,\n currentUserId,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListProps,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n }: ChannelMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const safeAreaLayout = useSafeAreaPadding(['left', 'right']);\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n });\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress, bottomSheetItem } = createMessagePressActions({ message: item });\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n onPress,\n onLongPress,\n onPressParentMessage,\n onReplyInThreadMessage,\n onShowUserProfile: show,\n enableMessageGrouping,\n channel,\n currentUserId,\n focused: (searchItem?.startingPoint ?? -1) === item.createdAt,\n bottomSheetItem,\n isFirstItem: index === 0,\n });\n });\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />\n )}\n <ChatFlatList\n {...flatListProps}\n onTopReached={onTopReached}\n onBottomReached={onBottomReached}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n ref={ref}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),\n onPress: () => onPressNewMessagesButton(),\n newMessages,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: hasNext() || scrolledAwayFromBottom,\n onPress: () => onPressScrollToBottomButton(),\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpenChannel>({\n channel,\n currentUserId,\n onResendFailedMessage,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onPressMediaMessage,\n}: Pick<\n ChannelMessageListProps<T>,\n | 'channel'\n | 'currentUserId'\n | 'onEditMessage'\n | 'onReplyMessage'\n | 'onReplyInThreadMessage'\n | 'onDeleteMessage'\n | 'onResendFailedMessage'\n | 'onPressMediaMessage'\n>): CreateMessagePressActions => {\n const handlers = useSBUHandlers();\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const onResendFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.RESEND_MSG_ERROR, error);\n };\n\n const onDeleteFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);\n };\n\n const onCopyText = (message: HandleableMessage) => {\n if (message.isUserMessage()) {\n clipboardService.setString(message.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n }\n };\n\n const onDownloadFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n if (toMegabyte(message.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: message.url, fileName: message.name, fileType: message.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n const onOpenFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n const fileType = getFileType(message.type || getFileExtension(message.name));\n if (['image', 'video', 'audio'].includes(fileType)) {\n onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));\n handlers.onOpenFileURL?.(message.url);\n } else {\n const openFile = handlers.onOpenFileURL ?? SBUUtils.openURL;\n openFile(message.url);\n }\n }\n };\n\n const openSheetForFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n },\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => alertForMessageDelete(message),\n },\n ],\n });\n };\n\n const alertForMessageDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n { text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage(message).catch(onDeleteFailure);\n },\n },\n ],\n });\n };\n\n return ({ message }) => {\n if (!message.isUserMessage() && !message.isFileMessage()) return {};\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const menu = {\n copy: (message: HandleableMessage) => ({\n icon: 'copy' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => onCopyText(message),\n }),\n edit: (message: HandleableMessage) => ({\n icon: 'edit' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage(message),\n }),\n delete: (message: HandleableMessage) => ({\n disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,\n icon: 'delete' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => alertForMessageDelete(message),\n }),\n reply: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'reply' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_REPLY,\n onPress: () => onReplyMessage?.(message),\n }),\n replyInThread: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'thread' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_THREAD,\n onPress: () => onReplyInThreadMessage?.(message),\n }),\n download: (message: HandleableMessage) => ({\n icon: 'download' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: () => onDownloadFile(message),\n }),\n };\n\n if (message.isUserMessage()) {\n sheetItems.push(menu.copy(message));\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.edit(message));\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n if (message.isFileMessage()) {\n if (!isVoiceMessage(message)) {\n sheetItems.push(menu.download(message));\n }\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n const bottomSheetItem: BottomSheetItem = {\n sheetItems,\n HeaderComponent: shouldRenderReaction(\n channel,\n channel.isGroupChannel() && (channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions),\n )\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={message} channel={channel} onClose={onClose} />\n : undefined,\n };\n\n switch (true) {\n case message.sendingStatus === 'pending': {\n return {\n onPress: undefined,\n onLongPress: undefined,\n bottomSheetItem: undefined,\n };\n }\n\n case message.sendingStatus === 'failed': {\n return {\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n onLongPress: () => openSheetForFailedMessage(message),\n bottomSheetItem,\n };\n }\n\n case message.isFileMessage(): {\n return {\n onPress: () => onOpenFile(message),\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n\n default: {\n return {\n onPress: undefined,\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n }\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n start: 8,\n end: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n end: 16,\n },\n});\n\n// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it as typeof ChannelMessageList and implicit `ref` prop\nexport default React.forwardRef(ChannelMessageList) as typeof ChannelMessageList;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","View","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","isVoiceMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","useSafeAreaPadding","useLocalization","usePlatformService","useSBUHandlers","useSendbirdChat","useUserProfile","SBUUtils","ChatFlatList","ReactionAddons","ChannelMessageList","searchItem","hasNext","channel","onEditMessage","onReplyMessage","onReplyInThreadMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","onPressParentMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListComponent","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","ref","STRINGS","colors","show","safeAreaLayout","createMessagePressActions","useCreateMessagePressActions","renderItem","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","style","flex","backgroundColor","background","isFrozen","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","_extends","data","keyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","length","scrollButton","handlers","toast","openSheet","alert","clipboardService","fileService","sbOptions","onResendFailure","error","TOAST","RESEND_MSG_ERROR","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","includes","_handlers$onOpenFileU","onOpenFileURL","call","openFile","openURL","openSheetForFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","default","none","destructive","alertForMessageDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","menu","copy","icon","CHANNEL_MESSAGE_COPY","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","threadInfo","replyCount","undefined","CHANNEL_MESSAGE_DELETE","reply","Boolean","parentMessageId","CHANNEL_MESSAGE_REPLY","replyInThread","CHANNEL_MESSAGE_THREAD","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","sendingStatus","isGroupChannel","uikit","groupChannel","replyType","configs","uikitWithAppInfo","HeaderComponent","isSuper","enableReactionsSupergroup","enableReactions","onClose","BottomSheet","position","zIndex","top","start","end","paddingBottom","bottom","alignSelf","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\n\nimport {\n BottomSheetItem,\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n isVoiceMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n useSafeAreaPadding,\n} from '@sendbird/uikit-utils';\n\nimport type { UserProfileContextType } from '../../contexts/UserProfileCtx';\nimport {\n useLocalization,\n usePlatformService,\n useSBUHandlers,\n useSendbirdChat,\n useUserProfile,\n} from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport ChatFlatList from '../ChatFlatList';\nimport { ReactionAddons } from '../ReactionAddons';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\nexport type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpenChannel> = {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: T;\n messages: SendbirdMessage[];\n newMessages: SendbirdMessage[];\n searchItem?: { startingPoint: number };\n\n scrolledAwayFromBottom: boolean;\n onScrolledAwayFromBottom: (value: boolean) => void;\n onTopReached: () => void;\n onBottomReached: () => void;\n hasNext: () => boolean;\n\n onPressNewMessagesButton: (animated?: boolean) => void;\n onPressScrollToBottomButton: (animated?: boolean) => void;\n\n onEditMessage: (message: HandleableMessage) => void;\n onReplyMessage?: (message: HandleableMessage) => void; // only available on group channel\n onReplyInThreadMessage?: (message: HandleableMessage) => void; // only available on group channel\n onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<HandleableMessage | void>;\n onPressParentMessage?: (parentMessage: SendbirdMessage, childMessage: HandleableMessage) => void;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n\n renderMessage: (props: {\n focused: boolean;\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n onPressParentMessage?: ChannelMessageListProps<T>['onPressParentMessage'];\n onReplyInThreadMessage?: ChannelMessageListProps<T>['onReplyInThreadMessage'];\n onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];\n bottomSheetItem?: BottomSheetItem;\n isFirstItem: boolean;\n hideParentMessage?: boolean;\n }) => React.ReactElement | null;\n renderNewMessagesButton:\n | null\n | ((props: { visible: boolean; onPress: () => void; newMessages: SendbirdMessage[] }) => React.ReactElement | null);\n renderScrollToBottomButton: null | ((props: { visible: boolean; onPress: () => void }) => React.ReactElement | null);\n flatListComponent?: React.ComponentType<FlatListProps<SendbirdMessage>>;\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n onPressParentMessage,\n currentUserId,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListComponent,\n flatListProps,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n }: ChannelMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const safeAreaLayout = useSafeAreaPadding(['left', 'right']);\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n });\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress, bottomSheetItem } = createMessagePressActions({ message: item });\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n onPress,\n onLongPress,\n onPressParentMessage,\n onReplyInThreadMessage,\n onShowUserProfile: show,\n enableMessageGrouping,\n channel,\n currentUserId,\n focused: (searchItem?.startingPoint ?? -1) === item.createdAt,\n bottomSheetItem,\n isFirstItem: index === 0,\n });\n });\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />\n )}\n <ChatFlatList\n flatListComponent={flatListComponent}\n {...flatListProps}\n onTopReached={onTopReached}\n onBottomReached={onBottomReached}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n ref={ref}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),\n onPress: () => onPressNewMessagesButton(),\n newMessages,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: hasNext() || scrolledAwayFromBottom,\n onPress: () => onPressScrollToBottomButton(),\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpenChannel>({\n channel,\n currentUserId,\n onResendFailedMessage,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onPressMediaMessage,\n}: Pick<\n ChannelMessageListProps<T>,\n | 'channel'\n | 'currentUserId'\n | 'onEditMessage'\n | 'onReplyMessage'\n | 'onReplyInThreadMessage'\n | 'onDeleteMessage'\n | 'onResendFailedMessage'\n | 'onPressMediaMessage'\n>): CreateMessagePressActions => {\n const handlers = useSBUHandlers();\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const onResendFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.RESEND_MSG_ERROR, error);\n };\n\n const onDeleteFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);\n };\n\n const onCopyText = (message: HandleableMessage) => {\n if (message.isUserMessage()) {\n clipboardService.setString(message.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n }\n };\n\n const onDownloadFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n if (toMegabyte(message.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: message.url, fileName: message.name, fileType: message.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n const onOpenFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n const fileType = getFileType(message.type || getFileExtension(message.name));\n if (['image', 'video', 'audio'].includes(fileType)) {\n onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));\n handlers.onOpenFileURL?.(message.url);\n } else {\n const openFile = handlers.onOpenFileURL ?? SBUUtils.openURL;\n openFile(message.url);\n }\n }\n };\n\n const openSheetForFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n },\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => alertForMessageDelete(message),\n },\n ],\n });\n };\n\n const alertForMessageDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n { text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage(message).catch(onDeleteFailure);\n },\n },\n ],\n });\n };\n\n return ({ message }) => {\n if (!message.isUserMessage() && !message.isFileMessage()) return {};\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const menu = {\n copy: (message: HandleableMessage) => ({\n icon: 'copy' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => onCopyText(message),\n }),\n edit: (message: HandleableMessage) => ({\n icon: 'edit' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage(message),\n }),\n delete: (message: HandleableMessage) => ({\n disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,\n icon: 'delete' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => alertForMessageDelete(message),\n }),\n reply: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'reply' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_REPLY,\n onPress: () => onReplyMessage?.(message),\n }),\n replyInThread: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'thread' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_THREAD,\n onPress: () => onReplyInThreadMessage?.(message),\n }),\n download: (message: HandleableMessage) => ({\n icon: 'download' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: () => onDownloadFile(message),\n }),\n };\n\n if (message.isUserMessage()) {\n sheetItems.push(menu.copy(message));\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.edit(message));\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n if (message.isFileMessage()) {\n if (!isVoiceMessage(message)) {\n sheetItems.push(menu.download(message));\n }\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n const bottomSheetItem: BottomSheetItem = {\n sheetItems,\n HeaderComponent: shouldRenderReaction(\n channel,\n channel.isGroupChannel() && (channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions),\n )\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={message} channel={channel} onClose={onClose} />\n : undefined,\n };\n\n switch (true) {\n case message.sendingStatus === 'pending': {\n return {\n onPress: undefined,\n onLongPress: undefined,\n bottomSheetItem: undefined,\n };\n }\n\n case message.sendingStatus === 'failed': {\n return {\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n onLongPress: () => openSheetForFailedMessage(message),\n bottomSheetItem,\n };\n }\n\n case message.isFileMessage(): {\n return {\n onPress: () => onOpenFile(message),\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n\n default: {\n return {\n onPress: undefined,\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n }\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n start: 8,\n end: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n end: 16,\n },\n});\n\n// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it as typeof ChannelMessageList and implicit `ref` prop\nexport default React.forwardRef(ChannelMessageList) as typeof ChannelMessageList;\n"],"mappings":"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","ignoreList":[]}
@@ -25,6 +25,7 @@ const ChatFlatList = /*#__PURE__*/forwardRef(function ChatFlatList({
25
25
  onBottomReached,
26
26
  onScrolledAwayFromBottom,
27
27
  onScroll,
28
+ flatListComponent,
28
29
  ...props
29
30
  }, ref) {
30
31
  var _props$data;
@@ -51,7 +52,8 @@ const ChatFlatList = /*#__PURE__*/forwardRef(function ChatFlatList({
51
52
  // eslint-disable-next-line no-console
52
53
  console.warn('UIKit Warning: The Inverted FlatList had performance issues on Android.\n' + 'This issue was fixed in 0.72.4+\n' + 'Please refer to the link: https://github.com/facebook/react-native/issues/30034');
53
54
  }
54
- return /*#__PURE__*/React.createElement(FlatListInternal, _extends({
55
+ const FlatList = flatListComponent ?? FlatListInternal;
56
+ return /*#__PURE__*/React.createElement(FlatList, _extends({
55
57
  bounces: false,
56
58
  removeClippedSubviews: true,
57
59
  keyboardDismissMode: 'on-drag',
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","useRef","Platform","StyleSheet","useUIKitTheme","NOOP","getMessageUniqId","useFreshCallback","FlatListInternal","isInvertedFlatListFixedVersion","_Platform$constants$r","constants","reactNativeVersion","major","_Platform$constants$r2","minor","_Platform$constants$r3","patch","ANDROID_BUG_ALERT_SHOWED","OS","BOTTOM_DETECT_THRESHOLD","UNREACHABLE_THRESHOLD","Number","MIN_SAFE_INTEGER","ChatFlatList","onTopReached","onBottomReached","onScrolledAwayFromBottom","onScroll","props","ref","_props$data","select","contentOffsetY","_onScroll","event","contentOffset","nativeEvent","prevOffsetY","current","currOffsetY","y","__DEV__","console","warn","createElement","_extends","bounces","removeClippedSubviews","keyboardDismissMode","keyboardShouldPersistTaps","indicatorStyle","light","dark","inverted","Boolean","data","length","onEndReached","onScrollToIndexFailed","onStartReached","scrollEventThrottle","keyExtractor","style","flex","flatten","maintainVisibleContentPosition","minIndexForVisible","autoscrollToTopThreshold"],"sources":["index.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from 'react';\nimport { FlatListProps, Platform, FlatList as RNFlatList, StyleSheet } from 'react-native';\n\nimport { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { NOOP, SendbirdMessage, getMessageUniqId, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport FlatListInternal from './FlatListInternal';\n\nfunction isInvertedFlatListFixedVersion() {\n if (Platform.constants.reactNativeVersion?.major < 1) {\n if (Platform.constants.reactNativeVersion?.minor < 73) {\n if (Platform.constants.reactNativeVersion?.patch < 4) {\n return false;\n }\n }\n }\n return true;\n}\n\nlet ANDROID_BUG_ALERT_SHOWED = Platform.OS !== 'android' || isInvertedFlatListFixedVersion();\nconst BOTTOM_DETECT_THRESHOLD = 50;\nconst UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;\n\ntype Props = Omit<FlatListProps<SendbirdMessage>, 'onEndReached'> & {\n onBottomReached: () => void;\n onTopReached: () => void;\n onScrolledAwayFromBottom: (value: boolean) => void;\n};\nconst ChatFlatList = forwardRef<RNFlatList, Props>(function ChatFlatList(\n { onTopReached, onBottomReached, onScrolledAwayFromBottom, onScroll, ...props },\n ref,\n) {\n const { select } = useUIKitTheme();\n const contentOffsetY = useRef(0);\n\n const _onScroll = useFreshCallback<NonNullable<Props['onScroll']>>((event) => {\n onScroll?.(event);\n\n const { contentOffset } = event.nativeEvent;\n\n const prevOffsetY = contentOffsetY.current;\n const currOffsetY = contentOffset.y;\n\n if (BOTTOM_DETECT_THRESHOLD < prevOffsetY && currOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(false);\n } else if (BOTTOM_DETECT_THRESHOLD < currOffsetY && prevOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(true);\n }\n\n contentOffsetY.current = contentOffset.y;\n });\n\n if (__DEV__ && !ANDROID_BUG_ALERT_SHOWED) {\n ANDROID_BUG_ALERT_SHOWED = true;\n // eslint-disable-next-line no-console\n console.warn(\n 'UIKit Warning: The Inverted FlatList had performance issues on Android.\\n' +\n 'This issue was fixed in 0.72.4+\\n' +\n 'Please refer to the link: https://github.com/facebook/react-native/issues/30034',\n );\n }\n\n return (\n <FlatListInternal\n bounces={false}\n removeClippedSubviews\n keyboardDismissMode={'on-drag'}\n keyboardShouldPersistTaps={'handled'}\n indicatorStyle={select({ light: 'black', dark: 'white' })}\n {...props}\n // FIXME: inverted list of ListEmptyComponent is reversed {@link https://github.com/facebook/react-native/issues/21196#issuecomment-836937743}\n inverted={Boolean(props.data?.length)}\n ref={ref}\n onEndReached={onTopReached}\n onScrollToIndexFailed={NOOP}\n onStartReached={onBottomReached}\n scrollEventThrottle={16}\n onScroll={_onScroll}\n keyExtractor={getMessageUniqId}\n style={{ flex: 1, ...StyleSheet.flatten(props.style) }}\n maintainVisibleContentPosition={{ minIndexForVisible: 0, autoscrollToTopThreshold: UNREACHABLE_THRESHOLD }}\n />\n );\n});\n\nexport default ChatFlatList;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","forwardRef","useRef","Platform","StyleSheet","useUIKitTheme","NOOP","getMessageUniqId","useFreshCallback","FlatListInternal","isInvertedFlatListFixedVersion","_Platform$constants$r","constants","reactNativeVersion","major","_Platform$constants$r2","minor","_Platform$constants$r3","patch","ANDROID_BUG_ALERT_SHOWED","OS","BOTTOM_DETECT_THRESHOLD","UNREACHABLE_THRESHOLD","Number","MIN_SAFE_INTEGER","ChatFlatList","onTopReached","onBottomReached","onScrolledAwayFromBottom","onScroll","flatListComponent","props","ref","_props$data","select","contentOffsetY","_onScroll","event","contentOffset","nativeEvent","prevOffsetY","current","currOffsetY","y","__DEV__","console","warn","FlatList","createElement","_extends","bounces","removeClippedSubviews","keyboardDismissMode","keyboardShouldPersistTaps","indicatorStyle","light","dark","inverted","Boolean","data","length","onEndReached","onScrollToIndexFailed","onStartReached","scrollEventThrottle","keyExtractor","style","flex","flatten","maintainVisibleContentPosition","minIndexForVisible","autoscrollToTopThreshold"],"sources":["index.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from 'react';\nimport { FlatListProps, Platform, FlatList as RNFlatList, StyleSheet } from 'react-native';\n\nimport { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { NOOP, SendbirdMessage, getMessageUniqId, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport FlatListInternal from './FlatListInternal';\n\nfunction isInvertedFlatListFixedVersion() {\n if (Platform.constants.reactNativeVersion?.major < 1) {\n if (Platform.constants.reactNativeVersion?.minor < 73) {\n if (Platform.constants.reactNativeVersion?.patch < 4) {\n return false;\n }\n }\n }\n return true;\n}\n\nlet ANDROID_BUG_ALERT_SHOWED = Platform.OS !== 'android' || isInvertedFlatListFixedVersion();\nconst BOTTOM_DETECT_THRESHOLD = 50;\nconst UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;\n\ntype Props = Omit<FlatListProps<SendbirdMessage>, 'onEndReached'> & {\n onBottomReached: () => void;\n onTopReached: () => void;\n onScrolledAwayFromBottom: (value: boolean) => void;\n flatListComponent?: React.ComponentType<FlatListProps<SendbirdMessage>>;\n};\nconst ChatFlatList = forwardRef<RNFlatList, Props>(function ChatFlatList(\n { onTopReached, onBottomReached, onScrolledAwayFromBottom, onScroll, flatListComponent, ...props },\n ref,\n) {\n const { select } = useUIKitTheme();\n const contentOffsetY = useRef(0);\n\n const _onScroll = useFreshCallback<NonNullable<Props['onScroll']>>((event) => {\n onScroll?.(event);\n\n const { contentOffset } = event.nativeEvent;\n\n const prevOffsetY = contentOffsetY.current;\n const currOffsetY = contentOffset.y;\n\n if (BOTTOM_DETECT_THRESHOLD < prevOffsetY && currOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(false);\n } else if (BOTTOM_DETECT_THRESHOLD < currOffsetY && prevOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(true);\n }\n\n contentOffsetY.current = contentOffset.y;\n });\n\n if (__DEV__ && !ANDROID_BUG_ALERT_SHOWED) {\n ANDROID_BUG_ALERT_SHOWED = true;\n // eslint-disable-next-line no-console\n console.warn(\n 'UIKit Warning: The Inverted FlatList had performance issues on Android.\\n' +\n 'This issue was fixed in 0.72.4+\\n' +\n 'Please refer to the link: https://github.com/facebook/react-native/issues/30034',\n );\n }\n\n const FlatList = flatListComponent ?? FlatListInternal;\n\n return (\n <FlatList\n bounces={false}\n removeClippedSubviews\n keyboardDismissMode={'on-drag'}\n keyboardShouldPersistTaps={'handled'}\n indicatorStyle={select({ light: 'black', dark: 'white' })}\n {...props}\n // FIXME: inverted list of ListEmptyComponent is reversed {@link https://github.com/facebook/react-native/issues/21196#issuecomment-836937743}\n inverted={Boolean(props.data?.length)}\n ref={ref}\n onEndReached={onTopReached}\n onScrollToIndexFailed={NOOP}\n onStartReached={onBottomReached}\n scrollEventThrottle={16}\n onScroll={_onScroll}\n keyExtractor={getMessageUniqId}\n style={{ flex: 1, ...StyleSheet.flatten(props.style) }}\n maintainVisibleContentPosition={{ minIndexForVisible: 0, autoscrollToTopThreshold: UNREACHABLE_THRESHOLD }}\n />\n );\n});\n\nexport default ChatFlatList;\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\n enableTypingIndicator?: GroupChannelProps['Provider']['enableTypingIndicator'];\n enableMessageGrouping?: GroupChannelProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];\n flatListProps?: GroupChannelProps['MessageList']['flatListProps'];\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];\n\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 | '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 };\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"],"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\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 | '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 };\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"],"mappings":"","ignoreList":[]}
@@ -33,6 +33,7 @@ const createGroupChannelFragment = initModule => {
33
33
  channel,
34
34
  keyboardAvoidOffset,
35
35
  sortComparator = messageComparator,
36
+ flatListComponent,
36
37
  flatListProps,
37
38
  messageListQueryParams,
38
39
  collectionCreator
@@ -237,6 +238,7 @@ const createGroupChannelFragment = initModule => {
237
238
  onResendFailedMessage: resendMessage,
238
239
  onDeleteMessage: deleteMessage,
239
240
  onPressMediaMessage: _onPressMediaMessage,
241
+ flatListComponent: flatListComponent,
240
242
  flatListProps: memoizedFlatListProps
241
243
  }), /*#__PURE__*/React.createElement(GroupChannelModule.Input, {
242
244
  SuggestedMentionList: GroupChannelModule.SuggestedMentionList,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useMemo","useState","MessageFilter","ReplyType","Box","useToast","useGroupChannelMessages","getReadableFileSize","NOOP","PASS","confirmAndMarkAsRead","messageComparator","useFreshCallback","useIIFE","useRefTracker","GroupChannelMessageRenderer","GroupChannelTypingIndicatorBubble","NewMessagesButton","ScrollToBottomButton","StatusComposition","createGroupChannelModule","useLocalization","usePlatformService","useSendbirdChat","pubsub","createGroupChannelFragment","initModule","GroupChannelModule","searchItem","renderNewMessagesButton","props","createElement","renderScrollToBottomButton","renderMessage","enableMessageGrouping","enableTypingIndicator","onPressHeaderLeft","onPressHeaderRight","onPressMediaMessage","onChannelDeleted","onPressReplyMessageInThread","onBeforeSendUserMessage","onBeforeSendFileMessage","onBeforeUpdateUserMessage","onBeforeUpdateFileMessage","channel","keyboardAvoidOffset","sortComparator","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","loading","messages","newMessages","resetNewMessages","loadNext","loadPrevious","hasNext","sendFileMessage","sendUserMessage","updateFileMessage","updateUserMessage","resendMessage","deleteMessage","resetWithStartingPoint","shouldCountNewMessages","current","onMessagesReceived","publish","type","data","onMessagesUpdated","onCurrentUserBanned","getCollectionCreator","markAsRead","startingPoint","onBlurFragment","reset","catch","_onPressHeaderLeft","_onPressHeaderRight","_onPressMediaMessage","message","uri","_onPressReplyMessageInThread","clear","renderItem","content","isFirstItem","memoizedFlatListProps","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","onResetMessageList","Number","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","userId","onTopReached","onBottomReached","onResendFailedMessage","onDeleteMessage","Input","SuggestedMentionList","shouldRenderInput","isBroadcast","myRole","deprecatedCreatorProp","defaultParams","createMessageCollection","filter"],"sources":["createGroupChannelFragment.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { MessageCollection, MessageFilter } 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 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 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 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 {\n loading,\n messages,\n newMessages,\n resetNewMessages,\n loadNext,\n loadPrevious,\n hasNext,\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 onChannelDeleted,\n onCurrentUserBanned: onChannelDeleted,\n collectionCreator: getCollectionCreator(channel, messageListQueryParams, collectionCreator),\n sortComparator,\n markAsRead: confirmAndMarkAsRead,\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) resetNewMessages();\n setScrolledAwayFromBottom(value);\n });\n\n return (\n <GroupChannelModule.Provider\n channel={channel}\n groupChannelPubSub={groupChannelPubSub}\n enableTypingIndicator={enableTypingIndicator ?? sbOptions.uikit.groupChannel.channel.enableTypingIndicator}\n keyboardAvoidOffset={keyboardAvoidOffset}\n 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 scrolledAwayFromBottom={scrolledAwayFromBottom}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n renderNewMessagesButton={renderNewMessagesButton}\n renderScrollToBottomButton={renderScrollToBottomButton}\n onResendFailedMessage={resendMessage}\n onDeleteMessage={deleteMessage}\n onPressMediaMessage={_onPressMediaMessage}\n flatListProps={memoizedFlatListProps}\n />\n <GroupChannelModule.Input\n SuggestedMentionList={GroupChannelModule.SuggestedMentionList}\n shouldRenderInput={shouldRenderInput(channel)}\n onPressSendUserMessage={onPressSendUserMessage}\n onPressSendFileMessage={onPressSendFileMessage}\n onPressUpdateUserMessage={onPressUpdateUserMessage}\n onPressUpdateFileMessage={onPressUpdateFileMessage}\n />\n </StatusComposition>\n </GroupChannelModule.Provider>\n );\n };\n};\n\nfunction shouldRenderInput(channel: SendbirdGroupChannel) {\n if (channel.isBroadcast) {\n return channel.myRole === 'operator';\n }\n\n return true;\n}\n\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","useState","MessageFilter","ReplyType","Box","useToast","useGroupChannelMessages","getReadableFileSize","NOOP","PASS","confirmAndMarkAsRead","messageComparator","useFreshCallback","useIIFE","useRefTracker","GroupChannelMessageRenderer","GroupChannelTypingIndicatorBubble","NewMessagesButton","ScrollToBottomButton","StatusComposition","createGroupChannelModule","useLocalization","usePlatformService","useSendbirdChat","pubsub","createGroupChannelFragment","initModule","GroupChannelModule","searchItem","renderNewMessagesButton","props","createElement","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","loading","messages","newMessages","resetNewMessages","loadNext","loadPrevious","hasNext","sendFileMessage","sendUserMessage","updateFileMessage","updateUserMessage","resendMessage","deleteMessage","resetWithStartingPoint","shouldCountNewMessages","current","onMessagesReceived","publish","type","data","onMessagesUpdated","onCurrentUserBanned","getCollectionCreator","markAsRead","startingPoint","onBlurFragment","reset","catch","_onPressHeaderLeft","_onPressHeaderRight","_onPressMediaMessage","message","uri","_onPressReplyMessageInThread","clear","renderItem","content","isFirstItem","memoizedFlatListProps","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","onResetMessageList","Number","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","userId","onTopReached","onBottomReached","onResendFailedMessage","onDeleteMessage","Input","SuggestedMentionList","shouldRenderInput","isBroadcast","myRole","deprecatedCreatorProp","defaultParams","createMessageCollection","filter"],"sources":["createGroupChannelFragment.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { MessageCollection, MessageFilter } 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 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 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 {\n loading,\n messages,\n newMessages,\n resetNewMessages,\n loadNext,\n loadPrevious,\n hasNext,\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 onChannelDeleted,\n onCurrentUserBanned: onChannelDeleted,\n collectionCreator: getCollectionCreator(channel, messageListQueryParams, collectionCreator),\n sortComparator,\n markAsRead: confirmAndMarkAsRead,\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) resetNewMessages();\n setScrolledAwayFromBottom(value);\n });\n\n return (\n <GroupChannelModule.Provider\n channel={channel}\n groupChannelPubSub={groupChannelPubSub}\n enableTypingIndicator={enableTypingIndicator ?? sbOptions.uikit.groupChannel.channel.enableTypingIndicator}\n keyboardAvoidOffset={keyboardAvoidOffset}\n 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 scrolledAwayFromBottom={scrolledAwayFromBottom}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n renderNewMessagesButton={renderNewMessagesButton}\n renderScrollToBottomButton={renderScrollToBottomButton}\n onResendFailedMessage={resendMessage}\n onDeleteMessage={deleteMessage}\n onPressMediaMessage={_onPressMediaMessage}\n flatListComponent={flatListComponent}\n flatListProps={memoizedFlatListProps}\n />\n <GroupChannelModule.Input\n SuggestedMentionList={GroupChannelModule.SuggestedMentionList}\n shouldRenderInput={shouldRenderInput(channel)}\n onPressSendUserMessage={onPressSendUserMessage}\n onPressSendFileMessage={onPressSendFileMessage}\n onPressUpdateUserMessage={onPressUpdateUserMessage}\n onPressUpdateFileMessage={onPressUpdateFileMessage}\n />\n </StatusComposition>\n </GroupChannelModule.Provider>\n );\n };\n};\n\nfunction shouldRenderInput(channel: SendbirdGroupChannel) {\n if (channel.isBroadcast) {\n return channel.myRole === 'operator';\n }\n\n return true;\n}\n\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.9.4';
1
+ const VERSION = '3.9.5';
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.9.4';\nexport default VERSION;\n"],"mappings":"AAAA,MAAMA,OAAO,GAAG,OAAO;AACvB,eAAeA,OAAO","ignoreList":[]}
1
+ {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.9.5';\nexport default VERSION;\n"],"mappings":"AAAA,MAAMA,OAAO,GAAG,OAAO;AACvB,eAAeA,OAAO","ignoreList":[]}
@@ -53,9 +53,10 @@ export type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpe
53
53
  visible: boolean;
54
54
  onPress: () => void;
55
55
  }) => React.ReactElement | null);
56
+ flatListComponent?: React.ComponentType<FlatListProps<SendbirdMessage>>;
56
57
  flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;
57
58
  } & {
58
59
  ref?: Ref<FlatList<SendbirdMessage>> | undefined;
59
60
  };
60
- declare const _default: <T extends import("@sendbird/chat/openChannel").OpenChannel | import("@sendbird/chat/groupChannel").GroupChannel>({ searchItem, hasNext, channel, onEditMessage, onReplyMessage, onReplyInThreadMessage, onDeleteMessage, onResendFailedMessage, onPressMediaMessage, onPressParentMessage, currentUserId, renderNewMessagesButton, renderScrollToBottomButton, renderMessage, messages, newMessages, enableMessageGrouping, onScrolledAwayFromBottom, scrolledAwayFromBottom, onBottomReached, onTopReached, flatListProps, onPressNewMessagesButton, onPressScrollToBottomButton, }: ChannelMessageListProps<T>, ref: React.ForwardedRef<FlatList<SendbirdMessage>>) => React.JSX.Element;
61
+ declare const _default: <T extends import("@sendbird/chat/openChannel").OpenChannel | import("@sendbird/chat/groupChannel").GroupChannel>({ searchItem, hasNext, channel, onEditMessage, onReplyMessage, onReplyInThreadMessage, onDeleteMessage, onResendFailedMessage, onPressMediaMessage, onPressParentMessage, currentUserId, renderNewMessagesButton, renderScrollToBottomButton, renderMessage, messages, newMessages, enableMessageGrouping, onScrolledAwayFromBottom, scrolledAwayFromBottom, onBottomReached, onTopReached, flatListComponent, flatListProps, onPressNewMessagesButton, onPressScrollToBottomButton, }: ChannelMessageListProps<T>, ref: React.ForwardedRef<FlatList<SendbirdMessage>>) => React.JSX.Element;
61
62
  export default _default;
@@ -5,5 +5,6 @@ declare const ChatFlatList: React.ForwardRefExoticComponent<Omit<FlatListProps<S
5
5
  onBottomReached: () => void;
6
6
  onTopReached: () => void;
7
7
  onScrolledAwayFromBottom: (value: boolean) => void;
8
+ flatListComponent?: React.ComponentType<FlatListProps<SendbirdMessage>> | undefined;
8
9
  } & React.RefAttributes<RNFlatList<any>>>;
9
10
  export default ChatFlatList;
@@ -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.9.4";
17
+ VERSION: "3.9.5";
18
18
  PLATFORM: string;
19
19
  DEFAULT: {
20
20
  AUTO_PUSH_TOKEN_REGISTRATION: boolean;
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- declare const _default: React.MemoExoticComponent<(props: Pick<import("../../../components/ChannelMessageList").ChannelMessageListProps<import("@sendbird/chat/groupChannel").GroupChannel>, "channel" | "onBottomReached" | "onTopReached" | "onScrolledAwayFromBottom" | "currentUserId" | "enableMessageGrouping" | "searchItem" | "hasNext" | "onDeleteMessage" | "onResendFailedMessage" | "onPressMediaMessage" | "renderNewMessagesButton" | "renderScrollToBottomButton" | "renderMessage" | "messages" | "newMessages" | "scrolledAwayFromBottom" | "flatListProps"> & {
2
+ declare const _default: React.MemoExoticComponent<(props: Pick<import("../../../components/ChannelMessageList").ChannelMessageListProps<import("@sendbird/chat/groupChannel").GroupChannel>, "channel" | "onBottomReached" | "onTopReached" | "onScrolledAwayFromBottom" | "flatListComponent" | "currentUserId" | "enableMessageGrouping" | "searchItem" | "hasNext" | "onDeleteMessage" | "onResendFailedMessage" | "onPressMediaMessage" | "renderNewMessagesButton" | "renderScrollToBottomButton" | "renderMessage" | "messages" | "newMessages" | "scrolledAwayFromBottom" | "flatListProps"> & {
3
3
  onResetMessageList: () => Promise<void>;
4
4
  onResetMessageListWithStartingPoint: (startingPoint: number) => Promise<void>;
5
5
  onUpdateSearchItem: (searchItem?: {
@@ -26,6 +26,7 @@ export interface GroupChannelProps {
26
26
  enableTypingIndicator?: GroupChannelProps['Provider']['enableTypingIndicator'];
27
27
  enableMessageGrouping?: GroupChannelProps['MessageList']['enableMessageGrouping'];
28
28
  keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];
29
+ flatListComponent?: GroupChannelProps['MessageList']['flatListComponent'];
29
30
  flatListProps?: GroupChannelProps['MessageList']['flatListProps'];
30
31
  sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];
31
32
  searchItem?: GroupChannelProps['MessageList']['searchItem'];
@@ -45,7 +46,7 @@ export interface GroupChannelProps {
45
46
  onPressHeaderLeft: () => void;
46
47
  onPressHeaderRight: () => void;
47
48
  };
48
- MessageList: Pick<ChannelMessageListProps<SendbirdGroupChannel>, 'enableMessageGrouping' | 'currentUserId' | 'channel' | 'messages' | 'newMessages' | 'scrolledAwayFromBottom' | 'onScrolledAwayFromBottom' | 'onTopReached' | 'onBottomReached' | 'onResendFailedMessage' | 'onDeleteMessage' | 'onPressMediaMessage' | 'renderMessage' | 'renderNewMessagesButton' | 'renderScrollToBottomButton' | 'flatListProps' | 'hasNext' | 'searchItem'> & {
49
+ MessageList: Pick<ChannelMessageListProps<SendbirdGroupChannel>, 'enableMessageGrouping' | 'currentUserId' | 'channel' | 'messages' | 'newMessages' | 'scrolledAwayFromBottom' | 'onScrolledAwayFromBottom' | 'onTopReached' | 'onBottomReached' | 'onResendFailedMessage' | 'onDeleteMessage' | 'onPressMediaMessage' | 'renderMessage' | 'renderNewMessagesButton' | 'renderScrollToBottomButton' | 'flatListComponent' | 'flatListProps' | 'hasNext' | 'searchItem'> & {
49
50
  onResetMessageList: () => Promise<void>;
50
51
  onResetMessageListWithStartingPoint: (startingPoint: number) => Promise<void>;
51
52
  onUpdateSearchItem: (searchItem?: GroupChannelProps['MessageList']['searchItem']) => void;
@@ -1,2 +1,2 @@
1
- declare const VERSION = "3.9.4";
1
+ declare const VERSION = "3.9.5";
2
2
  export default VERSION;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sendbird/uikit-react-native",
3
- "version": "3.9.4",
3
+ "version": "3.9.5",
4
4
  "description": "Sendbird UIKit for React Native: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.",
5
5
  "keywords": [
6
6
  "sendbird",
@@ -60,10 +60,10 @@
60
60
  },
61
61
  "dependencies": {
62
62
  "@openspacelabs/react-native-zoomable-view": "^2.1.5",
63
- "@sendbird/uikit-chat-hooks": "3.9.4",
64
- "@sendbird/uikit-react-native-foundation": "3.9.4",
63
+ "@sendbird/uikit-chat-hooks": "3.9.5",
64
+ "@sendbird/uikit-react-native-foundation": "3.9.5",
65
65
  "@sendbird/uikit-tools": "0.0.7",
66
- "@sendbird/uikit-utils": "3.9.4"
66
+ "@sendbird/uikit-utils": "3.9.5"
67
67
  },
68
68
  "devDependencies": {
69
69
  "@bam.tech/react-native-image-resizer": "^3.0.4",
@@ -217,5 +217,5 @@
217
217
  ]
218
218
  ]
219
219
  },
220
- "gitHead": "4b04d425b396f8b0a58a9af4a3a46c7127a060b5"
220
+ "gitHead": "e95a7bd801ed20a0720c5cfd35a9ca8c6c88893f"
221
221
  }
@@ -90,6 +90,7 @@ export type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpe
90
90
  | null
91
91
  | ((props: { visible: boolean; onPress: () => void; newMessages: SendbirdMessage[] }) => React.ReactElement | null);
92
92
  renderScrollToBottomButton: null | ((props: { visible: boolean; onPress: () => void }) => React.ReactElement | null);
93
+ flatListComponent?: React.ComponentType<FlatListProps<SendbirdMessage>>;
93
94
  flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;
94
95
  } & {
95
96
  ref?: Ref<FlatList<SendbirdMessage>> | undefined;
@@ -118,6 +119,7 @@ const ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel
118
119
  scrolledAwayFromBottom,
119
120
  onBottomReached,
120
121
  onTopReached,
122
+ flatListComponent,
121
123
  flatListProps,
122
124
  onPressNewMessagesButton,
123
125
  onPressScrollToBottomButton,
@@ -165,6 +167,7 @@ const ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel
165
167
  <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />
166
168
  )}
167
169
  <ChatFlatList
170
+ flatListComponent={flatListComponent}
168
171
  {...flatListProps}
169
172
  onTopReached={onTopReached}
170
173
  onBottomReached={onBottomReached}
@@ -25,9 +25,10 @@ type Props = Omit<FlatListProps<SendbirdMessage>, 'onEndReached'> & {
25
25
  onBottomReached: () => void;
26
26
  onTopReached: () => void;
27
27
  onScrolledAwayFromBottom: (value: boolean) => void;
28
+ flatListComponent?: React.ComponentType<FlatListProps<SendbirdMessage>>;
28
29
  };
29
30
  const ChatFlatList = forwardRef<RNFlatList, Props>(function ChatFlatList(
30
- { onTopReached, onBottomReached, onScrolledAwayFromBottom, onScroll, ...props },
31
+ { onTopReached, onBottomReached, onScrolledAwayFromBottom, onScroll, flatListComponent, ...props },
31
32
  ref,
32
33
  ) {
33
34
  const { select } = useUIKitTheme();
@@ -60,8 +61,10 @@ const ChatFlatList = forwardRef<RNFlatList, Props>(function ChatFlatList(
60
61
  );
61
62
  }
62
63
 
64
+ const FlatList = flatListComponent ?? FlatListInternal;
65
+
63
66
  return (
64
- <FlatListInternal
67
+ <FlatList
65
68
  bounces={false}
66
69
  removeClippedSubviews
67
70
  keyboardDismissMode={'on-drag'}
@@ -46,6 +46,7 @@ export interface GroupChannelProps {
46
46
  enableMessageGrouping?: GroupChannelProps['MessageList']['enableMessageGrouping'];
47
47
 
48
48
  keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];
49
+ flatListComponent?: GroupChannelProps['MessageList']['flatListComponent'];
49
50
  flatListProps?: GroupChannelProps['MessageList']['flatListProps'];
50
51
  sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];
51
52
 
@@ -84,6 +85,7 @@ export interface GroupChannelProps {
84
85
  | 'renderMessage'
85
86
  | 'renderNewMessagesButton'
86
87
  | 'renderScrollToBottomButton'
88
+ | 'flatListComponent'
87
89
  | 'flatListProps'
88
90
  | 'hasNext'
89
91
  | 'searchItem'
@@ -60,6 +60,7 @@ const createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): G
60
60
  channel,
61
61
  keyboardAvoidOffset,
62
62
  sortComparator = messageComparator,
63
+ flatListComponent,
63
64
  flatListProps,
64
65
  messageListQueryParams,
65
66
  collectionCreator,
@@ -267,6 +268,7 @@ const createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): G
267
268
  onResendFailedMessage={resendMessage}
268
269
  onDeleteMessage={deleteMessage}
269
270
  onPressMediaMessage={_onPressMediaMessage}
271
+ flatListComponent={flatListComponent}
270
272
  flatListProps={memoizedFlatListProps}
271
273
  />
272
274
  <GroupChannelModule.Input
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
- const VERSION = '3.9.4';
1
+ const VERSION = '3.9.5';
2
2
  export default VERSION;