@planningcenter/chat-react-native 4.2.1-qa-staging.4 → 4.2.1-qa-staging.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.
- package/build/contexts/api_provider.d.ts.map +1 -1
- package/build/contexts/api_provider.js +2 -1
- package/build/contexts/api_provider.js.map +1 -1
- package/build/hooks/use_fetch_newer_messages.d.ts +2 -1
- package/build/hooks/use_fetch_newer_messages.d.ts.map +1 -1
- package/build/hooks/use_fetch_newer_messages.js +16 -9
- package/build/hooks/use_fetch_newer_messages.js.map +1 -1
- package/build/screens/conversation_screen.d.ts.map +1 -1
- package/build/screens/conversation_screen.js +259 -256
- package/build/screens/conversation_screen.js.map +1 -1
- package/build/utils/cache/invalidate_refetchable_queries.d.ts +3 -0
- package/build/utils/cache/invalidate_refetchable_queries.d.ts.map +1 -0
- package/build/utils/cache/invalidate_refetchable_queries.js +8 -0
- package/build/utils/cache/invalidate_refetchable_queries.js.map +1 -0
- package/package.json +3 -3
- package/src/contexts/api_provider.tsx +2 -1
- package/src/hooks/__tests__/use_fetch_newer_messages.test.tsx +27 -0
- package/src/hooks/use_fetch_newer_messages.ts +11 -3
- package/src/screens/conversation_screen.tsx +6 -1
- package/src/utils/cache/__tests__/invalidate_refetchable_queries.test.ts +23 -0
- package/src/utils/cache/invalidate_refetchable_queries.ts +9 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation_screen.js","names":["HeaderTitle","PlatformPressable","CommonActions","useNavigation","useTheme","useNavigationTheme","useRoute","React","startTransition","useCallback","useEffect","useRef","useState","Platform","StyleSheet","useWindowDimensions","View","useSafeAreaInsets","Badge","Icon","AnchorNotFoundBoundary","ConversationStartBanner","JumpToBottomButton","MessageForm","MessageList","ConversationDisabledBanner","LeaderMessagesDisabledBanner","MemberMessagesDisabledBanner","TypingIndicator","KeyboardView","useHeaderSlotReserve","BlankState","ConversationContextProvider","useMessageAvailableMembersAction","useConversation","useConversationJoltEvents","useConversationMessages","useConversationMessagesJoltEvents","useFetchNewerMessages","useFetchNewerOnForeground","useHeldBackMessages","useMarkLatestMessageRead","analyticsEvents","normalizeAnalyticsMetadata","usePublishProductAnalyticsEvent","useRestAwayFromDismissEdge","useVideoModerationJoltEvents","newestPersistedMessageId","gatedMessageCache","getMessagesQueryKey","decodeUlidTime","jsx","_jsx","jsxs","_jsxs","ConversationScreen","t0","$","_c","route","conversation_id","reply_root_id","initial_message_id","params","t1","data","conversation","t2","lastMessageCreatedAt","isBeforeLatestMessage","anchor","setAnchor","t3","Symbol","for","exitAnchoredMode","t4","dropAnchor","t5","t6","conversation_show_opened","t7","t8","t9","children","ConversationScreenContent","t10","currentPageReplyRootId","messagesQueryKey","onExitAnchoredMode","styles","useStyles","navigation","editing_message_id","reply_root_author_name","anchored","messages","fetchNextPage","hasNextPage","fetchPreviousPage","hasPreviousPage","isFetchingPreviousPage","queryKey","behindLatest","caughtUp","showJumpToBottomButton","setShowJumpToBottomButton","readingHistory","newestMessageId","fetchNewer","onSkippedNewMessage","conversationId","acceptNewMessages","replyRootId","messageCache","markHandledByMessageForm","useEnsureConversationsRouteExists","t11","enabled","t12","t13","noMessages","length","repliesDisabled","memberAbility","badges","title","canReply","showLeaderDisabledReplyBanner","t14","t15","m","String","id","find","currentlyEditingMessage","split","replyRootAuthorFirstName","replyHeaderTitle","muted","conversationMembership","listRef","hasDragged","setHasDragged","holdListPosition","t16","OS","restOffset","onLayout","onContentSizeChange","onMomentumScrollEnd","onScrollEndDrag","t17","current","scrollToOffset","offset","handleReturnToBottom","t18","t19","jumpToLatest","t20","event","offsetY","nativeEvent","contentOffset","y","trackScroll","t21","loadNewerMessages","t22","deleted","setParams","badge","t23","t24","t25","Imagery","name","t26","Content","Heading","t27","goBack","Root","Button","onPress","accessibilityHint","accessibilityRole","t28","container","style","emptyState","hasMessages","onEndReached","onScrollBeginDrag","undefined","onStartReached","onStartReachedThreshold","maintainVisibleContentPosition","minIndexForVisible","visible","t29","t30","ConversationBottomBar","t31","t32","onFlaggedInMessageForm","onBeforeSubmit","messageLink","disabled","disabledMessage","message","AttachmentPicker","Commands","TextInput","SubmitButton","latestMessageCreatedAt","Date","parse","ConversationScreenTitle","usePressableHeaderStyle","resourceType","pcoResourceType","productName","appName","text","navigate","maxFontSizeMultiplier","titleTextContainer","size","titleWrapper","variant","testID","width","slotReserve","headerContainerStyle","maxWidth","create","alignItems","select","android","default","flex","columnGap","flexDirection","flexShrink","minWidth","alignSelf","marginTop","navigationTheme","bottom","colors","card","justifyContent","backgroundColor","paddingBottom","chat_group_graph_id","navigationState","getState","routes","conversationsRoute","_temp","dispatch","state","reset","index","r"],"sources":["../../src/screens/conversation_screen.tsx"],"sourcesContent":["import { HeaderTitle, HeaderTitleProps, PlatformPressable } from '@react-navigation/elements'\nimport {\n CommonActions,\n RouteProp,\n StaticScreenProps,\n useNavigation,\n useTheme as useNavigationTheme,\n useRoute,\n} from '@react-navigation/native'\nimport React, { startTransition, useCallback, useEffect, useRef, useState } from 'react'\nimport { FlatList, Platform, StyleSheet, useWindowDimensions, View } from 'react-native'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\nimport { Badge, Icon } from '../components'\nimport { AnchorNotFoundBoundary } from '../components/conversation/anchor_not_found_boundary'\nimport { ConversationStartBanner } from '../components/conversation/conversation_start_banner'\nimport { JumpToBottomButton } from '../components/conversation/jump_to_bottom_button'\nimport { MessageForm } from '../components/conversation/message_form'\nimport { MessageList } from '../components/conversation/message_list'\nimport {\n ConversationDisabledBanner,\n LeaderMessagesDisabledBanner,\n MemberMessagesDisabledBanner,\n} from '../components/conversation/messages_disabled_banners'\nimport { TypingIndicator } from '../components/conversation/typing_indicator'\nimport { KeyboardView } from '../components/display/keyboard_view'\nimport { useHeaderSlotReserve } from '../components/display/platform_modal_header_buttons'\nimport BlankState from '../components/primitive/blank_state_primitive'\nimport { ConversationContextProvider } from '../contexts/conversation_context'\nimport { useMessageAvailableMembersAction } from '../hooks/direct_messages/use_message_available_members_action'\nimport { useConversation } from '../hooks/use_conversation'\nimport { useConversationJoltEvents } from '../hooks/use_conversation_jolt_events'\nimport { useConversationMessages } from '../hooks/use_conversation_messages'\nimport { useConversationMessagesJoltEvents } from '../hooks/use_conversation_messages_jolt_events'\nimport { useFetchNewerMessages } from '../hooks/use_fetch_newer_messages'\nimport { useFetchNewerOnForeground } from '../hooks/use_fetch_newer_on_foreground'\nimport { useHeldBackMessages } from '../hooks/use_held_back_messages'\nimport { useMarkLatestMessageRead } from '../hooks/use_mark_latest_message_read'\nimport {\n analyticsEvents,\n normalizeAnalyticsMetadata,\n usePublishProductAnalyticsEvent,\n} from '../hooks/use_product_analytics'\nimport { useRestAwayFromDismissEdge } from '../hooks/use_rest_away_from_dismiss_edge'\nimport { useVideoModerationJoltEvents } from '../hooks/use_video_moderation_jolt_events'\nimport { ConversationResource } from '../types/resources/conversation'\nimport { ConversationBadgeResource } from '../types/resources/conversation_badge'\nimport { MessageResource } from '../types/resources/message'\nimport { newestPersistedMessageId } from '../utils/cache/messages_cache'\nimport { gatedMessageCache } from '../utils/gated_message_cache'\nimport { getMessagesQueryKey } from '../utils/request/get_messages'\nimport { decodeUlidTime } from '../utils/ulid'\n\nexport type ConversationRouteProps = {\n conversation_id: number\n reply_root_id?: string | null\n reply_root_author_name?: string\n chat_group_graph_id?: string\n clear_input?: boolean\n editing_message_id?: number | null\n initial_message_id?: string | null\n title?: string\n subtitle?: string\n badge?: ConversationBadgeResource\n deleted?: boolean\n muted?: boolean\n}\n\nexport type ConversationScreenProps = StaticScreenProps<ConversationRouteProps>\n\nexport function ConversationScreen({ route }: ConversationScreenProps) {\n const { conversation_id, reply_root_id, initial_message_id } = route.params\n\n const { data: conversation } = useConversation({ conversation_id })\n const [anchor, setAnchor] = useState(() =>\n isBeforeLatestMessage(initial_message_id, conversation?.lastMessageCreatedAt)\n ? initial_message_id\n : null\n )\n const exitAnchoredMode = useCallback(() => startTransition(() => setAnchor(null)), [])\n const dropAnchor = useCallback(() => setAnchor(null), [])\n\n usePublishProductAnalyticsEvent(analyticsEvents.conversation_show_opened, {\n reply_root_id,\n ...normalizeAnalyticsMetadata(conversation),\n })\n\n return (\n <ConversationContextProvider\n conversationId={conversation_id}\n currentPageReplyRootId={reply_root_id ?? null}\n messagesQueryKey={getMessagesQueryKey({ conversation_id, reply_root_id, anchor })}\n >\n {anchor ? (\n <AnchorNotFoundBoundary onAnchorNotFound={dropAnchor}>\n <ConversationScreenContent\n route={route}\n anchor={anchor}\n onExitAnchoredMode={exitAnchoredMode}\n />\n </AnchorNotFoundBoundary>\n ) : (\n <ConversationScreenContent\n route={route}\n anchor={null}\n onExitAnchoredMode={exitAnchoredMode}\n />\n )}\n </ConversationContextProvider>\n )\n}\n\ninterface ConversationScreenContentProps extends ConversationScreenProps {\n anchor: string | null | undefined\n onExitAnchoredMode: () => void\n}\n\nfunction ConversationScreenContent({\n route,\n anchor,\n onExitAnchoredMode,\n}: ConversationScreenContentProps) {\n const styles = useStyles()\n const navigation = useNavigation()\n const { conversation_id, editing_message_id, reply_root_id, reply_root_author_name } =\n route.params\n const { data: conversation } = useConversation(route.params)\n const anchored = !!anchor\n const {\n messages,\n fetchNextPage,\n hasNextPage,\n fetchPreviousPage,\n hasPreviousPage,\n isFetchingPreviousPage,\n queryKey,\n } = useConversationMessages({ conversation_id, reply_root_id, anchor })\n const behindLatest = anchored && hasPreviousPage\n const caughtUp = !hasPreviousPage\n const [showJumpToBottomButton, setShowJumpToBottomButton] = useState(false)\n const readingHistory = showJumpToBottomButton\n const newestMessageId = newestPersistedMessageId(messages)\n const fetchNewer = useFetchNewerMessages({ conversation_id, reply_root_id, queryKey })\n const { onSkippedNewMessage } = useHeldBackMessages({\n fetchNewer,\n newestMessageId,\n readingHistory,\n caughtUp,\n })\n useConversationJoltEvents({ conversationId: conversation_id })\n useConversationMessagesJoltEvents({\n conversationId: conversation_id,\n replyRootId: reply_root_id ?? null,\n messageCache: gatedMessageCache({\n queryKey,\n acceptNewMessages: caughtUp && !readingHistory,\n onSkippedNewMessage,\n }),\n })\n const { markHandledByMessageForm } = useVideoModerationJoltEvents()\n useEnsureConversationsRouteExists()\n useMarkLatestMessageRead({ conversation, messages, enabled: !behindLatest })\n useFetchNewerOnForeground({ fetchNewer, newestMessageId, enabled: anchored && caughtUp })\n const noMessages = messages.length === 0\n\n const { repliesDisabled, memberAbility, badges, title } = conversation\n const canReply = memberAbility?.canReply\n const showLeaderDisabledReplyBanner = canReply && repliesDisabled\n const currentlyEditingMessage = messages.find(m => String(m.id) === String(editing_message_id))\n const replyRootAuthorFirstName = reply_root_author_name?.split(' ')[0]\n const replyHeaderTitle = replyRootAuthorFirstName\n ? `Reply to ${replyRootAuthorFirstName}`\n : 'Reply'\n // Prefer the membership for optimistic updates.\n const muted = conversation.conversationMembership?.muted ?? conversation.muted\n\n const listRef = useRef<FlatList>(null)\n const [hasDragged, setHasDragged] = useState(false)\n const holdListPosition = behindLatest || readingHistory\n\n const { restOffset, onLayout, onContentSizeChange, onMomentumScrollEnd, onScrollEndDrag } =\n useRestAwayFromDismissEdge({\n listRef,\n enabled: Platform.OS === 'ios',\n })\n\n const handleReturnToBottom = useCallback(() => {\n listRef.current?.scrollToOffset({\n offset: restOffset,\n })\n }, [restOffset])\n\n const exitAnchoredMode = useCallback(() => {\n onExitAnchoredMode()\n handleReturnToBottom()\n }, [handleReturnToBottom, onExitAnchoredMode])\n const jumpToLatest = useCallback(() => {\n setShowJumpToBottomButton(false)\n if (anchored) exitAnchoredMode()\n else handleReturnToBottom()\n }, [anchored, exitAnchoredMode, handleReturnToBottom])\n\n const trackScroll = (event: any) => {\n const offsetY = event.nativeEvent.contentOffset.y\n setShowJumpToBottomButton(offsetY > 200)\n }\n\n const loadNewerMessages = () => {\n if (!hasPreviousPage || isFetchingPreviousPage) return\n\n setHasDragged(false)\n fetchPreviousPage()\n }\n\n useEffect(() => {\n if (reply_root_id) {\n navigation.setParams({\n title: replyHeaderTitle,\n })\n } else {\n navigation.setParams({\n title: title,\n badge: badges?.[0],\n deleted: conversation?.deleted,\n muted,\n })\n }\n }, [navigation, title, badges, conversation?.deleted, reply_root_id, replyHeaderTitle, muted])\n\n if (!conversation || conversation.deleted) {\n return (\n <View style={styles.container}>\n <BlankState.Root>\n <BlankState.Imagery name=\"general.outlinedTextMessage\" />\n <BlankState.Content>\n <BlankState.Heading>This conversation has been deleted</BlankState.Heading>\n </BlankState.Content>\n <BlankState.Button\n onPress={navigation.goBack}\n title=\"Back to conversations\"\n accessibilityHint=\"Navigates back to the conversations list\"\n accessibilityRole=\"link\"\n />\n </BlankState.Root>\n </View>\n )\n }\n\n return (\n <View style={styles.container}>\n <KeyboardView>\n {noMessages ? (\n <View style={styles.emptyState}>\n <ConversationStartBanner conversation={conversation} hasMessages={false} />\n </View>\n ) : (\n <MessageList\n listRef={listRef}\n conversation={conversation}\n conversationId={conversation_id}\n messages={messages}\n replyRootId={reply_root_id}\n anchorMessageId={anchor}\n hasNextPage={hasNextPage}\n onEndReached={() => fetchNextPage()}\n onScroll={trackScroll}\n onLayout={onLayout}\n onContentSizeChange={onContentSizeChange}\n onScrollEndDrag={onScrollEndDrag}\n onMomentumScrollEnd={onMomentumScrollEnd}\n onScrollBeginDrag={anchored ? () => setHasDragged(true) : undefined}\n onStartReached={anchored && hasDragged ? loadNewerMessages : undefined}\n onStartReachedThreshold={anchored ? 0.5 : undefined}\n maintainVisibleContentPosition={\n holdListPosition ? { minIndexForVisible: 0 } : undefined\n }\n />\n )}\n <JumpToBottomButton\n onPress={jumpToLatest}\n visible={behindLatest || showJumpToBottomButton}\n />\n {!noMessages && <TypingIndicator />}\n {showLeaderDisabledReplyBanner && <LeaderMessagesDisabledBanner />}\n <ConversationBottomBar\n conversation={conversation}\n canReply={canReply}\n replyRootAuthorFirstName={replyRootAuthorFirstName}\n replyRootId={reply_root_id}\n currentlyEditingMessage={currentlyEditingMessage}\n onFlaggedInMessageForm={markHandledByMessageForm}\n onBeforeSubmit={jumpToLatest}\n />\n </KeyboardView>\n </View>\n )\n}\n\ninterface ConversationBottomBarProps {\n conversation: ConversationResource\n canReply: boolean | undefined\n replyRootAuthorFirstName: string | undefined\n replyRootId: string | null | undefined\n currentlyEditingMessage: MessageResource | undefined\n onFlaggedInMessageForm?: (id: string) => void\n onBeforeSubmit?: () => void\n}\n\nfunction ConversationBottomBar({\n conversation,\n canReply,\n replyRootAuthorFirstName,\n replyRootId,\n currentlyEditingMessage,\n onFlaggedInMessageForm,\n onBeforeSubmit,\n}: ConversationBottomBarProps) {\n const messageLink = useMessageAvailableMembersAction(conversation)\n\n if (conversation.disabled)\n return (\n <ConversationDisabledBanner\n message={conversation.disabledMessage ?? null}\n messageLink={messageLink}\n />\n )\n if (!canReply) return <MemberMessagesDisabledBanner />\n return (\n <MessageForm.Root\n replyRootAuthorFirstName={replyRootAuthorFirstName}\n conversation={conversation}\n replyRootId={replyRootId}\n currentlyEditingMessage={currentlyEditingMessage}\n onFlaggedInMessageForm={onFlaggedInMessageForm}\n onBeforeSubmit={onBeforeSubmit}\n key={\n currentlyEditingMessage\n ? `edit-message-form-${currentlyEditingMessage.id}`\n : 'new-message-form'\n }\n >\n <MessageForm.AttachmentPicker />\n <MessageForm.Commands />\n <MessageForm.TextInput />\n <MessageForm.SubmitButton />\n </MessageForm.Root>\n )\n}\n\nconst isBeforeLatestMessage = (anchor?: string | null, latestMessageCreatedAt?: string) =>\n !!anchor &&\n !!latestMessageCreatedAt &&\n decodeUlidTime(anchor) < Date.parse(latestMessageCreatedAt)\n\ninterface ConversationScreenTitleProps extends HeaderTitleProps {\n conversation_id: number\n badge?: ConversationBadgeResource\n deleted?: boolean\n muted?: boolean\n}\n\nexport const ConversationScreenTitle = ({\n conversation_id,\n badge,\n children,\n style,\n deleted,\n muted,\n}: ConversationScreenTitleProps) => {\n const styles = usePressableHeaderStyle()\n const navigation = useNavigation()\n const resourceType = badge?.pcoResourceType || ''\n const productName = badge?.appName\n const name = badge?.text || undefined\n\n return (\n <PlatformPressable\n testID=\"conversation-details-button\"\n accessibilityHint=\"Opens details about members and settings\"\n style={styles.container}\n onPress={() => {\n if (deleted) return\n\n navigation.navigate('ConversationDetails', { conversation_id })\n }}\n >\n <View style={styles.titleWrapper}>\n <View style={styles.titleTextContainer}>\n <HeaderTitle maxFontSizeMultiplier={1} style={style}>\n {children}\n </HeaderTitle>\n </View>\n {muted && <Icon name=\"general.bellMuted\" size={12} />}\n {!deleted && <Icon name=\"general.downChevron\" size={12} />}\n </View>\n <Badge\n variant=\"metaSubtle\"\n productLogoName={productName}\n label={resourceType}\n metaLabel={name}\n style={styles.badge}\n maxFontSizeMultiplier={1}\n />\n </PlatformPressable>\n )\n}\n\nconst usePressableHeaderStyle = () => {\n const { width } = useWindowDimensions()\n const slotReserve = useHeaderSlotReserve()\n const headerContainerStyle = { maxWidth: width - slotReserve * 2 }\n\n return StyleSheet.create({\n container: {\n alignItems: Platform.select({ android: 'flex-start', default: 'center' }),\n flex: 1,\n ...headerContainerStyle,\n },\n titleWrapper: {\n alignItems: 'center',\n columnGap: 4,\n flexDirection: 'row',\n flexShrink: 1,\n },\n titleTextContainer: {\n flexShrink: 1,\n minWidth: 0,\n },\n badge: {\n alignSelf: Platform.select({ android: 'flex-start', default: 'center' }),\n marginTop: 2,\n },\n })\n}\n\nconst useStyles = () => {\n const navigationTheme = useNavigationTheme()\n const { bottom } = useSafeAreaInsets()\n\n return StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n backgroundColor: navigationTheme.colors.card,\n paddingBottom: bottom,\n },\n emptyState: {\n flex: 1,\n justifyContent: 'center',\n },\n })\n}\n\n/**\n * useEnsureConversationsRouteExists\n */\nconst useEnsureConversationsRouteExists = () => {\n const navigation = useNavigation()\n const { params } = useRoute<RouteProp<ConversationScreenProps['route']>>()\n\n useEffect(() => {\n const navigationState = navigation.getState()\n const routes = navigationState?.routes || []\n const conversationsRoute = routes.find(r => r.name === 'Conversations')\n\n if (conversationsRoute) return\n\n navigation.dispatch(state => {\n return CommonActions.reset({\n ...state,\n routes: [\n { name: 'Conversations', params: { chat_group_graph_id: params?.chat_group_graph_id } },\n ...routes,\n ],\n index: state.index + 1,\n })\n })\n }, [navigation, params?.chat_group_graph_id])\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"conversation_screen.js","names":["HeaderTitle","PlatformPressable","CommonActions","useNavigation","useTheme","useNavigationTheme","useRoute","React","startTransition","useCallback","useEffect","useRef","useState","Platform","StyleSheet","useWindowDimensions","View","useSafeAreaInsets","Badge","Icon","AnchorNotFoundBoundary","ConversationStartBanner","JumpToBottomButton","MessageForm","MessageList","ConversationDisabledBanner","LeaderMessagesDisabledBanner","MemberMessagesDisabledBanner","TypingIndicator","KeyboardView","useHeaderSlotReserve","BlankState","ConversationContextProvider","useMessageAvailableMembersAction","useConversation","useConversationJoltEvents","useConversationMessages","useConversationMessagesJoltEvents","useFetchNewerMessages","useFetchNewerOnForeground","useHeldBackMessages","useMarkLatestMessageRead","analyticsEvents","normalizeAnalyticsMetadata","usePublishProductAnalyticsEvent","useRestAwayFromDismissEdge","useVideoModerationJoltEvents","newestPersistedMessageId","gatedMessageCache","getMessagesQueryKey","decodeUlidTime","jsx","_jsx","jsxs","_jsxs","ConversationScreen","t0","$","_c","route","conversation_id","reply_root_id","initial_message_id","params","t1","data","conversation","t2","lastMessageCreatedAt","isBeforeLatestMessage","anchor","setAnchor","t3","Symbol","for","exitAnchoredMode","t4","dropAnchor","t5","t6","conversation_show_opened","t7","t8","t9","children","ConversationScreenContent","t10","currentPageReplyRootId","messagesQueryKey","onExitAnchoredMode","styles","useStyles","navigation","editing_message_id","reply_root_author_name","anchored","messages","fetchNextPage","hasNextPage","fetchPreviousPage","hasPreviousPage","isFetchingPreviousPage","queryKey","behindLatest","caughtUp","showJumpToBottomButton","setShowJumpToBottomButton","readingHistory","newestMessageId","undefined","onTooFarBehind","fetchNewer","onSkippedNewMessage","conversationId","acceptNewMessages","replyRootId","messageCache","markHandledByMessageForm","useEnsureConversationsRouteExists","t11","t12","enabled","t13","t14","noMessages","length","repliesDisabled","memberAbility","badges","title","canReply","showLeaderDisabledReplyBanner","t15","t16","m","String","id","find","currentlyEditingMessage","split","replyRootAuthorFirstName","replyHeaderTitle","muted","conversationMembership","listRef","hasDragged","setHasDragged","holdListPosition","t17","OS","restOffset","onLayout","onContentSizeChange","onMomentumScrollEnd","onScrollEndDrag","t18","current","scrollToOffset","offset","handleReturnToBottom","t19","t20","jumpToLatest","t21","event","offsetY","nativeEvent","contentOffset","y","trackScroll","t22","loadNewerMessages","t23","deleted","setParams","badge","t24","t25","t26","Imagery","name","t27","Content","Heading","t28","goBack","Root","Button","onPress","accessibilityHint","accessibilityRole","t29","container","style","emptyState","hasMessages","onEndReached","onScrollBeginDrag","onStartReached","onStartReachedThreshold","maintainVisibleContentPosition","minIndexForVisible","visible","t30","t31","ConversationBottomBar","t32","t33","onFlaggedInMessageForm","onBeforeSubmit","messageLink","disabled","disabledMessage","message","AttachmentPicker","Commands","TextInput","SubmitButton","latestMessageCreatedAt","Date","parse","ConversationScreenTitle","usePressableHeaderStyle","resourceType","pcoResourceType","productName","appName","text","navigate","maxFontSizeMultiplier","titleTextContainer","size","titleWrapper","variant","testID","width","slotReserve","headerContainerStyle","maxWidth","create","alignItems","select","android","default","flex","columnGap","flexDirection","flexShrink","minWidth","alignSelf","marginTop","navigationTheme","bottom","colors","card","justifyContent","backgroundColor","paddingBottom","chat_group_graph_id","navigationState","getState","routes","conversationsRoute","_temp","dispatch","state","reset","index","r"],"sources":["../../src/screens/conversation_screen.tsx"],"sourcesContent":["import { HeaderTitle, HeaderTitleProps, PlatformPressable } from '@react-navigation/elements'\nimport {\n CommonActions,\n RouteProp,\n StaticScreenProps,\n useNavigation,\n useTheme as useNavigationTheme,\n useRoute,\n} from '@react-navigation/native'\nimport React, { startTransition, useCallback, useEffect, useRef, useState } from 'react'\nimport { FlatList, Platform, StyleSheet, useWindowDimensions, View } from 'react-native'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\nimport { Badge, Icon } from '../components'\nimport { AnchorNotFoundBoundary } from '../components/conversation/anchor_not_found_boundary'\nimport { ConversationStartBanner } from '../components/conversation/conversation_start_banner'\nimport { JumpToBottomButton } from '../components/conversation/jump_to_bottom_button'\nimport { MessageForm } from '../components/conversation/message_form'\nimport { MessageList } from '../components/conversation/message_list'\nimport {\n ConversationDisabledBanner,\n LeaderMessagesDisabledBanner,\n MemberMessagesDisabledBanner,\n} from '../components/conversation/messages_disabled_banners'\nimport { TypingIndicator } from '../components/conversation/typing_indicator'\nimport { KeyboardView } from '../components/display/keyboard_view'\nimport { useHeaderSlotReserve } from '../components/display/platform_modal_header_buttons'\nimport BlankState from '../components/primitive/blank_state_primitive'\nimport { ConversationContextProvider } from '../contexts/conversation_context'\nimport { useMessageAvailableMembersAction } from '../hooks/direct_messages/use_message_available_members_action'\nimport { useConversation } from '../hooks/use_conversation'\nimport { useConversationJoltEvents } from '../hooks/use_conversation_jolt_events'\nimport { useConversationMessages } from '../hooks/use_conversation_messages'\nimport { useConversationMessagesJoltEvents } from '../hooks/use_conversation_messages_jolt_events'\nimport { useFetchNewerMessages } from '../hooks/use_fetch_newer_messages'\nimport { useFetchNewerOnForeground } from '../hooks/use_fetch_newer_on_foreground'\nimport { useHeldBackMessages } from '../hooks/use_held_back_messages'\nimport { useMarkLatestMessageRead } from '../hooks/use_mark_latest_message_read'\nimport {\n analyticsEvents,\n normalizeAnalyticsMetadata,\n usePublishProductAnalyticsEvent,\n} from '../hooks/use_product_analytics'\nimport { useRestAwayFromDismissEdge } from '../hooks/use_rest_away_from_dismiss_edge'\nimport { useVideoModerationJoltEvents } from '../hooks/use_video_moderation_jolt_events'\nimport { ConversationResource } from '../types/resources/conversation'\nimport { ConversationBadgeResource } from '../types/resources/conversation_badge'\nimport { MessageResource } from '../types/resources/message'\nimport { newestPersistedMessageId } from '../utils/cache/messages_cache'\nimport { gatedMessageCache } from '../utils/gated_message_cache'\nimport { getMessagesQueryKey } from '../utils/request/get_messages'\nimport { decodeUlidTime } from '../utils/ulid'\n\nexport type ConversationRouteProps = {\n conversation_id: number\n reply_root_id?: string | null\n reply_root_author_name?: string\n chat_group_graph_id?: string\n clear_input?: boolean\n editing_message_id?: number | null\n initial_message_id?: string | null\n title?: string\n subtitle?: string\n badge?: ConversationBadgeResource\n deleted?: boolean\n muted?: boolean\n}\n\nexport type ConversationScreenProps = StaticScreenProps<ConversationRouteProps>\n\nexport function ConversationScreen({ route }: ConversationScreenProps) {\n const { conversation_id, reply_root_id, initial_message_id } = route.params\n\n const { data: conversation } = useConversation({ conversation_id })\n const [anchor, setAnchor] = useState(() =>\n isBeforeLatestMessage(initial_message_id, conversation?.lastMessageCreatedAt)\n ? initial_message_id\n : null\n )\n const exitAnchoredMode = useCallback(() => startTransition(() => setAnchor(null)), [])\n const dropAnchor = useCallback(() => setAnchor(null), [])\n\n usePublishProductAnalyticsEvent(analyticsEvents.conversation_show_opened, {\n reply_root_id,\n ...normalizeAnalyticsMetadata(conversation),\n })\n\n return (\n <ConversationContextProvider\n conversationId={conversation_id}\n currentPageReplyRootId={reply_root_id ?? null}\n messagesQueryKey={getMessagesQueryKey({ conversation_id, reply_root_id, anchor })}\n >\n {anchor ? (\n <AnchorNotFoundBoundary onAnchorNotFound={dropAnchor}>\n <ConversationScreenContent\n route={route}\n anchor={anchor}\n onExitAnchoredMode={exitAnchoredMode}\n />\n </AnchorNotFoundBoundary>\n ) : (\n <ConversationScreenContent\n route={route}\n anchor={null}\n onExitAnchoredMode={exitAnchoredMode}\n />\n )}\n </ConversationContextProvider>\n )\n}\n\ninterface ConversationScreenContentProps extends ConversationScreenProps {\n anchor: string | null | undefined\n onExitAnchoredMode: () => void\n}\n\nfunction ConversationScreenContent({\n route,\n anchor,\n onExitAnchoredMode,\n}: ConversationScreenContentProps) {\n const styles = useStyles()\n const navigation = useNavigation()\n const { conversation_id, editing_message_id, reply_root_id, reply_root_author_name } =\n route.params\n const { data: conversation } = useConversation(route.params)\n const anchored = !!anchor\n const {\n messages,\n fetchNextPage,\n hasNextPage,\n fetchPreviousPage,\n hasPreviousPage,\n isFetchingPreviousPage,\n queryKey,\n } = useConversationMessages({ conversation_id, reply_root_id, anchor })\n const behindLatest = anchored && hasPreviousPage\n const caughtUp = !hasPreviousPage\n const [showJumpToBottomButton, setShowJumpToBottomButton] = useState(false)\n const readingHistory = showJumpToBottomButton\n const newestMessageId = newestPersistedMessageId(messages)\n const fetchNewer = useFetchNewerMessages({\n conversation_id,\n reply_root_id,\n queryKey,\n onTooFarBehind: anchored ? onExitAnchoredMode : undefined,\n })\n const { onSkippedNewMessage } = useHeldBackMessages({\n fetchNewer,\n newestMessageId,\n readingHistory,\n caughtUp,\n })\n useConversationJoltEvents({ conversationId: conversation_id })\n useConversationMessagesJoltEvents({\n conversationId: conversation_id,\n replyRootId: reply_root_id ?? null,\n messageCache: gatedMessageCache({\n queryKey,\n acceptNewMessages: caughtUp && !readingHistory,\n onSkippedNewMessage,\n }),\n })\n const { markHandledByMessageForm } = useVideoModerationJoltEvents()\n useEnsureConversationsRouteExists()\n useMarkLatestMessageRead({ conversation, messages, enabled: !behindLatest })\n useFetchNewerOnForeground({ fetchNewer, newestMessageId, enabled: anchored && caughtUp })\n const noMessages = messages.length === 0\n\n const { repliesDisabled, memberAbility, badges, title } = conversation\n const canReply = memberAbility?.canReply\n const showLeaderDisabledReplyBanner = canReply && repliesDisabled\n const currentlyEditingMessage = messages.find(m => String(m.id) === String(editing_message_id))\n const replyRootAuthorFirstName = reply_root_author_name?.split(' ')[0]\n const replyHeaderTitle = replyRootAuthorFirstName\n ? `Reply to ${replyRootAuthorFirstName}`\n : 'Reply'\n // Prefer the membership for optimistic updates.\n const muted = conversation.conversationMembership?.muted ?? conversation.muted\n\n const listRef = useRef<FlatList>(null)\n const [hasDragged, setHasDragged] = useState(false)\n const holdListPosition = behindLatest || readingHistory\n\n const { restOffset, onLayout, onContentSizeChange, onMomentumScrollEnd, onScrollEndDrag } =\n useRestAwayFromDismissEdge({\n listRef,\n enabled: Platform.OS === 'ios',\n })\n\n const handleReturnToBottom = useCallback(() => {\n listRef.current?.scrollToOffset({\n offset: restOffset,\n })\n }, [restOffset])\n\n const exitAnchoredMode = useCallback(() => {\n onExitAnchoredMode()\n handleReturnToBottom()\n }, [handleReturnToBottom, onExitAnchoredMode])\n const jumpToLatest = useCallback(() => {\n setShowJumpToBottomButton(false)\n if (anchored) exitAnchoredMode()\n else handleReturnToBottom()\n }, [anchored, exitAnchoredMode, handleReturnToBottom])\n\n const trackScroll = (event: any) => {\n const offsetY = event.nativeEvent.contentOffset.y\n setShowJumpToBottomButton(offsetY > 200)\n }\n\n const loadNewerMessages = () => {\n if (!hasPreviousPage || isFetchingPreviousPage) return\n\n setHasDragged(false)\n fetchPreviousPage()\n }\n\n useEffect(() => {\n if (reply_root_id) {\n navigation.setParams({\n title: replyHeaderTitle,\n })\n } else {\n navigation.setParams({\n title: title,\n badge: badges?.[0],\n deleted: conversation?.deleted,\n muted,\n })\n }\n }, [navigation, title, badges, conversation?.deleted, reply_root_id, replyHeaderTitle, muted])\n\n if (!conversation || conversation.deleted) {\n return (\n <View style={styles.container}>\n <BlankState.Root>\n <BlankState.Imagery name=\"general.outlinedTextMessage\" />\n <BlankState.Content>\n <BlankState.Heading>This conversation has been deleted</BlankState.Heading>\n </BlankState.Content>\n <BlankState.Button\n onPress={navigation.goBack}\n title=\"Back to conversations\"\n accessibilityHint=\"Navigates back to the conversations list\"\n accessibilityRole=\"link\"\n />\n </BlankState.Root>\n </View>\n )\n }\n\n return (\n <View style={styles.container}>\n <KeyboardView>\n {noMessages ? (\n <View style={styles.emptyState}>\n <ConversationStartBanner conversation={conversation} hasMessages={false} />\n </View>\n ) : (\n <MessageList\n listRef={listRef}\n conversation={conversation}\n conversationId={conversation_id}\n messages={messages}\n replyRootId={reply_root_id}\n anchorMessageId={anchor}\n hasNextPage={hasNextPage}\n onEndReached={() => fetchNextPage()}\n onScroll={trackScroll}\n onLayout={onLayout}\n onContentSizeChange={onContentSizeChange}\n onScrollEndDrag={onScrollEndDrag}\n onMomentumScrollEnd={onMomentumScrollEnd}\n onScrollBeginDrag={anchored ? () => setHasDragged(true) : undefined}\n onStartReached={anchored && hasDragged ? loadNewerMessages : undefined}\n onStartReachedThreshold={anchored ? 0.5 : undefined}\n maintainVisibleContentPosition={\n holdListPosition ? { minIndexForVisible: 0 } : undefined\n }\n />\n )}\n <JumpToBottomButton\n onPress={jumpToLatest}\n visible={behindLatest || showJumpToBottomButton}\n />\n {!noMessages && <TypingIndicator />}\n {showLeaderDisabledReplyBanner && <LeaderMessagesDisabledBanner />}\n <ConversationBottomBar\n conversation={conversation}\n canReply={canReply}\n replyRootAuthorFirstName={replyRootAuthorFirstName}\n replyRootId={reply_root_id}\n currentlyEditingMessage={currentlyEditingMessage}\n onFlaggedInMessageForm={markHandledByMessageForm}\n onBeforeSubmit={jumpToLatest}\n />\n </KeyboardView>\n </View>\n )\n}\n\ninterface ConversationBottomBarProps {\n conversation: ConversationResource\n canReply: boolean | undefined\n replyRootAuthorFirstName: string | undefined\n replyRootId: string | null | undefined\n currentlyEditingMessage: MessageResource | undefined\n onFlaggedInMessageForm?: (id: string) => void\n onBeforeSubmit?: () => void\n}\n\nfunction ConversationBottomBar({\n conversation,\n canReply,\n replyRootAuthorFirstName,\n replyRootId,\n currentlyEditingMessage,\n onFlaggedInMessageForm,\n onBeforeSubmit,\n}: ConversationBottomBarProps) {\n const messageLink = useMessageAvailableMembersAction(conversation)\n\n if (conversation.disabled)\n return (\n <ConversationDisabledBanner\n message={conversation.disabledMessage ?? null}\n messageLink={messageLink}\n />\n )\n if (!canReply) return <MemberMessagesDisabledBanner />\n return (\n <MessageForm.Root\n replyRootAuthorFirstName={replyRootAuthorFirstName}\n conversation={conversation}\n replyRootId={replyRootId}\n currentlyEditingMessage={currentlyEditingMessage}\n onFlaggedInMessageForm={onFlaggedInMessageForm}\n onBeforeSubmit={onBeforeSubmit}\n key={\n currentlyEditingMessage\n ? `edit-message-form-${currentlyEditingMessage.id}`\n : 'new-message-form'\n }\n >\n <MessageForm.AttachmentPicker />\n <MessageForm.Commands />\n <MessageForm.TextInput />\n <MessageForm.SubmitButton />\n </MessageForm.Root>\n )\n}\n\nconst isBeforeLatestMessage = (anchor?: string | null, latestMessageCreatedAt?: string) =>\n !!anchor &&\n !!latestMessageCreatedAt &&\n decodeUlidTime(anchor) < Date.parse(latestMessageCreatedAt)\n\ninterface ConversationScreenTitleProps extends HeaderTitleProps {\n conversation_id: number\n badge?: ConversationBadgeResource\n deleted?: boolean\n muted?: boolean\n}\n\nexport const ConversationScreenTitle = ({\n conversation_id,\n badge,\n children,\n style,\n deleted,\n muted,\n}: ConversationScreenTitleProps) => {\n const styles = usePressableHeaderStyle()\n const navigation = useNavigation()\n const resourceType = badge?.pcoResourceType || ''\n const productName = badge?.appName\n const name = badge?.text || undefined\n\n return (\n <PlatformPressable\n testID=\"conversation-details-button\"\n accessibilityHint=\"Opens details about members and settings\"\n style={styles.container}\n onPress={() => {\n if (deleted) return\n\n navigation.navigate('ConversationDetails', { conversation_id })\n }}\n >\n <View style={styles.titleWrapper}>\n <View style={styles.titleTextContainer}>\n <HeaderTitle maxFontSizeMultiplier={1} style={style}>\n {children}\n </HeaderTitle>\n </View>\n {muted && <Icon name=\"general.bellMuted\" size={12} />}\n {!deleted && <Icon name=\"general.downChevron\" size={12} />}\n </View>\n <Badge\n variant=\"metaSubtle\"\n productLogoName={productName}\n label={resourceType}\n metaLabel={name}\n style={styles.badge}\n maxFontSizeMultiplier={1}\n />\n </PlatformPressable>\n )\n}\n\nconst usePressableHeaderStyle = () => {\n const { width } = useWindowDimensions()\n const slotReserve = useHeaderSlotReserve()\n const headerContainerStyle = { maxWidth: width - slotReserve * 2 }\n\n return StyleSheet.create({\n container: {\n alignItems: Platform.select({ android: 'flex-start', default: 'center' }),\n flex: 1,\n ...headerContainerStyle,\n },\n titleWrapper: {\n alignItems: 'center',\n columnGap: 4,\n flexDirection: 'row',\n flexShrink: 1,\n },\n titleTextContainer: {\n flexShrink: 1,\n minWidth: 0,\n },\n badge: {\n alignSelf: Platform.select({ android: 'flex-start', default: 'center' }),\n marginTop: 2,\n },\n })\n}\n\nconst useStyles = () => {\n const navigationTheme = useNavigationTheme()\n const { bottom } = useSafeAreaInsets()\n\n return StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n backgroundColor: navigationTheme.colors.card,\n paddingBottom: bottom,\n },\n emptyState: {\n flex: 1,\n justifyContent: 'center',\n },\n })\n}\n\n/**\n * useEnsureConversationsRouteExists\n */\nconst useEnsureConversationsRouteExists = () => {\n const navigation = useNavigation()\n const { params } = useRoute<RouteProp<ConversationScreenProps['route']>>()\n\n useEffect(() => {\n const navigationState = navigation.getState()\n const routes = navigationState?.routes || []\n const conversationsRoute = routes.find(r => r.name === 'Conversations')\n\n if (conversationsRoute) return\n\n navigation.dispatch(state => {\n return CommonActions.reset({\n ...state,\n routes: [\n { name: 'Conversations', params: { chat_group_graph_id: params?.chat_group_graph_id } },\n ...routes,\n ],\n index: state.index + 1,\n })\n })\n }, [navigation, params?.chat_group_graph_id])\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invalidate_refetchable_queries.d.ts","sourceRoot":"","sources":["../../../src/utils/cache/invalidate_refetchable_queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAO1D,eAAO,MAAM,4BAA4B,GAAI,aAAa,WAAW,kBACoB,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const isAnchoredMessagesWindow = query => {
|
|
2
|
+
const [, params] = query.queryKey;
|
|
3
|
+
return !!params?.where?.id_around;
|
|
4
|
+
};
|
|
5
|
+
export const invalidateRefetchableQueries = queryClient => queryClient.invalidateQueries({
|
|
6
|
+
predicate: query => !isAnchoredMessagesWindow(query)
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=invalidate_refetchable_queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invalidate_refetchable_queries.js","names":["isAnchoredMessagesWindow","query","params","queryKey","where","id_around","invalidateRefetchableQueries","queryClient","invalidateQueries","predicate"],"sources":["../../../src/utils/cache/invalidate_refetchable_queries.ts"],"sourcesContent":["import { Query, QueryClient } from '@tanstack/react-query'\n\nconst isAnchoredMessagesWindow = (query: Query) => {\n const [, params] = query.queryKey as [unknown, { where?: { id_around?: string } } | undefined]\n return !!params?.where?.id_around\n}\n\nexport const invalidateRefetchableQueries = (queryClient: QueryClient) =>\n queryClient.invalidateQueries({ predicate: query => !isAnchoredMessagesWindow(query) })\n"],"mappings":"AAEA,MAAMA,wBAAwB,GAAIC,KAAY,IAAK;EACjD,MAAM,GAAGC,MAAM,CAAC,GAAGD,KAAK,CAACE,QAAqE;EAC9F,OAAO,CAAC,CAACD,MAAM,EAAEE,KAAK,EAAEC,SAAS;AACnC,CAAC;AAED,OAAO,MAAMC,4BAA4B,GAAIC,WAAwB,IACnEA,WAAW,CAACC,iBAAiB,CAAC;EAAEC,SAAS,EAAER,KAAK,IAAI,CAACD,wBAAwB,CAACC,KAAK;AAAE,CAAC,CAAC","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@planningcenter/chat-react-native",
|
|
3
|
-
"version": "4.2.1-qa-staging.
|
|
3
|
+
"version": "4.2.1-qa-staging.5",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@fortawesome/fontawesome-svg-core": "^7.2.0",
|
|
35
35
|
"@fortawesome/react-native-fontawesome": "^0.3.2",
|
|
36
|
-
"@planningcenter/emoji-keyboard": "4.2.1-qa-staging.
|
|
36
|
+
"@planningcenter/emoji-keyboard": "4.2.1-qa-staging.5",
|
|
37
37
|
"lodash-inflection": "^1.5.0"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
@@ -84,5 +84,5 @@
|
|
|
84
84
|
"sf-symbols-typescript": "^2.2.0",
|
|
85
85
|
"typescript": "~6.0.3"
|
|
86
86
|
},
|
|
87
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "bd4aec108e0d47db3983b45c529f88787afc5beb"
|
|
88
88
|
}
|
|
@@ -13,6 +13,7 @@ import { appGrantsRequestArgs } from '../hooks/use_chat_permissions'
|
|
|
13
13
|
import { featuresQueryOptions } from '../hooks/use_features'
|
|
14
14
|
import { getRequestQueryKey, RequestQueryKey } from '../hooks/use_suspense_api'
|
|
15
15
|
import { emitAuthRefresh } from '../utils/auth_events'
|
|
16
|
+
import { invalidateRefetchableQueries } from '../utils/cache/invalidate_refetchable_queries'
|
|
16
17
|
import { ResponseError } from '../utils/response_error'
|
|
17
18
|
import { ChatContext, ChatContextValue } from './chat_context'
|
|
18
19
|
|
|
@@ -59,7 +60,7 @@ export function ApiProvider({ children }: ViewProps) {
|
|
|
59
60
|
emitAuthRefresh()
|
|
60
61
|
|
|
61
62
|
if (chatQueryClient.isFetching()) {
|
|
62
|
-
chatQueryClient
|
|
63
|
+
invalidateRefetchableQueries(chatQueryClient)
|
|
63
64
|
return
|
|
64
65
|
}
|
|
65
66
|
|
|
@@ -65,4 +65,31 @@ describe('useFetchNewerMessages', () => {
|
|
|
65
65
|
await expect(act(() => result.current('01C'))).rejects.toThrow('offline')
|
|
66
66
|
expect(cachedIds()).toEqual(['01C', '01B', '01A'])
|
|
67
67
|
})
|
|
68
|
+
|
|
69
|
+
it('hands off instead of refetching when more is left than it will walk', async () => {
|
|
70
|
+
for (let i = 0; i < 5; i++) get.mockResolvedValueOnce(page([`01D${i}`], { idGt: `01D${i}` }))
|
|
71
|
+
const onTooFarBehind = jest.fn()
|
|
72
|
+
const invalidate = jest.spyOn(queryClient, 'invalidateQueries')
|
|
73
|
+
const { result } = renderHook(
|
|
74
|
+
() => useFetchNewerMessages({ conversation_id: 1, queryKey, onTooFarBehind }),
|
|
75
|
+
{ wrapper }
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
await act(() => result.current('01C'))
|
|
79
|
+
|
|
80
|
+
expect(onTooFarBehind).toHaveBeenCalledTimes(1)
|
|
81
|
+
expect(invalidate).not.toHaveBeenCalled()
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
it('refetches the live cache when more is left and nobody takes over', async () => {
|
|
85
|
+
for (let i = 0; i < 5; i++) get.mockResolvedValueOnce(page([`01D${i}`], { idGt: `01D${i}` }))
|
|
86
|
+
const invalidate = jest.spyOn(queryClient, 'invalidateQueries')
|
|
87
|
+
const { result } = renderHook(() => useFetchNewerMessages({ conversation_id: 1, queryKey }), {
|
|
88
|
+
wrapper,
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
await act(() => result.current('01C'))
|
|
92
|
+
|
|
93
|
+
expect(invalidate).toHaveBeenCalledWith({ queryKey })
|
|
94
|
+
})
|
|
68
95
|
})
|
|
@@ -11,9 +11,15 @@ type Options = {
|
|
|
11
11
|
conversation_id: number
|
|
12
12
|
reply_root_id?: string | null
|
|
13
13
|
queryKey: unknown[]
|
|
14
|
+
onTooFarBehind?: () => void
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
export const useFetchNewerMessages = ({
|
|
17
|
+
export const useFetchNewerMessages = ({
|
|
18
|
+
conversation_id,
|
|
19
|
+
reply_root_id,
|
|
20
|
+
queryKey,
|
|
21
|
+
onTooFarBehind,
|
|
22
|
+
}: Options) => {
|
|
17
23
|
const queryClient = useQueryClient()
|
|
18
24
|
const apiClient = useApiClient()
|
|
19
25
|
|
|
@@ -37,8 +43,10 @@ export const useFetchNewerMessages = ({ conversation_id, reply_root_id, queryKey
|
|
|
37
43
|
prev => prependNewerPage(prev, pages)
|
|
38
44
|
)
|
|
39
45
|
const moreThanWeFetched = !!cursor
|
|
40
|
-
if (moreThanWeFetched)
|
|
46
|
+
if (!moreThanWeFetched) return
|
|
47
|
+
if (onTooFarBehind) onTooFarBehind()
|
|
48
|
+
else await queryClient.invalidateQueries({ queryKey })
|
|
41
49
|
},
|
|
42
|
-
[apiClient, conversation_id, queryClient, queryKey, reply_root_id]
|
|
50
|
+
[apiClient, conversation_id, onTooFarBehind, queryClient, queryKey, reply_root_id]
|
|
43
51
|
)
|
|
44
52
|
}
|
|
@@ -139,7 +139,12 @@ function ConversationScreenContent({
|
|
|
139
139
|
const [showJumpToBottomButton, setShowJumpToBottomButton] = useState(false)
|
|
140
140
|
const readingHistory = showJumpToBottomButton
|
|
141
141
|
const newestMessageId = newestPersistedMessageId(messages)
|
|
142
|
-
const fetchNewer = useFetchNewerMessages({
|
|
142
|
+
const fetchNewer = useFetchNewerMessages({
|
|
143
|
+
conversation_id,
|
|
144
|
+
reply_root_id,
|
|
145
|
+
queryKey,
|
|
146
|
+
onTooFarBehind: anchored ? onExitAnchoredMode : undefined,
|
|
147
|
+
})
|
|
143
148
|
const { onSkippedNewMessage } = useHeldBackMessages({
|
|
144
149
|
fetchNewer,
|
|
145
150
|
newestMessageId,
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { QueryClient } from '@tanstack/react-query'
|
|
2
|
+
import { getMessagesQueryKey } from '../../request/get_messages'
|
|
3
|
+
import { invalidateRefetchableQueries } from '../invalidate_refetchable_queries'
|
|
4
|
+
|
|
5
|
+
describe('invalidateRefetchableQueries', () => {
|
|
6
|
+
const queryClient = new QueryClient()
|
|
7
|
+
const live = getMessagesQueryKey({ conversation_id: 1 })
|
|
8
|
+
const anchored = getMessagesQueryKey({ conversation_id: 1, anchor: '01A' })
|
|
9
|
+
const other = ['/me/conversations']
|
|
10
|
+
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
queryClient.clear()
|
|
13
|
+
for (const key of [live, anchored, other]) queryClient.setQueryData(key, { pages: [], pageParams: [] })
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
it('invalidates everything except anchored message windows', async () => {
|
|
17
|
+
await invalidateRefetchableQueries(queryClient)
|
|
18
|
+
|
|
19
|
+
expect(queryClient.getQueryState(live)?.isInvalidated).toBe(true)
|
|
20
|
+
expect(queryClient.getQueryState(other)?.isInvalidated).toBe(true)
|
|
21
|
+
expect(queryClient.getQueryState(anchored)?.isInvalidated).toBe(false)
|
|
22
|
+
})
|
|
23
|
+
})
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Query, QueryClient } from '@tanstack/react-query'
|
|
2
|
+
|
|
3
|
+
const isAnchoredMessagesWindow = (query: Query) => {
|
|
4
|
+
const [, params] = query.queryKey as [unknown, { where?: { id_around?: string } } | undefined]
|
|
5
|
+
return !!params?.where?.id_around
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const invalidateRefetchableQueries = (queryClient: QueryClient) =>
|
|
9
|
+
queryClient.invalidateQueries({ predicate: query => !isAnchoredMessagesWindow(query) })
|