UNPKG

@iterable/react-native-sdk

Version:
81 lines (79 loc) 2.58 kB
"use strict"; import { useCallback, useRef, useState } from 'react'; import { FlatList } from 'react-native'; import { IterableInAppMessage } from "../../inApp/index.js"; import { IterableInboxMessageCell } from "./IterableInboxMessageCell.js"; /** * Props for the IterableInboxMessageList component. */ import { jsx as _jsx } from "react/jsx-runtime"; /** * A component that renders a list of inbox messages. */ export const IterableInboxMessageList = ({ dataModel, rowViewModels, customizations, messageListItemLayout, deleteRow, handleMessageSelect, updateVisibleMessageImpressions, contentWidth, isPortrait }) => { const [swiping, setSwiping] = useState(false); const flatListRef = useRef(null); function renderRowViewModel(rowViewModel, index, last) { return /*#__PURE__*/_jsx(IterableInboxMessageCell, { index: index, last: last, dataModel: dataModel, rowViewModel: rowViewModel, customizations: customizations, swipingCheck: setSwiping, messageListItemLayout: messageListItemLayout, deleteRow: deleteRow, handleMessageSelect: handleMessageSelect, contentWidth: contentWidth, isPortrait: isPortrait }, rowViewModel.inAppMessage.messageId); } function getRowInfosFromViewTokens(viewTokens) { return viewTokens.map(function (viewToken) { const inAppMessage = IterableInAppMessage.fromViewToken(viewToken); const impression = { messageId: inAppMessage.messageId, silentInbox: inAppMessage.isSilentInbox() }; return impression; }); } const inboxSessionViewabilityConfig = { minimumViewTime: 500, itemVisiblePercentThreshold: 100, waitForInteraction: false }; const inboxSessionItemsChanged = useCallback(info => { const rowInfos = getRowInfosFromViewTokens(info.viewableItems); updateVisibleMessageImpressions(rowInfos); }, // MOB-10427: Figure out if we need the missing dependencies // eslint-disable-next-line react-hooks/exhaustive-deps []); return /*#__PURE__*/_jsx(FlatList, { ref: flatListRef, scrollEnabled: !swiping, data: rowViewModels, renderItem: ({ item, index }) => renderRowViewModel(item, index, index === rowViewModels.length - 1), keyExtractor: item => item.inAppMessage.messageId, viewabilityConfig: inboxSessionViewabilityConfig, onViewableItemsChanged: inboxSessionItemsChanged, onLayout: () => { flatListRef.current?.recordInteraction(); } }); }; //# sourceMappingURL=IterableInboxMessageList.js.map