@planningcenter/chat-react-native 4.3.0 → 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.
- package/build/components/conversation/attachments/giphy_attachment.d.ts.map +1 -1
- package/build/components/conversation/attachments/giphy_attachment.js +2 -2
- package/build/components/conversation/attachments/giphy_attachment.js.map +1 -1
- package/build/components/conversation/attachments/image_attachment.d.ts.map +1 -1
- package/build/components/conversation/attachments/image_attachment.js +5 -3
- package/build/components/conversation/attachments/image_attachment.js.map +1 -1
- package/build/components/conversation/message.d.ts +3 -1
- package/build/components/conversation/message.d.ts.map +1 -1
- package/build/components/conversation/message.js +183 -158
- package/build/components/conversation/message.js.map +1 -1
- package/build/components/conversation/message_form.d.ts.map +1 -1
- package/build/components/conversation/message_form.js +2 -2
- package/build/components/conversation/message_form.js.map +1 -1
- package/build/components/conversation/message_list.d.ts.map +1 -1
- package/build/components/conversation/message_list.js +143 -88
- package/build/components/conversation/message_list.js.map +1 -1
- package/build/components/conversation/system_message.js +3 -3
- package/build/components/conversation/system_message.js.map +1 -1
- package/build/components/conversations/conversations.d.ts.map +1 -1
- package/build/components/conversations/conversations.js +0 -6
- package/build/components/conversations/conversations.js.map +1 -1
- package/build/contexts/api_provider.d.ts.map +1 -1
- package/build/contexts/api_provider.js +28 -25
- package/build/contexts/api_provider.js.map +1 -1
- package/build/hooks/use_animated_message_background_color.d.ts +1 -0
- package/build/hooks/use_animated_message_background_color.d.ts.map +1 -1
- package/build/hooks/use_animated_message_background_color.js +26 -9
- package/build/hooks/use_animated_message_background_color.js.map +1 -1
- package/build/hooks/use_chat_permissions.d.ts +10 -2
- package/build/hooks/use_chat_permissions.d.ts.map +1 -1
- package/build/hooks/use_chat_permissions.js +8 -0
- package/build/hooks/use_chat_permissions.js.map +1 -1
- package/build/hooks/use_features.d.ts +2 -0
- package/build/hooks/use_features.d.ts.map +1 -1
- package/build/hooks/use_features.js +3 -1
- package/build/hooks/use_features.js.map +1 -1
- package/build/hooks/use_jolt.d.ts.map +1 -1
- package/build/hooks/use_jolt.js +2 -1
- package/build/hooks/use_jolt.js.map +1 -1
- package/build/hooks/use_product_analytics.d.ts +9 -0
- package/build/hooks/use_product_analytics.d.ts.map +1 -1
- package/build/hooks/use_product_analytics.js +4 -2
- package/build/hooks/use_product_analytics.js.map +1 -1
- package/build/hooks/use_search_enabled.d.ts +2 -0
- package/build/hooks/use_search_enabled.d.ts.map +1 -0
- package/build/hooks/use_search_enabled.js +18 -0
- package/build/hooks/use_search_enabled.js.map +1 -0
- package/build/screens/age_check/age_check_underage_screen.d.ts.map +1 -1
- package/build/screens/age_check/age_check_underage_screen.js +2 -1
- package/build/screens/age_check/age_check_underage_screen.js.map +1 -1
- package/build/screens/attachment_actions/attachment_actions_screen.d.ts.map +1 -1
- package/build/screens/attachment_actions/attachment_actions_screen.js +5 -2
- package/build/screens/attachment_actions/attachment_actions_screen.js.map +1 -1
- package/build/screens/bug_report_screen.d.ts.map +1 -1
- package/build/screens/bug_report_screen.js +2 -2
- package/build/screens/bug_report_screen.js.map +1 -1
- package/build/screens/conversations/components/search_list_header_component.js +3 -3
- package/build/screens/conversations/components/search_list_header_component.js.map +1 -1
- package/build/screens/conversations/conversations_screen.d.ts.map +1 -1
- package/build/screens/conversations/conversations_screen.js +2 -5
- package/build/screens/conversations/conversations_screen.js.map +1 -1
- package/build/screens/get_help_screen.js +2 -2
- package/build/screens/get_help_screen.js.map +1 -1
- package/build/screens/message_actions_screen.js +6 -2
- package/build/screens/message_actions_screen.js.map +1 -1
- package/build/screens/search/components/conversation_results.d.ts +1 -1
- package/build/screens/search/components/conversation_results.d.ts.map +1 -1
- package/build/screens/search/components/conversation_results.js +2 -2
- package/build/screens/search/components/conversation_results.js.map +1 -1
- package/build/screens/search/components/search_results_list.d.ts +7 -2
- package/build/screens/search/components/search_results_list.d.ts.map +1 -1
- package/build/screens/search/components/search_results_list.js +135 -105
- package/build/screens/search/components/search_results_list.js.map +1 -1
- package/build/screens/search/search_screen.d.ts.map +1 -1
- package/build/screens/search/search_screen.js +88 -25
- package/build/screens/search/search_screen.js.map +1 -1
- package/build/utils/native_adapters/linking.d.ts +11 -3
- package/build/utils/native_adapters/linking.d.ts.map +1 -1
- package/build/utils/native_adapters/linking.js.map +1 -1
- package/build/utils/response_error.d.ts +1 -1
- package/build/utils/response_error.d.ts.map +1 -1
- package/build/utils/response_error.js +1 -1
- package/build/utils/response_error.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/components/conversation/attachments/giphy_attachment.test.tsx +76 -0
- package/src/__tests__/contexts/api_provider.test.tsx +50 -0
- package/src/__tests__/screens/attachment_actions_screen.test.tsx +81 -0
- package/src/__tests__/screens/get_help_screen.test.ts +36 -0
- package/src/__tests__/screens/message_actions_screen.test.tsx +136 -0
- package/src/components/conversation/__tests__/message_list.test.tsx +71 -3
- package/src/components/conversation/attachments/giphy_attachment.tsx +2 -3
- package/src/components/conversation/attachments/image_attachment.tsx +2 -3
- package/src/components/conversation/message.tsx +12 -1
- package/src/components/conversation/message_form.tsx +1 -1
- package/src/components/conversation/message_list.tsx +26 -1
- package/src/components/conversation/system_message.tsx +3 -3
- package/src/components/conversations/conversations.tsx +0 -7
- package/src/contexts/__tests__/api_provider.test.tsx +106 -0
- package/src/contexts/api_provider.tsx +6 -9
- package/src/hooks/__tests__/use_jolt.test.tsx +70 -0
- package/src/hooks/use_animated_message_background_color.ts +37 -12
- package/src/hooks/use_chat_permissions.ts +15 -2
- package/src/hooks/use_features.ts +2 -0
- package/src/hooks/use_jolt.ts +10 -7
- package/src/hooks/use_product_analytics.ts +3 -1
- package/src/hooks/use_search_enabled.ts +9 -0
- package/src/screens/age_check/age_check_underage_screen.tsx +2 -1
- package/src/screens/attachment_actions/attachment_actions_screen.tsx +3 -2
- package/src/screens/bug_report_screen.tsx +2 -10
- package/src/screens/conversations/__tests__/conversations_screen.test.tsx +71 -0
- package/src/screens/conversations/components/search_list_header_component.tsx +1 -1
- package/src/screens/conversations/conversations_screen.tsx +2 -3
- package/src/screens/get_help_screen.tsx +2 -2
- package/src/screens/message_actions_screen.tsx +6 -2
- package/src/screens/search/__tests__/search_screen.test.tsx +130 -0
- package/src/screens/search/components/__tests__/conversation_results.test.tsx +2 -2
- package/src/screens/search/components/__tests__/search_results_list.test.tsx +47 -2
- package/src/screens/search/components/conversation_results.tsx +7 -3
- package/src/screens/search/components/search_results_list.tsx +25 -4
- package/src/screens/search/search_screen.tsx +44 -6
- package/src/utils/__tests__/response_error.test.ts +7 -2
- package/src/utils/native_adapters/__tests__/linking.test.ts +12 -0
- package/src/utils/native_adapters/linking.ts +12 -3
- 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 {
|
|
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(
|
|
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.
|
|
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]
|
|
105
|
-
t6 = /*#__PURE__*/_jsx(PrefetchQueries, {});
|
|
106
|
-
$[9] =
|
|
104
|
+
if ($[9] !== session.isAuthenticated) {
|
|
105
|
+
t6 = session.isAuthenticated && /*#__PURE__*/_jsx(PrefetchQueries, {});
|
|
106
|
+
$[9] = session.isAuthenticated;
|
|
107
|
+
$[10] = t6;
|
|
107
108
|
} else {
|
|
108
|
-
t6 = $[
|
|
109
|
+
t6 = $[10];
|
|
109
110
|
}
|
|
110
111
|
let t7;
|
|
111
|
-
if ($[
|
|
112
|
+
if ($[11] !== children || $[12] !== t6) {
|
|
112
113
|
t7 = /*#__PURE__*/_jsxs(QueryClientProvider, {
|
|
113
114
|
client: chatQueryClient,
|
|
114
115
|
children: [t6, children]
|
|
115
116
|
});
|
|
116
|
-
$[
|
|
117
|
-
$[
|
|
117
|
+
$[11] = children;
|
|
118
|
+
$[12] = t6;
|
|
119
|
+
$[13] = t7;
|
|
118
120
|
} else {
|
|
119
|
-
t7 = $[
|
|
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(
|
|
133
|
+
const $ = _c(4);
|
|
129
134
|
const client = useApiClient();
|
|
130
135
|
let t0;
|
|
131
|
-
if ($[0]
|
|
132
|
-
t0 =
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
};
|
|
136
|
-
$[0] = t0;
|
|
136
|
+
if ($[0] !== client) {
|
|
137
|
+
t0 = appGrantsQueryOptions(client);
|
|
138
|
+
$[0] = client;
|
|
139
|
+
$[1] = t0;
|
|
137
140
|
} else {
|
|
138
|
-
t0 = $[
|
|
141
|
+
t0 = $[1];
|
|
139
142
|
}
|
|
140
143
|
usePrefetchQuery(t0);
|
|
141
144
|
let t1;
|
|
142
|
-
if ($[
|
|
145
|
+
if ($[2] !== client) {
|
|
143
146
|
t1 = featuresQueryOptions(client);
|
|
144
|
-
$[
|
|
145
|
-
$[
|
|
147
|
+
$[2] = client;
|
|
148
|
+
$[3] = t1;
|
|
146
149
|
} else {
|
|
147
|
-
t1 = $[
|
|
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","
|
|
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":"
|
|
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
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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","
|
|
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":"
|
|
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","
|
|
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":[]}
|
|
@@ -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
|
|
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;
|
|
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":";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,uBAAuB;EACvCC,gBAAgB,EAAE,4BAA4B;EAC9CC,wBAAwB,EAAE;AAC5B,CAAoE;AAEpE,MAAMnB,mBAAmD,GAAG;EAC1DhB,IAAI,EAAE,EAAE;EACRoC,KAAK,EAAE,CAAC,CAAC;EACTC,IAAI,EAAE;IACJC,KAAK,EAAE,CAAC;IACRC,UAAU,EAAE;EACd;AACF,CAAC","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;
|
|
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"}
|
package/build/hooks/use_jolt.js
CHANGED
|
@@ -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
|
|
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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_product_analytics.js","names":["useCallback","useEffect","useMemo","useRef","useChatContext","keysToSnakeCase","SHA256","enc","analyticsEvents","conversation_index_opened","conversation_show_opened","contentSha256","payload","toString","Hex","sendEvents","events","config","chunks","i","length","push","slice","Promise","all","map","chunk","JSON","stringify","fetch","endpoint","method","headers","token","body","catch","error","__DEV__","console","warn","useProductAnalytics","$","_c","productAnalyticsConfig","metadata","t0","t1","snakeCasedBaseMeta","t2","name","t3","meta","undefined","resolve","mergedMeta","publishEvent","eventsWithMeta","event","publishEvents","t4","usePublishProductAnalyticsEvent","eventName","hasPublishedEventRef","current","normalizeAnalyticsMetadata","resource","analyticsMetadata"],"sources":["../../src/hooks/use_product_analytics.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useChatContext } from '../contexts/chat_context'\nimport { ProductAnalyticsConfig } from '../types/product_analytics'\nimport { AnalyticsMetadataResource } from '../types/resources/analytics_metadata'\nimport { keysToSnakeCase } from '../utils/client/utils'\nimport { SHA256, enc } from '../utils/sha_256'\n\nexport interface EventMetadata {\n [key: string]: string | number | boolean | null | undefined\n}\n\nexport const analyticsEvents = {\n conversation_index_opened: 'chat.mobile.conversations.index.opened',\n conversation_show_opened: 'chat.mobile.conversations.show.opened',\n} as const satisfies Record<string, `chat.mobile.${string}`>\n\ntype AnalyticsEventName = (typeof analyticsEvents)[keyof typeof analyticsEvents]\n\ninterface AnalyticsEvent {\n name: string\n meta: EventMetadata\n}\n\nfunction contentSha256(payload: string): string {\n return SHA256(payload).toString(enc.Hex)\n}\n\nfunction sendEvents(events: AnalyticsEvent[], config: ProductAnalyticsConfig): Promise<Response[]> {\n // Split into chunks of 10 and make parallel requests\n const chunks: AnalyticsEvent[][] = []\n for (let i = 0; i < events.length; i += 10) {\n chunks.push(events.slice(i, i + 10))\n }\n\n return Promise.all(\n chunks.map(async chunk => {\n const payload = JSON.stringify({ events: chunk })\n return fetch(config.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n 'X-Authorization': `Bearer ${config.token}`,\n 'X-Amz-Content-Sha256': contentSha256(payload),\n },\n body: payload,\n })\n })\n ).catch(error => {\n if (__DEV__) {\n console.warn('Product Analytics request failed:', error)\n }\n return [] as Response[]\n })\n}\n\
|
|
1
|
+
{"version":3,"file":"use_product_analytics.js","names":["useCallback","useEffect","useMemo","useRef","useChatContext","keysToSnakeCase","SHA256","enc","analyticsEvents","conversation_index_opened","conversation_show_opened","search_performed","search_result_opened","contentSha256","payload","toString","Hex","sendEvents","events","config","chunks","i","length","push","slice","Promise","all","map","chunk","JSON","stringify","fetch","endpoint","method","headers","token","body","catch","error","__DEV__","console","warn","useProductAnalytics","$","_c","productAnalyticsConfig","metadata","t0","t1","snakeCasedBaseMeta","t2","name","t3","meta","undefined","resolve","mergedMeta","publishEvent","eventsWithMeta","event","publishEvents","t4","usePublishProductAnalyticsEvent","eventName","hasPublishedEventRef","current","normalizeAnalyticsMetadata","resource","analyticsMetadata"],"sources":["../../src/hooks/use_product_analytics.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useChatContext } from '../contexts/chat_context'\nimport { ProductAnalyticsConfig } from '../types/product_analytics'\nimport { AnalyticsMetadataResource } from '../types/resources/analytics_metadata'\nimport { keysToSnakeCase } from '../utils/client/utils'\nimport { SHA256, enc } from '../utils/sha_256'\n\nexport interface EventMetadata {\n [key: string]: string | number | boolean | null | undefined\n}\n\nexport const analyticsEvents = {\n conversation_index_opened: 'chat.mobile.conversations.index.opened',\n conversation_show_opened: 'chat.mobile.conversations.show.opened',\n search_performed: 'chat.mobile.search.performed',\n search_result_opened: 'chat.mobile.search.result.opened',\n} as const satisfies Record<string, `chat.mobile.${string}`>\n\ntype AnalyticsEventName = (typeof analyticsEvents)[keyof typeof analyticsEvents]\n\ninterface AnalyticsEvent {\n name: string\n meta: EventMetadata\n}\n\nfunction contentSha256(payload: string): string {\n return SHA256(payload).toString(enc.Hex)\n}\n\nfunction sendEvents(events: AnalyticsEvent[], config: ProductAnalyticsConfig): Promise<Response[]> {\n // Split into chunks of 10 and make parallel requests\n const chunks: AnalyticsEvent[][] = []\n for (let i = 0; i < events.length; i += 10) {\n chunks.push(events.slice(i, i + 10))\n }\n\n return Promise.all(\n chunks.map(async chunk => {\n const payload = JSON.stringify({ events: chunk })\n return fetch(config.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n 'X-Authorization': `Bearer ${config.token}`,\n 'X-Amz-Content-Sha256': contentSha256(payload),\n },\n body: payload,\n })\n })\n ).catch(error => {\n if (__DEV__) {\n console.warn('Product Analytics request failed:', error)\n }\n return [] as Response[]\n })\n}\n\nexport const useProductAnalytics = () => {\n const { productAnalyticsConfig } = useChatContext()\n\n const snakeCasedBaseMeta = useMemo(\n () => keysToSnakeCase(productAnalyticsConfig?.metadata || {}),\n [productAnalyticsConfig?.metadata]\n )\n\n const publishEvent = useCallback(\n (name: AnalyticsEventName, meta: EventMetadata = {}): Promise<Response[]> => {\n if (!productAnalyticsConfig) {\n if (__DEV__) {\n console.warn('Product Analytics not available')\n }\n return Promise.resolve([])\n }\n\n const mergedMeta = { ...snakeCasedBaseMeta, ...meta } as EventMetadata\n\n return sendEvents([{ name, meta: mergedMeta }], productAnalyticsConfig)\n },\n [productAnalyticsConfig, snakeCasedBaseMeta]\n )\n\n const publishEvents = useCallback(\n (events: Array<{ name: AnalyticsEventName; meta?: EventMetadata }>): Promise<Response[]> => {\n if (!productAnalyticsConfig) {\n if (__DEV__) {\n console.warn('Product Analytics not available')\n }\n return Promise.resolve([])\n }\n\n const eventsWithMeta = events.map(event => ({\n name: event.name,\n meta: { ...snakeCasedBaseMeta, ...event.meta } as EventMetadata,\n }))\n\n return sendEvents(eventsWithMeta, productAnalyticsConfig)\n },\n [productAnalyticsConfig, snakeCasedBaseMeta]\n )\n\n return { publishEvent, publishEvents }\n}\n\nexport function usePublishProductAnalyticsEvent(\n eventName: AnalyticsEventName,\n meta: EventMetadata = {}\n) {\n const { publishEvent } = useProductAnalytics()\n const hasPublishedEventRef = useRef(false)\n\n useEffect(() => {\n if (hasPublishedEventRef.current) return\n\n hasPublishedEventRef.current = true\n\n publishEvent(eventName, meta)\n }, [eventName, meta, publishEvent])\n}\n\nexport function normalizeAnalyticsMetadata(resource: {\n analyticsMetadata?: AnalyticsMetadataResource\n}) {\n return keysToSnakeCase(resource?.analyticsMetadata?.metadata || {}) as Record<string, unknown>\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_search_enabled.d.ts","sourceRoot":"","sources":["../../src/hooks/use_search_enabled.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,YAM/B"}
|