@planningcenter/chat-react-native 4.2.1-qa-staging.5 → 4.2.1-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/build/components/conversation/message_form.d.ts +1 -2
  2. package/build/components/conversation/message_form.d.ts.map +1 -1
  3. package/build/components/conversation/message_form.js +51 -54
  4. package/build/components/conversation/message_form.js.map +1 -1
  5. package/build/components/conversation/message_list.d.ts +2 -3
  6. package/build/components/conversation/message_list.d.ts.map +1 -1
  7. package/build/components/conversation/message_list.js +66 -152
  8. package/build/components/conversation/message_list.js.map +1 -1
  9. package/build/contexts/api_provider.d.ts.map +1 -1
  10. package/build/contexts/api_provider.js +1 -2
  11. package/build/contexts/api_provider.js.map +1 -1
  12. package/build/contexts/conversation_context.d.ts +1 -3
  13. package/build/contexts/conversation_context.d.ts.map +1 -1
  14. package/build/contexts/conversation_context.js +18 -23
  15. package/build/contexts/conversation_context.js.map +1 -1
  16. package/build/hooks/index.d.ts +0 -1
  17. package/build/hooks/index.d.ts.map +1 -1
  18. package/build/hooks/index.js +0 -1
  19. package/build/hooks/index.js.map +1 -1
  20. package/build/hooks/paginator_meta.d.ts +1 -3
  21. package/build/hooks/paginator_meta.d.ts.map +1 -1
  22. package/build/hooks/paginator_meta.js +8 -25
  23. package/build/hooks/paginator_meta.js.map +1 -1
  24. package/build/hooks/use_api.d.ts.map +1 -1
  25. package/build/hooks/use_api.js +8 -5
  26. package/build/hooks/use_api.js.map +1 -1
  27. package/build/hooks/use_conversation_messages.d.ts +2 -9
  28. package/build/hooks/use_conversation_messages.d.ts.map +1 -1
  29. package/build/hooks/use_conversation_messages.js +45 -84
  30. package/build/hooks/use_conversation_messages.js.map +1 -1
  31. package/build/hooks/use_conversation_messages_jolt_events.d.ts +1 -17
  32. package/build/hooks/use_conversation_messages_jolt_events.d.ts.map +1 -1
  33. package/build/hooks/use_conversation_messages_jolt_events.js +80 -89
  34. package/build/hooks/use_conversation_messages_jolt_events.js.map +1 -1
  35. package/build/hooks/use_mark_latest_message_read.d.ts +1 -2
  36. package/build/hooks/use_mark_latest_message_read.d.ts.map +1 -1
  37. package/build/hooks/use_mark_latest_message_read.js +3 -4
  38. package/build/hooks/use_mark_latest_message_read.js.map +1 -1
  39. package/build/hooks/use_message_create_or_update.d.ts.map +1 -1
  40. package/build/hooks/use_message_create_or_update.js +80 -91
  41. package/build/hooks/use_message_create_or_update.js.map +1 -1
  42. package/build/hooks/use_message_reaction_toggle.d.ts.map +1 -1
  43. package/build/hooks/use_message_reaction_toggle.js +40 -45
  44. package/build/hooks/use_message_reaction_toggle.js.map +1 -1
  45. package/build/hooks/use_suspense_api.d.ts.map +1 -1
  46. package/build/hooks/use_suspense_api.js +8 -5
  47. package/build/hooks/use_suspense_api.js.map +1 -1
  48. package/build/screens/conversation_new/components/services_form.js +8 -9
  49. package/build/screens/conversation_new/components/services_form.js.map +1 -1
  50. package/build/screens/conversation_screen.d.ts +0 -1
  51. package/build/screens/conversation_screen.d.ts.map +1 -1
  52. package/build/screens/conversation_screen.js +254 -481
  53. package/build/screens/conversation_screen.js.map +1 -1
  54. package/build/screens/message_actions_screen.d.ts.map +1 -1
  55. package/build/screens/message_actions_screen.js +26 -21
  56. package/build/screens/message_actions_screen.js.map +1 -1
  57. package/build/screens/message_report_screen.d.ts.map +1 -1
  58. package/build/screens/message_report_screen.js +44 -17
  59. package/build/screens/message_report_screen.js.map +1 -1
  60. package/build/screens/reactions_screen.d.ts.map +1 -1
  61. package/build/screens/reactions_screen.js +88 -70
  62. package/build/screens/reactions_screen.js.map +1 -1
  63. package/build/types/api_primitives.d.ts +0 -2
  64. package/build/types/api_primitives.d.ts.map +1 -1
  65. package/build/types/api_primitives.js.map +1 -1
  66. package/build/types/resources/member.d.ts +0 -1
  67. package/build/types/resources/member.d.ts.map +1 -1
  68. package/build/types/resources/member.js.map +1 -1
  69. package/build/utils/cache/messages_cache.d.ts +0 -1
  70. package/build/utils/cache/messages_cache.d.ts.map +1 -1
  71. package/build/utils/cache/messages_cache.js +0 -3
  72. package/build/utils/cache/messages_cache.js.map +1 -1
  73. package/build/utils/cache/optimistically_update_message.d.ts +1 -2
  74. package/build/utils/cache/optimistically_update_message.d.ts.map +1 -1
  75. package/build/utils/cache/optimistically_update_message.js +4 -4
  76. package/build/utils/cache/optimistically_update_message.js.map +1 -1
  77. package/build/utils/client/types.d.ts +0 -1
  78. package/build/utils/client/types.d.ts.map +1 -1
  79. package/build/utils/client/types.js.map +1 -1
  80. package/build/utils/generate_placeholder_ulid.d.ts +6 -0
  81. package/build/utils/generate_placeholder_ulid.d.ts.map +1 -1
  82. package/build/utils/generate_placeholder_ulid.js +2 -2
  83. package/build/utils/generate_placeholder_ulid.js.map +1 -1
  84. package/build/utils/request/get_messages.d.ts +6 -18
  85. package/build/utils/request/get_messages.d.ts.map +1 -1
  86. package/build/utils/request/get_messages.js +12 -10
  87. package/build/utils/request/get_messages.js.map +1 -1
  88. package/package.json +3 -3
  89. package/src/__tests__/hooks/paginator_meta.test.ts +2 -73
  90. package/src/components/conversation/__tests__/message_list.test.tsx +0 -42
  91. package/src/components/conversation/message_form.tsx +0 -3
  92. package/src/components/conversation/message_list.tsx +4 -58
  93. package/src/contexts/api_provider.tsx +1 -2
  94. package/src/contexts/conversation_context.tsx +1 -6
  95. package/src/hooks/index.ts +0 -1
  96. package/src/hooks/paginator_meta.ts +5 -29
  97. package/src/hooks/use_api.ts +5 -4
  98. package/src/hooks/use_conversation_messages.ts +11 -52
  99. package/src/hooks/use_conversation_messages_jolt_events.ts +43 -62
  100. package/src/hooks/use_mark_latest_message_read.ts +3 -4
  101. package/src/hooks/use_message_create_or_update.ts +8 -8
  102. package/src/hooks/use_message_reaction_toggle.ts +1 -3
  103. package/src/hooks/use_suspense_api.ts +5 -4
  104. package/src/screens/conversation_new/components/services_form.tsx +5 -5
  105. package/src/screens/conversation_screen.tsx +14 -123
  106. package/src/screens/message_actions_screen.tsx +5 -3
  107. package/src/screens/message_report_screen.tsx +3 -2
  108. package/src/screens/reactions_screen.tsx +4 -2
  109. package/src/types/api_primitives.ts +0 -2
  110. package/src/types/resources/member.ts +0 -1
  111. package/src/utils/cache/__tests__/messages_cache.test.ts +1 -14
  112. package/src/utils/cache/messages_cache.ts +0 -3
  113. package/src/utils/cache/optimistically_update_message.ts +5 -2
  114. package/src/utils/client/types.ts +0 -1
  115. package/src/utils/generate_placeholder_ulid.ts +2 -2
  116. package/src/utils/request/get_messages.ts +14 -12
  117. package/build/components/conversation/anchor_not_found_boundary.d.ts +0 -18
  118. package/build/components/conversation/anchor_not_found_boundary.d.ts.map +0 -1
  119. package/build/components/conversation/anchor_not_found_boundary.js +0 -20
  120. package/build/components/conversation/anchor_not_found_boundary.js.map +0 -1
  121. package/build/hooks/use_conversation_message_lookup.d.ts +0 -7
  122. package/build/hooks/use_conversation_message_lookup.d.ts.map +0 -1
  123. package/build/hooks/use_conversation_message_lookup.js +0 -52
  124. package/build/hooks/use_conversation_message_lookup.js.map +0 -1
  125. package/build/hooks/use_direct_message_eligibility.d.ts +0 -14
  126. package/build/hooks/use_direct_message_eligibility.d.ts.map +0 -1
  127. package/build/hooks/use_direct_message_eligibility.js +0 -87
  128. package/build/hooks/use_direct_message_eligibility.js.map +0 -1
  129. package/build/hooks/use_fetch_newer_messages.d.ts +0 -9
  130. package/build/hooks/use_fetch_newer_messages.d.ts.map +0 -1
  131. package/build/hooks/use_fetch_newer_messages.js +0 -69
  132. package/build/hooks/use_fetch_newer_messages.js.map +0 -1
  133. package/build/hooks/use_fetch_newer_on_foreground.d.ts +0 -8
  134. package/build/hooks/use_fetch_newer_on_foreground.d.ts.map +0 -1
  135. package/build/hooks/use_fetch_newer_on_foreground.js +0 -42
  136. package/build/hooks/use_fetch_newer_on_foreground.js.map +0 -1
  137. package/build/hooks/use_held_back_messages.d.ts +0 -11
  138. package/build/hooks/use_held_back_messages.d.ts.map +0 -1
  139. package/build/hooks/use_held_back_messages.js +0 -24
  140. package/build/hooks/use_held_back_messages.js.map +0 -1
  141. package/build/utils/cache/find_message_in_caches.d.ts +0 -4
  142. package/build/utils/cache/find_message_in_caches.d.ts.map +0 -1
  143. package/build/utils/cache/find_message_in_caches.js +0 -16
  144. package/build/utils/cache/find_message_in_caches.js.map +0 -1
  145. package/build/utils/cache/invalidate_refetchable_queries.d.ts +0 -3
  146. package/build/utils/cache/invalidate_refetchable_queries.d.ts.map +0 -1
  147. package/build/utils/cache/invalidate_refetchable_queries.js +0 -8
  148. package/build/utils/cache/invalidate_refetchable_queries.js.map +0 -1
  149. package/build/utils/cache/prepend_newer_page.d.ts +0 -7
  150. package/build/utils/cache/prepend_newer_page.d.ts.map +0 -1
  151. package/build/utils/cache/prepend_newer_page.js +0 -15
  152. package/build/utils/cache/prepend_newer_page.js.map +0 -1
  153. package/build/utils/gated_message_cache.d.ts +0 -7
  154. package/build/utils/gated_message_cache.d.ts.map +0 -1
  155. package/build/utils/gated_message_cache.js +0 -13
  156. package/build/utils/gated_message_cache.js.map +0 -1
  157. package/build/utils/ulid.d.ts +0 -3
  158. package/build/utils/ulid.d.ts.map +0 -1
  159. package/build/utils/ulid.js +0 -7
  160. package/build/utils/ulid.js.map +0 -1
  161. package/src/__tests__/hooks/use_conversation_messages.test.ts +0 -22
  162. package/src/__tests__/hooks/use_conversation_messages_jolt_events.test.ts +0 -33
  163. package/src/__tests__/hooks/use_direct_message_eligibility.test.tsx +0 -83
  164. package/src/__tests__/screens/conversation_new/components/services_form.test.tsx +0 -91
  165. package/src/__tests__/utils/gated_message_cache.test.ts +0 -26
  166. package/src/__tests__/utils/request/get_messages.test.ts +0 -24
  167. package/src/__tests__/utils/ulid.test.ts +0 -15
  168. package/src/components/conversation/__tests__/anchor_not_found_boundary.test.tsx +0 -51
  169. package/src/components/conversation/anchor_not_found_boundary.tsx +0 -21
  170. package/src/hooks/__tests__/use_fetch_newer_messages.test.tsx +0 -95
  171. package/src/hooks/__tests__/use_held_back_messages.test.tsx +0 -60
  172. package/src/hooks/__tests__/use_message_reaction_toggle.test.tsx +0 -73
  173. package/src/hooks/use_conversation_message_lookup.ts +0 -29
  174. package/src/hooks/use_direct_message_eligibility.ts +0 -40
  175. package/src/hooks/use_fetch_newer_messages.ts +0 -52
  176. package/src/hooks/use_fetch_newer_on_foreground.ts +0 -25
  177. package/src/hooks/use_held_back_messages.ts +0 -33
  178. package/src/utils/cache/__tests__/find_message_in_caches.test.ts +0 -37
  179. package/src/utils/cache/__tests__/invalidate_refetchable_queries.test.ts +0 -23
  180. package/src/utils/cache/__tests__/prepend_newer_page.test.ts +0 -34
  181. package/src/utils/cache/find_message_in_caches.ts +0 -20
  182. package/src/utils/cache/invalidate_refetchable_queries.ts +0 -9
  183. package/src/utils/cache/prepend_newer_page.ts +0 -19
  184. package/src/utils/gated_message_cache.ts +0 -19
  185. package/src/utils/ulid.ts +0 -11
@@ -9,7 +9,6 @@ import { useReactionStyles } from '../components/conversation/message_reaction'
9
9
  import FormSheet, { getFormSheetScreenOptions } from '../components/primitive/form_sheet'
10
10
  import { useCreateAndroidRippleColor, useFontScale, useTheme } from '../hooks'
11
11
  import { useApiClient } from '../hooks/use_api_client'
12
- import { useConversationMessageLookup } from '../hooks/use_conversation_message_lookup'
13
12
  import { useConversationMessages } from '../hooks/use_conversation_messages'
14
13
  import { availableFeatures, useFeatures } from '../hooks/use_features'
15
14
  import { useMessageReactionToggle } from '../hooks/use_message_reaction_toggle'
@@ -42,8 +41,11 @@ export function MessageActionsScreen({ route }: MessageActionsScreenProps) {
42
41
  isSystemMessage,
43
42
  } = route.params
44
43
 
45
- const { refetch } = useConversationMessages({ conversation_id }, { refetchOnMount: false })
46
- const message = useConversationMessageLookup({ conversation_id, message_id })
44
+ const { messages, refetch } = useConversationMessages(
45
+ { conversation_id },
46
+ { refetchOnMount: false }
47
+ )
48
+ const message = messages.find(m => m.id === message_id)
47
49
 
48
50
  if (!message) return null
49
51
 
@@ -14,7 +14,7 @@ import {
14
14
  } from '../components/display/platform_modal_header_buttons'
15
15
  import BlankState from '../components/primitive/blank_state_primitive'
16
16
  import { useTheme } from '../hooks'
17
- import { useConversationMessageLookup } from '../hooks/use_conversation_message_lookup'
17
+ import { useConversationMessages } from '../hooks/use_conversation_messages'
18
18
  import { useReportMessage } from '../hooks/use_report_message'
19
19
  import { MessageResource } from '../types'
20
20
  import { MessageReportReason } from '../types/resources/message_report'
@@ -51,7 +51,8 @@ export type MessageReportScreenProps = StaticScreenProps<{
51
51
  export function MessageReportScreen({ route }: MessageReportScreenProps) {
52
52
  const { conversation_id, message_id } = route.params
53
53
 
54
- const message = useConversationMessageLookup({ conversation_id, message_id })
54
+ const { messages } = useConversationMessages({ conversation_id }, { refetchOnMount: false })
55
+ const message = messages.find(m => m.id === message_id)
55
56
 
56
57
  if (!message) return null
57
58
 
@@ -7,7 +7,7 @@ import { Avatar, Text } from '../components'
7
7
  import { Tabs } from '../components/display/tabs'
8
8
  import FormSheet, { getFormSheetScreenOptions } from '../components/primitive/form_sheet'
9
9
  import { useSuspenseGet, useTheme } from '../hooks'
10
- import { useConversationMessageLookup } from '../hooks/use_conversation_message_lookup'
10
+ import { useConversationMessages } from '../hooks/use_conversation_messages'
11
11
  import { useFontScale } from '../hooks/use_font_scale'
12
12
  import { MemberResource } from '../types'
13
13
  import { ReactionCountResource } from '../types/resources/reaction'
@@ -31,7 +31,9 @@ export function ReactionsScreen({ route }: ReactionScreenProps) {
31
31
  const { conversation_id, message_id, reaction_value } = route.params
32
32
  const styles = useStyles()
33
33
 
34
- const message = useConversationMessageLookup({ conversation_id, message_id })
34
+ const { messages } = useConversationMessages({ conversation_id }, { refetchOnMount: false })
35
+
36
+ const message = messages.find(m => m.id === message_id)
35
37
  const reactionCounts = message?.reactionCounts || []
36
38
  const initialReactionCount =
37
39
  reactionCounts.find(r => r.value === reaction_value) || reactionCounts[0]
@@ -33,14 +33,12 @@ export interface NextPageCursor {
33
33
  idLte?: string
34
34
  idGt?: string
35
35
  idGte?: string
36
- order?: 'asc' | 'desc'
37
36
  }
38
37
 
39
38
  export interface CollectionMeta {
40
39
  count: number
41
40
  totalCount: number
42
41
  next?: NextPageCursor
43
- prev?: NextPageCursor
44
42
  parent?: ResourceObject
45
43
  [attributeName: string]: unknown
46
44
  }
@@ -6,7 +6,6 @@ export interface MemberResource {
6
6
  badges: MemberBadge[]
7
7
  child: boolean
8
8
  directMessagesDisabled?: boolean
9
- canDirectMessage?: boolean
10
9
  gender: string | null
11
10
  role?: string
12
11
  }
@@ -1,7 +1,7 @@
1
1
  import { InfiniteData, QueryClient } from '@tanstack/react-query'
2
2
  import type { ApiCollection, MessageResource } from '../../../types'
3
3
  import type { PersonResource } from '../../../types/resources/person'
4
- import { newestPersistedMessageId, updateCacheWithMessage } from '../messages_cache'
4
+ import { updateCacheWithMessage } from '../messages_cache'
5
5
 
6
6
  type MessagesQueryData = InfiniteData<ApiCollection<MessageResource>>
7
7
 
@@ -87,16 +87,3 @@ describe('updateCacheWithMessage on message.created', () => {
87
87
  expect(idsInCache(queryClient)).toEqual(['01F', '01B-temp', '01A-temp'])
88
88
  })
89
89
  })
90
-
91
- describe('newestPersistedMessageId', () => {
92
- it('skips optimistic rows so a failed send cannot become the catch-up cursor', () => {
93
- const messages = [message({ id: '01ZZZ-temp' }), message({ id: '01B' }), message({ id: '01A' })]
94
-
95
- expect(newestPersistedMessageId(messages)).toBe('01B')
96
- })
97
-
98
- it('is undefined when nothing has been persisted', () => {
99
- expect(newestPersistedMessageId([message({ id: '01ZZZ-temp' })])).toBeUndefined()
100
- expect(newestPersistedMessageId([])).toBeUndefined()
101
- })
102
- })
@@ -135,9 +135,6 @@ type MessagesQueryData = InfiniteData<ApiCollection<MessageResource>>
135
135
  export function isTemporaryMessageId(messageId?: string | null): boolean {
136
136
  return !!messageId && messageId.endsWith('-temp')
137
137
  }
138
- export function newestPersistedMessageId(messages: MessageResource[]): string | undefined {
139
- return messages.find(message => !isTemporaryMessageId(message.id))?.id
140
- }
141
138
  export function isNewMessage(message?: MessageResource): boolean {
142
139
  return !message?.id || isTemporaryMessageId(message.id)
143
140
  }
@@ -9,16 +9,19 @@ export function optimisticallyUpdateMessage({
9
9
  message,
10
10
  text,
11
11
  replyRootId,
12
- queryKey = getMessagesQueryKey({ conversation_id: conversationId, reply_root_id: replyRootId }),
13
12
  }: {
14
13
  conversationId: number
15
14
  message: MessageResource
16
15
  text: string
17
16
  replyRootId?: string | null
18
- queryKey?: unknown[]
19
17
  }) {
20
18
  type QueryData = InfiniteData<ApiCollection<MessageResource>>
21
19
 
20
+ const queryKey = getMessagesQueryKey({
21
+ conversation_id: conversationId,
22
+ reply_root_id: replyRootId,
23
+ })
24
+
22
25
  let optimisticMessage = message
23
26
 
24
27
  chatQueryClient.setQueryData<QueryData>(queryKey, data =>
@@ -65,5 +65,4 @@ export type RequestData = {
65
65
  data: Record<string, unknown>
66
66
  perPage: number
67
67
  offset: number
68
- order: string
69
68
  }
@@ -1,5 +1,3 @@
1
- import { ULID_CHARS } from './ulid'
2
-
3
1
  /**
4
2
  * The actual `ulid` library depends on a secure random number generator, which looks like it
5
3
  * may require a native dependency to polyfill in React Native.
@@ -7,6 +5,8 @@ import { ULID_CHARS } from './ulid'
7
5
  * implementation that doesn't require any native dependencies.
8
6
  */
9
7
 
8
+ const ULID_CHARS = '0123456789ABCDEFGHJKMNPQRSTVWXYZ' // Crockford's Base32
9
+
10
10
  function encodeBase32(value: number, length: number) {
11
11
  let result = ''
12
12
  for (let i = 0; i < length; i++) {
@@ -1,22 +1,17 @@
1
1
  import { getRequestQueryKey } from '../../hooks/use_suspense_api'
2
2
  import { getMessageFields, getMessagesInclude } from './messages_data_options'
3
3
 
4
- type MessagesRequestOptions = {
5
- conversation_id: number
6
- reply_root_id?: string | null
7
- anchor?: string | null
8
- }
9
-
10
4
  export const getMessagesRequestArgs = ({
11
5
  conversation_id,
12
6
  reply_root_id,
13
- anchor,
14
- }: MessagesRequestOptions) => {
7
+ }: {
8
+ conversation_id: number
9
+ reply_root_id?: string | null
10
+ }) => {
15
11
  const normalizedReplyRootId = reply_root_id ?? null
16
12
  const url = normalizedReplyRootId
17
13
  ? `/me/conversations/${conversation_id}/messages/${normalizedReplyRootId}/replies`
18
14
  : `/me/conversations/${conversation_id}/messages`
19
- const anchored = anchor ? { where: { id_around: anchor } } : {}
20
15
 
21
16
  return {
22
17
  url,
@@ -24,11 +19,18 @@ export const getMessagesRequestArgs = ({
24
19
  perPage: 25,
25
20
  fields: getMessageFields,
26
21
  include: getMessagesInclude,
27
- ...anchored,
28
22
  },
29
23
  reply_root_id: normalizedReplyRootId,
30
24
  }
31
25
  }
32
26
 
33
- export const getMessagesQueryKey = (options: MessagesRequestOptions) =>
34
- getRequestQueryKey(getMessagesRequestArgs(options))
27
+ export const getMessagesQueryKey = ({
28
+ conversation_id,
29
+ reply_root_id,
30
+ }: {
31
+ conversation_id: number
32
+ reply_root_id?: string | null
33
+ }) => {
34
+ const requestArgs = getMessagesRequestArgs({ conversation_id, reply_root_id })
35
+ return getRequestQueryKey(requestArgs)
36
+ }
@@ -1,18 +0,0 @@
1
- import React, { PropsWithChildren } from 'react';
2
- type Props = PropsWithChildren<{
3
- onAnchorNotFound: () => void;
4
- }>;
5
- export declare class AnchorNotFoundBoundary extends React.Component<Props, {
6
- recovering: boolean;
7
- }> {
8
- state: {
9
- recovering: boolean;
10
- };
11
- static getDerivedStateFromError(error: Error): {
12
- recovering: boolean;
13
- };
14
- componentDidCatch(): void;
15
- render(): React.ReactNode;
16
- }
17
- export {};
18
- //# sourceMappingURL=anchor_not_found_boundary.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"anchor_not_found_boundary.d.ts","sourceRoot":"","sources":["../../../src/components/conversation/anchor_not_found_boundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAGhD,KAAK,KAAK,GAAG,iBAAiB,CAAC;IAAE,gBAAgB,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,CAAA;AAEhE,qBAAa,sBAAuB,SAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC;IACzF,KAAK;;MAAwB;IAE7B,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK;;;IAK5C,iBAAiB;IAIjB,MAAM;CAGP"}
@@ -1,20 +0,0 @@
1
- import React from 'react';
2
- import { ResponseError } from '../../utils/response_error';
3
- export class AnchorNotFoundBoundary extends React.Component {
4
- state = {
5
- recovering: false
6
- };
7
- static getDerivedStateFromError(error) {
8
- if (error instanceof ResponseError && error.status === 404) return {
9
- recovering: true
10
- };
11
- throw error;
12
- }
13
- componentDidCatch() {
14
- this.props.onAnchorNotFound();
15
- }
16
- render() {
17
- return this.state.recovering ? null : this.props.children;
18
- }
19
- }
20
- //# sourceMappingURL=anchor_not_found_boundary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"anchor_not_found_boundary.js","names":["React","ResponseError","AnchorNotFoundBoundary","Component","state","recovering","getDerivedStateFromError","error","status","componentDidCatch","props","onAnchorNotFound","render","children"],"sources":["../../../src/components/conversation/anchor_not_found_boundary.tsx"],"sourcesContent":["import React, { PropsWithChildren } from 'react'\nimport { ResponseError } from '../../utils/response_error'\n\ntype Props = PropsWithChildren<{ onAnchorNotFound: () => void }>\n\nexport class AnchorNotFoundBoundary extends React.Component<Props, { recovering: boolean }> {\n state = { recovering: false }\n\n static getDerivedStateFromError(error: Error) {\n if (error instanceof ResponseError && error.status === 404) return { recovering: true }\n throw error\n }\n\n componentDidCatch() {\n this.props.onAnchorNotFound()\n }\n\n render() {\n return this.state.recovering ? null : this.props.children\n }\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAA6B,OAAO;AAChD,SAASC,aAAa,QAAQ,4BAA4B;AAI1D,OAAO,MAAMC,sBAAsB,SAASF,KAAK,CAACG,SAAS,CAAiC;EAC1FC,KAAK,GAAG;IAAEC,UAAU,EAAE;EAAM,CAAC;EAE7B,OAAOC,wBAAwBA,CAACC,KAAY,EAAE;IAC5C,IAAIA,KAAK,YAAYN,aAAa,IAAIM,KAAK,CAACC,MAAM,KAAK,GAAG,EAAE,OAAO;MAAEH,UAAU,EAAE;IAAK,CAAC;IACvF,MAAME,KAAK;EACb;EAEAE,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAACC,KAAK,CAACC,gBAAgB,CAAC,CAAC;EAC/B;EAEAC,MAAMA,CAAA,EAAG;IACP,OAAO,IAAI,CAACR,KAAK,CAACC,UAAU,GAAG,IAAI,GAAG,IAAI,CAACK,KAAK,CAACG,QAAQ;EAC3D;AACF","ignoreList":[]}
@@ -1,7 +0,0 @@
1
- type Options = {
2
- conversation_id: number;
3
- message_id: string;
4
- };
5
- export declare const useConversationMessageLookup: ({ conversation_id, message_id }: Options) => import("..").MessageResource | undefined;
6
- export {};
7
- //# sourceMappingURL=use_conversation_message_lookup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_conversation_message_lookup.d.ts","sourceRoot":"","sources":["../../src/hooks/use_conversation_message_lookup.ts"],"names":[],"mappings":"AAKA,KAAK,OAAO,GAAG;IACb,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,4BAA4B,GAAI,iCAAiC,OAAO,6CAkBpF,CAAA"}
@@ -1,52 +0,0 @@
1
- import { c as _c } from "react/compiler-runtime";
2
- import { useQueryClient } from '@tanstack/react-query';
3
- import { useCallback, useSyncExternalStore } from 'react';
4
- import { findMessageInCaches } from '../utils/cache/find_message_in_caches';
5
- import { useConversationMessage } from './use_conversation_message';
6
- export const useConversationMessageLookup = t0 => {
7
- const $ = _c(10);
8
- const {
9
- conversation_id,
10
- message_id
11
- } = t0;
12
- const queryClient = useQueryClient();
13
- let t1;
14
- if ($[0] !== queryClient) {
15
- t1 = onChange => queryClient.getQueryCache().subscribe(onChange);
16
- $[0] = queryClient;
17
- $[1] = t1;
18
- } else {
19
- t1 = $[1];
20
- }
21
- const subscribe = t1;
22
- let t2;
23
- if ($[2] !== conversation_id || $[3] !== message_id || $[4] !== queryClient) {
24
- t2 = () => findMessageInCaches(queryClient, conversation_id, message_id);
25
- $[2] = conversation_id;
26
- $[3] = message_id;
27
- $[4] = queryClient;
28
- $[5] = t2;
29
- } else {
30
- t2 = $[5];
31
- }
32
- const getSnapshot = t2;
33
- const cached = useSyncExternalStore(subscribe, getSnapshot);
34
- const t3 = !cached;
35
- let t4;
36
- if ($[6] !== conversation_id || $[7] !== message_id || $[8] !== t3) {
37
- t4 = {
38
- conversation_id,
39
- messageId: message_id,
40
- enabled: t3
41
- };
42
- $[6] = conversation_id;
43
- $[7] = message_id;
44
- $[8] = t3;
45
- $[9] = t4;
46
- } else {
47
- t4 = $[9];
48
- }
49
- const fetched = useConversationMessage(t4);
50
- return cached ?? fetched.message;
51
- };
52
- //# sourceMappingURL=use_conversation_message_lookup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_conversation_message_lookup.js","names":["useQueryClient","useCallback","useSyncExternalStore","findMessageInCaches","useConversationMessage","useConversationMessageLookup","t0","$","_c","conversation_id","message_id","queryClient","t1","onChange","getQueryCache","subscribe","t2","getSnapshot","cached","t3","t4","messageId","enabled","fetched","message"],"sources":["../../src/hooks/use_conversation_message_lookup.ts"],"sourcesContent":["import { useQueryClient } from '@tanstack/react-query'\nimport { useCallback, useSyncExternalStore } from 'react'\nimport { findMessageInCaches } from '../utils/cache/find_message_in_caches'\nimport { useConversationMessage } from './use_conversation_message'\n\ntype Options = {\n conversation_id: number\n message_id: string\n}\n\nexport const useConversationMessageLookup = ({ conversation_id, message_id }: Options) => {\n const queryClient = useQueryClient()\n const subscribe = useCallback(\n (onChange: () => void) => queryClient.getQueryCache().subscribe(onChange),\n [queryClient]\n )\n const getSnapshot = useCallback(\n () => findMessageInCaches(queryClient, conversation_id, message_id),\n [conversation_id, message_id, queryClient]\n )\n const cached = useSyncExternalStore(subscribe, getSnapshot)\n const fetched = useConversationMessage({\n conversation_id,\n messageId: message_id,\n enabled: !cached,\n })\n\n return cached ?? fetched.message\n}\n"],"mappings":";AAAA,SAASA,cAAc,QAAQ,uBAAuB;AACtD,SAASC,WAAW,EAAEC,oBAAoB,QAAQ,OAAO;AACzD,SAASC,mBAAmB,QAAQ,uCAAuC;AAC3E,SAASC,sBAAsB,QAAQ,4BAA4B;AAOnE,OAAO,MAAMC,4BAA4B,GAAGC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAC;IAAAC,eAAA;IAAAC;EAAA,IAAAJ,EAAwC;EACnF,MAAAK,WAAA,GAAoBX,cAAc,CAAC,CAAC;EAAA,IAAAY,EAAA;EAAA,IAAAL,CAAA,QAAAI,WAAA;IAElCC,EAAA,GAAAC,QAAA,IAA0BF,WAAW,CAAAG,aAAc,CAAC,CAAC,CAAAC,SAAU,CAACF,QAAQ,CAAC;IAAAN,CAAA,MAAAI,WAAA;IAAAJ,CAAA,MAAAK,EAAA;EAAA;IAAAA,EAAA,GAAAL,CAAA;EAAA;EAD3E,MAAAQ,SAAA,GAAkBH,EAGjB;EAAA,IAAAI,EAAA;EAAA,IAAAT,CAAA,QAAAE,eAAA,IAAAF,CAAA,QAAAG,UAAA,IAAAH,CAAA,QAAAI,WAAA;IAECK,EAAA,GAAAA,CAAA,KAAMb,mBAAmB,CAACQ,WAAW,EAAEF,eAAe,EAAEC,UAAU,CAAC;IAAAH,CAAA,MAAAE,eAAA;IAAAF,CAAA,MAAAG,UAAA;IAAAH,CAAA,MAAAI,WAAA;IAAAJ,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EADrE,MAAAU,WAAA,GAAoBD,EAGnB;EACD,MAAAE,MAAA,GAAehB,oBAAoB,CAACa,SAAS,EAAEE,WAAW,CAAC;EAIhD,MAAAE,EAAA,IAACD,MAAM;EAAA,IAAAE,EAAA;EAAA,IAAAb,CAAA,QAAAE,eAAA,IAAAF,CAAA,QAAAG,UAAA,IAAAH,CAAA,QAAAY,EAAA;IAHqBC,EAAA;MAAAX,eAAA;MAAAY,SAAA,EAE1BX,UAAU;MAAAY,OAAA,EACZH;IACX,CAAC;IAAAZ,CAAA,MAAAE,eAAA;IAAAF,CAAA,MAAAG,UAAA;IAAAH,CAAA,MAAAY,EAAA;IAAAZ,CAAA,MAAAa,EAAA;EAAA;IAAAA,EAAA,GAAAb,CAAA;EAAA;EAJD,MAAAgB,OAAA,GAAgBnB,sBAAsB,CAACgB,EAItC,CAAC;EAAA,OAEKF,MAAyB,IAAfK,OAAO,CAAAC,OAAQ;AAAA,CACjC","ignoreList":[]}
@@ -1,14 +0,0 @@
1
- export interface DirectMessageEligibility {
2
- canDirectMessage: boolean;
3
- directMessagesDisabled: boolean;
4
- }
5
- export declare function useDirectMessageEligibility({ groupId, personId, enabled, }: {
6
- groupId: string;
7
- personId: number;
8
- enabled?: boolean;
9
- }): {
10
- eligibility: DirectMessageEligibility | undefined;
11
- isLoading: boolean;
12
- isError: boolean;
13
- };
14
- //# sourceMappingURL=use_direct_message_eligibility.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_direct_message_eligibility.d.ts","sourceRoot":"","sources":["../../src/hooks/use_direct_message_eligibility.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,EAAE,OAAO,CAAA;IACzB,sBAAsB,EAAE,OAAO,CAAA;CAChC;AAED,wBAAgB,2BAA2B,CAAC,EAC1C,OAAO,EACP,QAAQ,EACR,OAAc,GACf,EAAE;IACD,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;;;;EAsBA"}
@@ -1,87 +0,0 @@
1
- import { c as _c } from "react/compiler-runtime";
2
- import { useQuery } from '@tanstack/react-query';
3
- import { useApiClient } from './use_api_client';
4
- export function useDirectMessageEligibility(t0) {
5
- const $ = _c(15);
6
- const {
7
- groupId,
8
- personId,
9
- enabled: t1
10
- } = t0;
11
- const enabled = t1 === undefined ? true : t1;
12
- const apiClient = useApiClient();
13
- const url = `/me/groups/${groupId}/members/${personId}`;
14
- let t2;
15
- if ($[0] !== url) {
16
- t2 = ["chat", url, "direct_message_eligibility"];
17
- $[0] = url;
18
- $[1] = t2;
19
- } else {
20
- t2 = $[1];
21
- }
22
- let t3;
23
- if ($[2] !== apiClient || $[3] !== url) {
24
- t3 = () => apiClient.chat.get({
25
- url,
26
- data: {
27
- fields: {
28
- Member: ["can_direct_message", "direct_messages_disabled"]
29
- }
30
- }
31
- });
32
- $[2] = apiClient;
33
- $[3] = url;
34
- $[4] = t3;
35
- } else {
36
- t3 = $[4];
37
- }
38
- let t4;
39
- if ($[5] !== enabled || $[6] !== t2 || $[7] !== t3) {
40
- t4 = {
41
- queryKey: t2,
42
- queryFn: t3,
43
- enabled,
44
- retry: false
45
- };
46
- $[5] = enabled;
47
- $[6] = t2;
48
- $[7] = t3;
49
- $[8] = t4;
50
- } else {
51
- t4 = $[8];
52
- }
53
- const {
54
- data,
55
- isLoading,
56
- isError
57
- } = useQuery(t4);
58
- const member = data?.data;
59
- let t5;
60
- if ($[9] !== member) {
61
- t5 = member && {
62
- canDirectMessage: member.canDirectMessage ?? false,
63
- directMessagesDisabled: member.directMessagesDisabled ?? false
64
- };
65
- $[9] = member;
66
- $[10] = t5;
67
- } else {
68
- t5 = $[10];
69
- }
70
- const eligibility = t5;
71
- let t6;
72
- if ($[11] !== eligibility || $[12] !== isError || $[13] !== isLoading) {
73
- t6 = {
74
- eligibility,
75
- isLoading,
76
- isError
77
- };
78
- $[11] = eligibility;
79
- $[12] = isError;
80
- $[13] = isLoading;
81
- $[14] = t6;
82
- } else {
83
- t6 = $[14];
84
- }
85
- return t6;
86
- }
87
- //# sourceMappingURL=use_direct_message_eligibility.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_direct_message_eligibility.js","names":["useQuery","useApiClient","useDirectMessageEligibility","t0","$","_c","groupId","personId","enabled","t1","undefined","apiClient","url","t2","t3","chat","get","data","fields","Member","t4","queryKey","queryFn","retry","isLoading","isError","member","t5","canDirectMessage","directMessagesDisabled","eligibility","t6"],"sources":["../../src/hooks/use_direct_message_eligibility.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport { ApiResource, MemberResource } from '../types'\nimport { useApiClient } from './use_api_client'\n\nexport interface DirectMessageEligibility {\n canDirectMessage: boolean\n directMessagesDisabled: boolean\n}\n\nexport function useDirectMessageEligibility({\n groupId,\n personId,\n enabled = true,\n}: {\n groupId: string\n personId: number\n enabled?: boolean\n}) {\n const apiClient = useApiClient()\n const url = `/me/groups/${groupId}/members/${personId}`\n\n const { data, isLoading, isError } = useQuery({\n queryKey: ['chat', url, 'direct_message_eligibility'],\n queryFn: () =>\n apiClient.chat.get({\n url,\n data: { fields: { Member: ['can_direct_message', 'direct_messages_disabled'] } },\n }) as Promise<ApiResource<MemberResource>>,\n enabled,\n retry: false,\n })\n\n const member = data?.data\n const eligibility: DirectMessageEligibility | undefined = member && {\n canDirectMessage: member.canDirectMessage ?? false,\n directMessagesDisabled: member.directMessagesDisabled ?? false,\n }\n\n return { eligibility, isLoading, isError }\n}\n"],"mappings":";AAAA,SAASA,QAAQ,QAAQ,uBAAuB;AAEhD,SAASC,YAAY,QAAQ,kBAAkB;AAO/C,OAAO,SAAAC,4BAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAqC;IAAAC,OAAA;IAAAC,QAAA;IAAAC,OAAA,EAAAC;EAAA,IAAAN,EAQ3C;EALC,MAAAK,OAAA,GAAAC,EAAc,KAAdC,SAAc,GAAd,IAAc,GAAdD,EAAc;EAMd,MAAAE,SAAA,GAAkBV,YAAY,CAAC,CAAC;EAChC,MAAAW,GAAA,GAAY,cAAcN,OAAO,YAAYC,QAAQ,EAAE;EAAA,IAAAM,EAAA;EAAA,IAAAT,CAAA,QAAAQ,GAAA;IAG3CC,EAAA,IAAC,MAAM,EAAED,GAAG,EAAE,4BAA4B,CAAC;IAAAR,CAAA,MAAAQ,GAAA;IAAAR,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAAA,IAAAU,EAAA;EAAA,IAAAV,CAAA,QAAAO,SAAA,IAAAP,CAAA,QAAAQ,GAAA;IAC5CE,EAAA,GAAAA,CAAA,KACPH,SAAS,CAAAI,IAAK,CAAAC,GAAI,CAAC;MAAAJ,GAAA;MAAAK,IAAA,EAEX;QAAAC,MAAA,EAAU;UAAAC,MAAA,EAAU,CAAC,oBAAoB,EAAE,0BAA0B;QAAE;MAAE;IACjF,CAAC,CAAyC;IAAAf,CAAA,MAAAO,SAAA;IAAAP,CAAA,MAAAQ,GAAA;IAAAR,CAAA,MAAAU,EAAA;EAAA;IAAAA,EAAA,GAAAV,CAAA;EAAA;EAAA,IAAAgB,EAAA;EAAA,IAAAhB,CAAA,QAAAI,OAAA,IAAAJ,CAAA,QAAAS,EAAA,IAAAT,CAAA,QAAAU,EAAA;IANAM,EAAA;MAAAC,QAAA,EAClCR,EAA2C;MAAAS,OAAA,EAC5CR,EAImC;MAAAN,OAAA;MAAAe,KAAA,EAErC;IACT,CAAC;IAAAnB,CAAA,MAAAI,OAAA;IAAAJ,CAAA,MAAAS,EAAA;IAAAT,CAAA,MAAAU,EAAA;IAAAV,CAAA,MAAAgB,EAAA;EAAA;IAAAA,EAAA,GAAAhB,CAAA;EAAA;EATD;IAAAa,IAAA;IAAAO,SAAA;IAAAC;EAAA,IAAqCzB,QAAQ,CAACoB,EAS7C,CAAC;EAEF,MAAAM,MAAA,GAAeT,IAAI,EAAAA,IAAM;EAAA,IAAAU,EAAA;EAAA,IAAAvB,CAAA,QAAAsB,MAAA;IACiCC,EAAA,GAAAD,MAGzD,IAHyD;MAAAE,gBAAA,EACtCF,MAAM,CAAAE,gBAA0B,IAAhC,KAAgC;MAAAC,sBAAA,EAC1BH,MAAM,CAAAG,sBAAgC,IAAtC;IAC1B,CAAC;IAAAzB,CAAA,MAAAsB,MAAA;IAAAtB,CAAA,OAAAuB,EAAA;EAAA;IAAAA,EAAA,GAAAvB,CAAA;EAAA;EAHD,MAAA0B,WAAA,GAA0DH,EAGzD;EAAA,IAAAI,EAAA;EAAA,IAAA3B,CAAA,SAAA0B,WAAA,IAAA1B,CAAA,SAAAqB,OAAA,IAAArB,CAAA,SAAAoB,SAAA;IAEMO,EAAA;MAAAD,WAAA;MAAAN,SAAA;MAAAC;IAAkC,CAAC;IAAArB,CAAA,OAAA0B,WAAA;IAAA1B,CAAA,OAAAqB,OAAA;IAAArB,CAAA,OAAAoB,SAAA;IAAApB,CAAA,OAAA2B,EAAA;EAAA;IAAAA,EAAA,GAAA3B,CAAA;EAAA;EAAA,OAAnC2B,EAAmC;AAAA","ignoreList":[]}
@@ -1,9 +0,0 @@
1
- type Options = {
2
- conversation_id: number;
3
- reply_root_id?: string | null;
4
- queryKey: unknown[];
5
- onTooFarBehind?: () => void;
6
- };
7
- export declare const useFetchNewerMessages: ({ conversation_id, reply_root_id, queryKey, onTooFarBehind, }: Options) => (newestMessageId: string) => Promise<void>;
8
- export {};
9
- //# sourceMappingURL=use_fetch_newer_messages.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_fetch_newer_messages.d.ts","sourceRoot":"","sources":["../../src/hooks/use_fetch_newer_messages.ts"],"names":[],"mappings":"AASA,KAAK,OAAO,GAAG;IACb,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;CAC5B,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,+DAKnC,OAAO,uBAKkB,MAAM,kBAyBjC,CAAA"}
@@ -1,69 +0,0 @@
1
- import { c as _c } from "react/compiler-runtime";
2
- import { useQueryClient } from '@tanstack/react-query';
3
- import { useCallback } from 'react';
4
- import { prependNewerPage } from '../utils/cache/prepend_newer_page';
5
- import { getMessagesRequestArgs } from '../utils/request/get_messages';
6
- import { useApiClient } from './use_api_client';
7
- const MAX_PAGES = 5;
8
- export const useFetchNewerMessages = t0 => {
9
- const $ = _c(7);
10
- const {
11
- conversation_id,
12
- reply_root_id,
13
- queryKey,
14
- onTooFarBehind
15
- } = t0;
16
- const queryClient = useQueryClient();
17
- const apiClient = useApiClient();
18
- let t1;
19
- if ($[0] !== apiClient || $[1] !== conversation_id || $[2] !== onTooFarBehind || $[3] !== queryClient || $[4] !== queryKey || $[5] !== reply_root_id) {
20
- t1 = async newestMessageId => {
21
- const {
22
- url,
23
- data
24
- } = getMessagesRequestArgs({
25
- conversation_id,
26
- reply_root_id
27
- });
28
- const pages = [];
29
- let cursor = newestMessageId;
30
- while (cursor && pages.length < MAX_PAGES) {
31
- const page = await apiClient.chat.get({
32
- url,
33
- data: {
34
- ...data,
35
- where: {
36
- id_gt: cursor
37
- },
38
- order: "asc"
39
- }
40
- });
41
- pages.push(page);
42
- cursor = page.meta?.next?.idGt;
43
- }
44
- queryClient.setQueryData(queryKey, prev => prependNewerPage(prev, pages));
45
- const moreThanWeFetched = !!cursor;
46
- if (!moreThanWeFetched) {
47
- return;
48
- }
49
- if (onTooFarBehind) {
50
- onTooFarBehind();
51
- } else {
52
- await queryClient.invalidateQueries({
53
- queryKey
54
- });
55
- }
56
- };
57
- $[0] = apiClient;
58
- $[1] = conversation_id;
59
- $[2] = onTooFarBehind;
60
- $[3] = queryClient;
61
- $[4] = queryKey;
62
- $[5] = reply_root_id;
63
- $[6] = t1;
64
- } else {
65
- t1 = $[6];
66
- }
67
- return t1;
68
- };
69
- //# sourceMappingURL=use_fetch_newer_messages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_fetch_newer_messages.js","names":["useQueryClient","useCallback","prependNewerPage","getMessagesRequestArgs","useApiClient","MAX_PAGES","useFetchNewerMessages","t0","$","_c","conversation_id","reply_root_id","queryKey","onTooFarBehind","queryClient","apiClient","t1","newestMessageId","url","data","pages","cursor","length","page","chat","get","where","id_gt","order","push","meta","next","idGt","setQueryData","prev","moreThanWeFetched","invalidateQueries"],"sources":["../../src/hooks/use_fetch_newer_messages.ts"],"sourcesContent":["import { useQueryClient } from '@tanstack/react-query'\nimport { useCallback } from 'react'\nimport { ApiCollection, MessageResource } from '../types'\nimport { prependNewerPage } from '../utils/cache/prepend_newer_page'\nimport { getMessagesRequestArgs } from '../utils/request/get_messages'\nimport { useApiClient } from './use_api_client'\n\nconst MAX_PAGES = 5\n\ntype Options = {\n conversation_id: number\n reply_root_id?: string | null\n queryKey: unknown[]\n onTooFarBehind?: () => void\n}\n\nexport const useFetchNewerMessages = ({\n conversation_id,\n reply_root_id,\n queryKey,\n onTooFarBehind,\n}: Options) => {\n const queryClient = useQueryClient()\n const apiClient = useApiClient()\n\n return useCallback(\n async (newestMessageId: string) => {\n const { url, data } = getMessagesRequestArgs({ conversation_id, reply_root_id })\n const pages: ApiCollection<MessageResource>[] = []\n let cursor: string | undefined = newestMessageId\n\n while (cursor && pages.length < MAX_PAGES) {\n const page: ApiCollection<MessageResource> = await apiClient.chat.get({\n url,\n data: { ...data, where: { id_gt: cursor }, order: 'asc' },\n })\n pages.push(page)\n cursor = page.meta?.next?.idGt\n }\n\n queryClient.setQueryData<Parameters<typeof prependNewerPage<MessageResource>>[0]>(\n queryKey,\n prev => prependNewerPage(prev, pages)\n )\n const moreThanWeFetched = !!cursor\n if (!moreThanWeFetched) return\n if (onTooFarBehind) onTooFarBehind()\n else await queryClient.invalidateQueries({ queryKey })\n },\n [apiClient, conversation_id, onTooFarBehind, queryClient, queryKey, reply_root_id]\n )\n}\n"],"mappings":";AAAA,SAASA,cAAc,QAAQ,uBAAuB;AACtD,SAASC,WAAW,QAAQ,OAAO;AAEnC,SAASC,gBAAgB,QAAQ,mCAAmC;AACpE,SAASC,sBAAsB,QAAQ,+BAA+B;AACtE,SAASC,YAAY,QAAQ,kBAAkB;AAE/C,MAAMC,SAAS,GAAG,CAAC;AASnB,OAAO,MAAMC,qBAAqB,GAAGC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAC;IAAAC,eAAA;IAAAC,aAAA;IAAAC,QAAA;IAAAC;EAAA,IAAAN,EAK5B;EACR,MAAAO,WAAA,GAAoBd,cAAc,CAAC,CAAC;EACpC,MAAAe,SAAA,GAAkBX,YAAY,CAAC,CAAC;EAAA,IAAAY,EAAA;EAAA,IAAAR,CAAA,QAAAO,SAAA,IAAAP,CAAA,QAAAE,eAAA,IAAAF,CAAA,QAAAK,cAAA,IAAAL,CAAA,QAAAM,WAAA,IAAAN,CAAA,QAAAI,QAAA,IAAAJ,CAAA,QAAAG,aAAA;IAG9BK,EAAA,SAAAC,eAAA;MACE;QAAAC,GAAA;QAAAC;MAAA,IAAsBhB,sBAAsB,CAAC;QAAAO,eAAA;QAAAC;MAAiC,CAAC,CAAC;MAChF,MAAAS,KAAA,GAAgD,EAAE;MAClD,IAAAC,MAAA,GAAiCJ,eAAe;MAEhD,OAAOI,MAAkC,IAAxBD,KAAK,CAAAE,MAAO,GAAGjB,SAO/B;QANC,MAAAkB,IAAA,GAA6C,MAAMR,SAAS,CAAAS,IAAK,CAAAC,GAAI,CAAC;UAAAP,GAAA;UAAAC,IAAA,EAE9D;YAAA,GAAKA,IAAI;YAAAO,KAAA,EAAS;cAAAC,KAAA,EAASN;YAAO,CAAC;YAAAO,KAAA,EAAS;UAAM;QAC1D,CAAC,CAAC;QACFR,KAAK,CAAAS,IAAK,CAACN,IAAI,CAAC;QAChBF,MAAA,CAAAA,CAAA,CAASE,IAAI,CAAAO,IAAW,EAAAC,IAAM,EAAAC,IAAA;MAAxB;MAGRlB,WAAW,CAAAmB,YAAa,CACtBrB,QAAQ,EACRsB,IAAA,IAAQhC,gBAAgB,CAACgC,IAAI,EAAEd,KAAK,CACtC,CAAC;MACD,MAAAe,iBAAA,GAA0B,CAAC,CAACd,MAAM;MAClC,IAAI,CAACc,iBAAiB;QAAA;MAAA;MACtB,IAAItB,cAAc;QAAEA,cAAc,CAAC,CAAC;MAAA;QAC/B,MAAMC,WAAW,CAAAsB,iBAAkB,CAAC;UAAAxB;QAAW,CAAC,CAAC;MAAA;IAAA,CACvD;IAAAJ,CAAA,MAAAO,SAAA;IAAAP,CAAA,MAAAE,eAAA;IAAAF,CAAA,MAAAK,cAAA;IAAAL,CAAA,MAAAM,WAAA;IAAAN,CAAA,MAAAI,QAAA;IAAAJ,CAAA,MAAAG,aAAA;IAAAH,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAAA,OAvBIQ,EAyBN;AAAA,CACF","ignoreList":[]}
@@ -1,8 +0,0 @@
1
- type Options = {
2
- fetchNewer: (newestMessageId: string) => Promise<void>;
3
- newestMessageId?: string;
4
- enabled: boolean;
5
- };
6
- export declare const useFetchNewerOnForeground: ({ fetchNewer, newestMessageId, enabled }: Options) => void;
7
- export {};
8
- //# sourceMappingURL=use_fetch_newer_on_foreground.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_fetch_newer_on_foreground.d.ts","sourceRoot":"","sources":["../../src/hooks/use_fetch_newer_on_foreground.ts"],"names":[],"mappings":"AAGA,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAI,0CAA0C,OAAO,SAe1F,CAAA"}
@@ -1,42 +0,0 @@
1
- import { c as _c } from "react/compiler-runtime";
2
- import { useEffect, useRef } from 'react';
3
- import { useAppState } from './use_app_state';
4
- export const useFetchNewerOnForeground = t0 => {
5
- const $ = _c(6);
6
- const {
7
- fetchNewer,
8
- newestMessageId,
9
- enabled
10
- } = t0;
11
- const appState = useAppState();
12
- const wasInBackground = useRef(false);
13
- let t1;
14
- let t2;
15
- if ($[0] !== appState || $[1] !== enabled || $[2] !== fetchNewer || $[3] !== newestMessageId) {
16
- t1 = () => {
17
- if (appState !== "active") {
18
- wasInBackground.current = true;
19
- return;
20
- }
21
- const returnedToForeground = wasInBackground.current;
22
- wasInBackground.current = false;
23
- if (!returnedToForeground || !enabled || !newestMessageId) {
24
- return;
25
- }
26
- fetchNewer(newestMessageId).catch(_temp);
27
- };
28
- t2 = [appState, enabled, fetchNewer, newestMessageId];
29
- $[0] = appState;
30
- $[1] = enabled;
31
- $[2] = fetchNewer;
32
- $[3] = newestMessageId;
33
- $[4] = t1;
34
- $[5] = t2;
35
- } else {
36
- t1 = $[4];
37
- t2 = $[5];
38
- }
39
- useEffect(t1, t2);
40
- };
41
- function _temp() {}
42
- //# sourceMappingURL=use_fetch_newer_on_foreground.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_fetch_newer_on_foreground.js","names":["useEffect","useRef","useAppState","useFetchNewerOnForeground","t0","$","_c","fetchNewer","newestMessageId","enabled","appState","wasInBackground","t1","t2","current","returnedToForeground","catch","_temp"],"sources":["../../src/hooks/use_fetch_newer_on_foreground.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { useAppState } from './use_app_state'\n\ntype Options = {\n fetchNewer: (newestMessageId: string) => Promise<void>\n newestMessageId?: string\n enabled: boolean\n}\n\nexport const useFetchNewerOnForeground = ({ fetchNewer, newestMessageId, enabled }: Options) => {\n const appState = useAppState()\n const wasInBackground = useRef(false)\n\n useEffect(() => {\n if (appState !== 'active') {\n wasInBackground.current = true\n return\n }\n const returnedToForeground = wasInBackground.current\n wasInBackground.current = false\n if (!returnedToForeground || !enabled || !newestMessageId) return\n\n fetchNewer(newestMessageId).catch(() => {})\n }, [appState, enabled, fetchNewer, newestMessageId])\n}\n"],"mappings":";AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SAASC,WAAW,QAAQ,iBAAiB;AAQ7C,OAAO,MAAMC,yBAAyB,GAAGC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAC;IAAAC,UAAA;IAAAC,eAAA;IAAAC;EAAA,IAAAL,EAAiD;EACzF,MAAAM,QAAA,GAAiBR,WAAW,CAAC,CAAC;EAC9B,MAAAS,eAAA,GAAwBV,MAAM,CAAC,KAAK,CAAC;EAAA,IAAAW,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAR,CAAA,QAAAK,QAAA,IAAAL,CAAA,QAAAI,OAAA,IAAAJ,CAAA,QAAAE,UAAA,IAAAF,CAAA,QAAAG,eAAA;IAE3BI,EAAA,GAAAA,CAAA;MACR,IAAIF,QAAQ,KAAK,QAAQ;QACvBC,eAAe,CAAAG,OAAA,GAAW,IAAH;QAAA;MAAA;MAGzB,MAAAC,oBAAA,GAA6BJ,eAAe,CAAAG,OAAQ;MACpDH,eAAe,CAAAG,OAAA,GAAW,KAAH;MACvB,IAAI,CAACC,oBAAgC,IAAjC,CAA0BN,OAA2B,IAArD,CAAsCD,eAAe;QAAA;MAAA;MAEzDD,UAAU,CAACC,eAAe,CAAC,CAAAQ,KAAM,CAACC,KAAQ,CAAC;IAAA,CAC5C;IAAEJ,EAAA,IAACH,QAAQ,EAAED,OAAO,EAAEF,UAAU,EAAEC,eAAe,CAAC;IAAAH,CAAA,MAAAK,QAAA;IAAAL,CAAA,MAAAI,OAAA;IAAAJ,CAAA,MAAAE,UAAA;IAAAF,CAAA,MAAAG,eAAA;IAAAH,CAAA,MAAAO,EAAA;IAAAP,CAAA,MAAAQ,EAAA;EAAA;IAAAD,EAAA,GAAAP,CAAA;IAAAQ,EAAA,GAAAR,CAAA;EAAA;EAVnDL,SAAS,CAACY,EAUT,EAAEC,EAAgD,CAAC;AAAA,CACrD;AAfwC,SAAAI,MAAA","ignoreList":[]}
@@ -1,11 +0,0 @@
1
- type Options = {
2
- fetchNewer: (newestMessageId: string) => Promise<void>;
3
- newestMessageId?: string;
4
- readingHistory: boolean;
5
- caughtUp: boolean;
6
- };
7
- export declare const useHeldBackMessages: ({ fetchNewer, newestMessageId, readingHistory, caughtUp, }: Options) => {
8
- onSkippedNewMessage: () => void;
9
- };
10
- export {};
11
- //# sourceMappingURL=use_held_back_messages.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_held_back_messages.d.ts","sourceRoot":"","sources":["../../src/hooks/use_held_back_messages.ts"],"names":[],"mappings":"AAEA,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,OAAO,CAAA;IACvB,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,4DAKjC,OAAO;;CAkBT,CAAA"}