@planningcenter/chat-react-native 4.3.0-rc.9 → 4.3.1-qa-989.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 (178) hide show
  1. package/build/components/conversation/attachments/giphy_attachment.d.ts.map +1 -1
  2. package/build/components/conversation/attachments/giphy_attachment.js +2 -2
  3. package/build/components/conversation/attachments/giphy_attachment.js.map +1 -1
  4. package/build/components/conversation/attachments/image_attachment.d.ts.map +1 -1
  5. package/build/components/conversation/attachments/image_attachment.js +5 -3
  6. package/build/components/conversation/attachments/image_attachment.js.map +1 -1
  7. package/build/components/conversation/message.d.ts +3 -1
  8. package/build/components/conversation/message.d.ts.map +1 -1
  9. package/build/components/conversation/message.js +183 -158
  10. package/build/components/conversation/message.js.map +1 -1
  11. package/build/components/conversation/message_form.d.ts.map +1 -1
  12. package/build/components/conversation/message_form.js +3 -3
  13. package/build/components/conversation/message_form.js.map +1 -1
  14. package/build/components/conversation/message_list.d.ts.map +1 -1
  15. package/build/components/conversation/message_list.js +143 -88
  16. package/build/components/conversation/message_list.js.map +1 -1
  17. package/build/components/conversation/system_message.js +3 -3
  18. package/build/components/conversation/system_message.js.map +1 -1
  19. package/build/components/conversations/conversations.d.ts.map +1 -1
  20. package/build/components/conversations/conversations.js +0 -6
  21. package/build/components/conversations/conversations.js.map +1 -1
  22. package/build/contexts/api_provider.d.ts.map +1 -1
  23. package/build/contexts/api_provider.js +28 -25
  24. package/build/contexts/api_provider.js.map +1 -1
  25. package/build/hooks/use_animated_message_background_color.d.ts +1 -0
  26. package/build/hooks/use_animated_message_background_color.d.ts.map +1 -1
  27. package/build/hooks/use_animated_message_background_color.js +26 -9
  28. package/build/hooks/use_animated_message_background_color.js.map +1 -1
  29. package/build/hooks/use_chat_permissions.d.ts +10 -2
  30. package/build/hooks/use_chat_permissions.d.ts.map +1 -1
  31. package/build/hooks/use_chat_permissions.js +8 -0
  32. package/build/hooks/use_chat_permissions.js.map +1 -1
  33. package/build/hooks/use_debounced_search_term.d.ts +2 -0
  34. package/build/hooks/use_debounced_search_term.d.ts.map +1 -0
  35. package/build/hooks/use_debounced_search_term.js +40 -0
  36. package/build/hooks/use_debounced_search_term.js.map +1 -0
  37. package/build/hooks/use_features.d.ts +2 -0
  38. package/build/hooks/use_features.d.ts.map +1 -1
  39. package/build/hooks/use_features.js +3 -1
  40. package/build/hooks/use_features.js.map +1 -1
  41. package/build/hooks/use_jolt.d.ts.map +1 -1
  42. package/build/hooks/use_jolt.js +2 -1
  43. package/build/hooks/use_jolt.js.map +1 -1
  44. package/build/hooks/use_product_analytics.d.ts +9 -0
  45. package/build/hooks/use_product_analytics.d.ts.map +1 -1
  46. package/build/hooks/use_product_analytics.js +4 -2
  47. package/build/hooks/use_product_analytics.js.map +1 -1
  48. package/build/hooks/use_search_enabled.d.ts +2 -0
  49. package/build/hooks/use_search_enabled.d.ts.map +1 -0
  50. package/build/hooks/use_search_enabled.js +18 -0
  51. package/build/hooks/use_search_enabled.js.map +1 -0
  52. package/build/hooks/use_search_results.d.ts +19 -0
  53. package/build/hooks/use_search_results.d.ts.map +1 -0
  54. package/build/hooks/use_search_results.js +153 -0
  55. package/build/hooks/use_search_results.js.map +1 -0
  56. package/build/screens/age_check/age_check_underage_screen.d.ts.map +1 -1
  57. package/build/screens/age_check/age_check_underage_screen.js +2 -1
  58. package/build/screens/age_check/age_check_underage_screen.js.map +1 -1
  59. package/build/screens/attachment_actions/attachment_actions_screen.d.ts.map +1 -1
  60. package/build/screens/attachment_actions/attachment_actions_screen.js +5 -2
  61. package/build/screens/attachment_actions/attachment_actions_screen.js.map +1 -1
  62. package/build/screens/bug_report_screen.d.ts.map +1 -1
  63. package/build/screens/bug_report_screen.js +2 -2
  64. package/build/screens/bug_report_screen.js.map +1 -1
  65. package/build/screens/conversation_select_recipients/components/view_more_link_row.d.ts +2 -1
  66. package/build/screens/conversation_select_recipients/components/view_more_link_row.d.ts.map +1 -1
  67. package/build/screens/conversation_select_recipients/components/view_more_link_row.js +39 -24
  68. package/build/screens/conversation_select_recipients/components/view_more_link_row.js.map +1 -1
  69. package/build/screens/conversation_select_recipients/conversation_select_direct_message_recipients_screen.d.ts.map +1 -1
  70. package/build/screens/conversation_select_recipients/conversation_select_direct_message_recipients_screen.js +142 -158
  71. package/build/screens/conversation_select_recipients/conversation_select_direct_message_recipients_screen.js.map +1 -1
  72. package/build/screens/conversations/components/search_list_header_component.js +3 -3
  73. package/build/screens/conversations/components/search_list_header_component.js.map +1 -1
  74. package/build/screens/conversations/conversations_screen.d.ts.map +1 -1
  75. package/build/screens/conversations/conversations_screen.js +2 -5
  76. package/build/screens/conversations/conversations_screen.js.map +1 -1
  77. package/build/screens/get_help_screen.js +2 -2
  78. package/build/screens/get_help_screen.js.map +1 -1
  79. package/build/screens/message_actions_screen.js +6 -2
  80. package/build/screens/message_actions_screen.js.map +1 -1
  81. package/build/screens/search/components/conversation_result_row.d.ts +8 -0
  82. package/build/screens/search/components/conversation_result_row.d.ts.map +1 -0
  83. package/build/screens/search/components/conversation_result_row.js +80 -0
  84. package/build/screens/search/components/conversation_result_row.js.map +1 -0
  85. package/build/screens/search/components/conversation_results.d.ts +8 -0
  86. package/build/screens/search/components/conversation_results.d.ts.map +1 -0
  87. package/build/screens/search/components/conversation_results.js +77 -0
  88. package/build/screens/search/components/conversation_results.js.map +1 -0
  89. package/build/screens/search/components/message_result_row.d.ts +8 -0
  90. package/build/screens/search/components/message_result_row.d.ts.map +1 -0
  91. package/build/screens/search/components/message_result_row.js +152 -0
  92. package/build/screens/search/components/message_result_row.js.map +1 -0
  93. package/build/screens/search/components/result_row.d.ts +10 -0
  94. package/build/screens/search/components/result_row.d.ts.map +1 -0
  95. package/build/screens/search/components/result_row.js +102 -0
  96. package/build/screens/search/components/result_row.js.map +1 -0
  97. package/build/screens/search/components/results_section.d.ts +9 -0
  98. package/build/screens/search/components/results_section.d.ts.map +1 -0
  99. package/build/screens/search/components/results_section.js +51 -0
  100. package/build/screens/search/components/results_section.js.map +1 -0
  101. package/build/screens/search/components/search_results_list.d.ts +13 -0
  102. package/build/screens/search/components/search_results_list.d.ts.map +1 -0
  103. package/build/screens/search/components/search_results_list.js +344 -0
  104. package/build/screens/search/components/search_results_list.js.map +1 -0
  105. package/build/screens/search/components/snippet.d.ts +8 -0
  106. package/build/screens/search/components/snippet.d.ts.map +1 -0
  107. package/build/screens/search/components/snippet.js +68 -0
  108. package/build/screens/search/components/snippet.js.map +1 -0
  109. package/build/screens/search/search_screen.d.ts.map +1 -1
  110. package/build/screens/search/search_screen.js +92 -20
  111. package/build/screens/search/search_screen.js.map +1 -1
  112. package/build/utils/client/request_helpers.js +1 -1
  113. package/build/utils/client/request_helpers.js.map +1 -1
  114. package/build/utils/native_adapters/linking.d.ts +11 -3
  115. package/build/utils/native_adapters/linking.d.ts.map +1 -1
  116. package/build/utils/native_adapters/linking.js.map +1 -1
  117. package/build/utils/response_error.d.ts +1 -1
  118. package/build/utils/response_error.d.ts.map +1 -1
  119. package/build/utils/response_error.js +1 -1
  120. package/build/utils/response_error.js.map +1 -1
  121. package/package.json +3 -3
  122. package/src/__tests__/components/conversation/attachments/giphy_attachment.test.tsx +76 -0
  123. package/src/__tests__/contexts/api_provider.test.tsx +50 -0
  124. package/src/__tests__/screens/attachment_actions_screen.test.tsx +81 -0
  125. package/src/__tests__/screens/get_help_screen.test.ts +36 -0
  126. package/src/__tests__/screens/message_actions_screen.test.tsx +136 -0
  127. package/src/__tests__/utils/client.ts +3 -4
  128. package/src/components/conversation/__tests__/message_form.test.tsx +83 -0
  129. package/src/components/conversation/__tests__/message_list.test.tsx +71 -3
  130. package/src/components/conversation/attachments/giphy_attachment.tsx +2 -3
  131. package/src/components/conversation/attachments/image_attachment.tsx +2 -3
  132. package/src/components/conversation/message.tsx +12 -1
  133. package/src/components/conversation/message_form.tsx +2 -2
  134. package/src/components/conversation/message_list.tsx +26 -1
  135. package/src/components/conversation/system_message.tsx +3 -3
  136. package/src/components/conversations/conversations.tsx +0 -7
  137. package/src/contexts/__tests__/api_provider.test.tsx +106 -0
  138. package/src/contexts/api_provider.tsx +6 -9
  139. package/src/hooks/__tests__/use_debounced_search_term.test.tsx +38 -0
  140. package/src/hooks/__tests__/use_jolt.test.tsx +70 -0
  141. package/src/hooks/__tests__/use_search_results.test.tsx +88 -0
  142. package/src/hooks/use_animated_message_background_color.ts +37 -12
  143. package/src/hooks/use_chat_permissions.ts +15 -2
  144. package/src/hooks/use_debounced_search_term.ts +20 -0
  145. package/src/hooks/use_features.ts +2 -0
  146. package/src/hooks/use_jolt.ts +10 -7
  147. package/src/hooks/use_product_analytics.ts +3 -1
  148. package/src/hooks/use_search_enabled.ts +9 -0
  149. package/src/hooks/use_search_results.ts +78 -0
  150. package/src/screens/age_check/age_check_underage_screen.tsx +2 -1
  151. package/src/screens/attachment_actions/attachment_actions_screen.tsx +3 -2
  152. package/src/screens/bug_report_screen.tsx +2 -10
  153. package/src/screens/conversation_select_recipients/components/view_more_link_row.tsx +12 -3
  154. package/src/screens/conversation_select_recipients/conversation_select_direct_message_recipients_screen.tsx +3 -8
  155. package/src/screens/conversations/__tests__/conversations_screen.test.tsx +71 -0
  156. package/src/screens/conversations/components/search_list_header_component.tsx +1 -1
  157. package/src/screens/conversations/conversations_screen.tsx +2 -3
  158. package/src/screens/get_help_screen.tsx +2 -2
  159. package/src/screens/message_actions_screen.tsx +6 -2
  160. package/src/screens/search/__tests__/search_screen.test.tsx +194 -0
  161. package/src/screens/search/components/__tests__/conversation_results.test.tsx +55 -0
  162. package/src/screens/search/components/__tests__/message_result_row.test.tsx +65 -0
  163. package/src/screens/search/components/__tests__/result_row.test.tsx +33 -0
  164. package/src/screens/search/components/__tests__/search_results_list.test.tsx +180 -0
  165. package/src/screens/search/components/conversation_result_row.tsx +36 -0
  166. package/src/screens/search/components/conversation_results.tsx +43 -0
  167. package/src/screens/search/components/message_result_row.tsx +48 -0
  168. package/src/screens/search/components/result_row.tsx +58 -0
  169. package/src/screens/search/components/results_section.tsx +34 -0
  170. package/src/screens/search/components/search_results_list.tsx +168 -0
  171. package/src/screens/search/components/snippet.tsx +37 -0
  172. package/src/screens/search/search_screen.tsx +50 -4
  173. package/src/utils/__tests__/response_error.test.ts +7 -2
  174. package/src/utils/client/__tests__/request_helpers.test.ts +40 -0
  175. package/src/utils/client/request_helpers.ts +1 -1
  176. package/src/utils/native_adapters/__tests__/linking.test.ts +12 -0
  177. package/src/utils/native_adapters/linking.ts +12 -3
  178. package/src/utils/response_error.ts +2 -2
@@ -3,9 +3,8 @@ import { focusManager, QueryClient, QueryClientProvider, usePrefetchQuery } from
3
3
  import React, { useContext, useEffect, useRef } from 'react';
4
4
  import { useApiClient } from '../hooks/use_api_client';
5
5
  import { useAppState } from '../hooks/use_app_state';
6
- import { appGrantsRequestArgs } from '../hooks/use_chat_permissions';
6
+ import { appGrantsQueryOptions } from '../hooks/use_chat_permissions';
7
7
  import { featuresQueryOptions } from '../hooks/use_features';
8
- import { getRequestQueryKey } from '../hooks/use_suspense_api';
9
8
  import { emitAuthRefresh } from '../utils/auth_events';
10
9
  import { ResponseError } from '../utils/response_error';
11
10
  import { ChatContext } from './chat_context';
@@ -40,13 +39,14 @@ export const chatQueryClient = new QueryClient({
40
39
  }
41
40
  });
42
41
  export function ApiProvider(t0) {
43
- const $ = _c(12);
42
+ const $ = _c(14);
44
43
  const {
45
44
  children
46
45
  } = t0;
47
46
  const {
48
47
  token,
49
- env
48
+ env,
49
+ session
50
50
  } = useContext(ChatContext);
51
51
  let t1;
52
52
  if ($[0] !== env || $[1] !== token) {
@@ -71,7 +71,7 @@ export function ApiProvider(t0) {
71
71
  }
72
72
  emitAuthRefresh();
73
73
  if (chatQueryClient.isFetching()) {
74
- chatQueryClient.invalidateQueries();
74
+ chatQueryClient.cancelQueries().then(_temp);
75
75
  return;
76
76
  }
77
77
  chatQueryClient.clear();
@@ -101,22 +101,24 @@ export function ApiProvider(t0) {
101
101
  }
102
102
  useEffect(t4, t5);
103
103
  let t6;
104
- if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
105
- t6 = /*#__PURE__*/_jsx(PrefetchQueries, {});
106
- $[9] = t6;
104
+ if ($[9] !== session.isAuthenticated) {
105
+ t6 = session.isAuthenticated && /*#__PURE__*/_jsx(PrefetchQueries, {});
106
+ $[9] = session.isAuthenticated;
107
+ $[10] = t6;
107
108
  } else {
108
- t6 = $[9];
109
+ t6 = $[10];
109
110
  }
110
111
  let t7;
111
- if ($[10] !== children) {
112
+ if ($[11] !== children || $[12] !== t6) {
112
113
  t7 = /*#__PURE__*/_jsxs(QueryClientProvider, {
113
114
  client: chatQueryClient,
114
115
  children: [t6, children]
115
116
  });
116
- $[10] = children;
117
- $[11] = t7;
117
+ $[11] = children;
118
+ $[12] = t6;
119
+ $[13] = t7;
118
120
  } else {
119
- t7 = $[11];
121
+ t7 = $[13];
120
122
  }
121
123
  return t7;
122
124
  }
@@ -124,27 +126,28 @@ export function ApiProvider(t0) {
124
126
  // Component to prefetch queries when the app is focused
125
127
  // This needs to live in the provider so that it can access the api client
126
128
  // and the chat query client
129
+ function _temp() {
130
+ return chatQueryClient.invalidateQueries();
131
+ }
127
132
  const PrefetchQueries = () => {
128
- const $ = _c(3);
133
+ const $ = _c(4);
129
134
  const client = useApiClient();
130
135
  let t0;
131
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
132
- t0 = {
133
- queryKey: getRequestQueryKey(appGrantsRequestArgs),
134
- queryFn: defaultQueryFn
135
- };
136
- $[0] = t0;
136
+ if ($[0] !== client) {
137
+ t0 = appGrantsQueryOptions(client);
138
+ $[0] = client;
139
+ $[1] = t0;
137
140
  } else {
138
- t0 = $[0];
141
+ t0 = $[1];
139
142
  }
140
143
  usePrefetchQuery(t0);
141
144
  let t1;
142
- if ($[1] !== client) {
145
+ if ($[2] !== client) {
143
146
  t1 = featuresQueryOptions(client);
144
- $[1] = client;
145
- $[2] = t1;
147
+ $[2] = client;
148
+ $[3] = t1;
146
149
  } else {
147
- t1 = $[2];
150
+ t1 = $[3];
148
151
  }
149
152
  usePrefetchQuery(t1);
150
153
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"api_provider.js","names":["focusManager","QueryClient","QueryClientProvider","usePrefetchQuery","React","useContext","useEffect","useRef","useApiClient","useAppState","appGrantsRequestArgs","featuresQueryOptions","getRequestQueryKey","emitAuthRefresh","ResponseError","ChatContext","jsx","_jsx","jsxs","_jsxs","apiClient","defaultQueryFn","queryKey","Error","url","data","headers","app","get","configuredRetry","failureCount","error","is429Error","status","chatQueryClient","defaultOptions","queries","queryFn","retry","ApiProvider","t0","$","_c","children","token","env","t1","sessionChanged","useSessionChanged","client","t2","t3","isFetching","invalidateQueries","clear","t4","t5","t6","Symbol","for","PrefetchQueries","t7","useFocusManager","appState","setFocused","value","newToken","newEnv","prevToken","prevEnv","usePrevious","isInitialLogin","tokenChanged","Boolean","access_token","envChanged","ref","current"],"sources":["../../src/contexts/api_provider.tsx"],"sourcesContent":["import {\n focusManager,\n QueryClient,\n QueryClientProvider,\n QueryKey,\n usePrefetchQuery,\n} from '@tanstack/react-query'\nimport React, { useContext, useEffect, useRef } from 'react'\nimport { ViewProps } from 'react-native'\nimport { ApiClient, useApiClient } from '../hooks/use_api_client'\nimport { useAppState } from '../hooks/use_app_state'\nimport { appGrantsRequestArgs } from '../hooks/use_chat_permissions'\nimport { featuresQueryOptions } from '../hooks/use_features'\nimport { getRequestQueryKey, RequestQueryKey } from '../hooks/use_suspense_api'\nimport { emitAuthRefresh } from '../utils/auth_events'\nimport { ResponseError } from '../utils/response_error'\nimport { ChatContext, ChatContextValue } from './chat_context'\n\nlet apiClient: ApiClient | undefined\n\nconst defaultQueryFn = ({ queryKey }: { queryKey: QueryKey }) => {\n if (!apiClient) {\n throw new Error('No token present')\n }\n\n const [url, data, headers, app = 'chat'] = queryKey as RequestQueryKey\n\n return apiClient[app].get({ url, data, headers })\n}\n\nconst configuredRetry = (failureCount: number, error: any) => {\n if (is429Error(error)) return false\n\n return failureCount < 3\n}\n\nconst is429Error = (error: any): boolean => {\n return error instanceof ResponseError && error.status === 429\n}\n\nexport const chatQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n queryFn: defaultQueryFn,\n retry: configuredRetry,\n },\n },\n})\n\nexport function ApiProvider({ children }: ViewProps) {\n const { token, env } = useContext(ChatContext)\n const sessionChanged = useSessionChanged({ token, env })\n\n const client = useApiClient()\n\n useEffect(() => {\n if (!sessionChanged) return\n\n emitAuthRefresh()\n\n if (chatQueryClient.isFetching()) {\n chatQueryClient.invalidateQueries()\n return\n }\n\n chatQueryClient.clear()\n }, [sessionChanged])\n\n useEffect(() => {\n apiClient = client\n }, [client])\n\n return (\n <QueryClientProvider client={chatQueryClient}>\n <PrefetchQueries />\n {children}\n </QueryClientProvider>\n )\n}\n\n// Component to prefetch queries when the app is focused\n// This needs to live in the provider so that it can access the api client\n// and the chat query client\nconst PrefetchQueries = () => {\n const client = useApiClient()\n\n usePrefetchQuery({\n queryKey: getRequestQueryKey(appGrantsRequestArgs),\n queryFn: defaultQueryFn,\n })\n usePrefetchQuery(featuresQueryOptions(client))\n\n return null\n}\n\nexport function useFocusManager() {\n const appState = useAppState()\n\n useEffect(() => {\n focusManager.setFocused(appState === 'active')\n }, [appState])\n\n return appState\n}\n\nfunction useSessionChanged(value: Pick<ChatContextValue, 'token' | 'env'>): boolean {\n const { token: newToken, env: newEnv } = value\n const { token: prevToken, env: prevEnv } = usePrevious<typeof value>(value)\n\n const isInitialLogin = !prevToken && !!newToken\n if (isInitialLogin) return false\n\n const tokenChanged = Boolean(\n prevToken?.access_token && newToken?.access_token !== prevToken?.access_token\n )\n\n const envChanged = Boolean(prevEnv && newEnv !== prevEnv)\n\n return tokenChanged || envChanged\n}\n\nfunction usePrevious<T>(value: T): T {\n const ref = useRef<T>(value)\n\n useEffect(() => {\n ref.current = value\n }, [value])\n\n return ref.current\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"api_provider.js","names":["focusManager","QueryClient","QueryClientProvider","usePrefetchQuery","React","useContext","useEffect","useRef","useApiClient","useAppState","appGrantsQueryOptions","featuresQueryOptions","emitAuthRefresh","ResponseError","ChatContext","jsx","_jsx","jsxs","_jsxs","apiClient","defaultQueryFn","queryKey","Error","url","data","headers","app","get","configuredRetry","failureCount","error","is429Error","status","chatQueryClient","defaultOptions","queries","queryFn","retry","ApiProvider","t0","$","_c","children","token","env","session","t1","sessionChanged","useSessionChanged","client","t2","t3","isFetching","cancelQueries","then","_temp","clear","t4","t5","t6","isAuthenticated","PrefetchQueries","t7","invalidateQueries","useFocusManager","appState","setFocused","value","newToken","newEnv","prevToken","prevEnv","usePrevious","isInitialLogin","tokenChanged","Boolean","access_token","envChanged","ref","current"],"sources":["../../src/contexts/api_provider.tsx"],"sourcesContent":["import {\n focusManager,\n QueryClient,\n QueryClientProvider,\n QueryKey,\n usePrefetchQuery,\n} from '@tanstack/react-query'\nimport React, { useContext, useEffect, useRef } from 'react'\nimport { ViewProps } from 'react-native'\nimport { ApiClient, useApiClient } from '../hooks/use_api_client'\nimport { useAppState } from '../hooks/use_app_state'\nimport { appGrantsQueryOptions } from '../hooks/use_chat_permissions'\nimport { featuresQueryOptions } from '../hooks/use_features'\nimport { RequestQueryKey } from '../hooks/use_suspense_api'\nimport { emitAuthRefresh } from '../utils/auth_events'\nimport { ResponseError } from '../utils/response_error'\nimport { ChatContext, ChatContextValue } from './chat_context'\n\nlet apiClient: ApiClient | undefined\n\nconst defaultQueryFn = ({ queryKey }: { queryKey: QueryKey }) => {\n if (!apiClient) {\n throw new Error('No token present')\n }\n\n const [url, data, headers, app = 'chat'] = queryKey as RequestQueryKey\n\n return apiClient[app].get({ url, data, headers })\n}\n\nconst configuredRetry = (failureCount: number, error: any) => {\n if (is429Error(error)) return false\n\n return failureCount < 3\n}\n\nconst is429Error = (error: any): boolean => {\n return error instanceof ResponseError && error.status === 429\n}\n\nexport const chatQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n queryFn: defaultQueryFn,\n retry: configuredRetry,\n },\n },\n})\n\nexport function ApiProvider({ children }: ViewProps) {\n const { token, env, session } = useContext(ChatContext)\n const sessionChanged = useSessionChanged({ token, env })\n\n const client = useApiClient()\n\n useEffect(() => {\n if (!sessionChanged) return\n\n emitAuthRefresh()\n\n if (chatQueryClient.isFetching()) {\n chatQueryClient.cancelQueries().then(() => chatQueryClient.invalidateQueries())\n return\n }\n\n chatQueryClient.clear()\n }, [sessionChanged])\n\n useEffect(() => {\n apiClient = client\n }, [client])\n\n return (\n <QueryClientProvider client={chatQueryClient}>\n {session.isAuthenticated && <PrefetchQueries />}\n {children}\n </QueryClientProvider>\n )\n}\n\n// Component to prefetch queries when the app is focused\n// This needs to live in the provider so that it can access the api client\n// and the chat query client\nconst PrefetchQueries = () => {\n const client = useApiClient()\n\n usePrefetchQuery(appGrantsQueryOptions(client))\n usePrefetchQuery(featuresQueryOptions(client))\n\n return null\n}\n\nexport function useFocusManager() {\n const appState = useAppState()\n\n useEffect(() => {\n focusManager.setFocused(appState === 'active')\n }, [appState])\n\n return appState\n}\n\nfunction useSessionChanged(value: Pick<ChatContextValue, 'token' | 'env'>): boolean {\n const { token: newToken, env: newEnv } = value\n const { token: prevToken, env: prevEnv } = usePrevious<typeof value>(value)\n\n const isInitialLogin = !prevToken && !!newToken\n if (isInitialLogin) return false\n\n const tokenChanged = Boolean(\n prevToken?.access_token && newToken?.access_token !== prevToken?.access_token\n )\n\n const envChanged = Boolean(prevEnv && newEnv !== prevEnv)\n\n return tokenChanged || envChanged\n}\n\nfunction usePrevious<T>(value: T): T {\n const ref = useRef<T>(value)\n\n useEffect(() => {\n ref.current = value\n }, [value])\n\n return ref.current\n}\n"],"mappings":"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","ignoreList":[]}
@@ -2,6 +2,7 @@ export declare function useAnimatedMessageBackgroundColor(): {
2
2
  animatedBackgroundColor: import("react-native-reanimated/lib/typescript/hook/commonTypes").AnimatedStyleHandle<{
3
3
  backgroundColor: string;
4
4
  }>;
5
+ flash: () => void;
5
6
  handleMessagePressIn: () => void;
6
7
  handleMessagePressOut: () => void;
7
8
  };
@@ -1 +1 @@
1
- {"version":3,"file":"use_animated_message_background_color.d.ts","sourceRoot":"","sources":["../../src/hooks/use_animated_message_background_color.ts"],"names":[],"mappings":"AAUA,wBAAgB,iCAAiC;;;;;;EAiChD"}
1
+ {"version":3,"file":"use_animated_message_background_color.d.ts","sourceRoot":"","sources":["../../src/hooks/use_animated_message_background_color.ts"],"names":[],"mappings":"AAkBA,wBAAgB,iCAAiC;;;;;;;EAkDhD"}
@@ -1,35 +1,52 @@
1
+ import { useCallback } from 'react';
1
2
  import { Platform } from 'react-native';
2
- import { useSharedValue, useAnimatedStyle, withTiming, interpolateColor, Easing } from 'react-native-reanimated';
3
+ import { useSharedValue, useAnimatedStyle, withDelay, withSequence, withTiming, interpolateColor, Easing, ReduceMotion } from 'react-native-reanimated';
3
4
  import { useTheme } from './use_theme';
5
+ const FLASH_IN_MS = 150;
6
+ const FLASH_HOLD_MS = 500;
7
+ const FLASH_OUT_MS = 1500;
4
8
  export function useAnimatedMessageBackgroundColor() {
5
9
  const {
6
10
  colors
7
11
  } = useTheme();
8
- const bgFadeProgress = useSharedValue(0);
9
- const pressedColor = Platform.select({
10
- ios: colors.fillColorNeutral050Base,
11
- default: 'transparent'
12
- });
12
+ const pressProgress = useSharedValue(0);
13
+ const flashProgress = useSharedValue(0);
14
+ const tintColor = colors.fillColorNeutral050Base;
15
+ const tintsOnPress = Platform.OS === 'ios';
13
16
  const animatedBackgroundColor = useAnimatedStyle(() => {
14
- const backgroundColor = interpolateColor(bgFadeProgress.value, [0, 1], ['transparent', pressedColor]);
17
+ const pressTint = tintsOnPress ? pressProgress.value : 0;
18
+ const progress = Math.max(pressTint, flashProgress.value);
19
+ const backgroundColor = interpolateColor(progress, [0, 1], ['transparent', tintColor]);
15
20
  return {
16
21
  backgroundColor
17
22
  };
18
23
  });
19
24
  const handleMessagePressIn = () => {
20
- bgFadeProgress.value = withTiming(1, {
25
+ pressProgress.value = withTiming(1, {
21
26
  duration: 300,
22
27
  easing: Easing.inOut(Easing.ease)
23
28
  });
24
29
  };
25
30
  const handleMessagePressOut = () => {
26
- bgFadeProgress.value = withTiming(0, {
31
+ pressProgress.value = withTiming(0, {
27
32
  duration: 300,
28
33
  easing: Easing.inOut(Easing.ease)
29
34
  });
30
35
  };
36
+ const flash = useCallback(() => {
37
+ flashProgress.value = withSequence(withTiming(1, {
38
+ duration: FLASH_IN_MS,
39
+ easing: Easing.out(Easing.ease),
40
+ reduceMotion: ReduceMotion.Never
41
+ }), withDelay(FLASH_HOLD_MS, withTiming(0, {
42
+ duration: FLASH_OUT_MS,
43
+ easing: Easing.out(Easing.ease),
44
+ reduceMotion: ReduceMotion.System
45
+ }), ReduceMotion.Never));
46
+ }, [flashProgress]);
31
47
  return {
32
48
  animatedBackgroundColor,
49
+ flash,
33
50
  handleMessagePressIn,
34
51
  handleMessagePressOut
35
52
  };
@@ -1 +1 @@
1
- {"version":3,"file":"use_animated_message_background_color.js","names":["Platform","useSharedValue","useAnimatedStyle","withTiming","interpolateColor","Easing","useTheme","useAnimatedMessageBackgroundColor","colors","bgFadeProgress","pressedColor","select","ios","fillColorNeutral050Base","default","animatedBackgroundColor","backgroundColor","value","handleMessagePressIn","duration","easing","inOut","ease","handleMessagePressOut"],"sources":["../../src/hooks/use_animated_message_background_color.ts"],"sourcesContent":["import { Platform } from 'react-native'\nimport {\n useSharedValue,\n useAnimatedStyle,\n withTiming,\n interpolateColor,\n Easing,\n} from 'react-native-reanimated'\nimport { useTheme } from './use_theme'\n\nexport function useAnimatedMessageBackgroundColor() {\n const { colors } = useTheme()\n const bgFadeProgress = useSharedValue(0)\n\n const pressedColor = Platform.select({\n ios: colors.fillColorNeutral050Base,\n default: 'transparent',\n })\n\n const animatedBackgroundColor = useAnimatedStyle(() => {\n const backgroundColor = interpolateColor(\n bgFadeProgress.value,\n [0, 1],\n ['transparent', pressedColor]\n )\n return {\n backgroundColor,\n }\n })\n\n const handleMessagePressIn = () => {\n bgFadeProgress.value = withTiming(1, { duration: 300, easing: Easing.inOut(Easing.ease) })\n }\n\n const handleMessagePressOut = () => {\n bgFadeProgress.value = withTiming(0, { duration: 300, easing: Easing.inOut(Easing.ease) })\n }\n\n return {\n animatedBackgroundColor,\n handleMessagePressIn,\n handleMessagePressOut,\n }\n}\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,cAAc;AACvC,SACEC,cAAc,EACdC,gBAAgB,EAChBC,UAAU,EACVC,gBAAgB,EAChBC,MAAM,QACD,yBAAyB;AAChC,SAASC,QAAQ,QAAQ,aAAa;AAEtC,OAAO,SAASC,iCAAiCA,CAAA,EAAG;EAClD,MAAM;IAAEC;EAAO,CAAC,GAAGF,QAAQ,CAAC,CAAC;EAC7B,MAAMG,cAAc,GAAGR,cAAc,CAAC,CAAC,CAAC;EAExC,MAAMS,YAAY,GAAGV,QAAQ,CAACW,MAAM,CAAC;IACnCC,GAAG,EAAEJ,MAAM,CAACK,uBAAuB;IACnCC,OAAO,EAAE;EACX,CAAC,CAAC;EAEF,MAAMC,uBAAuB,GAAGb,gBAAgB,CAAC,MAAM;IACrD,MAAMc,eAAe,GAAGZ,gBAAgB,CACtCK,cAAc,CAACQ,KAAK,EACpB,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC,aAAa,EAAEP,YAAY,CAC9B,CAAC;IACD,OAAO;MACLM;IACF,CAAC;EACH,CAAC,CAAC;EAEF,MAAME,oBAAoB,GAAGA,CAAA,KAAM;IACjCT,cAAc,CAACQ,KAAK,GAAGd,UAAU,CAAC,CAAC,EAAE;MAAEgB,QAAQ,EAAE,GAAG;MAAEC,MAAM,EAAEf,MAAM,CAACgB,KAAK,CAAChB,MAAM,CAACiB,IAAI;IAAE,CAAC,CAAC;EAC5F,CAAC;EAED,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;IAClCd,cAAc,CAACQ,KAAK,GAAGd,UAAU,CAAC,CAAC,EAAE;MAAEgB,QAAQ,EAAE,GAAG;MAAEC,MAAM,EAAEf,MAAM,CAACgB,KAAK,CAAChB,MAAM,CAACiB,IAAI;IAAE,CAAC,CAAC;EAC5F,CAAC;EAED,OAAO;IACLP,uBAAuB;IACvBG,oBAAoB;IACpBK;EACF,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"use_animated_message_background_color.js","names":["useCallback","Platform","useSharedValue","useAnimatedStyle","withDelay","withSequence","withTiming","interpolateColor","Easing","ReduceMotion","useTheme","FLASH_IN_MS","FLASH_HOLD_MS","FLASH_OUT_MS","useAnimatedMessageBackgroundColor","colors","pressProgress","flashProgress","tintColor","fillColorNeutral050Base","tintsOnPress","OS","animatedBackgroundColor","pressTint","value","progress","Math","max","backgroundColor","handleMessagePressIn","duration","easing","inOut","ease","handleMessagePressOut","flash","out","reduceMotion","Never","System"],"sources":["../../src/hooks/use_animated_message_background_color.ts"],"sourcesContent":["import { useCallback } from 'react'\nimport { Platform } from 'react-native'\nimport {\n useSharedValue,\n useAnimatedStyle,\n withDelay,\n withSequence,\n withTiming,\n interpolateColor,\n Easing,\n ReduceMotion,\n} from 'react-native-reanimated'\nimport { useTheme } from './use_theme'\n\nconst FLASH_IN_MS = 150\nconst FLASH_HOLD_MS = 500\nconst FLASH_OUT_MS = 1500\n\nexport function useAnimatedMessageBackgroundColor() {\n const { colors } = useTheme()\n const pressProgress = useSharedValue(0)\n const flashProgress = useSharedValue(0)\n\n const tintColor = colors.fillColorNeutral050Base\n const tintsOnPress = Platform.OS === 'ios'\n\n const animatedBackgroundColor = useAnimatedStyle(() => {\n const pressTint = tintsOnPress ? pressProgress.value : 0\n const progress = Math.max(pressTint, flashProgress.value)\n const backgroundColor = interpolateColor(progress, [0, 1], ['transparent', tintColor])\n return {\n backgroundColor,\n }\n })\n\n const handleMessagePressIn = () => {\n pressProgress.value = withTiming(1, { duration: 300, easing: Easing.inOut(Easing.ease) })\n }\n\n const handleMessagePressOut = () => {\n pressProgress.value = withTiming(0, { duration: 300, easing: Easing.inOut(Easing.ease) })\n }\n\n const flash = useCallback(() => {\n flashProgress.value = withSequence(\n withTiming(1, {\n duration: FLASH_IN_MS,\n easing: Easing.out(Easing.ease),\n reduceMotion: ReduceMotion.Never,\n }),\n withDelay(\n FLASH_HOLD_MS,\n withTiming(0, {\n duration: FLASH_OUT_MS,\n easing: Easing.out(Easing.ease),\n reduceMotion: ReduceMotion.System,\n }),\n ReduceMotion.Never\n )\n )\n }, [flashProgress])\n\n return {\n animatedBackgroundColor,\n flash,\n handleMessagePressIn,\n handleMessagePressOut,\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,QAAQ,QAAQ,cAAc;AACvC,SACEC,cAAc,EACdC,gBAAgB,EAChBC,SAAS,EACTC,YAAY,EACZC,UAAU,EACVC,gBAAgB,EAChBC,MAAM,EACNC,YAAY,QACP,yBAAyB;AAChC,SAASC,QAAQ,QAAQ,aAAa;AAEtC,MAAMC,WAAW,GAAG,GAAG;AACvB,MAAMC,aAAa,GAAG,GAAG;AACzB,MAAMC,YAAY,GAAG,IAAI;AAEzB,OAAO,SAASC,iCAAiCA,CAAA,EAAG;EAClD,MAAM;IAAEC;EAAO,CAAC,GAAGL,QAAQ,CAAC,CAAC;EAC7B,MAAMM,aAAa,GAAGd,cAAc,CAAC,CAAC,CAAC;EACvC,MAAMe,aAAa,GAAGf,cAAc,CAAC,CAAC,CAAC;EAEvC,MAAMgB,SAAS,GAAGH,MAAM,CAACI,uBAAuB;EAChD,MAAMC,YAAY,GAAGnB,QAAQ,CAACoB,EAAE,KAAK,KAAK;EAE1C,MAAMC,uBAAuB,GAAGnB,gBAAgB,CAAC,MAAM;IACrD,MAAMoB,SAAS,GAAGH,YAAY,GAAGJ,aAAa,CAACQ,KAAK,GAAG,CAAC;IACxD,MAAMC,QAAQ,GAAGC,IAAI,CAACC,GAAG,CAACJ,SAAS,EAAEN,aAAa,CAACO,KAAK,CAAC;IACzD,MAAMI,eAAe,GAAGrB,gBAAgB,CAACkB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,EAAEP,SAAS,CAAC,CAAC;IACtF,OAAO;MACLU;IACF,CAAC;EACH,CAAC,CAAC;EAEF,MAAMC,oBAAoB,GAAGA,CAAA,KAAM;IACjCb,aAAa,CAACQ,KAAK,GAAGlB,UAAU,CAAC,CAAC,EAAE;MAAEwB,QAAQ,EAAE,GAAG;MAAEC,MAAM,EAAEvB,MAAM,CAACwB,KAAK,CAACxB,MAAM,CAACyB,IAAI;IAAE,CAAC,CAAC;EAC3F,CAAC;EAED,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;IAClClB,aAAa,CAACQ,KAAK,GAAGlB,UAAU,CAAC,CAAC,EAAE;MAAEwB,QAAQ,EAAE,GAAG;MAAEC,MAAM,EAAEvB,MAAM,CAACwB,KAAK,CAACxB,MAAM,CAACyB,IAAI;IAAE,CAAC,CAAC;EAC3F,CAAC;EAED,MAAME,KAAK,GAAGnC,WAAW,CAAC,MAAM;IAC9BiB,aAAa,CAACO,KAAK,GAAGnB,YAAY,CAChCC,UAAU,CAAC,CAAC,EAAE;MACZwB,QAAQ,EAAEnB,WAAW;MACrBoB,MAAM,EAAEvB,MAAM,CAAC4B,GAAG,CAAC5B,MAAM,CAACyB,IAAI,CAAC;MAC/BI,YAAY,EAAE5B,YAAY,CAAC6B;IAC7B,CAAC,CAAC,EACFlC,SAAS,CACPQ,aAAa,EACbN,UAAU,CAAC,CAAC,EAAE;MACZwB,QAAQ,EAAEjB,YAAY;MACtBkB,MAAM,EAAEvB,MAAM,CAAC4B,GAAG,CAAC5B,MAAM,CAACyB,IAAI,CAAC;MAC/BI,YAAY,EAAE5B,YAAY,CAAC8B;IAC7B,CAAC,CAAC,EACF9B,YAAY,CAAC6B,KACf,CACF,CAAC;EACH,CAAC,EAAE,CAACrB,aAAa,CAAC,CAAC;EAEnB,OAAO;IACLK,uBAAuB;IACvBa,KAAK;IACLN,oBAAoB;IACpBK;EACF,CAAC;AACH","ignoreList":[]}
@@ -1,5 +1,5 @@
1
- import { AppGrantsResource } from '../types';
2
- import { App } from './use_api_client';
1
+ import { ApiCollection, AppGrantsResource } from '../types';
2
+ import { ApiClient, App } from './use_api_client';
3
3
  export declare const appGrantsRequestArgs: {
4
4
  url: string;
5
5
  data: {
@@ -9,6 +9,14 @@ export declare const appGrantsRequestArgs: {
9
9
  };
10
10
  app: App;
11
11
  };
12
+ export declare const appGrantsQueryOptions: (apiClient: ApiClient) => import("@tanstack/query-core").OmitKeyof<import("@tanstack/react-query").UseQueryOptions<ApiCollection<AppGrantsResource>, Error, ApiCollection<AppGrantsResource>, import("./use_suspense_api").RequestQueryKey>, "queryFn"> & {
13
+ queryFn?: import("@tanstack/query-core").QueryFunction<ApiCollection<AppGrantsResource>, import("./use_suspense_api").RequestQueryKey, never> | undefined;
14
+ } & {
15
+ queryKey: import("./use_suspense_api").RequestQueryKey & {
16
+ [dataTagSymbol]: ApiCollection<AppGrantsResource>;
17
+ [dataTagErrorSymbol]: Error;
18
+ };
19
+ };
12
20
  export declare function useAppGrants(): {
13
21
  error: import("..").ResponseError;
14
22
  isError: true;
@@ -1 +1 @@
1
- {"version":3,"file":"use_chat_permissions.d.ts","sourceRoot":"","sources":["../../src/hooks/use_chat_permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAG5C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAEtC,eAAO,MAAM,oBAAoB;;;;;;;SAOhB,GAAG;CACnB,CAAA;AAED,wBAAgB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI3B;AAED,wBAAgB,yBAAyB,IAAI,OAAO,CAInD"}
1
+ {"version":3,"file":"use_chat_permissions.d.ts","sourceRoot":"","sources":["../../src/hooks/use_chat_permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAI3D,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGjD,eAAO,MAAM,oBAAoB;;;;;;;SAOhB,GAAG;CACnB,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,WAAW,SAAS;;;;;;;CAQtD,CAAA;AAEJ,wBAAgB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI3B;AAED,wBAAgB,yBAAyB,IAAI,OAAO,CAInD"}
@@ -1,6 +1,9 @@
1
1
  import { c as _c } from "react/compiler-runtime";
2
+ import { queryOptions } from '@tanstack/react-query';
3
+ import { throwResponseError } from '../utils/response_error';
2
4
  import { FIVE_MINUTES } from '../utils/time';
3
5
  import { useApiGet } from './use_api';
6
+ import { getRequestQueryKey } from './use_suspense_api';
4
7
  export const appGrantsRequestArgs = {
5
8
  url: '/me/app_grants',
6
9
  data: {
@@ -10,6 +13,11 @@ export const appGrantsRequestArgs = {
10
13
  },
11
14
  app: 'chat'
12
15
  };
16
+ export const appGrantsQueryOptions = apiClient => queryOptions({
17
+ queryKey: getRequestQueryKey(appGrantsRequestArgs),
18
+ queryFn: () => apiClient[appGrantsRequestArgs.app].get(appGrantsRequestArgs).catch(throwResponseError),
19
+ staleTime: FIVE_MINUTES
20
+ });
13
21
  export function useAppGrants() {
14
22
  const $ = _c(1);
15
23
  let t0;
@@ -1 +1 @@
1
- {"version":3,"file":"use_chat_permissions.js","names":["FIVE_MINUTES","useApiGet","appGrantsRequestArgs","url","data","fields","AppGrant","app","useAppGrants","$","_c","t0","Symbol","for","staleTime","useCanCreateConversations","t1","undefined","appGrants","t2","some","_temp","appGrant","createConversations"],"sources":["../../src/hooks/use_chat_permissions.ts"],"sourcesContent":["import { AppGrantsResource } from '../types'\nimport { FIVE_MINUTES } from '../utils/time'\nimport { useApiGet } from './use_api'\nimport { App } from './use_api_client'\n\nexport const appGrantsRequestArgs = {\n url: '/me/app_grants',\n data: {\n fields: {\n AppGrant: ['create_conversations', 'app_name'],\n },\n },\n app: 'chat' as App,\n}\n\nexport function useAppGrants() {\n return useApiGet<AppGrantsResource[]>(appGrantsRequestArgs, {\n staleTime: FIVE_MINUTES,\n })\n}\n\nexport function useCanCreateConversations(): boolean {\n const { data: appGrants = [] } = useAppGrants()\n\n return appGrants.some(appGrant => appGrant.createConversations)\n}\n"],"mappings":";AACA,SAASA,YAAY,QAAQ,eAAe;AAC5C,SAASC,SAAS,QAAQ,WAAW;AAGrC,OAAO,MAAMC,oBAAoB,GAAG;EAClCC,GAAG,EAAE,gBAAgB;EACrBC,IAAI,EAAE;IACJC,MAAM,EAAE;MACNC,QAAQ,EAAE,CAAC,sBAAsB,EAAE,UAAU;IAC/C;EACF,CAAC;EACDC,GAAG,EAAE;AACP,CAAC;AAED,OAAO,SAAAC,aAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAF,CAAA,QAAAG,MAAA,CAAAC,GAAA;IACuDF,EAAA;MAAAG,SAAA,EAC/Cd;IACb,CAAC;IAAAS,CAAA,MAAAE,EAAA;EAAA;IAAAA,EAAA,GAAAF,CAAA;EAAA;EAAA,OAFMR,SAAS,CAAsBC,oBAAoB,EAAES,EAE3D,CAAC;AAAA;AAGJ,OAAO,SAAAI,0BAAA;EAAA,MAAAN,CAAA,GAAAC,EAAA;EACL;IAAAN,IAAA,EAAAO;EAAA,IAAiCH,YAAY,CAAC,CAAC;EAAA,IAAAQ,EAAA;EAAA,IAAAP,CAAA,QAAAE,EAAA;IAAjCK,EAAA,GAAAL,EAAc,KAAdM,SAAc,GAAd,EAAc,GAAdN,EAAc;IAAAF,CAAA,MAAAE,EAAA;IAAAF,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAAd,MAAAS,SAAA,GAAAF,EAAc;EAAA,IAAAG,EAAA;EAAA,IAAAV,CAAA,QAAAS,SAAA;IAErBC,EAAA,GAAAD,SAAS,CAAAE,IAAK,CAACC,KAAwC,CAAC;IAAAZ,CAAA,MAAAS,SAAA;IAAAT,CAAA,MAAAU,EAAA;EAAA;IAAAA,EAAA,GAAAV,CAAA;EAAA;EAAA,OAAxDU,EAAwD;AAAA;AAH1D,SAAAE,MAAAC,QAAA;EAAA,OAG6BA,QAAQ,CAAAC,mBAAoB;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"use_chat_permissions.js","names":["queryOptions","throwResponseError","FIVE_MINUTES","useApiGet","getRequestQueryKey","appGrantsRequestArgs","url","data","fields","AppGrant","app","appGrantsQueryOptions","apiClient","queryKey","queryFn","get","catch","staleTime","useAppGrants","$","_c","t0","Symbol","for","useCanCreateConversations","t1","undefined","appGrants","t2","some","_temp","appGrant","createConversations"],"sources":["../../src/hooks/use_chat_permissions.ts"],"sourcesContent":["import { queryOptions } from '@tanstack/react-query'\nimport { ApiCollection, AppGrantsResource } from '../types'\nimport { throwResponseError } from '../utils/response_error'\nimport { FIVE_MINUTES } from '../utils/time'\nimport { useApiGet } from './use_api'\nimport { ApiClient, App } from './use_api_client'\nimport { getRequestQueryKey } from './use_suspense_api'\n\nexport const appGrantsRequestArgs = {\n url: '/me/app_grants',\n data: {\n fields: {\n AppGrant: ['create_conversations', 'app_name'],\n },\n },\n app: 'chat' as App,\n}\n\nexport const appGrantsQueryOptions = (apiClient: ApiClient) =>\n queryOptions({\n queryKey: getRequestQueryKey(appGrantsRequestArgs),\n queryFn: (): Promise<ApiCollection<AppGrantsResource>> =>\n apiClient[appGrantsRequestArgs.app]\n .get<ApiCollection<AppGrantsResource>>(appGrantsRequestArgs)\n .catch(throwResponseError),\n staleTime: FIVE_MINUTES,\n })\n\nexport function useAppGrants() {\n return useApiGet<AppGrantsResource[]>(appGrantsRequestArgs, {\n staleTime: FIVE_MINUTES,\n })\n}\n\nexport function useCanCreateConversations(): boolean {\n const { data: appGrants = [] } = useAppGrants()\n\n return appGrants.some(appGrant => appGrant.createConversations)\n}\n"],"mappings":";AAAA,SAASA,YAAY,QAAQ,uBAAuB;AAEpD,SAASC,kBAAkB,QAAQ,yBAAyB;AAC5D,SAASC,YAAY,QAAQ,eAAe;AAC5C,SAASC,SAAS,QAAQ,WAAW;AAErC,SAASC,kBAAkB,QAAQ,oBAAoB;AAEvD,OAAO,MAAMC,oBAAoB,GAAG;EAClCC,GAAG,EAAE,gBAAgB;EACrBC,IAAI,EAAE;IACJC,MAAM,EAAE;MACNC,QAAQ,EAAE,CAAC,sBAAsB,EAAE,UAAU;IAC/C;EACF,CAAC;EACDC,GAAG,EAAE;AACP,CAAC;AAED,OAAO,MAAMC,qBAAqB,GAAIC,SAAoB,IACxDZ,YAAY,CAAC;EACXa,QAAQ,EAAET,kBAAkB,CAACC,oBAAoB,CAAC;EAClDS,OAAO,EAAEA,CAAA,KACPF,SAAS,CAACP,oBAAoB,CAACK,GAAG,CAAC,CAChCK,GAAG,CAAmCV,oBAAoB,CAAC,CAC3DW,KAAK,CAACf,kBAAkB,CAAC;EAC9BgB,SAAS,EAAEf;AACb,CAAC,CAAC;AAEJ,OAAO,SAAAgB,aAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAF,CAAA,QAAAG,MAAA,CAAAC,GAAA;IACuDF,EAAA;MAAAJ,SAAA,EAC/Cf;IACb,CAAC;IAAAiB,CAAA,MAAAE,EAAA;EAAA;IAAAA,EAAA,GAAAF,CAAA;EAAA;EAAA,OAFMhB,SAAS,CAAsBE,oBAAoB,EAAEgB,EAE3D,CAAC;AAAA;AAGJ,OAAO,SAAAG,0BAAA;EAAA,MAAAL,CAAA,GAAAC,EAAA;EACL;IAAAb,IAAA,EAAAc;EAAA,IAAiCH,YAAY,CAAC,CAAC;EAAA,IAAAO,EAAA;EAAA,IAAAN,CAAA,QAAAE,EAAA;IAAjCI,EAAA,GAAAJ,EAAc,KAAdK,SAAc,GAAd,EAAc,GAAdL,EAAc;IAAAF,CAAA,MAAAE,EAAA;IAAAF,CAAA,MAAAM,EAAA;EAAA;IAAAA,EAAA,GAAAN,CAAA;EAAA;EAAd,MAAAQ,SAAA,GAAAF,EAAc;EAAA,IAAAG,EAAA;EAAA,IAAAT,CAAA,QAAAQ,SAAA;IAErBC,EAAA,GAAAD,SAAS,CAAAE,IAAK,CAACC,KAAwC,CAAC;IAAAX,CAAA,MAAAQ,SAAA;IAAAR,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAAA,OAAxDS,EAAwD;AAAA;AAH1D,SAAAE,MAAAC,QAAA;EAAA,OAG6BA,QAAQ,CAAAC,mBAAoB;AAAA","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export declare function useDebouncedSearchTerm(term: string, delayMs?: number): string;
2
+ //# sourceMappingURL=use_debounced_search_term.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_debounced_search_term.d.ts","sourceRoot":"","sources":["../../src/hooks/use_debounced_search_term.ts"],"names":[],"mappings":"AAIA,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,SAAmB,UAe9E"}
@@ -0,0 +1,40 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ const DEFAULT_DELAY_MS = 200;
4
+ export function useDebouncedSearchTerm(term, t0) {
5
+ const $ = _c(6);
6
+ const delayMs = t0 === undefined ? DEFAULT_DELAY_MS : t0;
7
+ const [debouncedTerm, setDebouncedTerm] = useState("");
8
+ let t1;
9
+ if ($[0] !== term) {
10
+ t1 = term.trim();
11
+ $[0] = term;
12
+ $[1] = t1;
13
+ } else {
14
+ t1 = $[1];
15
+ }
16
+ const trimmedTerm = t1;
17
+ let t2;
18
+ let t3;
19
+ if ($[2] !== delayMs || $[3] !== trimmedTerm) {
20
+ t2 = () => {
21
+ if (trimmedTerm.length === 0) {
22
+ setDebouncedTerm("");
23
+ return;
24
+ }
25
+ const timer = setTimeout(() => setDebouncedTerm(trimmedTerm), delayMs);
26
+ return () => clearTimeout(timer);
27
+ };
28
+ t3 = [trimmedTerm, delayMs];
29
+ $[2] = delayMs;
30
+ $[3] = trimmedTerm;
31
+ $[4] = t2;
32
+ $[5] = t3;
33
+ } else {
34
+ t2 = $[4];
35
+ t3 = $[5];
36
+ }
37
+ useEffect(t2, t3);
38
+ return debouncedTerm;
39
+ }
40
+ //# sourceMappingURL=use_debounced_search_term.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_debounced_search_term.js","names":["useEffect","useState","DEFAULT_DELAY_MS","useDebouncedSearchTerm","term","t0","$","_c","delayMs","undefined","debouncedTerm","setDebouncedTerm","t1","trim","trimmedTerm","t2","t3","length","timer","setTimeout","clearTimeout"],"sources":["../../src/hooks/use_debounced_search_term.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\n\nconst DEFAULT_DELAY_MS = 200\n\nexport function useDebouncedSearchTerm(term: string, delayMs = DEFAULT_DELAY_MS) {\n const [debouncedTerm, setDebouncedTerm] = useState('')\n const trimmedTerm = term.trim()\n\n useEffect(() => {\n if (trimmedTerm.length === 0) {\n setDebouncedTerm('')\n return\n }\n\n const timer = setTimeout(() => setDebouncedTerm(trimmedTerm), delayMs)\n return () => clearTimeout(timer)\n }, [trimmedTerm, delayMs])\n\n return debouncedTerm\n}\n"],"mappings":";AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAE3C,MAAMC,gBAAgB,GAAG,GAAG;AAE5B,OAAO,SAAAC,uBAAAC,IAAA,EAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAA8C,MAAAC,OAAA,GAAAH,EAA0B,KAA1BI,SAA0B,GAA1BP,gBAA0B,GAA1BG,EAA0B;EAC7E,OAAAK,aAAA,EAAAC,gBAAA,IAA0CV,QAAQ,CAAC,EAAE,CAAC;EAAA,IAAAW,EAAA;EAAA,IAAAN,CAAA,QAAAF,IAAA;IAClCQ,EAAA,GAAAR,IAAI,CAAAS,IAAK,CAAC,CAAC;IAAAP,CAAA,MAAAF,IAAA;IAAAE,CAAA,MAAAM,EAAA;EAAA;IAAAA,EAAA,GAAAN,CAAA;EAAA;EAA/B,MAAAQ,WAAA,GAAoBF,EAAW;EAAA,IAAAG,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAV,CAAA,QAAAE,OAAA,IAAAF,CAAA,QAAAQ,WAAA;IAErBC,EAAA,GAAAA,CAAA;MACR,IAAID,WAAW,CAAAG,MAAO,KAAK,CAAC;QAC1BN,gBAAgB,CAAC,EAAE,CAAC;QAAA;MAAA;MAItB,MAAAO,KAAA,GAAcC,UAAU,CAAC,MAAMR,gBAAgB,CAACG,WAAW,CAAC,EAAEN,OAAO,CAAC;MAAA,OAC/D,MAAMY,YAAY,CAACF,KAAK,CAAC;IAAA,CACjC;IAAEF,EAAA,IAACF,WAAW,EAAEN,OAAO,CAAC;IAAAF,CAAA,MAAAE,OAAA;IAAAF,CAAA,MAAAQ,WAAA;IAAAR,CAAA,MAAAS,EAAA;IAAAT,CAAA,MAAAU,EAAA;EAAA;IAAAD,EAAA,GAAAT,CAAA;IAAAU,EAAA,GAAAV,CAAA;EAAA;EARzBN,SAAS,CAACe,EAQT,EAAEC,EAAsB,CAAC;EAAA,OAEnBN,aAAa;AAAA","ignoreList":[]}
@@ -29,6 +29,8 @@ export declare const availableFeatures: {
29
29
  readonly dm_search_clear_fix: "ROLLOUT_MOBILE_dm_search_clear_fix";
30
30
  readonly search: "QA_MOBILE_search";
31
31
  readonly search_rollout: "ROLLOUT_MOBILE_search";
32
+ readonly manual_archiving: "QA_MOBILE_manual_archiving";
33
+ readonly manual_archiving_rollout: "ROLLOUT_MOBILE_manual_archiving";
32
34
  };
33
35
  export {};
34
36
  //# sourceMappingURL=use_features.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use_features.d.ts","sourceRoot":"","sources":["../../src/hooks/use_features.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAG1E,OAAO,EAAE,SAAS,EAAgB,MAAM,kBAAkB,CAAA;AAE1D,KAAK,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAA;AAE7E,KAAK,kBAAkB,GAAG,aAAa,CAAC,eAAe,CAAC,GAAG;IACzD,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9B,CAAA;AAED,wBAAgB,WAAW;;kCAOT,WAAW;EAS5B;AAED,eAAO,MAAM,oBAAoB,GAAI,WAAW,SAAS;;;;;;;CAerD,CAAA;AAEJ,eAAO,MAAM,iBAAiB;;;;;;;;;;CAUsC,CAAA"}
1
+ {"version":3,"file":"use_features.d.ts","sourceRoot":"","sources":["../../src/hooks/use_features.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAG1E,OAAO,EAAE,SAAS,EAAgB,MAAM,kBAAkB,CAAA;AAE1D,KAAK,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAA;AAE7E,KAAK,kBAAkB,GAAG,aAAa,CAAC,eAAe,CAAC,GAAG;IACzD,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9B,CAAA;AAED,wBAAgB,WAAW;;kCAOT,WAAW;EAS5B;AAED,eAAO,MAAM,oBAAoB,GAAI,WAAW,SAAS;;;;;;;CAerD,CAAA;AAEJ,eAAO,MAAM,iBAAiB;;;;;;;;;;;;CAYsC,CAAA"}
@@ -68,7 +68,9 @@ export const availableFeatures = {
68
68
  video_moderation: 'ROLLOUT_MOBILE_video_moderation',
69
69
  dm_search_clear_fix: 'ROLLOUT_MOBILE_dm_search_clear_fix',
70
70
  search: 'QA_MOBILE_search',
71
- search_rollout: 'ROLLOUT_MOBILE_search'
71
+ search_rollout: 'ROLLOUT_MOBILE_search',
72
+ manual_archiving: 'QA_MOBILE_manual_archiving',
73
+ manual_archiving_rollout: 'ROLLOUT_MOBILE_manual_archiving'
72
74
  };
73
75
  const stableEmptyFeatures = {
74
76
  data: [],
@@ -1 +1 @@
1
- {"version":3,"file":"use_features.js","names":["queryOptions","useSuspenseQuery","useCallback","getFeaturesRequestArgs","getFeaturesQueryKey","FIVE_MINUTES","ONE_MINUTE","useApiClient","useFeatures","$","_c","apiClient","t0","featuresQueryOptions","data","features","t1","featureName","some","feature","name","enabled","featureEnabled","t2","queryKey","queryFn","chat","get","catch","error","stableEmptyFeatures","failure","status","staleTime","query","state","gcTime","Infinity","availableFeatures","gender_specific_conversations","message_reporting","granular_notifications_ui","custom_conversation_avatars","conversation_safety_lock","video_moderation","dm_search_clear_fix","search","search_rollout","links","meta","count","totalCount"],"sources":["../../src/hooks/use_features.ts"],"sourcesContent":["import { queryOptions, useSuspenseQuery } from '@tanstack/react-query'\nimport { useCallback } from 'react'\nimport { ApiCollection } from '../types'\nimport type { FeatureResource } from '../types/resources/feature_resource'\nimport { getFeaturesRequestArgs, getFeaturesQueryKey } from '../utils/request/get_features'\nimport { FIVE_MINUTES, ONE_MINUTE } from '../utils/time'\nimport { ApiClient, useApiClient } from './use_api_client'\n\ntype FeatureName = (typeof availableFeatures)[keyof typeof availableFeatures]\n\ntype FeaturesCollection = ApiCollection<FeatureResource> & {\n failure?: { status?: number }\n}\n\nexport function useFeatures() {\n const apiClient = useApiClient()\n const { data } = useSuspenseQuery(featuresQueryOptions(apiClient))\n\n const features = data.data\n\n const featureEnabled = useCallback(\n (featureName: FeatureName) =>\n features.some(feature => feature.name === featureName && feature.enabled),\n [features]\n )\n\n return {\n features,\n featureEnabled,\n }\n}\n\nexport const featuresQueryOptions = (apiClient: ApiClient) =>\n queryOptions({\n queryKey: getFeaturesQueryKey(),\n queryFn: (): Promise<FeaturesCollection> => {\n return apiClient.chat\n .get<ApiCollection<FeatureResource>>(getFeaturesRequestArgs())\n .catch(error => ({ ...stableEmptyFeatures, failure: { status: error?.status } }))\n },\n staleTime: query => {\n const failure = query.state.data?.failure\n if (!failure) return FIVE_MINUTES\n\n return failure.status === 429 ? ONE_MINUTE : 0\n },\n gcTime: Infinity,\n })\n\nexport const availableFeatures = {\n gender_specific_conversations: 'ROLLOUT_gender_specific_conversations',\n message_reporting: 'ROLLOUT_MOBILE_message_reporting',\n granular_notifications_ui: 'ROLLOUT_granular_notification_preferences_ui',\n custom_conversation_avatars: 'ROLLOUT_custom_conversation_avatars',\n conversation_safety_lock: 'ROLLOUT_conversation_safety_lock',\n video_moderation: 'ROLLOUT_MOBILE_video_moderation',\n dm_search_clear_fix: 'ROLLOUT_MOBILE_dm_search_clear_fix',\n search: 'QA_MOBILE_search',\n search_rollout: 'ROLLOUT_MOBILE_search',\n} as const satisfies Record<string, `${'QA' | 'ROLLOUT'}_${string}`>\n\nconst stableEmptyFeatures: ApiCollection<FeatureResource> = {\n data: [],\n links: {},\n meta: {\n count: 0,\n totalCount: 0,\n },\n}\n"],"mappings":";AAAA,SAASA,YAAY,EAAEC,gBAAgB,QAAQ,uBAAuB;AACtE,SAASC,WAAW,QAAQ,OAAO;AAGnC,SAASC,sBAAsB,EAAEC,mBAAmB,QAAQ,+BAA+B;AAC3F,SAASC,YAAY,EAAEC,UAAU,QAAQ,eAAe;AACxD,SAAoBC,YAAY,QAAQ,kBAAkB;AAQ1D,OAAO,SAAAC,YAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EACL,MAAAC,SAAA,GAAkBJ,YAAY,CAAC,CAAC;EAAA,IAAAK,EAAA;EAAA,IAAAH,CAAA,QAAAE,SAAA;IACEC,EAAA,GAAAC,oBAAoB,CAACF,SAAS,CAAC;IAAAF,CAAA,MAAAE,SAAA;IAAAF,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAAjE;IAAAK;EAAA,IAAiBb,gBAAgB,CAACW,EAA+B,CAAC;EAElE,MAAAG,QAAA,GAAiBD,IAAI,CAAAA,IAAK;EAAA,IAAAE,EAAA;EAAA,IAAAP,CAAA,QAAAM,QAAA;IAGxBC,EAAA,GAAAC,WAAA,IACEF,QAAQ,CAAAG,IAAK,CAACC,OAAA,IAAWA,OAAO,CAAAC,IAAK,KAAKH,WAA8B,IAAfE,OAAO,CAAAE,OAAQ,CAAC;IAAAZ,CAAA,MAAAM,QAAA;IAAAN,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAF7E,MAAAa,cAAA,GAAuBN,EAItB;EAAA,IAAAO,EAAA;EAAA,IAAAd,CAAA,QAAAa,cAAA,IAAAb,CAAA,QAAAM,QAAA;IAEMQ,EAAA;MAAAR,QAAA;MAAAO;IAGP,CAAC;IAAAb,CAAA,MAAAa,cAAA;IAAAb,CAAA,MAAAM,QAAA;IAAAN,CAAA,MAAAc,EAAA;EAAA;IAAAA,EAAA,GAAAd,CAAA;EAAA;EAAA,OAHMc,EAGN;AAAA;AAGH,OAAO,MAAMV,oBAAoB,GAAIF,SAAoB,IACvDX,YAAY,CAAC;EACXwB,QAAQ,EAAEpB,mBAAmB,CAAC,CAAC;EAC/BqB,OAAO,EAAEA,CAAA,KAAmC;IAC1C,OAAOd,SAAS,CAACe,IAAI,CAClBC,GAAG,CAAiCxB,sBAAsB,CAAC,CAAC,CAAC,CAC7DyB,KAAK,CAACC,KAAK,KAAK;MAAE,GAAGC,mBAAmB;MAAEC,OAAO,EAAE;QAAEC,MAAM,EAAEH,KAAK,EAAEG;MAAO;IAAE,CAAC,CAAC,CAAC;EACrF,CAAC;EACDC,SAAS,EAAEC,KAAK,IAAI;IAClB,MAAMH,OAAO,GAAGG,KAAK,CAACC,KAAK,CAACrB,IAAI,EAAEiB,OAAO;IACzC,IAAI,CAACA,OAAO,EAAE,OAAO1B,YAAY;IAEjC,OAAO0B,OAAO,CAACC,MAAM,KAAK,GAAG,GAAG1B,UAAU,GAAG,CAAC;EAChD,CAAC;EACD8B,MAAM,EAAEC;AACV,CAAC,CAAC;AAEJ,OAAO,MAAMC,iBAAiB,GAAG;EAC/BC,6BAA6B,EAAE,uCAAuC;EACtEC,iBAAiB,EAAE,kCAAkC;EACrDC,yBAAyB,EAAE,8CAA8C;EACzEC,2BAA2B,EAAE,qCAAqC;EAClEC,wBAAwB,EAAE,kCAAkC;EAC5DC,gBAAgB,EAAE,iCAAiC;EACnDC,mBAAmB,EAAE,oCAAoC;EACzDC,MAAM,EAAE,kBAAkB;EAC1BC,cAAc,EAAE;AAClB,CAAoE;AAEpE,MAAMjB,mBAAmD,GAAG;EAC1DhB,IAAI,EAAE,EAAE;EACRkC,KAAK,EAAE,CAAC,CAAC;EACTC,IAAI,EAAE;IACJC,KAAK,EAAE,CAAC;IACRC,UAAU,EAAE;EACd;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"use_features.js","names":["queryOptions","useSuspenseQuery","useCallback","getFeaturesRequestArgs","getFeaturesQueryKey","FIVE_MINUTES","ONE_MINUTE","useApiClient","useFeatures","$","_c","apiClient","t0","featuresQueryOptions","data","features","t1","featureName","some","feature","name","enabled","featureEnabled","t2","queryKey","queryFn","chat","get","catch","error","stableEmptyFeatures","failure","status","staleTime","query","state","gcTime","Infinity","availableFeatures","gender_specific_conversations","message_reporting","granular_notifications_ui","custom_conversation_avatars","conversation_safety_lock","video_moderation","dm_search_clear_fix","search","search_rollout","manual_archiving","manual_archiving_rollout","links","meta","count","totalCount"],"sources":["../../src/hooks/use_features.ts"],"sourcesContent":["import { queryOptions, useSuspenseQuery } from '@tanstack/react-query'\nimport { useCallback } from 'react'\nimport { ApiCollection } from '../types'\nimport type { FeatureResource } from '../types/resources/feature_resource'\nimport { getFeaturesRequestArgs, getFeaturesQueryKey } from '../utils/request/get_features'\nimport { FIVE_MINUTES, ONE_MINUTE } from '../utils/time'\nimport { ApiClient, useApiClient } from './use_api_client'\n\ntype FeatureName = (typeof availableFeatures)[keyof typeof availableFeatures]\n\ntype FeaturesCollection = ApiCollection<FeatureResource> & {\n failure?: { status?: number }\n}\n\nexport function useFeatures() {\n const apiClient = useApiClient()\n const { data } = useSuspenseQuery(featuresQueryOptions(apiClient))\n\n const features = data.data\n\n const featureEnabled = useCallback(\n (featureName: FeatureName) =>\n features.some(feature => feature.name === featureName && feature.enabled),\n [features]\n )\n\n return {\n features,\n featureEnabled,\n }\n}\n\nexport const featuresQueryOptions = (apiClient: ApiClient) =>\n queryOptions({\n queryKey: getFeaturesQueryKey(),\n queryFn: (): Promise<FeaturesCollection> => {\n return apiClient.chat\n .get<ApiCollection<FeatureResource>>(getFeaturesRequestArgs())\n .catch(error => ({ ...stableEmptyFeatures, failure: { status: error?.status } }))\n },\n staleTime: query => {\n const failure = query.state.data?.failure\n if (!failure) return FIVE_MINUTES\n\n return failure.status === 429 ? ONE_MINUTE : 0\n },\n gcTime: Infinity,\n })\n\nexport const availableFeatures = {\n gender_specific_conversations: 'ROLLOUT_gender_specific_conversations',\n message_reporting: 'ROLLOUT_MOBILE_message_reporting',\n granular_notifications_ui: 'ROLLOUT_granular_notification_preferences_ui',\n custom_conversation_avatars: 'ROLLOUT_custom_conversation_avatars',\n conversation_safety_lock: 'ROLLOUT_conversation_safety_lock',\n video_moderation: 'ROLLOUT_MOBILE_video_moderation',\n dm_search_clear_fix: 'ROLLOUT_MOBILE_dm_search_clear_fix',\n search: 'QA_MOBILE_search',\n search_rollout: 'ROLLOUT_MOBILE_search',\n manual_archiving: 'QA_MOBILE_manual_archiving',\n manual_archiving_rollout: 'ROLLOUT_MOBILE_manual_archiving',\n} as const satisfies Record<string, `${'QA' | 'ROLLOUT'}_${string}`>\n\nconst stableEmptyFeatures: ApiCollection<FeatureResource> = {\n data: [],\n links: {},\n meta: {\n count: 0,\n totalCount: 0,\n },\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"use_jolt.d.ts","sourceRoot":"","sources":["../../src/hooks/use_jolt.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,6BAA6B,CAAA;AACpD,OAAO,EACL,aAAa,EAEd,MAAM,uDAAuD,CAAA;AAC9D,OAAO,EAEL,gBAAgB,EACjB,MAAM,yDAAyD,CAAA;AAKhE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAUnE,eAAO,MAAM,aAAa,QAAO,UAAU,GAAG,SAmG7C,CAAA;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAc,GACtB,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAoCrC;AAED,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAA;AAE5C,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAClD,OAAO,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,EAC5C,SAAS,EAAE,uBAAuB,EAClC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,QAO5B"}
1
+ {"version":3,"file":"use_jolt.d.ts","sourceRoot":"","sources":["../../src/hooks/use_jolt.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,6BAA6B,CAAA;AACpD,OAAO,EACL,aAAa,EAEd,MAAM,uDAAuD,CAAA;AAC9D,OAAO,EAEL,gBAAgB,EACjB,MAAM,yDAAyD,CAAA;AAKhE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAWnE,eAAO,MAAM,aAAa,QAAO,UAAU,GAAG,SAqG7C,CAAA;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAc,GACtB,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAoCrC;AAED,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAA;AAE5C,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAClD,OAAO,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,EAC5C,SAAS,EAAE,uBAAuB,EAClC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,QAO5B"}
@@ -4,6 +4,7 @@ import { useQuery, useQueryClient, useSuspenseQuery } from '@tanstack/react-quer
4
4
  import { useCallback, useEffect, useMemo } from 'react';
5
5
  import { useChatContext } from '../contexts/chat_context';
6
6
  import { Client, Uri } from '../utils';
7
+ import { throwResponseError } from '../utils/response_error';
7
8
  import { FIVE_SECONDS } from '../utils/time';
8
9
  export const useJoltClient = () => {
9
10
  const $ = _c(29);
@@ -48,7 +49,7 @@ export const useJoltClient = () => {
48
49
  attributes: {}
49
50
  }
50
51
  }
51
- }),
52
+ }).catch(throwResponseError),
52
53
  staleTime: FIVE_SECONDS
53
54
  });
54
55
  $[4] = apiClient;
@@ -1 +1 @@
1
- {"version":3,"file":"use_jolt.js","names":["JoltClient","useQuery","useQueryClient","useSuspenseQuery","useCallback","useEffect","useMemo","useChatContext","Client","Uri","FIVE_SECONDS","useJoltClient","$","_c","session","sessionAccessToken","token","access_token","queryClient","t0","uri","t1","root","api","defaultHeaders","headers","version","apiClient","t2","fetchQuery","queryKey","queryFn","post","url","data","type","attributes","staleTime","fetchJoltToken","t3","Symbol","for","t4","then","_temp","Infinity","gcTime","refetchOnWindowFocus","wssUrl","t5","_temp2","fetchAuthTokenFn","t6","channel","connectionId","cid","_temp3","catch","_temp4","fetchSubscribeToken","t7","channel_0","connectionId_0","options","fetchSubscribeTokenFn","t8","Boolean","t9","t10","logToConsole","t11","enabled","joltClient","useJoltChannel","channelName","undefined","jolt","ready","alreadySubscribed","subscriptions","find","c","subscribe","handleSubscribe","subscription","removeQueries","exact","unsubscribe","handleUnsubscribe","useJoltEvent","eventName","callback","_temp5","bind","e","res","res_0","id","res_1","res_2","console","error"],"sources":["../../src/hooks/use_jolt.ts"],"sourcesContent":["import JoltClient from '@planningcenter/jolt-client'\nimport {\n CustomMessage,\n FetchAuthToken,\n} from '@planningcenter/jolt-client/dist/types/JoltConnection'\nimport {\n FetchSubscribeToken,\n JoltSubscription,\n} from '@planningcenter/jolt-client/dist/types/JoltSubscription'\nimport { useQuery, useQueryClient, useSuspenseQuery } from '@tanstack/react-query'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { useChatContext } from '../contexts/chat_context'\nimport { ApiResource } from '../types'\nimport type { JoltSubscriptionPattern } from '../types/jolt_events'\nimport { Client, Uri } from '../utils'\nimport { FIVE_SECONDS } from '../utils/time'\n\ninterface JoltResponse {\n type: 'JoltToken'\n id: string\n wssUrl: string\n}\n\nexport const useJoltClient = (): JoltClient | undefined => {\n const { session } = useChatContext()\n const sessionAccessToken = session.token?.access_token\n const queryClient = useQueryClient()\n const uri = useMemo(() => new Uri({ session }), [session])\n const apiClient = useMemo(\n () =>\n new Client({\n root: uri.api(`/chat/v2`),\n defaultHeaders: uri.headers,\n version: '2018-11-01',\n }),\n [uri]\n )\n\n const fetchJoltToken = async () => {\n return queryClient.fetchQuery({\n queryKey: ['jolt-token'],\n queryFn: () => {\n return apiClient.post<ApiResource<JoltResponse>>({\n url: '/me/jolt_authorize',\n data: {\n data: {\n type: 'JoltToken',\n attributes: {},\n },\n },\n })\n },\n staleTime: FIVE_SECONDS,\n })\n }\n\n /** The wssUrl is static and doesn't change so we can cache it to infinity and beyond */\n const { data: wssUrl } = useSuspenseQuery<string>({\n queryKey: ['wss-url'],\n queryFn: () => fetchJoltToken().then(res => res.data.wssUrl),\n staleTime: Infinity,\n gcTime: Infinity,\n refetchOnWindowFocus: false,\n })\n\n const fetchAuthTokenFn: FetchAuthToken = () => {\n return queryClient.fetchQuery({\n queryKey: ['jolt-auth-token'],\n queryFn: () => fetchJoltToken().then(res => res.data.id),\n })\n }\n\n const fetchSubscribeToken: FetchSubscribeToken = (channel: string, connectionId: string) => {\n return apiClient\n .post<ApiResource<JoltResponse>>({\n url: '/me/jolt_subscribe',\n data: {\n data: {\n type: 'JoltSubscribeToken',\n attributes: { channel, cid: connectionId },\n },\n },\n })\n .then(res => res.data.id)\n .catch((res: unknown) => {\n console.error('failed to subscribe to Jolt channel', res)\n return ''\n })\n }\n\n const fetchSubscribeTokenFn: FetchSubscribeToken = (\n channel: string,\n connectionId: string,\n options\n ) => {\n return queryClient.fetchQuery({\n queryKey: ['jolt-subscribe-token', channel, connectionId],\n queryFn: () => fetchSubscribeToken(channel, connectionId, options),\n })\n }\n\n const { data: joltClient } = useQuery({\n enabled: Boolean(wssUrl),\n queryKey: ['jolt-client', wssUrl, sessionAccessToken],\n queryFn: async () => {\n if (!wssUrl) return undefined\n\n return new JoltClient(\n wssUrl,\n {\n fetchAuthTokenFn,\n fetchSubscribeTokenFn,\n },\n { logToConsole: false }\n )\n },\n refetchOnWindowFocus: false,\n staleTime: Infinity,\n gcTime: Infinity,\n })\n\n return joltClient\n}\n\nexport function useJoltChannel(\n channelName: string,\n enabled: boolean = true\n): JoltSubscription | undefined | null {\n const jolt = useJoltClient()\n const queryClient = useQueryClient()\n const ready = Boolean(jolt) && enabled\n\n const handleSubscribe = useCallback(async () => {\n if (!jolt) return null\n\n // If the subscription already exists, we don't need to subscribe again\n const alreadySubscribed = jolt.subscriptions.find(c => c.channel === channelName)\n if (alreadySubscribed) return alreadySubscribed\n\n return jolt.subscribe(channelName)\n }, [channelName, jolt])\n\n const { data: subscription } = useQuery<JoltSubscription | null>({\n queryKey: ['jolt-subscription', channelName],\n queryFn: handleSubscribe,\n refetchOnWindowFocus: false,\n enabled: ready,\n })\n\n const handleUnsubscribe = useCallback(() => {\n queryClient.removeQueries({\n queryKey: ['jolt-subscription', channelName],\n exact: true,\n })\n\n jolt?.unsubscribe(channelName)\n }, [queryClient, channelName, jolt])\n\n useEffect(() => {\n return handleUnsubscribe\n }, [handleUnsubscribe])\n\n return subscription\n}\n\ntype UserCallbackFn<T> = (_event: T) => void\n\nexport function useJoltEvent<T extends CustomMessage>(\n channel: JoltSubscription | undefined | null,\n eventName: JoltSubscriptionPattern,\n callback: UserCallbackFn<T>\n) {\n useEffect(() => {\n if (!channel) return () => {}\n\n return channel.bind(eventName, e => callback(e as T))\n }, [channel, eventName, callback])\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"use_jolt.js","names":["JoltClient","useQuery","useQueryClient","useSuspenseQuery","useCallback","useEffect","useMemo","useChatContext","Client","Uri","throwResponseError","FIVE_SECONDS","useJoltClient","$","_c","session","sessionAccessToken","token","access_token","queryClient","t0","uri","t1","root","api","defaultHeaders","headers","version","apiClient","t2","fetchQuery","queryKey","queryFn","post","url","data","type","attributes","catch","staleTime","fetchJoltToken","t3","Symbol","for","t4","then","_temp","Infinity","gcTime","refetchOnWindowFocus","wssUrl","t5","_temp2","fetchAuthTokenFn","t6","channel","connectionId","cid","_temp3","_temp4","fetchSubscribeToken","t7","channel_0","connectionId_0","options","fetchSubscribeTokenFn","t8","Boolean","t9","t10","logToConsole","t11","enabled","joltClient","useJoltChannel","channelName","undefined","jolt","ready","alreadySubscribed","subscriptions","find","c","subscribe","handleSubscribe","subscription","removeQueries","exact","unsubscribe","handleUnsubscribe","useJoltEvent","eventName","callback","_temp5","bind","e","res","res_0","id","res_1","res_2","console","error"],"sources":["../../src/hooks/use_jolt.ts"],"sourcesContent":["import JoltClient from '@planningcenter/jolt-client'\nimport {\n CustomMessage,\n FetchAuthToken,\n} from '@planningcenter/jolt-client/dist/types/JoltConnection'\nimport {\n FetchSubscribeToken,\n JoltSubscription,\n} from '@planningcenter/jolt-client/dist/types/JoltSubscription'\nimport { useQuery, useQueryClient, useSuspenseQuery } from '@tanstack/react-query'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { useChatContext } from '../contexts/chat_context'\nimport { ApiResource } from '../types'\nimport type { JoltSubscriptionPattern } from '../types/jolt_events'\nimport { Client, Uri } from '../utils'\nimport { throwResponseError } from '../utils/response_error'\nimport { FIVE_SECONDS } from '../utils/time'\n\ninterface JoltResponse {\n type: 'JoltToken'\n id: string\n wssUrl: string\n}\n\nexport const useJoltClient = (): JoltClient | undefined => {\n const { session } = useChatContext()\n const sessionAccessToken = session.token?.access_token\n const queryClient = useQueryClient()\n const uri = useMemo(() => new Uri({ session }), [session])\n const apiClient = useMemo(\n () =>\n new Client({\n root: uri.api(`/chat/v2`),\n defaultHeaders: uri.headers,\n version: '2018-11-01',\n }),\n [uri]\n )\n\n const fetchJoltToken = async () => {\n return queryClient.fetchQuery({\n queryKey: ['jolt-token'],\n queryFn: () => {\n return apiClient\n .post<ApiResource<JoltResponse>>({\n url: '/me/jolt_authorize',\n data: {\n data: {\n type: 'JoltToken',\n attributes: {},\n },\n },\n })\n .catch(throwResponseError)\n },\n staleTime: FIVE_SECONDS,\n })\n }\n\n /** The wssUrl is static and doesn't change so we can cache it to infinity and beyond */\n const { data: wssUrl } = useSuspenseQuery<string>({\n queryKey: ['wss-url'],\n queryFn: () => fetchJoltToken().then(res => res.data.wssUrl),\n staleTime: Infinity,\n gcTime: Infinity,\n refetchOnWindowFocus: false,\n })\n\n const fetchAuthTokenFn: FetchAuthToken = () => {\n return queryClient.fetchQuery({\n queryKey: ['jolt-auth-token'],\n queryFn: () => fetchJoltToken().then(res => res.data.id),\n })\n }\n\n const fetchSubscribeToken: FetchSubscribeToken = (channel: string, connectionId: string) => {\n return apiClient\n .post<ApiResource<JoltResponse>>({\n url: '/me/jolt_subscribe',\n data: {\n data: {\n type: 'JoltSubscribeToken',\n attributes: { channel, cid: connectionId },\n },\n },\n })\n .then(res => res.data.id)\n .catch((res: unknown) => {\n console.error('failed to subscribe to Jolt channel', res)\n return ''\n })\n }\n\n const fetchSubscribeTokenFn: FetchSubscribeToken = (\n channel: string,\n connectionId: string,\n options\n ) => {\n return queryClient.fetchQuery({\n queryKey: ['jolt-subscribe-token', channel, connectionId],\n queryFn: () => fetchSubscribeToken(channel, connectionId, options),\n })\n }\n\n const { data: joltClient } = useQuery({\n enabled: Boolean(wssUrl),\n queryKey: ['jolt-client', wssUrl, sessionAccessToken],\n queryFn: async () => {\n if (!wssUrl) return undefined\n\n return new JoltClient(\n wssUrl,\n {\n fetchAuthTokenFn,\n fetchSubscribeTokenFn,\n },\n { logToConsole: false }\n )\n },\n refetchOnWindowFocus: false,\n staleTime: Infinity,\n gcTime: Infinity,\n })\n\n return joltClient\n}\n\nexport function useJoltChannel(\n channelName: string,\n enabled: boolean = true\n): JoltSubscription | undefined | null {\n const jolt = useJoltClient()\n const queryClient = useQueryClient()\n const ready = Boolean(jolt) && enabled\n\n const handleSubscribe = useCallback(async () => {\n if (!jolt) return null\n\n // If the subscription already exists, we don't need to subscribe again\n const alreadySubscribed = jolt.subscriptions.find(c => c.channel === channelName)\n if (alreadySubscribed) return alreadySubscribed\n\n return jolt.subscribe(channelName)\n }, [channelName, jolt])\n\n const { data: subscription } = useQuery<JoltSubscription | null>({\n queryKey: ['jolt-subscription', channelName],\n queryFn: handleSubscribe,\n refetchOnWindowFocus: false,\n enabled: ready,\n })\n\n const handleUnsubscribe = useCallback(() => {\n queryClient.removeQueries({\n queryKey: ['jolt-subscription', channelName],\n exact: true,\n })\n\n jolt?.unsubscribe(channelName)\n }, [queryClient, channelName, jolt])\n\n useEffect(() => {\n return handleUnsubscribe\n }, [handleUnsubscribe])\n\n return subscription\n}\n\ntype UserCallbackFn<T> = (_event: T) => void\n\nexport function useJoltEvent<T extends CustomMessage>(\n channel: JoltSubscription | undefined | null,\n eventName: JoltSubscriptionPattern,\n callback: UserCallbackFn<T>\n) {\n useEffect(() => {\n if (!channel) return () => {}\n\n return channel.bind(eventName, e => callback(e as T))\n }, [channel, eventName, callback])\n}\n"],"mappings":"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","ignoreList":[]}
@@ -5,8 +5,17 @@ export interface EventMetadata {
5
5
  export declare const analyticsEvents: {
6
6
  readonly conversation_index_opened: "chat.mobile.conversations.index.opened";
7
7
  readonly conversation_show_opened: "chat.mobile.conversations.show.opened";
8
+ readonly search_performed: "chat.mobile.search.performed";
9
+ readonly search_result_opened: "chat.mobile.search.result.opened";
8
10
  };
9
11
  type AnalyticsEventName = (typeof analyticsEvents)[keyof typeof analyticsEvents];
12
+ export declare const useProductAnalytics: () => {
13
+ publishEvent: (name: AnalyticsEventName, meta?: EventMetadata) => Promise<Response[]>;
14
+ publishEvents: (events: Array<{
15
+ name: AnalyticsEventName;
16
+ meta?: EventMetadata;
17
+ }>) => Promise<Response[]>;
18
+ };
10
19
  export declare function usePublishProductAnalyticsEvent(eventName: AnalyticsEventName, meta?: EventMetadata): void;
11
20
  export declare function normalizeAnalyticsMetadata(resource: {
12
21
  analyticsMetadata?: AnalyticsMetadataResource;
@@ -1 +1 @@
1
- {"version":3,"file":"use_product_analytics.d.ts","sourceRoot":"","sources":["../../src/hooks/use_product_analytics.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAA;AAIjF,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAC5D;AAED,eAAO,MAAM,eAAe;;;CAGgC,CAAA;AAE5D,KAAK,kBAAkB,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAA;AAqFhF,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,kBAAkB,EAC7B,IAAI,GAAE,aAAkB,QAYzB;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE;IACnD,iBAAiB,CAAC,EAAE,yBAAyB,CAAA;CAC9C,GACwE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC/F"}
1
+ {"version":3,"file":"use_product_analytics.d.ts","sourceRoot":"","sources":["../../src/hooks/use_product_analytics.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAA;AAIjF,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAC5D;AAED,eAAO,MAAM,eAAe;;;;;CAKgC,CAAA;AAE5D,KAAK,kBAAkB,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAA;AAuChF,eAAO,MAAM,mBAAmB;yBASrB,kBAAkB,SAAQ,aAAa,KAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;4BAgBhE,KAAK,CAAC;QAAE,IAAI,EAAE,kBAAkB,CAAC;QAAC,IAAI,CAAC,EAAE,aAAa,CAAA;KAAE,CAAC,KAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;CAmB3F,CAAA;AAED,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,kBAAkB,EAC7B,IAAI,GAAE,aAAkB,QAYzB;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE;IACnD,iBAAiB,CAAC,EAAE,yBAAyB,CAAA;CAC9C,GACwE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC/F"}
@@ -5,7 +5,9 @@ import { keysToSnakeCase } from '../utils/client/utils';
5
5
  import { SHA256, enc } from '../utils/sha_256';
6
6
  export const analyticsEvents = {
7
7
  conversation_index_opened: 'chat.mobile.conversations.index.opened',
8
- conversation_show_opened: 'chat.mobile.conversations.show.opened'
8
+ conversation_show_opened: 'chat.mobile.conversations.show.opened',
9
+ search_performed: 'chat.mobile.search.performed',
10
+ search_result_opened: 'chat.mobile.search.result.opened'
9
11
  };
10
12
  function contentSha256(payload) {
11
13
  return SHA256(payload).toString(enc.Hex);
@@ -36,7 +38,7 @@ function sendEvents(events, config) {
36
38
  return [];
37
39
  });
38
40
  }
39
- const useProductAnalytics = () => {
41
+ export const useProductAnalytics = () => {
40
42
  const $ = _c(13);
41
43
  const {
42
44
  productAnalyticsConfig