@planningcenter/chat-react-native 4.2.0 → 4.2.1-qa-staging.1
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/components/conversation/anchor_not_found_boundary.d.ts +18 -0
- package/build/components/conversation/anchor_not_found_boundary.d.ts.map +1 -0
- package/build/components/conversation/anchor_not_found_boundary.js +20 -0
- package/build/components/conversation/anchor_not_found_boundary.js.map +1 -0
- package/build/components/conversation/message_form.d.ts +2 -1
- package/build/components/conversation/message_form.d.ts.map +1 -1
- package/build/components/conversation/message_form.js +54 -51
- package/build/components/conversation/message_form.js.map +1 -1
- package/build/components/conversation/message_list.d.ts +3 -2
- package/build/components/conversation/message_list.d.ts.map +1 -1
- package/build/components/conversation/message_list.js +152 -66
- package/build/components/conversation/message_list.js.map +1 -1
- package/build/hooks/index.d.ts +1 -0
- package/build/hooks/index.d.ts.map +1 -1
- package/build/hooks/index.js +1 -0
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/paginator_meta.d.ts +3 -1
- package/build/hooks/paginator_meta.d.ts.map +1 -1
- package/build/hooks/paginator_meta.js +25 -8
- package/build/hooks/paginator_meta.js.map +1 -1
- package/build/hooks/use_api.d.ts.map +1 -1
- package/build/hooks/use_api.js +5 -8
- package/build/hooks/use_api.js.map +1 -1
- package/build/hooks/use_conversation_messages.d.ts +8 -2
- package/build/hooks/use_conversation_messages.d.ts.map +1 -1
- package/build/hooks/use_conversation_messages.js +77 -45
- package/build/hooks/use_conversation_messages.js.map +1 -1
- package/build/hooks/use_conversation_messages_jolt_events.d.ts +9 -1
- package/build/hooks/use_conversation_messages_jolt_events.d.ts.map +1 -1
- package/build/hooks/use_conversation_messages_jolt_events.js +88 -73
- package/build/hooks/use_conversation_messages_jolt_events.js.map +1 -1
- package/build/hooks/use_direct_message_eligibility.d.ts +14 -0
- package/build/hooks/use_direct_message_eligibility.d.ts.map +1 -0
- package/build/hooks/use_direct_message_eligibility.js +87 -0
- package/build/hooks/use_direct_message_eligibility.js.map +1 -0
- package/build/hooks/use_fetch_newer_messages.d.ts +8 -0
- package/build/hooks/use_fetch_newer_messages.d.ts.map +1 -0
- package/build/hooks/use_fetch_newer_messages.js +56 -0
- package/build/hooks/use_fetch_newer_messages.js.map +1 -0
- package/build/hooks/use_fetch_newer_on_foreground.d.ts +8 -0
- package/build/hooks/use_fetch_newer_on_foreground.d.ts.map +1 -0
- package/build/hooks/use_fetch_newer_on_foreground.js +41 -0
- package/build/hooks/use_fetch_newer_on_foreground.js.map +1 -0
- package/build/hooks/use_mark_latest_message_read.d.ts +2 -1
- package/build/hooks/use_mark_latest_message_read.d.ts.map +1 -1
- package/build/hooks/use_mark_latest_message_read.js +4 -3
- package/build/hooks/use_mark_latest_message_read.js.map +1 -1
- package/build/hooks/use_suspense_api.d.ts.map +1 -1
- package/build/hooks/use_suspense_api.js +5 -8
- package/build/hooks/use_suspense_api.js.map +1 -1
- package/build/screens/conversation_new/components/services_form.js +9 -8
- package/build/screens/conversation_new/components/services_form.js.map +1 -1
- package/build/screens/conversation_screen.d.ts +1 -0
- package/build/screens/conversation_screen.d.ts.map +1 -1
- package/build/screens/conversation_screen.js +241 -355
- package/build/screens/conversation_screen.js.map +1 -1
- package/build/types/api_primitives.d.ts +2 -0
- package/build/types/api_primitives.d.ts.map +1 -1
- package/build/types/api_primitives.js.map +1 -1
- package/build/types/resources/member.d.ts +1 -0
- package/build/types/resources/member.d.ts.map +1 -1
- package/build/types/resources/member.js.map +1 -1
- package/build/utils/cache/prepend_newer_page.d.ts +7 -0
- package/build/utils/cache/prepend_newer_page.d.ts.map +1 -0
- package/build/utils/cache/prepend_newer_page.js +14 -0
- package/build/utils/cache/prepend_newer_page.js.map +1 -0
- package/build/utils/client/types.d.ts +1 -0
- package/build/utils/client/types.d.ts.map +1 -1
- package/build/utils/client/types.js.map +1 -1
- package/build/utils/gated_message_cache.d.ts +7 -0
- package/build/utils/gated_message_cache.d.ts.map +1 -0
- package/build/utils/gated_message_cache.js +13 -0
- package/build/utils/gated_message_cache.js.map +1 -0
- package/build/utils/generate_placeholder_ulid.d.ts +0 -6
- package/build/utils/generate_placeholder_ulid.d.ts.map +1 -1
- package/build/utils/generate_placeholder_ulid.js +2 -2
- package/build/utils/generate_placeholder_ulid.js.map +1 -1
- package/build/utils/group_messages.js +4 -1
- package/build/utils/group_messages.js.map +1 -1
- package/build/utils/request/get_messages.d.ts +18 -6
- package/build/utils/request/get_messages.d.ts.map +1 -1
- package/build/utils/request/get_messages.js +10 -12
- package/build/utils/request/get_messages.js.map +1 -1
- package/build/utils/ulid.d.ts +3 -0
- package/build/utils/ulid.d.ts.map +1 -0
- package/build/utils/ulid.js +7 -0
- package/build/utils/ulid.js.map +1 -0
- package/package.json +3 -3
- package/src/__tests__/hooks/paginator_meta.test.ts +73 -2
- package/src/__tests__/hooks/use_conversation_messages_jolt_events.test.ts +36 -0
- package/src/__tests__/hooks/use_direct_message_eligibility.test.tsx +83 -0
- package/src/__tests__/screens/conversation_new/components/services_form.test.tsx +91 -0
- package/src/__tests__/utils/gated_message_cache.test.ts +26 -0
- package/src/__tests__/utils/request/get_messages.test.ts +24 -0
- package/src/__tests__/utils/ulid.test.ts +15 -0
- package/src/components/conversation/__tests__/anchor_not_found_boundary.test.tsx +51 -0
- package/src/components/conversation/__tests__/message_list.test.tsx +42 -0
- package/src/components/conversation/anchor_not_found_boundary.tsx +21 -0
- package/src/components/conversation/message_form.tsx +4 -0
- package/src/components/conversation/message_list.tsx +58 -4
- package/src/hooks/index.ts +1 -0
- package/src/hooks/paginator_meta.ts +29 -5
- package/src/hooks/use_api.ts +4 -5
- package/src/hooks/use_conversation_messages.ts +43 -11
- package/src/hooks/use_conversation_messages_jolt_events.ts +57 -40
- package/src/hooks/use_direct_message_eligibility.ts +40 -0
- package/src/hooks/use_fetch_newer_messages.ts +37 -0
- package/src/hooks/use_fetch_newer_on_foreground.ts +25 -0
- package/src/hooks/use_mark_latest_message_read.ts +4 -3
- package/src/hooks/use_suspense_api.ts +4 -5
- package/src/screens/conversation_new/components/services_form.tsx +5 -5
- package/src/screens/conversation_screen.tsx +120 -17
- package/src/types/api_primitives.ts +2 -0
- package/src/types/resources/member.ts +1 -0
- package/src/utils/__tests__/group_messages.test.ts +29 -0
- package/src/utils/cache/__tests__/prepend_newer_page.test.ts +35 -0
- package/src/utils/cache/prepend_newer_page.ts +22 -0
- package/src/utils/client/types.ts +1 -0
- package/src/utils/gated_message_cache.ts +19 -0
- package/src/utils/generate_placeholder_ulid.ts +2 -2
- package/src/utils/group_messages.ts +4 -1
- package/src/utils/request/get_messages.ts +12 -14
- package/src/utils/ulid.ts +11 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation_screen.js","names":["HeaderTitle","PlatformPressable","CommonActions","useNavigation","useTheme","useNavigationTheme","useRoute","React","useCallback","useEffect","useRef","useState","Platform","StyleSheet","useWindowDimensions","View","useSafeAreaInsets","Badge","Icon","ConversationStartBanner","JumpToBottomButton","MessageForm","MessageList","ConversationDisabledBanner","LeaderMessagesDisabledBanner","MemberMessagesDisabledBanner","TypingIndicator","KeyboardView","useHeaderSlotReserve","BlankState","ConversationContextProvider","useMessageAvailableMembersAction","useConversation","useConversationJoltEvents","useConversationMessages","useConversationMessagesJoltEvents","useMarkLatestMessageRead","analyticsEvents","normalizeAnalyticsMetadata","usePublishProductAnalyticsEvent","useRestAwayFromDismissEdge","useVideoModerationJoltEvents","jsx","_jsx","jsxs","_jsxs","ConversationScreen","t0","$","_c","route","conversation_id","reply_root_id","params","t1","data","conversation","t2","t3","conversation_show_opened","t4","t5","ConversationScreenContent","t6","currentPageReplyRootId","children","styles","useStyles","navigation","editing_message_id","reply_root_author_name","messages","fetchNextPage","hasNextPage","conversationId","markHandledByMessageForm","useEnsureConversationsRouteExists","noMessages","length","repliesDisabled","memberAbility","badges","title","canReply","showLeaderDisabledReplyBanner","m","String","id","find","currentlyEditingMessage","split","replyRootAuthorFirstName","replyHeaderTitle","muted","conversationMembership","listRef","showJumpToBottomButton","setShowJumpToBottomButton","t7","Symbol","for","event","offsetY","nativeEvent","contentOffset","y","trackScroll","t8","enabled","OS","restOffset","onLayout","onContentSizeChange","onMomentumScrollEnd","onScrollEndDrag","t9","current","scrollToOffset","offset","handleReturnToBottom","t10","deleted","setParams","badge","t11","t12","t13","Imagery","name","t14","Content","Heading","t15","goBack","Root","Button","onPress","accessibilityHint","accessibilityRole","t16","container","style","emptyState","hasMessages","onEndReached","t17","ConversationBottomBar","t18","t19","replyRootId","onFlaggedInMessageForm","messageLink","disabled","disabledMessage","message","AttachmentPicker","Commands","TextInput","SubmitButton","ConversationScreenTitle","usePressableHeaderStyle","resourceType","pcoResourceType","productName","appName","text","undefined","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, { 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 { 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 { 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'\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 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 } = route.params\n\n const { data: conversation } = useConversation({ conversation_id })\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 >\n <ConversationScreenContent route={route} />\n </ConversationContextProvider>\n )\n}\n\nfunction ConversationScreenContent({ route }: ConversationScreenProps) {\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 { messages, fetchNextPage, hasNextPage } = useConversationMessages({\n conversation_id,\n reply_root_id,\n })\n useConversationJoltEvents({ conversationId: conversation_id })\n useConversationMessagesJoltEvents({ conversationId: conversation_id })\n const { markHandledByMessageForm } = useVideoModerationJoltEvents()\n useEnsureConversationsRouteExists()\n useMarkLatestMessageRead({ conversation, messages })\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 [showJumpToBottomButton, setShowJumpToBottomButton] = useState(false)\n\n const trackScroll = (event: any) => {\n const offsetY = event.nativeEvent.contentOffset.y\n setShowJumpToBottomButton(offsetY > 200)\n }\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 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 hasNextPage={hasNextPage}\n onEndReached={() => fetchNextPage()}\n onScroll={trackScroll}\n onLayout={onLayout}\n onContentSizeChange={onContentSizeChange}\n onScrollEndDrag={onScrollEndDrag}\n onMomentumScrollEnd={onMomentumScrollEnd}\n />\n )}\n <JumpToBottomButton onPress={handleReturnToBottom} visible={showJumpToBottomButton} />\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 />\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}\n\nfunction ConversationBottomBar({\n conversation,\n canReply,\n replyRootAuthorFirstName,\n replyRootId,\n currentlyEditingMessage,\n onFlaggedInMessageForm,\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 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\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","useMarkLatestMessageRead","analyticsEvents","normalizeAnalyticsMetadata","usePublishProductAnalyticsEvent","useRestAwayFromDismissEdge","useVideoModerationJoltEvents","gatedMessageCache","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","children","ConversationScreenContent","t9","currentPageReplyRootId","onExitAnchoredMode","styles","useStyles","navigation","editing_message_id","reply_root_author_name","anchored","messages","fetchNextPage","hasNextPage","fetchPreviousPage","hasPreviousPage","isFetchingPreviousPage","queryKey","behindLatest","caughtUp","showJumpToBottomButton","setShowJumpToBottomButton","readingHistory","skippedNewMessages","messageCaches","acceptNewMessages","onSkippedNewMessage","current","newestMessageId","id","conversationId","markHandledByMessageForm","useEnsureConversationsRouteExists","enabled","fetchNewer","noMessages","length","repliesDisabled","memberAbility","badges","title","canReply","showLeaderDisabledReplyBanner","currentlyEditingMessage","find","m","String","replyRootAuthorFirstName","split","replyHeaderTitle","muted","conversationMembership","listRef","hasDragged","setHasDragged","holdListPosition","restOffset","onLayout","onContentSizeChange","onMomentumScrollEnd","onScrollEndDrag","OS","handleReturnToBottom","scrollToOffset","offset","jumpToLatest","trackScroll","event","offsetY","nativeEvent","contentOffset","y","loadNewerMessages","setParams","badge","deleted","style","container","Root","Imagery","name","Content","Heading","Button","onPress","goBack","accessibilityHint","accessibilityRole","emptyState","hasMessages","replyRootId","anchorMessageId","onEndReached","onScroll","onScrollBeginDrag","undefined","onStartReached","onStartReachedThreshold","maintainVisibleContentPosition","minIndexForVisible","visible","ConversationBottomBar","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 { 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 { gatedMessageCache } from '../utils/gated_message_cache'\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 >\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 skippedNewMessages = useRef(false)\n const messageCaches = [\n gatedMessageCache({\n queryKey,\n acceptNewMessages: caughtUp && !readingHistory,\n onSkippedNewMessage: () => {\n skippedNewMessages.current = true\n },\n }),\n ]\n const newestMessageId = messages[0]?.id\n useConversationJoltEvents({ conversationId: conversation_id })\n useConversationMessagesJoltEvents({ conversationId: conversation_id, messageCaches })\n const { markHandledByMessageForm } = useVideoModerationJoltEvents()\n useEnsureConversationsRouteExists()\n useMarkLatestMessageRead({ conversation, messages, enabled: !behindLatest })\n const fetchNewer = useFetchNewerMessages({ conversation_id, reply_root_id, queryKey })\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 (behindLatest) exitAnchoredMode()\n else handleReturnToBottom()\n }, [behindLatest, 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 (readingHistory || !caughtUp || !newestMessageId || !skippedNewMessages.current) return\n\n skippedNewMessages.current = false\n fetchNewer(newestMessageId)\n }, [caughtUp, fetchNewer, newestMessageId, readingHistory])\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":[]}
|
|
@@ -33,11 +33,13 @@ export interface NextPageCursor {
|
|
|
33
33
|
idLte?: string;
|
|
34
34
|
idGt?: string;
|
|
35
35
|
idGte?: string;
|
|
36
|
+
order?: 'asc' | 'desc';
|
|
36
37
|
}
|
|
37
38
|
export interface CollectionMeta {
|
|
38
39
|
count: number;
|
|
39
40
|
totalCount: number;
|
|
40
41
|
next?: NextPageCursor;
|
|
42
|
+
prev?: NextPageCursor;
|
|
41
43
|
parent?: ResourceObject;
|
|
42
44
|
[attributeName: string]: unknown;
|
|
43
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api_primitives.d.ts","sourceRoot":"","sources":["../../src/types/api_primitives.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE;QAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IACxD,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,WAAW,CAAC,IAAI,GAAG,cAAc,IAAI;IAC/C,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,IAAI,GAAG,cAAc,IAAI;IACjD,IAAI,EAAE,IAAI,EAAE,CAAA;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,IAAI,EAAE,cAAc,CAAA;CACrB,CAAA;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"api_primitives.d.ts","sourceRoot":"","sources":["../../src/types/api_primitives.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE;QAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IACxD,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,WAAW,CAAC,IAAI,GAAG,cAAc,IAAI;IAC/C,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,IAAI,GAAG,cAAc,IAAI;IACjD,IAAI,EAAE,IAAI,EAAE,CAAA;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,IAAI,EAAE,cAAc,CAAA;CACrB,CAAA;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAA;CACjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api_primitives.js","names":[],"sources":["../../src/types/api_primitives.ts"],"sourcesContent":["export interface ResourceObject {\n id: string | number\n type: string\n}\n\nexport interface ErrorObject {\n source?: { parameter: string }\n detail: string\n meta?: { associated_resources: any[]; resource: string }\n title: string\n status: string\n}\n\nexport type ApiResource<Type = ResourceObject> = {\n data: Type\n links: Record<string, string>\n meta: Record<string, unknown>\n}\n\nexport type ApiCollection<Type = ResourceObject> = {\n data: Type[]\n links: Record<string, string>\n meta: CollectionMeta\n}\n\nexport interface FailedResponse extends Response {\n errors: ErrorObject[]\n}\n\nexport interface NextPageCursor {\n offset?: string\n idLt?: string\n idLte?: string\n idGt?: string\n idGte?: string\n}\n\nexport interface CollectionMeta {\n count: number\n totalCount: number\n next?: NextPageCursor\n parent?: ResourceObject\n [attributeName: string]: unknown\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"api_primitives.js","names":[],"sources":["../../src/types/api_primitives.ts"],"sourcesContent":["export interface ResourceObject {\n id: string | number\n type: string\n}\n\nexport interface ErrorObject {\n source?: { parameter: string }\n detail: string\n meta?: { associated_resources: any[]; resource: string }\n title: string\n status: string\n}\n\nexport type ApiResource<Type = ResourceObject> = {\n data: Type\n links: Record<string, string>\n meta: Record<string, unknown>\n}\n\nexport type ApiCollection<Type = ResourceObject> = {\n data: Type[]\n links: Record<string, string>\n meta: CollectionMeta\n}\n\nexport interface FailedResponse extends Response {\n errors: ErrorObject[]\n}\n\nexport interface NextPageCursor {\n offset?: string\n idLt?: string\n idLte?: string\n idGt?: string\n idGte?: string\n order?: 'asc' | 'desc'\n}\n\nexport interface CollectionMeta {\n count: number\n totalCount: number\n next?: NextPageCursor\n prev?: NextPageCursor\n parent?: ResourceObject\n [attributeName: string]: unknown\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member.d.ts","sourceRoot":"","sources":["../../../src/types/resources/member.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAA;IACd,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,KAAK,EAAE,OAAO,CAAA;IACd,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;CACd"}
|
|
1
|
+
{"version":3,"file":"member.d.ts","sourceRoot":"","sources":["../../../src/types/resources/member.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAA;IACd,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,KAAK,EAAE,OAAO,CAAA;IACd,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;CACd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member.js","names":[],"sources":["../../../src/types/resources/member.ts"],"sourcesContent":["export interface MemberResource {\n type: 'Member'\n id: number\n name: string\n avatar: string\n badges: MemberBadge[]\n child: boolean\n directMessagesDisabled?: boolean\n gender: string | null\n role?: string\n}\n\nexport interface MemberBadge {\n title: string\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"member.js","names":[],"sources":["../../../src/types/resources/member.ts"],"sourcesContent":["export interface MemberResource {\n type: 'Member'\n id: number\n name: string\n avatar: string\n badges: MemberBadge[]\n child: boolean\n directMessagesDisabled?: boolean\n canDirectMessage?: boolean\n gender: string | null\n role?: string\n}\n\nexport interface MemberBadge {\n title: string\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { InfiniteData } from '@tanstack/react-query';
|
|
2
|
+
import { ApiCollection, ResourceObject } from '../../types';
|
|
3
|
+
import { RequestData } from '../client';
|
|
4
|
+
type PagesData<T extends ResourceObject> = InfiniteData<ApiCollection<T>, Partial<RequestData>>;
|
|
5
|
+
export declare function prependNewerPage<T extends ResourceObject>(data: PagesData<T> | undefined, page: ApiCollection<T>, pageParam: Partial<RequestData>): PagesData<T> | undefined;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=prepend_newer_page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepend_newer_page.d.ts","sourceRoot":"","sources":["../../../src/utils/cache/prepend_newer_page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC,KAAK,SAAS,CAAC,CAAC,SAAS,cAAc,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAA;AAE/F,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,cAAc,EACvD,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAC9B,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EACtB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,GAC9B,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAW1B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function prependNewerPage(data, page, pageParam) {
|
|
2
|
+
if (!data) return data;
|
|
3
|
+
const knownIds = new Set(data.pages.flatMap(p => p.data.map(record => record.id)));
|
|
4
|
+
const fresh = page.data.filter(record => !knownIds.has(record.id));
|
|
5
|
+
if (fresh.length === 0 && !page.meta?.next) return data;
|
|
6
|
+
return {
|
|
7
|
+
pages: [{
|
|
8
|
+
...page,
|
|
9
|
+
data: fresh
|
|
10
|
+
}, ...data.pages],
|
|
11
|
+
pageParams: [pageParam, ...data.pageParams]
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=prepend_newer_page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepend_newer_page.js","names":["prependNewerPage","data","page","pageParam","knownIds","Set","pages","flatMap","p","map","record","id","fresh","filter","has","length","meta","next","pageParams"],"sources":["../../../src/utils/cache/prepend_newer_page.ts"],"sourcesContent":["import { InfiniteData } from '@tanstack/react-query'\nimport { ApiCollection, ResourceObject } from '../../types'\nimport { RequestData } from '../client'\n\ntype PagesData<T extends ResourceObject> = InfiniteData<ApiCollection<T>, Partial<RequestData>>\n\nexport function prependNewerPage<T extends ResourceObject>(\n data: PagesData<T> | undefined,\n page: ApiCollection<T>,\n pageParam: Partial<RequestData>\n): PagesData<T> | undefined {\n if (!data) return data\n\n const knownIds = new Set(data.pages.flatMap(p => p.data.map(record => record.id)))\n const fresh = page.data.filter(record => !knownIds.has(record.id))\n if (fresh.length === 0 && !page.meta?.next) return data\n\n return {\n pages: [{ ...page, data: fresh }, ...data.pages],\n pageParams: [pageParam, ...data.pageParams],\n }\n}\n"],"mappings":"AAMA,OAAO,SAASA,gBAAgBA,CAC9BC,IAA8B,EAC9BC,IAAsB,EACtBC,SAA+B,EACL;EAC1B,IAAI,CAACF,IAAI,EAAE,OAAOA,IAAI;EAEtB,MAAMG,QAAQ,GAAG,IAAIC,GAAG,CAACJ,IAAI,CAACK,KAAK,CAACC,OAAO,CAACC,CAAC,IAAIA,CAAC,CAACP,IAAI,CAACQ,GAAG,CAACC,MAAM,IAAIA,MAAM,CAACC,EAAE,CAAC,CAAC,CAAC;EAClF,MAAMC,KAAK,GAAGV,IAAI,CAACD,IAAI,CAACY,MAAM,CAACH,MAAM,IAAI,CAACN,QAAQ,CAACU,GAAG,CAACJ,MAAM,CAACC,EAAE,CAAC,CAAC;EAClE,IAAIC,KAAK,CAACG,MAAM,KAAK,CAAC,IAAI,CAACb,IAAI,CAACc,IAAI,EAAEC,IAAI,EAAE,OAAOhB,IAAI;EAEvD,OAAO;IACLK,KAAK,EAAE,CAAC;MAAE,GAAGJ,IAAI;MAAED,IAAI,EAAEW;IAAM,CAAC,EAAE,GAAGX,IAAI,CAACK,KAAK,CAAC;IAChDY,UAAU,EAAE,CAACf,SAAS,EAAE,GAAGF,IAAI,CAACiB,UAAU;EAC5C,CAAC;AACH","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/client/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,GAAG,CAAC,EAAE,WAAW,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;QAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;QAC7D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;QAClB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,OAAO,CAAA;KACf,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAA;QACZ,EAAE,EAAE,MAAM,CAAA;KACX,CAAA;CACF;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,EAAE,CAAC,CAAA;AACzE,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC/B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;QAClB,IAAI,CAAC,EAAE;YACL,IAAI,EAAE,MAAM,CAAA;YACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YACnC,aAAa,CAAC,EAAE,aAAa,CAAA;SAC9B,CAAA;KACF,CAAA;CACF;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,CAAA;AAEtC,MAAM,WAAW,aAAc,SAAQ,cAAc;CAAG;AAExD,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,OAAO;IACpC,GAAG,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACrC,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACvC,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACzC,MAAM,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CAC5C;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,CAAA;IACzC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;IAC5D,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/client/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../src/utils/client/types.ts"],"sourcesContent":["export interface Accumulator {\n data: Record<string, unknown>[]\n included: Record<string, unknown>[]\n meta: Record<string, unknown>\n links: Record<string, unknown>\n}\n\nexport interface WalkRequest extends GetRequest {\n acc?: Accumulator\n}\n\nexport interface GenericRequest {\n headers?: Record<string, string>\n url: string\n}\n\nexport interface GetRequest extends GenericRequest {\n data: {\n filter?: string\n fields: Record<string, string[]>\n where?: Record<string, string | number | (string | number)[]>\n include?: string[]\n order?: string\n perPage?: number\n offset?: number\n walk?: boolean\n } & Record<string, unknown>\n}\n\nexport interface Relationship {\n data: {\n type: string\n id: string\n }\n}\n\nexport type Relationships = Record<string, Relationship | Relationship[]>\nexport interface PostRequest extends GenericRequest {\n data?: {\n fields?: Record<string, string> // value should be comma separated string\n include?: string[]\n data?: {\n type: string\n attributes: Record<string, unknown>\n relationships?: Relationships\n }\n }\n}\n\nexport type PatchRequest = PostRequest\n\nexport interface DeleteRequest extends GenericRequest {}\n\nexport interface ApiClient<T = unknown> {\n get(_request: GetRequest): Promise<T>\n post(_request: PostRequest): Promise<T>\n patch(_request: PatchRequest): Promise<T>\n delete(_request: DeleteRequest): Promise<T>\n}\n\nexport type RequestData = {\n fields: Record<string, string[] | string>\n where: Record<string, string | number | (string | number)[]>\n include: string[]\n data: Record<string, unknown>\n perPage: number\n offset: number\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../src/utils/client/types.ts"],"sourcesContent":["export interface Accumulator {\n data: Record<string, unknown>[]\n included: Record<string, unknown>[]\n meta: Record<string, unknown>\n links: Record<string, unknown>\n}\n\nexport interface WalkRequest extends GetRequest {\n acc?: Accumulator\n}\n\nexport interface GenericRequest {\n headers?: Record<string, string>\n url: string\n}\n\nexport interface GetRequest extends GenericRequest {\n data: {\n filter?: string\n fields: Record<string, string[]>\n where?: Record<string, string | number | (string | number)[]>\n include?: string[]\n order?: string\n perPage?: number\n offset?: number\n walk?: boolean\n } & Record<string, unknown>\n}\n\nexport interface Relationship {\n data: {\n type: string\n id: string\n }\n}\n\nexport type Relationships = Record<string, Relationship | Relationship[]>\nexport interface PostRequest extends GenericRequest {\n data?: {\n fields?: Record<string, string> // value should be comma separated string\n include?: string[]\n data?: {\n type: string\n attributes: Record<string, unknown>\n relationships?: Relationships\n }\n }\n}\n\nexport type PatchRequest = PostRequest\n\nexport interface DeleteRequest extends GenericRequest {}\n\nexport interface ApiClient<T = unknown> {\n get(_request: GetRequest): Promise<T>\n post(_request: PostRequest): Promise<T>\n patch(_request: PatchRequest): Promise<T>\n delete(_request: DeleteRequest): Promise<T>\n}\n\nexport type RequestData = {\n fields: Record<string, string[] | string>\n where: Record<string, string | number | (string | number)[]>\n include: string[]\n data: Record<string, unknown>\n perPage: number\n offset: number\n order: string\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MessagesCache } from '../hooks/use_conversation_messages_jolt_events';
|
|
2
|
+
export declare const gatedMessageCache: ({ queryKey, acceptNewMessages, onSkippedNewMessage, }: {
|
|
3
|
+
queryKey: unknown[];
|
|
4
|
+
acceptNewMessages: boolean;
|
|
5
|
+
onSkippedNewMessage?: () => void;
|
|
6
|
+
}) => MessagesCache;
|
|
7
|
+
//# sourceMappingURL=gated_message_cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gated_message_cache.d.ts","sourceRoot":"","sources":["../../src/utils/gated_message_cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAA;AAEnF,eAAO,MAAM,iBAAiB,GAAI,uDAI/B;IACD,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAA;CACjC,KAAG,aAQF,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const gatedMessageCache = ({
|
|
2
|
+
queryKey,
|
|
3
|
+
acceptNewMessages,
|
|
4
|
+
onSkippedNewMessage
|
|
5
|
+
}) => ({
|
|
6
|
+
queryKey,
|
|
7
|
+
canUpdate: event => {
|
|
8
|
+
if (event !== 'message.created' || acceptNewMessages) return true;
|
|
9
|
+
onSkippedNewMessage?.();
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=gated_message_cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gated_message_cache.js","names":["gatedMessageCache","queryKey","acceptNewMessages","onSkippedNewMessage","canUpdate","event"],"sources":["../../src/utils/gated_message_cache.ts"],"sourcesContent":["import type { MessagesCache } from '../hooks/use_conversation_messages_jolt_events'\n\nexport const gatedMessageCache = ({\n queryKey,\n acceptNewMessages,\n onSkippedNewMessage,\n}: {\n queryKey: unknown[]\n acceptNewMessages: boolean\n onSkippedNewMessage?: () => void\n}): MessagesCache => ({\n queryKey,\n canUpdate: event => {\n if (event !== 'message.created' || acceptNewMessages) return true\n\n onSkippedNewMessage?.()\n return false\n },\n})\n"],"mappings":"AAEA,OAAO,MAAMA,iBAAiB,GAAGA,CAAC;EAChCC,QAAQ;EACRC,iBAAiB;EACjBC;AAKF,CAAC,MAAqB;EACpBF,QAAQ;EACRG,SAAS,EAAEC,KAAK,IAAI;IAClB,IAAIA,KAAK,KAAK,iBAAiB,IAAIH,iBAAiB,EAAE,OAAO,IAAI;IAEjEC,mBAAmB,GAAG,CAAC;IACvB,OAAO,KAAK;EACd;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The actual `ulid` library depends on a secure random number generator, which looks like it
|
|
3
|
-
* may require a native dependency to polyfill in React Native.
|
|
4
|
-
* Since this is only used as a local temporary ID, I think we can get away with a simpler
|
|
5
|
-
* implementation that doesn't require any native dependencies.
|
|
6
|
-
*/
|
|
7
1
|
export declare function generatePlaceholderUlid({ offsetMs }?: {
|
|
8
2
|
offsetMs?: number;
|
|
9
3
|
}): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate_placeholder_ulid.d.ts","sourceRoot":"","sources":["../../src/utils/generate_placeholder_ulid.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate_placeholder_ulid.d.ts","sourceRoot":"","sources":["../../src/utils/generate_placeholder_ulid.ts"],"names":[],"mappings":"AAkBA,wBAAgB,uBAAuB,CAAC,EAAE,QAAY,EAAE,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAa5F"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ULID_CHARS } from './ulid';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* The actual `ulid` library depends on a secure random number generator, which looks like it
|
|
3
5
|
* may require a native dependency to polyfill in React Native.
|
|
@@ -5,8 +7,6 @@
|
|
|
5
7
|
* implementation that doesn't require any native dependencies.
|
|
6
8
|
*/
|
|
7
9
|
|
|
8
|
-
const ULID_CHARS = '0123456789ABCDEFGHJKMNPQRSTVWXYZ'; // Crockford's Base32
|
|
9
|
-
|
|
10
10
|
function encodeBase32(value, length) {
|
|
11
11
|
let result = '';
|
|
12
12
|
for (let i = 0; i < length; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate_placeholder_ulid.js","names":["ULID_CHARS","encodeBase32","value","length","result","i","Math","floor","generatePlaceholderUlid","offsetMs","timestamp","Date","now","timeComponent","randomComponent","random"],"sources":["../../src/utils/generate_placeholder_ulid.ts"],"sourcesContent":["/**\n * The actual `ulid` library depends on a secure random number generator, which looks like it\n * may require a native dependency to polyfill in React Native.\n * Since this is only used as a local temporary ID, I think we can get away with a simpler\n * implementation that doesn't require any native dependencies.\n */\n\
|
|
1
|
+
{"version":3,"file":"generate_placeholder_ulid.js","names":["ULID_CHARS","encodeBase32","value","length","result","i","Math","floor","generatePlaceholderUlid","offsetMs","timestamp","Date","now","timeComponent","randomComponent","random"],"sources":["../../src/utils/generate_placeholder_ulid.ts"],"sourcesContent":["import { ULID_CHARS } from './ulid'\n\n/**\n * The actual `ulid` library depends on a secure random number generator, which looks like it\n * may require a native dependency to polyfill in React Native.\n * Since this is only used as a local temporary ID, I think we can get away with a simpler\n * implementation that doesn't require any native dependencies.\n */\n\nfunction encodeBase32(value: number, length: number) {\n let result = ''\n for (let i = 0; i < length; i++) {\n result = ULID_CHARS[value % 32] + result\n value = Math.floor(value / 32)\n }\n return result\n}\n\nexport function generatePlaceholderUlid({ offsetMs = 0 }: { offsetMs?: number } = {}): string {\n const timestamp = Date.now() + offsetMs // Milliseconds since epoch\n // 48 bits for timestamp (6 Base32 characters)\n const timeComponent = encodeBase32(timestamp, 10) // 48 bits = 6 bytes = 10 Base32 characters (approx, needs more precise bit shifting)\n\n // 80 bits for randomness (16 Base32 characters)\n let randomComponent = ''\n for (let i = 0; i < 16; i++) {\n // Generate 16 random Base32 chars\n randomComponent += ULID_CHARS[Math.floor(Math.random() * 32)]\n }\n\n return timeComponent + randomComponent\n}\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,QAAQ;;AAEnC;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,YAAYA,CAACC,KAAa,EAAEC,MAAc,EAAE;EACnD,IAAIC,MAAM,GAAG,EAAE;EACf,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,MAAM,EAAEE,CAAC,EAAE,EAAE;IAC/BD,MAAM,GAAGJ,UAAU,CAACE,KAAK,GAAG,EAAE,CAAC,GAAGE,MAAM;IACxCF,KAAK,GAAGI,IAAI,CAACC,KAAK,CAACL,KAAK,GAAG,EAAE,CAAC;EAChC;EACA,OAAOE,MAAM;AACf;AAEA,OAAO,SAASI,uBAAuBA,CAAC;EAAEC,QAAQ,GAAG;AAAyB,CAAC,GAAG,CAAC,CAAC,EAAU;EAC5F,MAAMC,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGH,QAAQ,EAAC;EACxC;EACA,MAAMI,aAAa,GAAGZ,YAAY,CAACS,SAAS,EAAE,EAAE,CAAC,EAAC;;EAElD;EACA,IAAII,eAAe,GAAG,EAAE;EACxB,KAAK,IAAIT,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,EAAE,EAAEA,CAAC,EAAE,EAAE;IAC3B;IACAS,eAAe,IAAId,UAAU,CAACM,IAAI,CAACC,KAAK,CAACD,IAAI,CAACS,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;EAC/D;EAEA,OAAOF,aAAa,GAAGC,eAAe;AACxC","ignoreList":[]}
|
|
@@ -45,7 +45,10 @@ function neighborsOf(arr, i) {
|
|
|
45
45
|
}
|
|
46
46
|
function resolveReplyRoot(message, messagesById) {
|
|
47
47
|
if (!message.replyRootId || message.replyRootId === message.id) return null;
|
|
48
|
-
|
|
48
|
+
const loadedRoot = messagesById.get(message.replyRootId);
|
|
49
|
+
const loadedRootIsSaved = !!loadedRoot && !loadedRoot.pending && !loadedRoot.error;
|
|
50
|
+
if (loadedRootIsSaved) return loadedRoot;
|
|
51
|
+
return message.replyRoot ?? loadedRoot ?? null;
|
|
49
52
|
}
|
|
50
53
|
function enrichSystemMessage(message, next) {
|
|
51
54
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group_messages.js","names":["dayjs","isSystemMessage","FIVE_MINUTES_MS","groupMessages","ms","inReplyScreen","items","messagesById","Map","map","message","id","myLatestSeen","nextNeighborEnriched","forEach","i","prev","neighborsOf","next","enriched","enrichSystemMessage","push","datesDifferBetween","dateSeparator","isMyLatest","mine","enrichRegularMessage","replyRoot","resolveReplyRoot","shadow","replyShadowFor","arr","replyRootId","get","myLatestInConversation","lastInGroup","renderAuthor","nextRendersAuthor","isReplyShadowMessage","nextIsReplyShadowMessage","threadPosition","inThread","showThreadDetails","startsNewGroup","nextIntroducesReplyShadow","threadPositionFor","prevIsMyReply","undefined","nextIsMyReply","a","b","author","differsByMoreThan5Min","Math","abs","toMillis","createdAt","iso","Date","getTime","dateKey","format","type","date","isThreadRoot","isLast","current","nextInThread","nextIsThreadRoot","differentThread","enteringNewThread","messageId"],"sources":["../../src/utils/group_messages.ts"],"sourcesContent":["import type { MessageResource } from '../types/resources/message'\nimport dayjs from './dayjs'\nimport { isSystemMessage } from './system_messages'\n\nconst FIVE_MINUTES_MS = 5 * 60 * 1000\n\nexport type DateSeparator = { type: 'DateSeparator'; id: string; date: string }\n\nexport type ReplyShadowMessage = {\n type: 'ReplyShadowMessage'\n id: string\n messageId: string\n replyRoot: MessageResource | null\n isReplyShadowMessage: boolean\n nextRendersAuthor: boolean\n}\n\nexport type EnrichedMessage = MessageResource | DateSeparator | ReplyShadowMessage\n\ninterface GroupMessagesProps {\n ms: MessageResource[]\n inReplyScreen?: boolean\n}\n\nexport function groupMessages({ ms, inReplyScreen }: GroupMessagesProps): EnrichedMessage[] {\n const items: EnrichedMessage[] = []\n const messagesById = new Map(ms.map(message => [message.id, message]))\n let myLatestSeen = false\n let nextNeighborEnriched: MessageResource | undefined\n\n ms.forEach((message, i) => {\n const { prev } = neighborsOf(ms, i)\n const next = nextNeighborEnriched\n\n if (isSystemMessage(message)) {\n const enriched = enrichSystemMessage(message, next)\n items.push(enriched)\n if (datesDifferBetween(message, prev)) items.push(dateSeparator(message))\n nextNeighborEnriched = enriched\n return\n }\n\n const isMyLatest = !myLatestSeen && message.mine\n if (isMyLatest) myLatestSeen = true\n\n const enriched = enrichRegularMessage(\n { ...message, replyRoot: resolveReplyRoot(message, messagesById) },\n prev,\n next,\n isMyLatest,\n !!inReplyScreen\n )\n items.push(enriched)\n\n const shadow = replyShadowFor(enriched, prev)\n if (shadow) items.push(shadow)\n\n if (!prev || datesDifferBetween(message, prev)) {\n items.push(dateSeparator(message))\n }\n\n nextNeighborEnriched = enriched\n })\n\n return items\n}\n\nfunction neighborsOf<T>(arr: T[], i: number): { prev: T | undefined; next: T | undefined } {\n return { prev: arr[i + 1], next: arr[i - 1] }\n}\n\nfunction resolveReplyRoot(\n message: MessageResource,\n messagesById: Map<string, MessageResource>\n): MessageResource | null {\n if (!message.replyRootId || message.replyRootId === message.id) return null\n return messagesById.get(message.replyRootId) ?? message.replyRoot ?? null\n}\n\nfunction enrichSystemMessage(\n message: MessageResource,\n next: MessageResource | undefined\n): MessageResource {\n return {\n ...message,\n myLatestInConversation: false,\n lastInGroup: true,\n renderAuthor: false,\n nextRendersAuthor: next?.renderAuthor,\n isReplyShadowMessage: false,\n nextIsReplyShadowMessage: false,\n threadPosition: null,\n }\n}\n\nfunction enrichRegularMessage(\n message: MessageResource,\n prev: MessageResource | undefined,\n next: MessageResource | undefined,\n isMyLatest: boolean,\n inReplyScreen: boolean\n): MessageResource {\n const inThread = message.replyRootId !== null\n const showThreadDetails = !inReplyScreen && inThread\n\n return {\n ...message,\n myLatestInConversation: isMyLatest,\n lastInGroup: !next || startsNewGroup(next, message),\n renderAuthor: !message.mine && (!prev || startsNewGroup(message, prev)),\n nextRendersAuthor: next?.renderAuthor,\n isReplyShadowMessage: false,\n nextIsReplyShadowMessage: nextIntroducesReplyShadow(next, message),\n threadPosition: showThreadDetails ? threadPositionFor(message, next) : null,\n prevIsMyReply: showThreadDetails ? prev?.mine : undefined,\n nextIsMyReply: showThreadDetails ? next?.mine : undefined,\n }\n}\n\nfunction startsNewGroup(a: MessageResource, b: MessageResource): boolean {\n return (\n a.author?.id !== b.author?.id ||\n differsByMoreThan5Min(a, b) ||\n a.replyRootId !== b.replyRootId ||\n datesDifferBetween(a, b)\n )\n}\n\nfunction differsByMoreThan5Min(a: MessageResource, b: MessageResource): boolean {\n return Math.abs(toMillis(a.createdAt) - toMillis(b.createdAt)) > FIVE_MINUTES_MS\n}\n\nfunction toMillis(iso: string): number {\n return new Date(iso).getTime()\n}\n\nfunction datesDifferBetween(a: MessageResource, b: MessageResource | undefined): boolean {\n if (!b) return false\n return dateKey(a) !== dateKey(b)\n}\n\nfunction dateKey(message: MessageResource): string {\n return dayjs(message.createdAt).format('YYYY-MM-DD')\n}\n\nfunction dateSeparator(message: MessageResource): DateSeparator {\n return { type: 'DateSeparator', id: `day-divider-${message.id}`, date: dateKey(message) }\n}\n\nfunction threadPositionFor(\n message: MessageResource,\n next: MessageResource | undefined\n): 'first' | 'center' | 'last' | null {\n const isThreadRoot = message.replyRootId === message.id\n const isLast =\n !next || next.replyRootId !== message.replyRootId || datesDifferBetween(next, message)\n\n if (isThreadRoot && isLast) return null\n if (isThreadRoot) return 'first'\n if (isLast) return 'last'\n return 'center'\n}\n\nfunction nextIntroducesReplyShadow(\n next: MessageResource | undefined,\n current: MessageResource\n): boolean {\n if (!next) return false\n const nextInThread = next.replyRootId !== null\n const nextIsThreadRoot = next.replyRootId === next.id\n const differentThread = next.replyRootId !== current.replyRootId\n return nextInThread && !nextIsThreadRoot && (differentThread || datesDifferBetween(next, current))\n}\n\nfunction replyShadowFor(\n message: MessageResource,\n prev: MessageResource | undefined\n): ReplyShadowMessage | undefined {\n if (!message.replyRootId) return undefined\n if (message.replyRootId === message.id) return undefined\n\n const enteringNewThread =\n !prev || prev.replyRootId !== message.replyRootId || datesDifferBetween(prev, message)\n if (!enteringNewThread) return undefined\n\n return {\n type: 'ReplyShadowMessage',\n id: `${message.id}-${message.replyRootId}`,\n messageId: message.replyRootId,\n replyRoot: message.replyRoot ?? null,\n isReplyShadowMessage: true,\n nextRendersAuthor: message.renderAuthor ?? false,\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"group_messages.js","names":["dayjs","isSystemMessage","FIVE_MINUTES_MS","groupMessages","ms","inReplyScreen","items","messagesById","Map","map","message","id","myLatestSeen","nextNeighborEnriched","forEach","i","prev","neighborsOf","next","enriched","enrichSystemMessage","push","datesDifferBetween","dateSeparator","isMyLatest","mine","enrichRegularMessage","replyRoot","resolveReplyRoot","shadow","replyShadowFor","arr","replyRootId","loadedRoot","get","loadedRootIsSaved","pending","error","myLatestInConversation","lastInGroup","renderAuthor","nextRendersAuthor","isReplyShadowMessage","nextIsReplyShadowMessage","threadPosition","inThread","showThreadDetails","startsNewGroup","nextIntroducesReplyShadow","threadPositionFor","prevIsMyReply","undefined","nextIsMyReply","a","b","author","differsByMoreThan5Min","Math","abs","toMillis","createdAt","iso","Date","getTime","dateKey","format","type","date","isThreadRoot","isLast","current","nextInThread","nextIsThreadRoot","differentThread","enteringNewThread","messageId"],"sources":["../../src/utils/group_messages.ts"],"sourcesContent":["import type { MessageResource } from '../types/resources/message'\nimport dayjs from './dayjs'\nimport { isSystemMessage } from './system_messages'\n\nconst FIVE_MINUTES_MS = 5 * 60 * 1000\n\nexport type DateSeparator = { type: 'DateSeparator'; id: string; date: string }\n\nexport type ReplyShadowMessage = {\n type: 'ReplyShadowMessage'\n id: string\n messageId: string\n replyRoot: MessageResource | null\n isReplyShadowMessage: boolean\n nextRendersAuthor: boolean\n}\n\nexport type EnrichedMessage = MessageResource | DateSeparator | ReplyShadowMessage\n\ninterface GroupMessagesProps {\n ms: MessageResource[]\n inReplyScreen?: boolean\n}\n\nexport function groupMessages({ ms, inReplyScreen }: GroupMessagesProps): EnrichedMessage[] {\n const items: EnrichedMessage[] = []\n const messagesById = new Map(ms.map(message => [message.id, message]))\n let myLatestSeen = false\n let nextNeighborEnriched: MessageResource | undefined\n\n ms.forEach((message, i) => {\n const { prev } = neighborsOf(ms, i)\n const next = nextNeighborEnriched\n\n if (isSystemMessage(message)) {\n const enriched = enrichSystemMessage(message, next)\n items.push(enriched)\n if (datesDifferBetween(message, prev)) items.push(dateSeparator(message))\n nextNeighborEnriched = enriched\n return\n }\n\n const isMyLatest = !myLatestSeen && message.mine\n if (isMyLatest) myLatestSeen = true\n\n const enriched = enrichRegularMessage(\n { ...message, replyRoot: resolveReplyRoot(message, messagesById) },\n prev,\n next,\n isMyLatest,\n !!inReplyScreen\n )\n items.push(enriched)\n\n const shadow = replyShadowFor(enriched, prev)\n if (shadow) items.push(shadow)\n\n if (!prev || datesDifferBetween(message, prev)) {\n items.push(dateSeparator(message))\n }\n\n nextNeighborEnriched = enriched\n })\n\n return items\n}\n\nfunction neighborsOf<T>(arr: T[], i: number): { prev: T | undefined; next: T | undefined } {\n return { prev: arr[i + 1], next: arr[i - 1] }\n}\n\nfunction resolveReplyRoot(\n message: MessageResource,\n messagesById: Map<string, MessageResource>\n): MessageResource | null {\n if (!message.replyRootId || message.replyRootId === message.id) return null\n const loadedRoot = messagesById.get(message.replyRootId)\n const loadedRootIsSaved = !!loadedRoot && !loadedRoot.pending && !loadedRoot.error\n if (loadedRootIsSaved) return loadedRoot\n return message.replyRoot ?? loadedRoot ?? null\n}\n\nfunction enrichSystemMessage(\n message: MessageResource,\n next: MessageResource | undefined\n): MessageResource {\n return {\n ...message,\n myLatestInConversation: false,\n lastInGroup: true,\n renderAuthor: false,\n nextRendersAuthor: next?.renderAuthor,\n isReplyShadowMessage: false,\n nextIsReplyShadowMessage: false,\n threadPosition: null,\n }\n}\n\nfunction enrichRegularMessage(\n message: MessageResource,\n prev: MessageResource | undefined,\n next: MessageResource | undefined,\n isMyLatest: boolean,\n inReplyScreen: boolean\n): MessageResource {\n const inThread = message.replyRootId !== null\n const showThreadDetails = !inReplyScreen && inThread\n\n return {\n ...message,\n myLatestInConversation: isMyLatest,\n lastInGroup: !next || startsNewGroup(next, message),\n renderAuthor: !message.mine && (!prev || startsNewGroup(message, prev)),\n nextRendersAuthor: next?.renderAuthor,\n isReplyShadowMessage: false,\n nextIsReplyShadowMessage: nextIntroducesReplyShadow(next, message),\n threadPosition: showThreadDetails ? threadPositionFor(message, next) : null,\n prevIsMyReply: showThreadDetails ? prev?.mine : undefined,\n nextIsMyReply: showThreadDetails ? next?.mine : undefined,\n }\n}\n\nfunction startsNewGroup(a: MessageResource, b: MessageResource): boolean {\n return (\n a.author?.id !== b.author?.id ||\n differsByMoreThan5Min(a, b) ||\n a.replyRootId !== b.replyRootId ||\n datesDifferBetween(a, b)\n )\n}\n\nfunction differsByMoreThan5Min(a: MessageResource, b: MessageResource): boolean {\n return Math.abs(toMillis(a.createdAt) - toMillis(b.createdAt)) > FIVE_MINUTES_MS\n}\n\nfunction toMillis(iso: string): number {\n return new Date(iso).getTime()\n}\n\nfunction datesDifferBetween(a: MessageResource, b: MessageResource | undefined): boolean {\n if (!b) return false\n return dateKey(a) !== dateKey(b)\n}\n\nfunction dateKey(message: MessageResource): string {\n return dayjs(message.createdAt).format('YYYY-MM-DD')\n}\n\nfunction dateSeparator(message: MessageResource): DateSeparator {\n return { type: 'DateSeparator', id: `day-divider-${message.id}`, date: dateKey(message) }\n}\n\nfunction threadPositionFor(\n message: MessageResource,\n next: MessageResource | undefined\n): 'first' | 'center' | 'last' | null {\n const isThreadRoot = message.replyRootId === message.id\n const isLast =\n !next || next.replyRootId !== message.replyRootId || datesDifferBetween(next, message)\n\n if (isThreadRoot && isLast) return null\n if (isThreadRoot) return 'first'\n if (isLast) return 'last'\n return 'center'\n}\n\nfunction nextIntroducesReplyShadow(\n next: MessageResource | undefined,\n current: MessageResource\n): boolean {\n if (!next) return false\n const nextInThread = next.replyRootId !== null\n const nextIsThreadRoot = next.replyRootId === next.id\n const differentThread = next.replyRootId !== current.replyRootId\n return nextInThread && !nextIsThreadRoot && (differentThread || datesDifferBetween(next, current))\n}\n\nfunction replyShadowFor(\n message: MessageResource,\n prev: MessageResource | undefined\n): ReplyShadowMessage | undefined {\n if (!message.replyRootId) return undefined\n if (message.replyRootId === message.id) return undefined\n\n const enteringNewThread =\n !prev || prev.replyRootId !== message.replyRootId || datesDifferBetween(prev, message)\n if (!enteringNewThread) return undefined\n\n return {\n type: 'ReplyShadowMessage',\n id: `${message.id}-${message.replyRootId}`,\n messageId: message.replyRootId,\n replyRoot: message.replyRoot ?? null,\n isReplyShadowMessage: true,\n nextRendersAuthor: message.renderAuthor ?? false,\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,9 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
type MessagesRequestOptions = {
|
|
2
2
|
conversation_id: number;
|
|
3
3
|
reply_root_id?: string | null;
|
|
4
|
-
|
|
4
|
+
anchor?: string | null;
|
|
5
|
+
};
|
|
6
|
+
export declare const getMessagesRequestArgs: ({ conversation_id, reply_root_id, anchor, }: MessagesRequestOptions) => {
|
|
5
7
|
url: string;
|
|
6
8
|
data: {
|
|
9
|
+
where: {
|
|
10
|
+
id_around: string;
|
|
11
|
+
};
|
|
12
|
+
perPage: number;
|
|
13
|
+
fields: {
|
|
14
|
+
Message: string[];
|
|
15
|
+
Person: string[];
|
|
16
|
+
ReactionCount: string[];
|
|
17
|
+
};
|
|
18
|
+
include: string[];
|
|
19
|
+
} | {
|
|
20
|
+
where?: undefined;
|
|
7
21
|
perPage: number;
|
|
8
22
|
fields: {
|
|
9
23
|
Message: string[];
|
|
@@ -14,8 +28,6 @@ export declare const getMessagesRequestArgs: ({ conversation_id, reply_root_id,
|
|
|
14
28
|
};
|
|
15
29
|
reply_root_id: string | null;
|
|
16
30
|
};
|
|
17
|
-
export declare const getMessagesQueryKey: (
|
|
18
|
-
|
|
19
|
-
reply_root_id?: string | null;
|
|
20
|
-
}) => import("../..").RequestQueryKey;
|
|
31
|
+
export declare const getMessagesQueryKey: (options: MessagesRequestOptions) => import("../..").RequestQueryKey;
|
|
32
|
+
export {};
|
|
21
33
|
//# sourceMappingURL=get_messages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_messages.d.ts","sourceRoot":"","sources":["../../../src/utils/request/get_messages.ts"],"names":[],"mappings":"AAGA,
|
|
1
|
+
{"version":3,"file":"get_messages.d.ts","sourceRoot":"","sources":["../../../src/utils/request/get_messages.ts"],"names":[],"mappings":"AAGA,KAAK,sBAAsB,GAAG;IAC5B,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,6CAIpC,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;CAiBxB,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,SAAS,sBAAsB,oCACd,CAAA"}
|
|
@@ -2,28 +2,26 @@ import { getRequestQueryKey } from '../../hooks/use_suspense_api';
|
|
|
2
2
|
import { getMessageFields, getMessagesInclude } from './messages_data_options';
|
|
3
3
|
export const getMessagesRequestArgs = ({
|
|
4
4
|
conversation_id,
|
|
5
|
-
reply_root_id
|
|
5
|
+
reply_root_id,
|
|
6
|
+
anchor
|
|
6
7
|
}) => {
|
|
7
8
|
const normalizedReplyRootId = reply_root_id ?? null;
|
|
8
9
|
const url = normalizedReplyRootId ? `/me/conversations/${conversation_id}/messages/${normalizedReplyRootId}/replies` : `/me/conversations/${conversation_id}/messages`;
|
|
10
|
+
const anchored = anchor ? {
|
|
11
|
+
where: {
|
|
12
|
+
id_around: anchor
|
|
13
|
+
}
|
|
14
|
+
} : {};
|
|
9
15
|
return {
|
|
10
16
|
url,
|
|
11
17
|
data: {
|
|
12
18
|
perPage: 25,
|
|
13
19
|
fields: getMessageFields,
|
|
14
|
-
include: getMessagesInclude
|
|
20
|
+
include: getMessagesInclude,
|
|
21
|
+
...anchored
|
|
15
22
|
},
|
|
16
23
|
reply_root_id: normalizedReplyRootId
|
|
17
24
|
};
|
|
18
25
|
};
|
|
19
|
-
export const getMessagesQueryKey = (
|
|
20
|
-
conversation_id,
|
|
21
|
-
reply_root_id
|
|
22
|
-
}) => {
|
|
23
|
-
const requestArgs = getMessagesRequestArgs({
|
|
24
|
-
conversation_id,
|
|
25
|
-
reply_root_id
|
|
26
|
-
});
|
|
27
|
-
return getRequestQueryKey(requestArgs);
|
|
28
|
-
};
|
|
26
|
+
export const getMessagesQueryKey = options => getRequestQueryKey(getMessagesRequestArgs(options));
|
|
29
27
|
//# sourceMappingURL=get_messages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_messages.js","names":["getRequestQueryKey","getMessageFields","getMessagesInclude","getMessagesRequestArgs","conversation_id","reply_root_id","normalizedReplyRootId","url","data","perPage","fields","include","getMessagesQueryKey","
|
|
1
|
+
{"version":3,"file":"get_messages.js","names":["getRequestQueryKey","getMessageFields","getMessagesInclude","getMessagesRequestArgs","conversation_id","reply_root_id","anchor","normalizedReplyRootId","url","anchored","where","id_around","data","perPage","fields","include","getMessagesQueryKey","options"],"sources":["../../../src/utils/request/get_messages.ts"],"sourcesContent":["import { getRequestQueryKey } from '../../hooks/use_suspense_api'\nimport { getMessageFields, getMessagesInclude } from './messages_data_options'\n\ntype MessagesRequestOptions = {\n conversation_id: number\n reply_root_id?: string | null\n anchor?: string | null\n}\n\nexport const getMessagesRequestArgs = ({\n conversation_id,\n reply_root_id,\n anchor,\n}: MessagesRequestOptions) => {\n const normalizedReplyRootId = reply_root_id ?? null\n const url = normalizedReplyRootId\n ? `/me/conversations/${conversation_id}/messages/${normalizedReplyRootId}/replies`\n : `/me/conversations/${conversation_id}/messages`\n const anchored = anchor ? { where: { id_around: anchor } } : {}\n\n return {\n url,\n data: {\n perPage: 25,\n fields: getMessageFields,\n include: getMessagesInclude,\n ...anchored,\n },\n reply_root_id: normalizedReplyRootId,\n }\n}\n\nexport const getMessagesQueryKey = (options: MessagesRequestOptions) =>\n getRequestQueryKey(getMessagesRequestArgs(options))\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,8BAA8B;AACjE,SAASC,gBAAgB,EAAEC,kBAAkB,QAAQ,yBAAyB;AAQ9E,OAAO,MAAMC,sBAAsB,GAAGA,CAAC;EACrCC,eAAe;EACfC,aAAa;EACbC;AACsB,CAAC,KAAK;EAC5B,MAAMC,qBAAqB,GAAGF,aAAa,IAAI,IAAI;EACnD,MAAMG,GAAG,GAAGD,qBAAqB,GAC7B,qBAAqBH,eAAe,aAAaG,qBAAqB,UAAU,GAChF,qBAAqBH,eAAe,WAAW;EACnD,MAAMK,QAAQ,GAAGH,MAAM,GAAG;IAAEI,KAAK,EAAE;MAAEC,SAAS,EAAEL;IAAO;EAAE,CAAC,GAAG,CAAC,CAAC;EAE/D,OAAO;IACLE,GAAG;IACHI,IAAI,EAAE;MACJC,OAAO,EAAE,EAAE;MACXC,MAAM,EAAEb,gBAAgB;MACxBc,OAAO,EAAEb,kBAAkB;MAC3B,GAAGO;IACL,CAAC;IACDJ,aAAa,EAAEE;EACjB,CAAC;AACH,CAAC;AAED,OAAO,MAAMS,mBAAmB,GAAIC,OAA+B,IACjEjB,kBAAkB,CAACG,sBAAsB,CAACc,OAAO,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ulid.d.ts","sourceRoot":"","sources":["../../src/utils/ulid.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,qCAAqC,CAAA;AAI5D,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMnD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const ULID_CHARS = '0123456789ABCDEFGHJKMNPQRSTVWXYZ'; // Crockford's Base32
|
|
2
|
+
|
|
3
|
+
const TIME_LENGTH = 10;
|
|
4
|
+
export function decodeUlidTime(ulid) {
|
|
5
|
+
return ulid.slice(0, TIME_LENGTH).toUpperCase().split('').reduce((time, char) => time * 32 + ULID_CHARS.indexOf(char), 0);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=ulid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ulid.js","names":["ULID_CHARS","TIME_LENGTH","decodeUlidTime","ulid","slice","toUpperCase","split","reduce","time","char","indexOf"],"sources":["../../src/utils/ulid.ts"],"sourcesContent":["export const ULID_CHARS = '0123456789ABCDEFGHJKMNPQRSTVWXYZ' // Crockford's Base32\n\nconst TIME_LENGTH = 10\n\nexport function decodeUlidTime(ulid: string): number {\n return ulid\n .slice(0, TIME_LENGTH)\n .toUpperCase()\n .split('')\n .reduce((time, char) => time * 32 + ULID_CHARS.indexOf(char), 0)\n}\n"],"mappings":"AAAA,OAAO,MAAMA,UAAU,GAAG,kCAAkC,EAAC;;AAE7D,MAAMC,WAAW,GAAG,EAAE;AAEtB,OAAO,SAASC,cAAcA,CAACC,IAAY,EAAU;EACnD,OAAOA,IAAI,CACRC,KAAK,CAAC,CAAC,EAAEH,WAAW,CAAC,CACrBI,WAAW,CAAC,CAAC,CACbC,KAAK,CAAC,EAAE,CAAC,CACTC,MAAM,CAAC,CAACC,IAAI,EAAEC,IAAI,KAAKD,IAAI,GAAG,EAAE,GAAGR,UAAU,CAACU,OAAO,CAACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACpE","ignoreList":[]}
|