@planningcenter/chat-react-native 3.36.1-rc.0 → 3.36.2-qa-726.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/message.d.ts.map +1 -1
- package/build/components/conversation/message.js +3 -3
- package/build/components/conversation/message.js.map +1 -1
- package/build/components/display/action_button.d.ts +3 -1
- package/build/components/display/action_button.d.ts.map +1 -1
- package/build/components/display/action_button.js +8 -1
- package/build/components/display/action_button.js.map +1 -1
- package/build/components/display/index.d.ts +1 -0
- package/build/components/display/index.d.ts.map +1 -1
- package/build/components/display/index.js +1 -0
- package/build/components/display/index.js.map +1 -1
- package/build/components/index.d.ts +2 -0
- package/build/components/index.d.ts.map +1 -1
- package/build/components/index.js +2 -0
- package/build/components/index.js.map +1 -1
- package/build/components/page/component_error_boundary.d.ts +4 -0
- package/build/components/page/component_error_boundary.d.ts.map +1 -0
- package/build/components/page/component_error_boundary.js +8 -0
- package/build/components/page/component_error_boundary.js.map +1 -0
- package/build/components/page/error_boundary.d.ts +13 -10
- package/build/components/page/error_boundary.d.ts.map +1 -1
- package/build/components/page/error_boundary.js +20 -90
- package/build/components/page/error_boundary.js.map +1 -1
- package/build/components/page/page_error_boundary.d.ts +4 -0
- package/build/components/page/page_error_boundary.d.ts.map +1 -0
- package/build/components/page/page_error_boundary.js +80 -0
- package/build/components/page/page_error_boundary.js.map +1 -0
- package/build/hooks/groups/use_group_chat_conversation_payload.d.ts +168 -0
- package/build/hooks/groups/use_group_chat_conversation_payload.d.ts.map +1 -0
- package/build/hooks/groups/use_group_chat_conversation_payload.js +23 -0
- package/build/hooks/groups/use_group_chat_conversation_payload.js.map +1 -0
- package/build/hooks/groups/use_group_members_for_new_conversation.d.ts +0 -4
- package/build/hooks/groups/use_group_members_for_new_conversation.d.ts.map +1 -1
- package/build/hooks/groups/use_group_members_for_new_conversation.js +6 -18
- package/build/hooks/groups/use_group_members_for_new_conversation.js.map +1 -1
- package/build/hooks/groups/use_groups_conversation_create.js +1 -1
- package/build/hooks/groups/use_groups_conversation_create.js.map +1 -1
- package/build/hooks/index.d.ts +2 -1
- package/build/hooks/index.d.ts.map +1 -1
- package/build/hooks/index.js +2 -1
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/services/use_find_or_create_services_conversation.d.ts +11 -3
- package/build/hooks/services/use_find_or_create_services_conversation.d.ts.map +1 -1
- package/build/hooks/services/use_find_or_create_services_conversation.js +10 -14
- package/build/hooks/services/use_find_or_create_services_conversation.js.map +1 -1
- package/build/hooks/services/use_services_chat_conversation_payload.d.ts +164 -0
- package/build/hooks/services/use_services_chat_conversation_payload.d.ts.map +1 -0
- package/build/hooks/services/use_services_chat_conversation_payload.js +16 -0
- package/build/hooks/services/use_services_chat_conversation_payload.js.map +1 -0
- package/build/hooks/services/use_team_members_for_new_conversation.d.ts.map +1 -1
- package/build/hooks/services/use_team_members_for_new_conversation.js +11 -4
- package/build/hooks/services/use_team_members_for_new_conversation.js.map +1 -1
- package/build/hooks/use_conversation_validate.d.ts +12 -0
- package/build/hooks/use_conversation_validate.d.ts.map +1 -0
- package/build/hooks/use_conversation_validate.js +28 -0
- package/build/hooks/use_conversation_validate.js.map +1 -0
- package/build/hooks/use_enrich_people.d.ts +13 -0
- package/build/hooks/use_enrich_people.d.ts.map +1 -0
- package/build/hooks/use_enrich_people.js +25 -0
- package/build/hooks/use_enrich_people.js.map +1 -0
- package/build/hooks/use_features.d.ts +9 -6
- package/build/hooks/use_features.d.ts.map +1 -1
- package/build/hooks/use_features.js +1 -0
- package/build/hooks/use_features.js.map +1 -1
- package/build/hooks/use_jolt.d.ts +2 -1
- package/build/hooks/use_jolt.d.ts.map +1 -1
- package/build/hooks/use_jolt.js.map +1 -1
- package/build/hooks/use_product_analytics.d.ts +7 -1
- package/build/hooks/use_product_analytics.d.ts.map +1 -1
- package/build/hooks/use_product_analytics.js +4 -0
- package/build/hooks/use_product_analytics.js.map +1 -1
- package/build/index.d.ts +3 -2
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -1
- package/build/index.js.map +1 -1
- package/build/navigation/screenLayout.d.ts.map +1 -1
- package/build/navigation/screenLayout.js +5 -3
- package/build/navigation/screenLayout.js.map +1 -1
- package/build/screens/conversation_details_screen.js +1 -1
- package/build/screens/conversation_details_screen.js.map +1 -1
- package/build/screens/conversation_new/components/groups_form.d.ts.map +1 -1
- package/build/screens/conversation_new/components/groups_form.js +14 -1
- package/build/screens/conversation_new/components/groups_form.js.map +1 -1
- package/build/screens/conversation_new/components/services_form.d.ts.map +1 -1
- package/build/screens/conversation_new/components/services_form.js +20 -2
- package/build/screens/conversation_new/components/services_form.js.map +1 -1
- package/build/screens/conversation_screen.d.ts.map +1 -1
- package/build/screens/conversation_screen.js +2 -2
- package/build/screens/conversation_screen.js.map +1 -1
- package/build/screens/conversations/conversations_screen.js +2 -2
- package/build/screens/conversations/conversations_screen.js.map +1 -1
- package/build/screens/team_conversation_screen.d.ts.map +1 -1
- package/build/screens/team_conversation_screen.js +6 -3
- package/build/screens/team_conversation_screen.js.map +1 -1
- package/build/types/jolt_events/index.d.ts +2 -0
- package/build/types/jolt_events/index.d.ts.map +1 -1
- package/build/types/jolt_events/index.js.map +1 -1
- package/build/types/resources/conversation_validate.d.ts +10 -0
- package/build/types/resources/conversation_validate.d.ts.map +1 -0
- package/build/types/resources/conversation_validate.js +2 -0
- package/build/types/resources/conversation_validate.js.map +1 -0
- package/build/types/resources/index.d.ts +1 -0
- package/build/types/resources/index.d.ts.map +1 -1
- package/build/types/resources/index.js +1 -0
- package/build/types/resources/index.js.map +1 -1
- package/build/utils/cache/messages_cache.d.ts +1 -1
- package/build/utils/cache/messages_cache.d.ts.map +1 -1
- package/build/utils/client/instrumented_fetch.d.ts +2 -0
- package/build/utils/client/instrumented_fetch.d.ts.map +1 -0
- package/build/utils/client/instrumented_fetch.js +64 -0
- package/build/utils/client/instrumented_fetch.js.map +1 -0
- package/build/utils/client/request_helpers.d.ts.map +1 -1
- package/build/utils/client/request_helpers.js +2 -1
- package/build/utils/client/request_helpers.js.map +1 -1
- package/build/utils/native_adapters/log.d.ts +11 -0
- package/build/utils/native_adapters/log.d.ts.map +1 -1
- package/build/utils/native_adapters/log.js +9 -0
- package/build/utils/native_adapters/log.js.map +1 -1
- package/build/utils/performance_tracking.d.ts +1 -1
- package/build/utils/performance_tracking.d.ts.map +1 -1
- package/build/utils/performance_tracking.js.map +1 -1
- package/build/utils/request/get_chat_configuration.d.ts +1 -1
- package/build/utils/request/get_chat_configuration.d.ts.map +1 -1
- package/build/utils/request/get_features.d.ts +1 -1
- package/build/utils/request/get_features.d.ts.map +1 -1
- package/build/utils/request/get_message.d.ts +1 -1
- package/build/utils/request/get_message.d.ts.map +1 -1
- package/build/utils/request/get_messages.d.ts +1 -1
- package/build/utils/request/get_messages.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/__tests__/hooks/use_conversation_validate.test.tsx +117 -0
- package/src/__tests__/hooks/use_enrich_people.test.tsx +95 -0
- package/src/components/conversation/message.tsx +6 -4
- package/src/components/display/action_button.tsx +18 -0
- package/src/components/display/index.ts +1 -0
- package/src/components/index.tsx +2 -0
- package/src/components/page/__tests__/component_error_boundary.test.tsx +46 -0
- package/src/components/page/__tests__/error_boundary.test.tsx +93 -0
- package/src/components/page/__tests__/page_error_boundary.test.tsx +77 -0
- package/src/components/page/component_error_boundary.tsx +13 -0
- package/src/components/page/error_boundary.tsx +34 -118
- package/src/components/page/page_error_boundary.tsx +112 -0
- package/src/hooks/groups/use_group_chat_conversation_payload.ts +38 -0
- package/src/hooks/groups/use_group_members_for_new_conversation.ts +9 -23
- package/src/hooks/groups/use_groups_conversation_create.ts +1 -1
- package/src/hooks/index.ts +2 -1
- package/src/hooks/services/use_find_or_create_services_conversation.ts +27 -24
- package/src/hooks/services/use_services_chat_conversation_payload.ts +26 -0
- package/src/hooks/services/use_team_members_for_new_conversation.ts +18 -7
- package/src/hooks/use_conversation_validate.ts +45 -0
- package/src/hooks/use_enrich_people.ts +35 -0
- package/src/hooks/use_features.ts +5 -2
- package/src/hooks/use_jolt.ts +2 -1
- package/src/hooks/use_product_analytics.ts +13 -3
- package/src/index.tsx +3 -2
- package/src/navigation/screenLayout.tsx +6 -3
- package/src/screens/conversation_details_screen.tsx +1 -1
- package/src/screens/conversation_new/components/groups_form.tsx +17 -1
- package/src/screens/conversation_new/components/services_form.tsx +26 -2
- package/src/screens/conversation_screen.tsx +2 -1
- package/src/screens/conversations/conversations_screen.tsx +2 -2
- package/src/screens/team_conversation_screen.tsx +6 -6
- package/src/types/jolt_events/index.ts +3 -0
- package/src/types/resources/conversation_validate.ts +11 -0
- package/src/types/resources/index.ts +1 -0
- package/src/utils/client/__tests__/instrumented_fetch.test.ts +84 -0
- package/src/utils/client/instrumented_fetch.ts +69 -0
- package/src/utils/client/request_helpers.ts +2 -1
- package/src/utils/native_adapters/__tests__/log.test.ts +62 -0
- package/src/utils/native_adapters/log.ts +22 -0
- package/src/utils/performance_tracking.ts +1 -1
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
teamIds: number[];
|
|
3
|
+
planId?: number;
|
|
4
|
+
enabled?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function useServicesChatConversationPayload({ teamIds, planId, enabled }: Props): {
|
|
7
|
+
error: Error;
|
|
8
|
+
isError: true;
|
|
9
|
+
isPending: false;
|
|
10
|
+
isLoading: false;
|
|
11
|
+
isLoadingError: false;
|
|
12
|
+
isRefetchError: true;
|
|
13
|
+
isSuccess: false;
|
|
14
|
+
isPlaceholderData: false;
|
|
15
|
+
status: "error";
|
|
16
|
+
dataUpdatedAt: number;
|
|
17
|
+
errorUpdatedAt: number;
|
|
18
|
+
failureCount: number;
|
|
19
|
+
failureReason: Error | null;
|
|
20
|
+
errorUpdateCount: number;
|
|
21
|
+
isFetched: boolean;
|
|
22
|
+
isFetchedAfterMount: boolean;
|
|
23
|
+
isFetching: boolean;
|
|
24
|
+
isInitialLoading: boolean;
|
|
25
|
+
isPaused: boolean;
|
|
26
|
+
isRefetching: boolean;
|
|
27
|
+
isStale: boolean;
|
|
28
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("../..").ApiResource<import("../..").ServicesChatPayloadResource>, Error>>;
|
|
29
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
30
|
+
promise: Promise<import("../..").ApiResource<import("../..").ServicesChatPayloadResource>>;
|
|
31
|
+
payload: string | undefined;
|
|
32
|
+
} | {
|
|
33
|
+
error: null;
|
|
34
|
+
isError: false;
|
|
35
|
+
isPending: false;
|
|
36
|
+
isLoading: false;
|
|
37
|
+
isLoadingError: false;
|
|
38
|
+
isRefetchError: false;
|
|
39
|
+
isSuccess: true;
|
|
40
|
+
isPlaceholderData: false;
|
|
41
|
+
status: "success";
|
|
42
|
+
dataUpdatedAt: number;
|
|
43
|
+
errorUpdatedAt: number;
|
|
44
|
+
failureCount: number;
|
|
45
|
+
failureReason: Error | null;
|
|
46
|
+
errorUpdateCount: number;
|
|
47
|
+
isFetched: boolean;
|
|
48
|
+
isFetchedAfterMount: boolean;
|
|
49
|
+
isFetching: boolean;
|
|
50
|
+
isInitialLoading: boolean;
|
|
51
|
+
isPaused: boolean;
|
|
52
|
+
isRefetching: boolean;
|
|
53
|
+
isStale: boolean;
|
|
54
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("../..").ApiResource<import("../..").ServicesChatPayloadResource>, Error>>;
|
|
55
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
56
|
+
promise: Promise<import("../..").ApiResource<import("../..").ServicesChatPayloadResource>>;
|
|
57
|
+
payload: string | undefined;
|
|
58
|
+
} | {
|
|
59
|
+
error: Error;
|
|
60
|
+
isError: true;
|
|
61
|
+
isPending: false;
|
|
62
|
+
isLoading: false;
|
|
63
|
+
isLoadingError: true;
|
|
64
|
+
isRefetchError: false;
|
|
65
|
+
isSuccess: false;
|
|
66
|
+
isPlaceholderData: false;
|
|
67
|
+
status: "error";
|
|
68
|
+
dataUpdatedAt: number;
|
|
69
|
+
errorUpdatedAt: number;
|
|
70
|
+
failureCount: number;
|
|
71
|
+
failureReason: Error | null;
|
|
72
|
+
errorUpdateCount: number;
|
|
73
|
+
isFetched: boolean;
|
|
74
|
+
isFetchedAfterMount: boolean;
|
|
75
|
+
isFetching: boolean;
|
|
76
|
+
isInitialLoading: boolean;
|
|
77
|
+
isPaused: boolean;
|
|
78
|
+
isRefetching: boolean;
|
|
79
|
+
isStale: boolean;
|
|
80
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("../..").ApiResource<import("../..").ServicesChatPayloadResource>, Error>>;
|
|
81
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
82
|
+
promise: Promise<import("../..").ApiResource<import("../..").ServicesChatPayloadResource>>;
|
|
83
|
+
payload: string | undefined;
|
|
84
|
+
} | {
|
|
85
|
+
error: null;
|
|
86
|
+
isError: false;
|
|
87
|
+
isPending: true;
|
|
88
|
+
isLoading: true;
|
|
89
|
+
isLoadingError: false;
|
|
90
|
+
isRefetchError: false;
|
|
91
|
+
isSuccess: false;
|
|
92
|
+
isPlaceholderData: false;
|
|
93
|
+
status: "pending";
|
|
94
|
+
dataUpdatedAt: number;
|
|
95
|
+
errorUpdatedAt: number;
|
|
96
|
+
failureCount: number;
|
|
97
|
+
failureReason: Error | null;
|
|
98
|
+
errorUpdateCount: number;
|
|
99
|
+
isFetched: boolean;
|
|
100
|
+
isFetchedAfterMount: boolean;
|
|
101
|
+
isFetching: boolean;
|
|
102
|
+
isInitialLoading: boolean;
|
|
103
|
+
isPaused: boolean;
|
|
104
|
+
isRefetching: boolean;
|
|
105
|
+
isStale: boolean;
|
|
106
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("../..").ApiResource<import("../..").ServicesChatPayloadResource>, Error>>;
|
|
107
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
108
|
+
promise: Promise<import("../..").ApiResource<import("../..").ServicesChatPayloadResource>>;
|
|
109
|
+
payload: string | undefined;
|
|
110
|
+
} | {
|
|
111
|
+
error: null;
|
|
112
|
+
isError: false;
|
|
113
|
+
isPending: true;
|
|
114
|
+
isLoadingError: false;
|
|
115
|
+
isRefetchError: false;
|
|
116
|
+
isSuccess: false;
|
|
117
|
+
isPlaceholderData: false;
|
|
118
|
+
status: "pending";
|
|
119
|
+
dataUpdatedAt: number;
|
|
120
|
+
errorUpdatedAt: number;
|
|
121
|
+
failureCount: number;
|
|
122
|
+
failureReason: Error | null;
|
|
123
|
+
errorUpdateCount: number;
|
|
124
|
+
isFetched: boolean;
|
|
125
|
+
isFetchedAfterMount: boolean;
|
|
126
|
+
isFetching: boolean;
|
|
127
|
+
isLoading: boolean;
|
|
128
|
+
isInitialLoading: boolean;
|
|
129
|
+
isPaused: boolean;
|
|
130
|
+
isRefetching: boolean;
|
|
131
|
+
isStale: boolean;
|
|
132
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("../..").ApiResource<import("../..").ServicesChatPayloadResource>, Error>>;
|
|
133
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
134
|
+
promise: Promise<import("../..").ApiResource<import("../..").ServicesChatPayloadResource>>;
|
|
135
|
+
payload: string | undefined;
|
|
136
|
+
} | {
|
|
137
|
+
isError: false;
|
|
138
|
+
error: null;
|
|
139
|
+
isPending: false;
|
|
140
|
+
isLoading: false;
|
|
141
|
+
isLoadingError: false;
|
|
142
|
+
isRefetchError: false;
|
|
143
|
+
isSuccess: true;
|
|
144
|
+
isPlaceholderData: true;
|
|
145
|
+
status: "success";
|
|
146
|
+
dataUpdatedAt: number;
|
|
147
|
+
errorUpdatedAt: number;
|
|
148
|
+
failureCount: number;
|
|
149
|
+
failureReason: Error | null;
|
|
150
|
+
errorUpdateCount: number;
|
|
151
|
+
isFetched: boolean;
|
|
152
|
+
isFetchedAfterMount: boolean;
|
|
153
|
+
isFetching: boolean;
|
|
154
|
+
isInitialLoading: boolean;
|
|
155
|
+
isPaused: boolean;
|
|
156
|
+
isRefetching: boolean;
|
|
157
|
+
isStale: boolean;
|
|
158
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("../..").ApiResource<import("../..").ServicesChatPayloadResource>, Error>>;
|
|
159
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
160
|
+
promise: Promise<import("../..").ApiResource<import("../..").ServicesChatPayloadResource>>;
|
|
161
|
+
payload: string | undefined;
|
|
162
|
+
};
|
|
163
|
+
export {};
|
|
164
|
+
//# sourceMappingURL=use_services_chat_conversation_payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_services_chat_conversation_payload.d.ts","sourceRoot":"","sources":["../../../src/hooks/services/use_services_chat_conversation_payload.ts"],"names":[],"mappings":"AAMA,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,kCAAkC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAc,EAAE,EAAE,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa5F"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { useApiClient } from '../use_api_client';
|
|
3
|
+
import { getServicesChatConversationPayload } from './use_find_or_create_services_conversation';
|
|
4
|
+
const STALE_TIME_MS = 55 * 60 * 1000; // under Services' 1-hour server-side expiry
|
|
5
|
+
export function useServicesChatConversationPayload({ teamIds, planId, enabled = true }) {
|
|
6
|
+
const apiClient = useApiClient();
|
|
7
|
+
const sortedTeamIds = [...teamIds].sort((a, b) => a - b);
|
|
8
|
+
const { data, ...rest } = useQuery({
|
|
9
|
+
queryKey: ['services', '/chat', { teamIds: sortedTeamIds, planId }],
|
|
10
|
+
queryFn: () => getServicesChatConversationPayload({ apiClient, teamIds: sortedTeamIds, planId }),
|
|
11
|
+
staleTime: STALE_TIME_MS,
|
|
12
|
+
enabled: enabled && sortedTeamIds.length > 0,
|
|
13
|
+
});
|
|
14
|
+
return { payload: data?.data.payload, ...rest };
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=use_services_chat_conversation_payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_services_chat_conversation_payload.js","sourceRoot":"","sources":["../../../src/hooks/services/use_services_chat_conversation_payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,kCAAkC,EAAE,MAAM,4CAA4C,CAAA;AAE/F,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,4CAA4C;AAQjF,MAAM,UAAU,kCAAkC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,EAAS;IAC3F,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAExD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;QACjC,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;QACnE,OAAO,EAAE,GAAG,EAAE,CACZ,kCAAkC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;QACnF,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,OAAO,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;KAC7C,CAAC,CAAA;IAEF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAA;AACjD,CAAC","sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport { useApiClient } from '../use_api_client'\nimport { getServicesChatConversationPayload } from './use_find_or_create_services_conversation'\n\nconst STALE_TIME_MS = 55 * 60 * 1000 // under Services' 1-hour server-side expiry\n\ninterface Props {\n teamIds: number[]\n planId?: number\n enabled?: boolean\n}\n\nexport function useServicesChatConversationPayload({ teamIds, planId, enabled = true }: Props) {\n const apiClient = useApiClient()\n const sortedTeamIds = [...teamIds].sort((a, b) => a - b)\n\n const { data, ...rest } = useQuery({\n queryKey: ['services', '/chat', { teamIds: sortedTeamIds, planId }],\n queryFn: () =>\n getServicesChatConversationPayload({ apiClient, teamIds: sortedTeamIds, planId }),\n staleTime: STALE_TIME_MS,\n enabled: enabled && sortedTeamIds.length > 0,\n })\n\n return { payload: data?.data.payload, ...rest }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_team_members_for_new_conversation.d.ts","sourceRoot":"","sources":["../../../src/hooks/services/use_team_members_for_new_conversation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAA0B,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"use_team_members_for_new_conversation.d.ts","sourceRoot":"","sources":["../../../src/hooks/services/use_team_members_for_new_conversation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAA0B,MAAM,aAAa,CAAA;AAIxF,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,gCAAgC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsC1E"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { isNil, omitBy } from 'lodash';
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
3
|
import { useApiGet } from '../use_api';
|
|
4
|
+
import { useEnrichPeople } from '../use_enrich_people';
|
|
4
5
|
export function useTeamMembersForNewConversation({ teamIds, planId }) {
|
|
5
6
|
const params = omitBy({ team_id: teamIds.join(','), plan_id: planId }, isNil);
|
|
6
7
|
const { data, ...rest } = useApiGet({
|
|
@@ -14,13 +15,19 @@ export function useTeamMembersForNewConversation({ teamIds, planId }) {
|
|
|
14
15
|
app: 'services',
|
|
15
16
|
});
|
|
16
17
|
const people = data?.people || stableEmptyPersonArray;
|
|
17
|
-
const
|
|
18
|
-
|
|
18
|
+
const personIds = useMemo(() => people.map(p => p.id), [people]);
|
|
19
|
+
const enrichmentMap = useEnrichPeople({ personIds });
|
|
20
|
+
const members = useMemo(() => people.map(person => {
|
|
21
|
+
const enrichedBadges = enrichmentMap.get(person.id)?.badges ?? [];
|
|
22
|
+
const existingTitles = new Set(person.badges.map(b => b.title));
|
|
23
|
+
const newBadges = enrichedBadges.filter(b => !existingTitles.has(b.title));
|
|
24
|
+
return {
|
|
19
25
|
...person,
|
|
20
26
|
type: 'Member',
|
|
21
27
|
gender: null,
|
|
22
|
-
|
|
23
|
-
|
|
28
|
+
badges: [...person.badges, ...newBadges],
|
|
29
|
+
};
|
|
30
|
+
}), [people, enrichmentMap]);
|
|
24
31
|
return {
|
|
25
32
|
members,
|
|
26
33
|
...rest,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_team_members_for_new_conversation.js","sourceRoot":"","sources":["../../../src/hooks/services/use_team_members_for_new_conversation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"use_team_members_for_new_conversation.js","sourceRoot":"","sources":["../../../src/hooks/services/use_team_members_for_new_conversation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAOtD,MAAM,UAAU,gCAAgC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAS;IACzE,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,CAAA;IAE7E,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,CAAqB;QACtD,GAAG,EAAE,OAAO;QACZ,IAAI,EAAE;YACJ,GAAG,MAAM;YACT,MAAM,EAAE;gBACN,IAAI,EAAE,CAAC,QAAQ,CAAC;aACjB;SACF;QACD,GAAG,EAAE,UAAU;KAChB,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,sBAAsB,CAAA;IACrD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAChE,MAAM,aAAa,GAAG,eAAe,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;IAEpD,MAAM,OAAO,GAAqB,OAAO,CACvC,GAAG,EAAE,CACH,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAClB,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,EAAE,CAAA;QACjE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;QAC/D,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;QAC1E,OAAO;YACL,GAAG,MAAM;YACT,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC;SACzC,CAAA;IACH,CAAC,CAAC,EACJ,CAAC,MAAM,EAAE,aAAa,CAAC,CACxB,CAAA;IAED,OAAO;QACL,OAAO;QACP,GAAG,IAAI;KACR,CAAA;AACH,CAAC;AAED,MAAM,sBAAsB,GAA6B,EAAE,CAAA","sourcesContent":["import { isNil, omitBy } from 'lodash'\nimport { useMemo } from 'react'\nimport { MemberResource, TeamPeopleResource, TeamPersonResponseItem } from '../../types'\nimport { useApiGet } from '../use_api'\nimport { useEnrichPeople } from '../use_enrich_people'\n\ninterface Props {\n teamIds: number[]\n planId?: number\n}\n\nexport function useTeamMembersForNewConversation({ teamIds, planId }: Props) {\n const params = omitBy({ team_id: teamIds.join(','), plan_id: planId }, isNil)\n\n const { data, ...rest } = useApiGet<TeamPeopleResource>({\n url: '/chat',\n data: {\n ...params,\n fields: {\n Chat: ['people'],\n },\n },\n app: 'services',\n })\n\n const people = data?.people || stableEmptyPersonArray\n const personIds = useMemo(() => people.map(p => p.id), [people])\n const enrichmentMap = useEnrichPeople({ personIds })\n\n const members: MemberResource[] = useMemo(\n () =>\n people.map(person => {\n const enrichedBadges = enrichmentMap.get(person.id)?.badges ?? []\n const existingTitles = new Set(person.badges.map(b => b.title))\n const newBadges = enrichedBadges.filter(b => !existingTitles.has(b.title))\n return {\n ...person,\n type: 'Member',\n gender: null,\n badges: [...person.badges, ...newBadges],\n }\n }),\n [people, enrichmentMap]\n )\n\n return {\n members,\n ...rest,\n }\n}\n\nconst stableEmptyPersonArray: TeamPersonResponseItem[] = []\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
payload: string | undefined;
|
|
3
|
+
isLoadingPayload?: boolean;
|
|
4
|
+
genderId?: string | null;
|
|
5
|
+
enabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function useConversationValidate({ payload, isLoadingPayload, genderId, enabled, }: Props): {
|
|
8
|
+
warnings: import("..").ConversationWarning[];
|
|
9
|
+
validationPending: boolean;
|
|
10
|
+
};
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=use_conversation_validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_conversation_validate.d.ts","sourceRoot":"","sources":["../../src/hooks/use_conversation_validate.ts"],"names":[],"mappings":"AAIA,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,uBAAuB,CAAC,EACtC,OAAO,EACP,gBAAwB,EACxB,QAAQ,EACR,OAAc,GACf,EAAE,KAAK;;;EA4BP"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { useApiClient } from './use_api_client';
|
|
3
|
+
export function useConversationValidate({ payload, isLoadingPayload = false, genderId, enabled = true, }) {
|
|
4
|
+
const apiClient = useApiClient();
|
|
5
|
+
const { data, isLoading } = useQuery({
|
|
6
|
+
queryKey: ['chat', '/me/conversation_validate', { payload, genderId }],
|
|
7
|
+
queryFn: () => apiClient.chat.post({
|
|
8
|
+
url: '/me/conversation_validate',
|
|
9
|
+
data: {
|
|
10
|
+
data: {
|
|
11
|
+
type: 'ConversationValidate',
|
|
12
|
+
attributes: {
|
|
13
|
+
payload: payload,
|
|
14
|
+
...(genderId ? { gender_id: genderId } : {}),
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
}),
|
|
19
|
+
enabled: enabled && payload != null,
|
|
20
|
+
retry: false,
|
|
21
|
+
});
|
|
22
|
+
const warnings = data?.data.warnings ?? [];
|
|
23
|
+
return {
|
|
24
|
+
warnings,
|
|
25
|
+
validationPending: enabled && (isLoadingPayload || isLoading),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=use_conversation_validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_conversation_validate.js","sourceRoot":"","sources":["../../src/hooks/use_conversation_validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAS/C,MAAM,UAAU,uBAAuB,CAAC,EACtC,OAAO,EACP,gBAAgB,GAAG,KAAK,EACxB,QAAQ,EACR,OAAO,GAAG,IAAI,GACR;IACN,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAEhC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC;QACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,2BAA2B,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QACtE,OAAO,EAAE,GAAG,EAAE,CACZ,SAAS,CAAC,IAAI,CAAC,IAAI,CAA4C;YAC7D,GAAG,EAAE,2BAA2B;YAChC,IAAI,EAAE;gBACJ,IAAI,EAAE;oBACJ,IAAI,EAAE,sBAAsB;oBAC5B,UAAU,EAAE;wBACV,OAAO,EAAE,OAAQ;wBACjB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC7C;iBACF;aACF;SACF,CAAC;QACJ,OAAO,EAAE,OAAO,IAAI,OAAO,IAAI,IAAI;QACnC,KAAK,EAAE,KAAK;KACb,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;IAE1C,OAAO;QACL,QAAQ;QACR,iBAAiB,EAAE,OAAO,IAAI,CAAC,gBAAgB,IAAI,SAAS,CAAC;KAC9D,CAAA;AACH,CAAC","sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport { ApiResource, ConversationValidateResource } from '../types'\nimport { useApiClient } from './use_api_client'\n\ninterface Props {\n payload: string | undefined\n isLoadingPayload?: boolean\n genderId?: string | null\n enabled?: boolean\n}\n\nexport function useConversationValidate({\n payload,\n isLoadingPayload = false,\n genderId,\n enabled = true,\n}: Props) {\n const apiClient = useApiClient()\n\n const { data, isLoading } = useQuery({\n queryKey: ['chat', '/me/conversation_validate', { payload, genderId }],\n queryFn: () =>\n apiClient.chat.post<ApiResource<ConversationValidateResource>>({\n url: '/me/conversation_validate',\n data: {\n data: {\n type: 'ConversationValidate',\n attributes: {\n payload: payload!,\n ...(genderId ? { gender_id: genderId } : {}),\n },\n },\n },\n }),\n enabled: enabled && payload != null,\n retry: false,\n })\n\n const warnings = data?.data.warnings ?? []\n\n return {\n warnings,\n validationPending: enabled && (isLoadingPayload || isLoading),\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ResourceObject } from '../types';
|
|
2
|
+
export interface PersonEnrichmentResource extends ResourceObject {
|
|
3
|
+
type: 'PersonEnrichment';
|
|
4
|
+
id: string;
|
|
5
|
+
badges: {
|
|
6
|
+
title: string;
|
|
7
|
+
}[];
|
|
8
|
+
}
|
|
9
|
+
export declare function useEnrichPeople({ personIds, groupId }: {
|
|
10
|
+
personIds: number[];
|
|
11
|
+
groupId?: number;
|
|
12
|
+
}): Map<number, PersonEnrichmentResource>;
|
|
13
|
+
//# sourceMappingURL=use_enrich_people.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_enrich_people.d.ts","sourceRoot":"","sources":["../../src/hooks/use_enrich_people.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,cAAc,EAAE,MAAM,UAAU,CAAA;AAGxD,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,IAAI,EAAE,kBAAkB,CAAA;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAC5B;AAED,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,yCAuBhG"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { keepPreviousData, useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { useApiClient } from './use_api_client';
|
|
4
|
+
export function useEnrichPeople({ personIds, groupId }) {
|
|
5
|
+
const apiClient = useApiClient();
|
|
6
|
+
const { data } = useQuery({
|
|
7
|
+
queryKey: ['enrich_people', [...personIds].sort((a, b) => a - b), groupId],
|
|
8
|
+
queryFn: () => apiClient.chat.post({
|
|
9
|
+
url: '/enrich_people',
|
|
10
|
+
data: {
|
|
11
|
+
data: {
|
|
12
|
+
type: 'PersonEnrichment',
|
|
13
|
+
attributes: {
|
|
14
|
+
person_ids: personIds,
|
|
15
|
+
...(groupId !== undefined ? { group_id: groupId } : {}),
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
}),
|
|
20
|
+
enabled: personIds.length > 0,
|
|
21
|
+
placeholderData: keepPreviousData,
|
|
22
|
+
});
|
|
23
|
+
return useMemo(() => new Map(data?.data.map(e => [+e.id, e]) ?? []), [data]);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=use_enrich_people.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_enrich_people.js","sourceRoot":"","sources":["../../src/hooks/use_enrich_people.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAQ/C,MAAM,UAAU,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAA6C;IAC/F,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAEhC,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAA0C;QACjE,QAAQ,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;QAC1E,OAAO,EAAE,GAAG,EAAE,CACZ,SAAS,CAAC,IAAI,CAAC,IAAI,CAA0C;YAC3D,GAAG,EAAE,gBAAgB;YACrB,IAAI,EAAE;gBACJ,IAAI,EAAE;oBACJ,IAAI,EAAE,kBAAkB;oBACxB,UAAU,EAAE;wBACV,UAAU,EAAE,SAAS;wBACrB,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACxD;iBACF;aACF;SACF,CAAC;QACJ,OAAO,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC;QAC7B,eAAe,EAAE,gBAAgB;KAClC,CAAC,CAAA;IAEF,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;AAC9E,CAAC","sourcesContent":["import { keepPreviousData, useQuery } from '@tanstack/react-query'\nimport { useMemo } from 'react'\nimport { ApiCollection, ResourceObject } from '../types'\nimport { useApiClient } from './use_api_client'\n\nexport interface PersonEnrichmentResource extends ResourceObject {\n type: 'PersonEnrichment'\n id: string\n badges: { title: string }[]\n}\n\nexport function useEnrichPeople({ personIds, groupId }: { personIds: number[]; groupId?: number }) {\n const apiClient = useApiClient()\n\n const { data } = useQuery<ApiCollection<PersonEnrichmentResource>>({\n queryKey: ['enrich_people', [...personIds].sort((a, b) => a - b), groupId],\n queryFn: () =>\n apiClient.chat.post<ApiCollection<PersonEnrichmentResource>>({\n url: '/enrich_people',\n data: {\n data: {\n type: 'PersonEnrichment',\n attributes: {\n person_ids: personIds,\n ...(groupId !== undefined ? { group_id: groupId } : {}),\n },\n },\n },\n }),\n enabled: personIds.length > 0,\n placeholderData: keepPreviousData,\n })\n\n return useMemo(() => new Map(data?.data.map(e => [+e.id, e]) ?? []), [data])\n}\n"]}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import type { FeatureResource } from '../types/resources/feature_resource';
|
|
2
|
+
type FeatureName = (typeof availableFeatures)[keyof typeof availableFeatures];
|
|
2
3
|
export declare function useFeatures(): {
|
|
3
4
|
features: FeatureResource[];
|
|
4
|
-
featureEnabled: (featureName:
|
|
5
|
+
featureEnabled: (featureName: FeatureName) => boolean;
|
|
5
6
|
};
|
|
6
7
|
export declare const availableFeatures: {
|
|
7
|
-
gender_specific_conversations:
|
|
8
|
-
message_reporting:
|
|
9
|
-
granular_notifications_ui:
|
|
10
|
-
custom_conversation_avatars:
|
|
11
|
-
jump_to_unread:
|
|
8
|
+
readonly gender_specific_conversations: "ROLLOUT_gender_specific_conversations";
|
|
9
|
+
readonly message_reporting: "ROLLOUT_MOBILE_message_reporting";
|
|
10
|
+
readonly granular_notifications_ui: "ROLLOUT_granular_notification_preferences_ui";
|
|
11
|
+
readonly custom_conversation_avatars: "ROLLOUT_custom_conversation_avatars";
|
|
12
|
+
readonly jump_to_unread: "ROLLOUT_jump_to_unread";
|
|
13
|
+
readonly conversation_safety_lock: "ROLLOUT_conversation_safety_lock";
|
|
12
14
|
};
|
|
15
|
+
export {};
|
|
13
16
|
//# 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":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAI1E,wBAAgB,WAAW;;kCAiBT,
|
|
1
|
+
{"version":3,"file":"use_features.d.ts","sourceRoot":"","sources":["../../src/hooks/use_features.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAI1E,KAAK,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAA;AAE7E,wBAAgB,WAAW;;kCAiBT,WAAW;EAS5B;AAED,eAAO,MAAM,iBAAiB;;;;;;;CAO0B,CAAA"}
|
|
@@ -27,6 +27,7 @@ export const availableFeatures = {
|
|
|
27
27
|
granular_notifications_ui: 'ROLLOUT_granular_notification_preferences_ui',
|
|
28
28
|
custom_conversation_avatars: 'ROLLOUT_custom_conversation_avatars',
|
|
29
29
|
jump_to_unread: 'ROLLOUT_jump_to_unread',
|
|
30
|
+
conversation_safety_lock: 'ROLLOUT_conversation_safety_lock',
|
|
30
31
|
};
|
|
31
32
|
const stableEmptyFeatures = {
|
|
32
33
|
data: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_features.js","sourceRoot":"","sources":["../../src/hooks/use_features.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAGnC,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"use_features.js","sourceRoot":"","sources":["../../src/hooks/use_features.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAGnC,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAI/C,MAAM,UAAU,WAAW;IACzB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,WAAW,GAAG,sBAAsB,EAAE,CAAA;IAE5C,MAAM,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC;QAChC,QAAQ,EAAE,mBAAmB,EAAE;QAC/B,OAAO,EAAE,GAAG,EAAE;YACZ,OAAO,SAAS,CAAC,IAAI;iBAClB,GAAG,CAAiC,WAAW,CAAC;iBAChD,KAAK,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAA;QACrC,CAAC;QACD,SAAS,EAAE,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE,YAAY;KACvC,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAA;IAE1B,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,WAAwB,EAAE,EAAE,CAC3B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,EAC3E,CAAC,QAAQ,CAAC,CACX,CAAA;IAED,OAAO;QACL,QAAQ;QACR,cAAc;KACf,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,6BAA6B,EAAE,uCAAuC;IACtE,iBAAiB,EAAE,kCAAkC;IACrD,yBAAyB,EAAE,8CAA8C;IACzE,2BAA2B,EAAE,qCAAqC;IAClE,cAAc,EAAE,wBAAwB;IACxC,wBAAwB,EAAE,kCAAkC;CACN,CAAA;AAExD,MAAM,mBAAmB,GAAmC;IAC1D,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;IACT,IAAI,EAAE;QACJ,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,CAAC;KACd;CACF,CAAA","sourcesContent":["import { 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 { useApiClient } from './use_api_client'\n\ntype FeatureName = (typeof availableFeatures)[keyof typeof availableFeatures]\n\nexport function useFeatures() {\n const apiClient = useApiClient()\n const requestArgs = getFeaturesRequestArgs()\n\n const { data } = useSuspenseQuery({\n queryKey: getFeaturesQueryKey(),\n queryFn: () => {\n return apiClient.chat\n .get<ApiCollection<FeatureResource>>(requestArgs)\n .catch(() => stableEmptyFeatures)\n },\n staleTime: 1000 * 60 * 5, // 5 minutes\n })\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 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 jump_to_unread: 'ROLLOUT_jump_to_unread',\n conversation_safety_lock: 'ROLLOUT_conversation_safety_lock',\n} as const satisfies Record<string, `ROLLOUT_${string}`>\n\nconst stableEmptyFeatures: ApiCollection<FeatureResource> = {\n data: [],\n links: {},\n meta: {\n count: 0,\n totalCount: 0,\n },\n}\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import JoltClient from '@planningcenter/jolt-client';
|
|
2
2
|
import { CustomMessage } from '@planningcenter/jolt-client/dist/types/JoltConnection';
|
|
3
3
|
import { JoltSubscription } from '@planningcenter/jolt-client/dist/types/JoltSubscription';
|
|
4
|
+
import type { JoltSubscriptionPattern } from '../types/jolt_events';
|
|
4
5
|
export declare const useJoltClient: () => JoltClient | undefined;
|
|
5
6
|
export declare function useJoltChannel(channelName: string, enabled?: boolean): JoltSubscription | undefined | null;
|
|
6
7
|
type UserCallbackFn<T> = (_event: T) => void;
|
|
7
|
-
export declare function useJoltEvent<T extends CustomMessage>(channel: JoltSubscription | undefined | null, eventName:
|
|
8
|
+
export declare function useJoltEvent<T extends CustomMessage>(channel: JoltSubscription | undefined | null, eventName: JoltSubscriptionPattern, callback: UserCallbackFn<T>): void;
|
|
8
9
|
export {};
|
|
9
10
|
//# sourceMappingURL=use_jolt.d.ts.map
|
|
@@ -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;
|
|
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;AASnE,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_jolt.js","sourceRoot":"","sources":["../../src/hooks/use_jolt.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,6BAA6B,CAAA;AASpD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"use_jolt.js","sourceRoot":"","sources":["../../src/hooks/use_jolt.ts"],"names":[],"mappings":"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","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'\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: 5000, // 5 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"]}
|
|
@@ -2,8 +2,14 @@ import { AnalyticsMetadataResource } from '../types/resources/analytics_metadata
|
|
|
2
2
|
export interface EventMetadata {
|
|
3
3
|
[key: string]: string | number | boolean | null | undefined;
|
|
4
4
|
}
|
|
5
|
-
export declare
|
|
5
|
+
export declare const analyticsEvents: {
|
|
6
|
+
readonly conversation_index_opened: "chat.mobile.conversations.index.opened";
|
|
7
|
+
readonly conversation_show_opened: "chat.mobile.conversations.show.opened";
|
|
8
|
+
};
|
|
9
|
+
type AnalyticsEventName = (typeof analyticsEvents)[keyof typeof analyticsEvents];
|
|
10
|
+
export declare function usePublishProductAnalyticsEvent(eventName: AnalyticsEventName, meta?: EventMetadata): void;
|
|
6
11
|
export declare function normalizeAnalyticsMetadata(resource: {
|
|
7
12
|
analyticsMetadata?: AnalyticsMetadataResource;
|
|
8
13
|
}): Record<string, unknown>;
|
|
14
|
+
export {};
|
|
9
15
|
//# sourceMappingURL=use_product_analytics.d.ts.map
|
|
@@ -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;
|
|
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"}
|
|
@@ -2,6 +2,10 @@ import { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
|
2
2
|
import { useChatContext } from '../contexts/chat_context';
|
|
3
3
|
import { keysToSnakeCase } from '../utils/client/utils';
|
|
4
4
|
import { SHA256, enc } from '../utils/sha_256';
|
|
5
|
+
export const analyticsEvents = {
|
|
6
|
+
conversation_index_opened: 'chat.mobile.conversations.index.opened',
|
|
7
|
+
conversation_show_opened: 'chat.mobile.conversations.show.opened',
|
|
8
|
+
};
|
|
5
9
|
function contentSha256(payload) {
|
|
6
10
|
return SHA256(payload).toString(enc.Hex);
|
|
7
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_product_analytics.js","sourceRoot":"","sources":["../../src/hooks/use_product_analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAGzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"use_product_analytics.js","sourceRoot":"","sources":["../../src/hooks/use_product_analytics.ts"],"names":[],"mappings":"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","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\nconst 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"]}
|
package/build/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import './icons/font_awesome';
|
|
2
|
-
export
|
|
2
|
+
export * from './components';
|
|
3
|
+
export * from './hooks';
|
|
3
4
|
export { ApiProvider, chatQueryClient, useFocusManager } from './contexts/api_provider';
|
|
4
5
|
export * from './contexts/chat_context';
|
|
5
6
|
export * from './contexts/session_context';
|
|
@@ -10,7 +11,7 @@ export { default as Event } from './polyfills/events/Event';
|
|
|
10
11
|
export * from './screens';
|
|
11
12
|
export { AgeCheckUnderageScreen } from './screens/age_check/age_check_underage_screen';
|
|
12
13
|
export * from './types';
|
|
13
|
-
export { platformFontWeightBold, Session, TemporaryDefaultColorsType, Uri } from './utils';
|
|
14
|
+
export { ENV, platformFontWeightBold, Session, TemporaryDefaultColorsType, Uri } from './utils';
|
|
14
15
|
export * from './utils/client';
|
|
15
16
|
export * from './utils/host_bridge';
|
|
16
17
|
export * from './utils/native_adapters';
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAA;AAE7B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAA;AAE7B,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACvF,cAAc,yBAAyB,CAAA;AACvC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,cAAc,CAAA;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAC5D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAC3D,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAA;AACtF,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,GAAG,EAAE,sBAAsB,EAAE,OAAO,EAAE,0BAA0B,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAC/F,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA"}
|
package/build/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import './icons/font_awesome';
|
|
2
|
-
export
|
|
2
|
+
export * from './components';
|
|
3
|
+
export * from './hooks';
|
|
3
4
|
export { ApiProvider, chatQueryClient, useFocusManager } from './contexts/api_provider';
|
|
4
5
|
export * from './contexts/chat_context';
|
|
5
6
|
export * from './contexts/session_context';
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAA;AAE7B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAA;AAE7B,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACvF,cAAc,yBAAyB,CAAA;AACvC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,cAAc,CAAA;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAC5D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAC3D,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAA,CAAC,sBAAsB;AAC7G,cAAc,SAAS,CAAA;AACvB,OAAO,EAAO,sBAAsB,EAAE,OAAO,EAA8B,GAAG,EAAE,MAAM,SAAS,CAAA;AAC/F,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA","sourcesContent":["import './icons/font_awesome'\n\nexport * from './components'\nexport * from './hooks'\nexport { ApiProvider, chatQueryClient, useFocusManager } from './contexts/api_provider'\nexport * from './contexts/chat_context'\nexport * from './contexts/session_context'\nexport * from './navigation'\nexport { ScreenLayout } from './navigation/screenLayout'\nexport { CustomEvent } from './polyfills/events/CustomEvent'\nexport { default as Event } from './polyfills/events/Event'\nexport * from './screens'\nexport { AgeCheckUnderageScreen } from './screens/age_check/age_check_underage_screen' // TODO: add to barrel\nexport * from './types'\nexport { ENV, platformFontWeightBold, Session, TemporaryDefaultColorsType, Uri } from './utils'\nexport * from './utils/client'\nexport * from './utils/host_bridge'\nexport * from './utils/native_adapters'\nexport { ResponseError } from './utils/response_error'\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenLayout.d.ts","sourceRoot":"","sources":["../../src/navigation/screenLayout.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"screenLayout.d.ts","sourceRoot":"","sources":["../../src/navigation/screenLayout.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAA;CAAE,qBAQ1E;AAED,wBAAgB,8BAA8B,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAA;CAAE,qBAQ5F"}
|