@planningcenter/chat-react-native 2.1.1 → 2.2.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/components/conversation/message_form.d.ts.map +1 -1
- package/build/components/conversation/message_form.js +4 -4
- package/build/components/conversation/message_form.js.map +1 -1
- package/build/components/display/badge.d.ts +2 -9
- package/build/components/display/badge.d.ts.map +1 -1
- package/build/components/display/badge.js +8 -40
- package/build/components/display/badge.js.map +1 -1
- package/build/components/display/banner.d.ts +29 -0
- package/build/components/display/banner.d.ts.map +1 -0
- package/build/components/display/banner.js +16 -0
- package/build/components/display/banner.js.map +1 -0
- package/build/components/display/button.d.ts +1 -1
- package/build/components/display/button.d.ts.map +1 -1
- package/build/components/display/button.js +1 -1
- package/build/components/display/button.js.map +1 -1
- package/build/components/display/icon_button.d.ts +1 -1
- package/build/components/display/icon_button.d.ts.map +1 -1
- package/build/components/display/icon_button.js +1 -1
- package/build/components/display/icon_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/display/text_button.d.ts +1 -1
- package/build/components/display/text_button.d.ts.map +1 -1
- package/build/components/display/text_button.js +1 -1
- package/build/components/display/text_button.js.map +1 -1
- package/build/components/display/text_inline_button.d.ts +2 -2
- package/build/components/display/text_inline_button.d.ts.map +1 -1
- package/build/components/display/text_inline_button.js +3 -2
- package/build/components/display/text_inline_button.js.map +1 -1
- package/build/components/display/{button_color_utils.d.ts → utils/button_colors.d.ts} +1 -1
- package/build/components/display/utils/button_colors.d.ts.map +1 -0
- package/build/components/display/{button_color_utils.js → utils/button_colors.js} +2 -2
- package/build/components/display/utils/button_colors.js.map +1 -0
- package/build/components/display/utils/status_colors.d.ts +17 -0
- package/build/components/display/utils/status_colors.d.ts.map +1 -0
- package/build/components/display/utils/status_colors.js +49 -0
- package/build/components/display/utils/status_colors.js.map +1 -0
- package/build/components/primitive/banner_primitive.d.ts +38 -0
- package/build/components/primitive/banner_primitive.d.ts.map +1 -0
- package/build/components/primitive/banner_primitive.js +112 -0
- package/build/components/primitive/banner_primitive.js.map +1 -0
- package/build/contexts/api_provider.js +4 -3
- package/build/contexts/api_provider.js.map +1 -1
- package/build/contexts/chat_context.d.ts +2 -2
- package/build/contexts/chat_context.d.ts.map +1 -1
- package/build/contexts/chat_context.js +3 -15
- package/build/contexts/chat_context.js.map +1 -1
- package/build/hooks/use_api_client.d.ts +6 -0
- package/build/hooks/use_api_client.d.ts.map +1 -0
- package/build/hooks/use_api_client.js +18 -0
- package/build/hooks/use_api_client.js.map +1 -0
- package/build/hooks/use_conversation.d.ts +122 -0
- package/build/hooks/use_conversation.d.ts.map +1 -0
- package/build/hooks/use_conversation.js +103 -0
- package/build/hooks/use_conversation.js.map +1 -0
- package/build/hooks/use_conversation_jolt_events.d.ts.map +1 -1
- package/build/hooks/use_conversation_jolt_events.js +3 -4
- package/build/hooks/use_conversation_jolt_events.js.map +1 -1
- package/build/hooks/use_font_scale.d.ts +1 -1
- package/build/hooks/use_font_scale.d.ts.map +1 -1
- package/build/hooks/use_font_scale.js +1 -1
- package/build/hooks/use_font_scale.js.map +1 -1
- package/build/hooks/use_jolt.d.ts +1 -1
- package/build/hooks/use_jolt.d.ts.map +1 -1
- package/build/hooks/use_jolt.js +6 -6
- package/build/hooks/use_jolt.js.map +1 -1
- package/build/hooks/use_suspense_api.d.ts.map +1 -1
- package/build/hooks/use_suspense_api.js +3 -4
- package/build/hooks/use_suspense_api.js.map +1 -1
- package/build/navigation/header.d.ts +10 -0
- package/build/navigation/header.d.ts.map +1 -0
- package/build/navigation/header.js +16 -0
- package/build/navigation/header.js.map +1 -0
- package/build/navigation/index.d.ts +17 -4
- package/build/navigation/index.d.ts.map +1 -1
- package/build/navigation/index.js +18 -6
- package/build/navigation/index.js.map +1 -1
- package/build/screens/conversation_details_screen.d.ts +7 -0
- package/build/screens/conversation_details_screen.d.ts.map +1 -0
- package/build/screens/conversation_details_screen.js +155 -0
- package/build/screens/conversation_details_screen.js.map +1 -0
- package/build/screens/conversation_screen.d.ts +5 -3
- package/build/screens/conversation_screen.d.ts.map +1 -1
- package/build/screens/conversation_screen.js +43 -15
- package/build/screens/conversation_screen.js.map +1 -1
- package/build/screens/design_system_screen.d.ts.map +1 -1
- package/build/screens/design_system_screen.js +24 -1
- package/build/screens/design_system_screen.js.map +1 -1
- package/build/screens/message_actions_screen.d.ts.map +1 -1
- package/build/screens/message_actions_screen.js +7 -7
- package/build/screens/message_actions_screen.js.map +1 -1
- package/build/utils/client/request_helpers.d.ts +2 -1
- package/build/utils/client/request_helpers.d.ts.map +1 -1
- package/build/utils/client/request_helpers.js +17 -0
- package/build/utils/client/request_helpers.js.map +1 -1
- package/package.json +2 -2
- package/src/components/conversation/message_form.tsx +4 -4
- package/src/components/display/badge.tsx +9 -53
- package/src/components/display/banner.tsx +56 -0
- package/src/components/display/button.tsx +2 -2
- package/src/components/display/icon_button.tsx +2 -2
- package/src/components/display/index.ts +1 -0
- package/src/components/display/text_button.tsx +2 -2
- package/src/components/display/text_inline_button.tsx +4 -2
- package/src/components/display/{button_color_utils.ts → utils/button_colors.ts} +1 -1
- package/src/components/display/utils/status_colors.ts +85 -0
- package/src/components/primitive/banner_primitive.tsx +247 -0
- package/src/contexts/api_provider.tsx +5 -5
- package/src/contexts/chat_context.tsx +4 -21
- package/src/hooks/use_api_client.ts +29 -0
- package/src/hooks/use_conversation.ts +113 -0
- package/src/hooks/use_conversation_jolt_events.ts +3 -4
- package/src/hooks/use_font_scale.ts +3 -1
- package/src/hooks/use_jolt.ts +9 -9
- package/src/hooks/use_suspense_api.ts +3 -4
- package/src/navigation/header.tsx +24 -0
- package/src/navigation/index.tsx +20 -6
- package/src/screens/conversation_details_screen.tsx +205 -0
- package/src/screens/conversation_screen.tsx +65 -20
- package/src/screens/design_system_screen.tsx +56 -0
- package/src/screens/message_actions_screen.tsx +7 -7
- package/src/utils/client/request_helpers.ts +21 -1
- package/build/components/display/button_color_utils.d.ts.map +0 -1
- package/build/components/display/button_color_utils.js.map +0 -1
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { ApiResource, ConversationResource } from '../types';
|
|
2
|
+
export declare const getConversationRequestArgs: ({ conversation_id }: {
|
|
3
|
+
conversation_id: string;
|
|
4
|
+
}) => {
|
|
5
|
+
url: string;
|
|
6
|
+
data: {
|
|
7
|
+
fields: {
|
|
8
|
+
Conversation: string[];
|
|
9
|
+
MemberAbility: string[];
|
|
10
|
+
ConversationBadge: string[];
|
|
11
|
+
};
|
|
12
|
+
include: string[];
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export declare const useConversation: ({ conversation_id }: {
|
|
16
|
+
conversation_id: any;
|
|
17
|
+
}) => {
|
|
18
|
+
error: Response | null;
|
|
19
|
+
isError: boolean;
|
|
20
|
+
isPending: false;
|
|
21
|
+
isLoading: false;
|
|
22
|
+
isLoadingError: false;
|
|
23
|
+
isRefetchError: boolean;
|
|
24
|
+
isSuccess: boolean;
|
|
25
|
+
status: "error" | "success";
|
|
26
|
+
dataUpdatedAt: number;
|
|
27
|
+
errorUpdatedAt: number;
|
|
28
|
+
failureCount: number;
|
|
29
|
+
failureReason: Response | null;
|
|
30
|
+
errorUpdateCount: number;
|
|
31
|
+
isFetched: boolean;
|
|
32
|
+
isFetchedAfterMount: boolean;
|
|
33
|
+
isFetching: boolean;
|
|
34
|
+
isInitialLoading: boolean;
|
|
35
|
+
isPaused: boolean;
|
|
36
|
+
isRefetching: boolean;
|
|
37
|
+
isStale: boolean;
|
|
38
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<ApiResource<ConversationResource>, Response>>;
|
|
39
|
+
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
40
|
+
data: ConversationResource;
|
|
41
|
+
links: Record<string, string>;
|
|
42
|
+
meta: Record<string, unknown>;
|
|
43
|
+
};
|
|
44
|
+
export declare const useConversationMute: ({ conversation_id }: {
|
|
45
|
+
conversation_id: string;
|
|
46
|
+
}) => {
|
|
47
|
+
data: undefined;
|
|
48
|
+
variables: undefined;
|
|
49
|
+
error: null;
|
|
50
|
+
isError: false;
|
|
51
|
+
isIdle: true;
|
|
52
|
+
isPending: false;
|
|
53
|
+
isSuccess: false;
|
|
54
|
+
status: "idle";
|
|
55
|
+
reset: () => void;
|
|
56
|
+
context: ApiResource<ConversationResource> | undefined;
|
|
57
|
+
failureCount: number;
|
|
58
|
+
failureReason: Error | null;
|
|
59
|
+
isPaused: boolean;
|
|
60
|
+
submittedAt: number;
|
|
61
|
+
mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<ApiResource<ConversationResource>, Error, boolean, ApiResource<ConversationResource>>;
|
|
62
|
+
muted: boolean;
|
|
63
|
+
setMuted: import("@tanstack/react-query").UseMutateFunction<ApiResource<ConversationResource>, Error, boolean, ApiResource<ConversationResource>>;
|
|
64
|
+
} | {
|
|
65
|
+
data: undefined;
|
|
66
|
+
variables: boolean;
|
|
67
|
+
error: null;
|
|
68
|
+
isError: false;
|
|
69
|
+
isIdle: false;
|
|
70
|
+
isPending: true;
|
|
71
|
+
isSuccess: false;
|
|
72
|
+
status: "pending";
|
|
73
|
+
reset: () => void;
|
|
74
|
+
context: ApiResource<ConversationResource> | undefined;
|
|
75
|
+
failureCount: number;
|
|
76
|
+
failureReason: Error | null;
|
|
77
|
+
isPaused: boolean;
|
|
78
|
+
submittedAt: number;
|
|
79
|
+
mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<ApiResource<ConversationResource>, Error, boolean, ApiResource<ConversationResource>>;
|
|
80
|
+
muted: boolean;
|
|
81
|
+
setMuted: import("@tanstack/react-query").UseMutateFunction<ApiResource<ConversationResource>, Error, boolean, ApiResource<ConversationResource>>;
|
|
82
|
+
} | {
|
|
83
|
+
data: undefined;
|
|
84
|
+
error: Error;
|
|
85
|
+
variables: boolean;
|
|
86
|
+
isError: true;
|
|
87
|
+
isIdle: false;
|
|
88
|
+
isPending: false;
|
|
89
|
+
isSuccess: false;
|
|
90
|
+
status: "error";
|
|
91
|
+
reset: () => void;
|
|
92
|
+
context: ApiResource<ConversationResource> | undefined;
|
|
93
|
+
failureCount: number;
|
|
94
|
+
failureReason: Error | null;
|
|
95
|
+
isPaused: boolean;
|
|
96
|
+
submittedAt: number;
|
|
97
|
+
mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<ApiResource<ConversationResource>, Error, boolean, ApiResource<ConversationResource>>;
|
|
98
|
+
muted: boolean;
|
|
99
|
+
setMuted: import("@tanstack/react-query").UseMutateFunction<ApiResource<ConversationResource>, Error, boolean, ApiResource<ConversationResource>>;
|
|
100
|
+
} | {
|
|
101
|
+
data: ApiResource<ConversationResource>;
|
|
102
|
+
error: null;
|
|
103
|
+
variables: boolean;
|
|
104
|
+
isError: false;
|
|
105
|
+
isIdle: false;
|
|
106
|
+
isPending: false;
|
|
107
|
+
isSuccess: true;
|
|
108
|
+
status: "success";
|
|
109
|
+
reset: () => void;
|
|
110
|
+
context: ApiResource<ConversationResource> | undefined;
|
|
111
|
+
failureCount: number;
|
|
112
|
+
failureReason: Error | null;
|
|
113
|
+
isPaused: boolean;
|
|
114
|
+
submittedAt: number;
|
|
115
|
+
mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<ApiResource<ConversationResource>, Error, boolean, ApiResource<ConversationResource>>;
|
|
116
|
+
muted: boolean;
|
|
117
|
+
setMuted: import("@tanstack/react-query").UseMutateFunction<ApiResource<ConversationResource>, Error, boolean, ApiResource<ConversationResource>>;
|
|
118
|
+
};
|
|
119
|
+
export declare const useConversationUpdate: ({ conversation_id }: {
|
|
120
|
+
conversation_id: string;
|
|
121
|
+
}) => import("@tanstack/react-query").UseMutationResult<ApiResource<ConversationResource>, Error, Partial<ConversationResource>, void>;
|
|
122
|
+
//# sourceMappingURL=use_conversation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_conversation.d.ts","sourceRoot":"","sources":["../../src/hooks/use_conversation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAO5D,eAAO,MAAM,0BAA0B,wBAAyB;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;CAyBzF,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAE3B,CAAA;AAED,eAAO,MAAM,mBAAmB,wBAAyB;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCnF,CAAA;AAED,eAAO,MAAM,qBAAqB,wBAAyB;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,qIA8BrF,CAAA"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { useMutation } from '@tanstack/react-query';
|
|
2
|
+
import { getRequestQueryKey, useSuspenseGet } from './use_suspense_api';
|
|
3
|
+
import { queryClient } from '../contexts';
|
|
4
|
+
import { useApiClient } from './use_api_client';
|
|
5
|
+
import { transformGetToPost } from '../utils/client/request_helpers';
|
|
6
|
+
import { useState } from 'react';
|
|
7
|
+
export const getConversationRequestArgs = ({ conversation_id }) => ({
|
|
8
|
+
url: `/me/conversations/${conversation_id}`,
|
|
9
|
+
data: {
|
|
10
|
+
fields: {
|
|
11
|
+
Conversation: [
|
|
12
|
+
'created_at',
|
|
13
|
+
'badges',
|
|
14
|
+
'groups',
|
|
15
|
+
'last_message_author_id',
|
|
16
|
+
'last_message_author_name',
|
|
17
|
+
'last_message_created_at',
|
|
18
|
+
'last_message_text_preview',
|
|
19
|
+
'preview_avatar_urls',
|
|
20
|
+
'member_ability',
|
|
21
|
+
'muted',
|
|
22
|
+
'replies_disabled',
|
|
23
|
+
'title',
|
|
24
|
+
'unread_count',
|
|
25
|
+
'updated_at',
|
|
26
|
+
],
|
|
27
|
+
MemberAbility: ['can_update', 'can_delete'],
|
|
28
|
+
ConversationBadge: ['app_name', 'pco_resource_type', 'text'],
|
|
29
|
+
},
|
|
30
|
+
include: ['badges', 'member_ability'],
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
export const useConversation = ({ conversation_id }) => {
|
|
34
|
+
return useSuspenseGet(getConversationRequestArgs({ conversation_id }));
|
|
35
|
+
};
|
|
36
|
+
export const useConversationMute = ({ conversation_id }) => {
|
|
37
|
+
const apiClient = useApiClient();
|
|
38
|
+
const requestArgs = getConversationRequestArgs({ conversation_id });
|
|
39
|
+
const queryKey = getRequestQueryKey(requestArgs);
|
|
40
|
+
const { data: conversation } = useConversation({ conversation_id });
|
|
41
|
+
const [value, setValue] = useState(conversation.muted);
|
|
42
|
+
const { mutate: setMuted, ...mutation } = useMutation({
|
|
43
|
+
onMutate: async (muted) => {
|
|
44
|
+
return queryClient.setQueryData(queryKey, prev => {
|
|
45
|
+
if (!prev?.data)
|
|
46
|
+
return prev;
|
|
47
|
+
setValue(muted);
|
|
48
|
+
prev.data.muted = muted;
|
|
49
|
+
return prev;
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
mutationKey: ['muteConversation'],
|
|
53
|
+
mutationFn: async (muted) => {
|
|
54
|
+
const action = muted ? 'mute' : 'unmute';
|
|
55
|
+
return apiClient.chat.post({
|
|
56
|
+
url: `/me/conversations/${conversation_id}/${action}`,
|
|
57
|
+
data: { data: { type: '', attributes: {} }, fields: { Conversation: 'muted' } },
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
onSuccess: (response) => {
|
|
61
|
+
queryClient.setQueryData(queryKey, prev => {
|
|
62
|
+
if (!prev?.data)
|
|
63
|
+
return prev;
|
|
64
|
+
// Posting to the mute action endpoint can't return all the fields
|
|
65
|
+
// so we need to set only the fields we require
|
|
66
|
+
prev.data.muted = response.data.muted;
|
|
67
|
+
setValue(response.data.muted);
|
|
68
|
+
return prev;
|
|
69
|
+
});
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
return { muted: value, setMuted, ...mutation };
|
|
73
|
+
};
|
|
74
|
+
export const useConversationUpdate = ({ conversation_id }) => {
|
|
75
|
+
const apiClient = useApiClient();
|
|
76
|
+
const requestArgs = getConversationRequestArgs({ conversation_id });
|
|
77
|
+
const queryKey = getRequestQueryKey(requestArgs);
|
|
78
|
+
return useMutation({
|
|
79
|
+
onMutate: async (update) => {
|
|
80
|
+
queryClient.setQueryData(queryKey, prev => {
|
|
81
|
+
if (prev?.data) {
|
|
82
|
+
prev.data = {
|
|
83
|
+
...prev.data,
|
|
84
|
+
...update,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return prev;
|
|
88
|
+
});
|
|
89
|
+
},
|
|
90
|
+
mutationKey: ['mutateConversation'],
|
|
91
|
+
mutationFn: async (update) => {
|
|
92
|
+
const postArgs = transformGetToPost(requestArgs).data;
|
|
93
|
+
return apiClient.chat.patch({
|
|
94
|
+
url: `/me/conversations/${conversation_id}/`,
|
|
95
|
+
data: { data: { type: '', attributes: update }, ...postArgs },
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
onSuccess: (response) => {
|
|
99
|
+
queryClient.setQueryData(queryKey, () => response);
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=use_conversation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_conversation.js","sourceRoot":"","sources":["../../src/hooks/use_conversation.ts"],"names":[],"mappings":"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","sourcesContent":["import { useMutation } from '@tanstack/react-query'\nimport { ApiResource, ConversationResource } from '../types'\nimport { getRequestQueryKey, useSuspenseGet } from './use_suspense_api'\nimport { queryClient } from '../contexts'\nimport { useApiClient } from './use_api_client'\nimport { transformGetToPost } from '../utils/client/request_helpers'\nimport { useState } from 'react'\n\nexport const getConversationRequestArgs = ({ conversation_id }: { conversation_id: string }) => ({\n url: `/me/conversations/${conversation_id}`,\n data: {\n fields: {\n Conversation: [\n 'created_at',\n 'badges',\n 'groups',\n 'last_message_author_id',\n 'last_message_author_name',\n 'last_message_created_at',\n 'last_message_text_preview',\n 'preview_avatar_urls',\n 'member_ability',\n 'muted',\n 'replies_disabled',\n 'title',\n 'unread_count',\n 'updated_at',\n ],\n MemberAbility: ['can_update', 'can_delete'],\n ConversationBadge: ['app_name', 'pco_resource_type', 'text'],\n },\n include: ['badges', 'member_ability'],\n },\n})\n\nexport const useConversation = ({ conversation_id }) => {\n return useSuspenseGet<ConversationResource>(getConversationRequestArgs({ conversation_id }))\n}\n\nexport const useConversationMute = ({ conversation_id }: { conversation_id: string }) => {\n const apiClient = useApiClient()\n const requestArgs = getConversationRequestArgs({ conversation_id })\n const queryKey = getRequestQueryKey(requestArgs)\n const { data: conversation } = useConversation({ conversation_id })\n const [value, setValue] = useState<boolean>(conversation.muted)\n\n const { mutate: setMuted, ...mutation } = useMutation({\n onMutate: async (muted: boolean) => {\n return queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (!prev?.data) return prev\n setValue(muted)\n prev.data.muted = muted\n\n return prev\n })\n },\n mutationKey: ['muteConversation'],\n mutationFn: async (muted: boolean) => {\n const action = muted ? 'mute' : 'unmute'\n\n return apiClient.chat.post({\n url: `/me/conversations/${conversation_id}/${action}`,\n data: { data: { type: '', attributes: {} }, fields: { Conversation: 'muted' } },\n })\n },\n onSuccess: (response: ApiResource<ConversationResource>) => {\n queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (!prev?.data) return prev\n\n // Posting to the mute action endpoint can't return all the fields\n // so we need to set only the fields we require\n prev.data.muted = response.data.muted\n setValue(response.data.muted)\n\n return prev\n })\n },\n })\n\n return { muted: value, setMuted, ...mutation }\n}\n\nexport const useConversationUpdate = ({ conversation_id }: { conversation_id: string }) => {\n const apiClient = useApiClient()\n const requestArgs = getConversationRequestArgs({ conversation_id })\n const queryKey = getRequestQueryKey(requestArgs)\n\n return useMutation({\n onMutate: async (update: Partial<ConversationResource>) => {\n queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (prev?.data) {\n prev.data = {\n ...prev.data,\n ...update,\n }\n }\n\n return prev\n })\n },\n mutationKey: ['mutateConversation'],\n mutationFn: async (update: Partial<ConversationResource>) => {\n const postArgs = transformGetToPost(requestArgs).data\n return apiClient.chat.patch({\n url: `/me/conversations/${conversation_id}/`,\n data: { data: { type: '', attributes: update }, ...postArgs },\n })\n },\n onSuccess: (response: ApiResource<ConversationResource>) => {\n queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, () => response)\n },\n })\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_conversation_jolt_events.d.ts","sourceRoot":"","sources":["../../src/hooks/use_conversation_jolt_events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use_conversation_jolt_events.d.ts","sourceRoot":"","sources":["../../src/hooks/use_conversation_jolt_events.ts"],"names":[],"mappings":"AAiBA,wBAAgB,0BAA0B,SAgDzC"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { useQueryClient } from '@tanstack/react-query';
|
|
2
|
-
import { useContext } from 'react';
|
|
3
|
-
import { ChatContext } from '../contexts';
|
|
4
2
|
import { deleteRecordInPagesData, updateRecordInPagesData } from '../utils';
|
|
3
|
+
import { useApiClient } from './use_api_client';
|
|
5
4
|
import { getConversationsRequestArgs } from './use_conversations';
|
|
6
5
|
import { useCurrentPerson } from './use_current_person';
|
|
7
6
|
import { useJoltChannel, useJoltEvent } from './use_jolt';
|
|
8
7
|
import { getRequestQueryKey } from './use_suspense_api';
|
|
9
8
|
export function useConversationsJoltEvents() {
|
|
10
|
-
const
|
|
9
|
+
const apiClient = useApiClient();
|
|
11
10
|
const queryClient = useQueryClient();
|
|
12
11
|
const currentPerson = useCurrentPerson();
|
|
13
12
|
const joltChannel = useJoltChannel(`chat.people.${currentPerson.id}`);
|
|
@@ -15,7 +14,7 @@ export function useConversationsJoltEvents() {
|
|
|
15
14
|
const conversationQueryKey = getRequestQueryKey(conversationsRequestArgs);
|
|
16
15
|
const fetchConversation = async ({ id }) => {
|
|
17
16
|
const { data: argsData } = conversationsRequestArgs;
|
|
18
|
-
const { data } = await
|
|
17
|
+
const { data } = await apiClient.chat.get({
|
|
19
18
|
url: `/me/conversations/${id}`,
|
|
20
19
|
data: {
|
|
21
20
|
fields: argsData.fields,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_conversation_jolt_events.js","sourceRoot":"","sources":["../../src/hooks/use_conversation_jolt_events.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,cAAc,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"use_conversation_jolt_events.js","sourceRoot":"","sources":["../../src/hooks/use_conversation_jolt_events.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEpE,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AASvD,MAAM,UAAU,0BAA0B;IACxC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;IACxC,MAAM,WAAW,GAAG,cAAc,CAAC,eAAe,aAAa,CAAC,EAAE,EAAE,CAAC,CAAA;IAErE,MAAM,wBAAwB,GAAG,2BAA2B,EAAE,CAAA;IAC9D,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,wBAAwB,CAAC,CAAA;IAEzE,MAAM,iBAAiB,GAAG,KAAK,EAAE,EAAE,EAAE,EAAwB,EAAE,EAAE;QAC/D,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,wBAAwB,CAAA;QACnD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,CAAoC;YAC3E,GAAG,EAAE,qBAAqB,EAAE,EAAE;YAC9B,IAAI,EAAE;gBACJ,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B;SACF,CAAC,CAAA;QAEF,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAED,MAAM,gCAAgC,GAAG,KAAK,EAAE,CAAyB,EAAE,EAAE;QAC3E,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEvE,WAAW,CAAC,YAAY,CAAY,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAC/D,uBAAuB,CAAC;YACtB,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,YAAY;YACpB,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;gBACjC,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE,CAAA;YAClC,CAAC;SACF,CAAC,CACH,CAAA;IACH,CAAC,CAAA;IAED,MAAM,yBAAyB,GAAG,CAAC,CAAyB,EAAE,EAAE;QAC9D,WAAW,CAAC,YAAY,CAAY,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAC/D,uBAAuB,CAAC;YACtB,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI;SACpB,CAAC,CACH,CAAA;IACH,CAAC,CAAA;IAED,YAAY,CAAC,WAAW,EAAE,sBAAsB,EAAE,gCAAgC,CAAC,CAAA;IACnF,YAAY,CAAC,WAAW,EAAE,sBAAsB,EAAE,gCAAgC,CAAC,CAAA;IACnF,YAAY,CAAC,WAAW,EAAE,wBAAwB,EAAE,yBAAyB,CAAC,CAAA;AAChF,CAAC","sourcesContent":["import { CustomMessage } from '@planningcenter/jolt-client/dist/types/JoltConnection'\nimport { InfiniteData, useQueryClient } from '@tanstack/react-query'\nimport { ApiCollection, ApiResource, ConversationResource } from '../types'\nimport { deleteRecordInPagesData, updateRecordInPagesData } from '../utils'\nimport { useApiClient } from './use_api_client'\nimport { getConversationsRequestArgs } from './use_conversations'\nimport { useCurrentPerson } from './use_current_person'\nimport { useJoltChannel, useJoltEvent } from './use_jolt'\nimport { getRequestQueryKey } from './use_suspense_api'\n\ntype QueryData = InfiniteData<ApiCollection<ConversationResource>>\ninterface JoltConversationsEvent extends CustomMessage {\n data: {\n data: ConversationResource\n }\n}\n\nexport function useConversationsJoltEvents() {\n const apiClient = useApiClient()\n const queryClient = useQueryClient()\n const currentPerson = useCurrentPerson()\n const joltChannel = useJoltChannel(`chat.people.${currentPerson.id}`)\n\n const conversationsRequestArgs = getConversationsRequestArgs()\n const conversationQueryKey = getRequestQueryKey(conversationsRequestArgs)\n\n const fetchConversation = async ({ id }: ConversationResource) => {\n const { data: argsData } = conversationsRequestArgs\n const { data } = await apiClient.chat.get<ApiResource<ConversationResource>>({\n url: `/me/conversations/${id}`,\n data: {\n fields: argsData.fields,\n include: argsData.include,\n },\n })\n\n return data\n }\n\n const handleConversationUpdateOrCreate = async (e: JoltConversationsEvent) => {\n const conversation = await fetchConversation(e.data.data).catch(c => c)\n\n queryClient.setQueryData<QueryData>(conversationQueryKey, prev =>\n updateRecordInPagesData({\n data: prev,\n record: conversation,\n processRecord: (record, current) => {\n return { ...current, ...record }\n },\n })\n )\n }\n\n const handleConversationDestroy = (e: JoltConversationsEvent) => {\n queryClient.setQueryData<QueryData>(conversationQueryKey, prev =>\n deleteRecordInPagesData({\n data: prev,\n record: e.data.data,\n })\n )\n }\n\n useJoltEvent(joltChannel, 'conversation.updated', handleConversationUpdateOrCreate)\n useJoltEvent(joltChannel, 'conversation.created', handleConversationUpdateOrCreate)\n useJoltEvent(joltChannel, 'conversation.destroyed', handleConversationDestroy)\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_font_scale.d.ts","sourceRoot":"","sources":["../../src/hooks/use_font_scale.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"use_font_scale.d.ts","sourceRoot":"","sources":["../../src/hooks/use_font_scale.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,gCAEtB;IAAE,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAAE,WAMpC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useWindowDimensions } from 'react-native';
|
|
2
|
-
export const useFontScale = ({ maxFontSizeMultiplier }) => {
|
|
2
|
+
export const useFontScale = ({ maxFontSizeMultiplier, } = {}) => {
|
|
3
3
|
const { fontScale: nativeFontScale } = useWindowDimensions();
|
|
4
4
|
const scaleLimit = maxFontSizeMultiplier || nativeFontScale;
|
|
5
5
|
const fontScale = Math.min(scaleLimit, nativeFontScale);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_font_scale.js","sourceRoot":"","sources":["../../src/hooks/use_font_scale.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"use_font_scale.js","sourceRoot":"","sources":["../../src/hooks/use_font_scale.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC3B,qBAAqB,MACiB,EAAE,EAAE,EAAE;IAC5C,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,mBAAmB,EAAE,CAAA;IAC5D,MAAM,UAAU,GAAG,qBAAqB,IAAI,eAAe,CAAA;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;IAEvD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA","sourcesContent":["import { useWindowDimensions } from 'react-native'\n\nexport const useFontScale = ({\n maxFontSizeMultiplier,\n}: { maxFontSizeMultiplier?: number } = {}) => {\n const { fontScale: nativeFontScale } = useWindowDimensions()\n const scaleLimit = maxFontSizeMultiplier || nativeFontScale\n const fontScale = Math.min(scaleLimit, nativeFontScale)\n\n return fontScale\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import JoltClient from '@planningcenter/jolt-client';
|
|
2
|
-
import { JoltSubscription } from '@planningcenter/jolt-client/dist/types/JoltSubscription';
|
|
3
2
|
import { CustomMessage } from '@planningcenter/jolt-client/dist/types/JoltConnection';
|
|
3
|
+
import { JoltSubscription } from '@planningcenter/jolt-client/dist/types/JoltSubscription';
|
|
4
4
|
export declare const useJoltClient: () => JoltClient | undefined;
|
|
5
5
|
export declare function useJoltChannel(channelName: string): JoltSubscription | undefined;
|
|
6
6
|
type UserCallbackFn<T> = (_event: T) => void;
|
|
@@ -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;
|
|
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,EAAE,aAAa,EAAE,MAAM,uDAAuD,CAAA;AACrF,OAAO,EAEL,gBAAgB,EACjB,MAAM,yDAAyD,CAAA;AAYhE,eAAO,MAAM,aAAa,QAAO,UAAU,GAAG,SAyD7C,CAAA;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,gCAUjD;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,EACrC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,QAO5B"}
|
package/build/hooks/use_jolt.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import JoltClient from '@planningcenter/jolt-client';
|
|
2
2
|
import { useQuery, useSuspenseQuery } from '@tanstack/react-query';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { useApiClient } from './use_api_client';
|
|
5
5
|
export const useJoltClient = () => {
|
|
6
|
-
const
|
|
6
|
+
const apiClient = useApiClient();
|
|
7
7
|
const { data: joltToken } = useSuspenseQuery({
|
|
8
8
|
refetchOnMount: false,
|
|
9
9
|
queryKey: ['jolt-token'],
|
|
10
10
|
queryFn: () => {
|
|
11
|
-
return
|
|
11
|
+
return apiClient.chat.post({
|
|
12
12
|
url: '/me/jolt_authorize',
|
|
13
13
|
data: {
|
|
14
14
|
data: {
|
|
@@ -23,7 +23,7 @@ export const useJoltClient = () => {
|
|
|
23
23
|
return joltToken.data.id || '';
|
|
24
24
|
};
|
|
25
25
|
const fetchSubscribeTokenFn = (channel, connectionId) => {
|
|
26
|
-
return
|
|
26
|
+
return apiClient.chat
|
|
27
27
|
.post({
|
|
28
28
|
url: '/me/jolt_subscribe',
|
|
29
29
|
data: {
|
|
@@ -47,7 +47,7 @@ export const useJoltClient = () => {
|
|
|
47
47
|
return new JoltClient(joltToken?.data.wssUrl, {
|
|
48
48
|
fetchAuthTokenFn,
|
|
49
49
|
fetchSubscribeTokenFn,
|
|
50
|
-
}, { logToConsole:
|
|
50
|
+
}, { logToConsole: false });
|
|
51
51
|
},
|
|
52
52
|
});
|
|
53
53
|
return joltClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_jolt.js","sourceRoot":"","sources":["../../src/hooks/use_jolt.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,6BAA6B,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 { CustomMessage } from '@planningcenter/jolt-client/dist/types/JoltConnection'\nimport {\n FetchSubscribeToken,\n JoltSubscription,\n} from '@planningcenter/jolt-client/dist/types/JoltSubscription'\nimport { useQuery, useSuspenseQuery } from '@tanstack/react-query'\nimport { useEffect, useState } from 'react'\nimport { ApiResource } from '../types'\nimport { useApiClient } from './use_api_client'\n\ninterface JoltResponse {\n type: 'JoltToken'\n id: string\n wssUrl: string\n}\n\nexport const useJoltClient = (): JoltClient | undefined => {\n const apiClient = useApiClient()\n const { data: joltToken } = useSuspenseQuery<ApiResource<JoltResponse>>({\n refetchOnMount: false,\n queryKey: ['jolt-token'],\n queryFn: () => {\n return apiClient.chat.post({\n url: '/me/jolt_authorize',\n data: {\n data: {\n type: 'JoltToken',\n attributes: {},\n },\n },\n })\n },\n })\n\n const fetchAuthTokenFn = async () => {\n return joltToken.data.id || ''\n }\n\n const fetchSubscribeTokenFn: FetchSubscribeToken = (channel: string, connectionId: string) => {\n return apiClient.chat\n .post({\n url: '/me/jolt_subscribe',\n data: {\n data: {\n type: 'JoltSubscribeToken',\n attributes: { channel, cid: connectionId },\n },\n },\n })\n .then((res: ApiResource<JoltResponse>) => res.data.id)\n }\n\n const { data: joltClient } = useQuery({\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n enabled: Boolean(joltToken),\n queryKey: ['jolt-client'],\n queryFn: async () => {\n if (!joltToken) return undefined\n\n return new JoltClient(\n joltToken?.data.wssUrl,\n {\n fetchAuthTokenFn,\n fetchSubscribeTokenFn,\n },\n { logToConsole: false }\n )\n },\n })\n\n return joltClient\n}\n\nexport function useJoltChannel(channelName: string) {\n const [joltChannel, setJoltChannel] = useState<JoltSubscription>()\n const jolt = useJoltClient()\n\n useEffect(() => {\n setJoltChannel(jolt?.subscribe(channelName))\n return () => jolt?.unsubscribe(channelName)\n }, [channelName, jolt])\n\n return joltChannel\n}\n\ntype UserCallbackFn<T> = (_event: T) => void\n\nexport function useJoltEvent<T extends CustomMessage>(\n channel: JoltSubscription | undefined,\n eventName: string,\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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_suspense_api.d.ts","sourceRoot":"","sources":["../../src/hooks/use_suspense_api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,YAAY,EAGb,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"use_suspense_api.d.ts","sourceRoot":"","sources":["../../src/hooks/use_suspense_api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,YAAY,EAGb,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACrE,OAAO,EAAE,UAAU,EAAe,MAAM,uBAAuB,CAAA;AAG/D,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,QAAQ,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;CAQ3F,CAAA;AAOD,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,kCAAkC,EAClC,kBAAkB,GAAG,kBAAkB,GAAG,SAAS,GAAG,UAAU,CACjE,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,cAAc,QACrD,UAAU,SACT,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwChC,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAA;AAC5F,eAAO,MAAM,kBAAkB,SAAU,UAAU,KAAG,eAIrD,CAAA"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { useSuspenseInfiniteQuery, useSuspenseQuery, } from '@tanstack/react-query';
|
|
2
|
-
import {
|
|
3
|
-
import { ChatContext } from '../contexts';
|
|
2
|
+
import { useApiClient } from './use_api_client';
|
|
4
3
|
export const useSuspenseGet = (args) => {
|
|
5
4
|
const { data, ...query } = useSuspenseQuery({
|
|
6
5
|
queryKey: getRequestQueryKey(args),
|
|
@@ -8,7 +7,7 @@ export const useSuspenseGet = (args) => {
|
|
|
8
7
|
return { ...data, ...query };
|
|
9
8
|
};
|
|
10
9
|
export const useSuspensePaginator = (args, opts) => {
|
|
11
|
-
const
|
|
10
|
+
const apiClient = useApiClient();
|
|
12
11
|
const query = useSuspenseInfiniteQuery({
|
|
13
12
|
queryKey: getRequestQueryKey(args),
|
|
14
13
|
queryFn: ({ pageParam }) => {
|
|
@@ -17,7 +16,7 @@ export const useSuspensePaginator = (args, opts) => {
|
|
|
17
16
|
const where = { ...argsWhere, ...pageParmWhere };
|
|
18
17
|
const offset = pageParam?.offset || args.data.offset;
|
|
19
18
|
const data = { ...args.data, where, offset };
|
|
20
|
-
return
|
|
19
|
+
return apiClient.chat.get({
|
|
21
20
|
url: args.url,
|
|
22
21
|
data,
|
|
23
22
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_suspense_api.js","sourceRoot":"","sources":["../../src/hooks/use_suspense_api.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"use_suspense_api.js","sourceRoot":"","sources":["../../src/hooks/use_suspense_api.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE/C,MAAM,CAAC,MAAM,cAAc,GAAG,CAA8C,IAAgB,EAAE,EAAE;IAG9F,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,gBAAgB,CAAqB;QAC9D,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC;KACnC,CAAC,CAAA;IAEF,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,CAAA;AAC9B,CAAC,CAAA;AAYD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,IAAgB,EAChB,IAA+B,EAC/B,EAAE;IACF,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,KAAK,GAAG,wBAAwB,CAMpC;QACA,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC;QAClC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;YACzB,MAAM,aAAa,GAAG,SAAS,EAAE,KAAK,IAAI,EAAE,CAAA;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;YACvC,MAAM,KAAK,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,aAAa,EAAE,CAAA;YAEhD,MAAM,MAAM,GAAG,SAAS,EAAE,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;YACpD,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;YAE5C,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;gBACxB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,IAAI;aACL,CAAC,CAAA;QACJ,CAAC;QACD,gBAAgB,EAAE,EAA0B;QAC5C,gBAAgB,EAAE,QAAQ,CAAC,EAAE;YAC3B,MAAM,IAAI,GAAa,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAA;YAChD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;YAE7B,IAAI,IAAI;gBAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAA;YAC3C,IAAI,MAAM;gBAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAA;YAE7C,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;KAChB,CAAC,CAAA;IAEF,MAAM,IAAI,GAAQ,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IAEpE,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAA;AAC3B,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAgB,EAAmB,EAAE,CAAC;IACvE,IAAI,CAAC,GAAG;IACR,IAAI,CAAC,IAAI;IACT,IAAI,CAAC,OAAO;CACb,CAAA","sourcesContent":["import {\n AnyUseSuspenseInfiniteQueryOptions,\n InfiniteData,\n useSuspenseInfiniteQuery,\n useSuspenseQuery,\n} from '@tanstack/react-query'\nimport { ApiCollection, ApiResource, ResourceObject } from '../types'\nimport { GetRequest, RequestData } from '../utils/client/types'\nimport { useApiClient } from './use_api_client'\n\nexport const useSuspenseGet = <T extends ResourceObject | ResourceObject[]>(args: GetRequest) => {\n type Resource = ApiResource<T>\n\n const { data, ...query } = useSuspenseQuery<Resource, Response>({\n queryKey: getRequestQueryKey(args),\n })\n\n return { ...data, ...query }\n}\n\ntype NextMeta = Partial<{\n offset: string\n idLt: string\n}>\n\nexport type SuspensePaginatorOptions = Omit<\n AnyUseSuspenseInfiniteQueryOptions,\n 'getNextPageParam' | 'initialPageParam' | 'queryFn' | 'queryKey'\n>\n\nexport const useSuspensePaginator = <T extends ResourceObject>(\n args: GetRequest,\n opts?: SuspensePaginatorOptions\n) => {\n const apiClient = useApiClient()\n const query = useSuspenseInfiniteQuery<\n ApiCollection<T>,\n Response,\n InfiniteData<ApiCollection<T>>,\n any,\n Partial<RequestData> | undefined\n >({\n queryKey: getRequestQueryKey(args),\n queryFn: ({ pageParam }) => {\n const pageParmWhere = pageParam?.where || {}\n const argsWhere = args.data.where || {}\n const where = { ...argsWhere, ...pageParmWhere }\n\n const offset = pageParam?.offset || args.data.offset\n const data = { ...args.data, where, offset }\n\n return apiClient.chat.get({\n url: args.url,\n data,\n })\n },\n initialPageParam: {} as Partial<RequestData>,\n getNextPageParam: lastPage => {\n const next: NextMeta = lastPage.meta?.next || {}\n const { offset, idLt } = next\n\n if (idLt) return { where: { id_lt: idLt } }\n if (offset) return { offset: Number(offset) }\n\n return undefined\n },\n ...(opts || {}),\n })\n\n const data: T[] = query.data?.pages.flatMap(page => page.data) || []\n\n return { ...query, data }\n}\n\nexport type RequestQueryKey = [GetRequest['url'], GetRequest['data'], GetRequest['headers']]\nexport const getRequestQueryKey = (args: GetRequest): RequestQueryKey => [\n args.url,\n args.data,\n args.headers,\n]\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { HeaderButtonProps } from '@react-navigation/elements';
|
|
3
|
+
import { TextProps, TextStyle } from 'react-native';
|
|
4
|
+
type HeaderRightButtonProps = HeaderButtonProps & {
|
|
5
|
+
children: TextProps['children'];
|
|
6
|
+
textStyle?: TextStyle;
|
|
7
|
+
};
|
|
8
|
+
export declare const HeaderRightButton: (props: HeaderRightButtonProps) => React.JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../src/navigation/header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAgB,iBAAiB,EAAQ,MAAM,4BAA4B,CAAA;AAClF,OAAO,EAAc,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE/D,KAAK,sBAAsB,GAAG,iBAAiB,GAAG;IAChD,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAA;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,iBAAiB,UAAW,sBAAsB,sBAc9D,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { HeaderButton, Text } from '@react-navigation/elements';
|
|
3
|
+
import { StyleSheet } from 'react-native';
|
|
4
|
+
export const HeaderRightButton = (props) => {
|
|
5
|
+
const styles = StyleSheet.create({
|
|
6
|
+
text: {
|
|
7
|
+
fontSize: 16,
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
return (<HeaderButton {...props} style={props.style}>
|
|
11
|
+
<Text style={[styles.text, props.textStyle]} numberOfLines={1}>
|
|
12
|
+
{props.children}
|
|
13
|
+
</Text>
|
|
14
|
+
</HeaderButton>);
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/navigation/header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,YAAY,EAAqB,IAAI,EAAE,MAAM,4BAA4B,CAAA;AAClF,OAAO,EAAE,UAAU,EAAwB,MAAM,cAAc,CAAA;AAO/D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAA6B,EAAE,EAAE;IACjE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAC/B,IAAI,EAAE;YACJ,QAAQ,EAAE,EAAE;SACb;KACF,CAAC,CAAA;IAEF,OAAO,CACL,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAC1C;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAC5D;QAAA,CAAC,KAAK,CAAC,QAAQ,CACjB;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,YAAY,CAAC,CAChB,CAAA;AACH,CAAC,CAAA","sourcesContent":["import React from 'react'\nimport { HeaderButton, HeaderButtonProps, Text } from '@react-navigation/elements'\nimport { StyleSheet, TextProps, TextStyle } from 'react-native'\n\ntype HeaderRightButtonProps = HeaderButtonProps & {\n children: TextProps['children']\n textStyle?: TextStyle\n}\n\nexport const HeaderRightButton = (props: HeaderRightButtonProps) => {\n const styles = StyleSheet.create({\n text: {\n fontSize: 16,\n },\n })\n\n return (\n <HeaderButton {...props} style={props.style}>\n <Text style={[styles.text, props.textStyle]} numberOfLines={1}>\n {props.children}\n </Text>\n </HeaderButton>\n )\n}\n"]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
import { StaticParamList } from '@react-navigation/native';
|
|
3
2
|
import { NativeStackHeaderLeftProps, NativeStackHeaderRightProps } from '@react-navigation/native-stack';
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import { ConversationsScreen } from '../screens/conversations_screen';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { ConversationDetailsScreen } from '../screens/conversation_details_screen';
|
|
7
5
|
import { ConversationScreen } from '../screens/conversation_screen';
|
|
6
|
+
import { ConversationsScreen } from '../screens/conversations_screen';
|
|
8
7
|
import { MessageActionsScreen } from '../screens/message_actions_screen';
|
|
8
|
+
import { NotFound } from '../screens/not_found';
|
|
9
9
|
import { ReactionsScreen } from '../screens/reactions_screen';
|
|
10
|
+
import { ScreenLayout } from './screenLayout';
|
|
10
11
|
export declare const ChatStack: import("@react-navigation/native").TypedNavigator<{
|
|
11
12
|
ParamList: import("@react-navigation/native").ParamListBase;
|
|
12
13
|
NavigatorID: undefined;
|
|
@@ -38,6 +39,18 @@ export declare const ChatStack: import("@react-navigation/native").TypedNavigato
|
|
|
38
39
|
readonly Conversation: {
|
|
39
40
|
readonly screen: typeof ConversationScreen;
|
|
40
41
|
};
|
|
42
|
+
readonly ConversationDetails: {
|
|
43
|
+
readonly screen: typeof ConversationDetailsScreen;
|
|
44
|
+
readonly options: ({ navigation }: {
|
|
45
|
+
route: import("@react-navigation/native").RouteProp<import("@react-navigation/native").ParamListBase, string>;
|
|
46
|
+
navigation: import("@react-navigation/native-stack").NativeStackNavigationProp<import("@react-navigation/native").ParamListBase, string, undefined>;
|
|
47
|
+
theme: ReactNavigation.Theme;
|
|
48
|
+
}) => {
|
|
49
|
+
presentation: "modal";
|
|
50
|
+
title: string;
|
|
51
|
+
headerRight: (props: NativeStackHeaderRightProps) => React.JSX.Element;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
41
54
|
readonly MessageActions: {
|
|
42
55
|
readonly screen: typeof MessageActionsScreen;
|
|
43
56
|
readonly options: import("@react-navigation/native-stack").NativeStackNavigationOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAEL,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAA;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AACrE,OAAO,EACL,oBAAoB,EAErB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAA0B,MAAM,6BAA6B,CAAA;AAErF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,eAAO,MAAM,SAAS;;;;;;;;;uOAVG,mBAAmB;;;;;;;;;;;;uBA6E6rf,gBAAiB,KAAK;;;4CAzD3tf,0BAA0B;qCAKjC,2BAA2B;;;;;;;;;;;uBAoDirf,gBAAiB,KAAK;;;;qCAnCluf,2BAA2B;;;;;;;;;;;;;;;;;;;;;EA0BtD,CAAA;AAEF,KAAK,kBAAkB,GAAG,eAAe,CAAC,OAAO,SAAS,CAAC,CAAA;AAE3D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,eAAe,CAAC;QACxB,UAAU,aAAc,SAAQ,kBAAkB;SAAG;KACtD;CACF"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { createNativeStackNavigator, } from '@react-navigation/native-stack';
|
|
3
|
-
import { NotFound } from '../screens/not_found';
|
|
4
|
-
import { ScreenLayout } from './screenLayout';
|
|
5
|
-
import { ConversationsScreen } from '../screens/conversations_screen';
|
|
6
|
-
import { ConversationScreen } from '../screens/conversation_screen';
|
|
7
1
|
import { HeaderBackButton, HeaderButton } from '@react-navigation/elements';
|
|
2
|
+
import { createNativeStackNavigator, } from '@react-navigation/native-stack';
|
|
3
|
+
import React from 'react';
|
|
8
4
|
import { Icon } from '../components';
|
|
5
|
+
import { ConversationDetailsScreen } from '../screens/conversation_details_screen';
|
|
6
|
+
import { ConversationScreen } from '../screens/conversation_screen';
|
|
7
|
+
import { ConversationsScreen } from '../screens/conversations_screen';
|
|
9
8
|
import { MessageActionsScreen, MessageActionsScreenOptions, } from '../screens/message_actions_screen';
|
|
9
|
+
import { NotFound } from '../screens/not_found';
|
|
10
10
|
import { ReactionsScreen, ReactionsScreenOptions } from '../screens/reactions_screen';
|
|
11
|
+
import { HeaderRightButton } from './header';
|
|
12
|
+
import { ScreenLayout } from './screenLayout';
|
|
11
13
|
export const ChatStack = createNativeStackNavigator({
|
|
12
14
|
screenOptions: {
|
|
13
15
|
headerBackButtonDisplayMode: 'minimal',
|
|
@@ -27,6 +29,16 @@ export const ChatStack = createNativeStackNavigator({
|
|
|
27
29
|
Conversation: {
|
|
28
30
|
screen: ConversationScreen,
|
|
29
31
|
},
|
|
32
|
+
ConversationDetails: {
|
|
33
|
+
screen: ConversationDetailsScreen,
|
|
34
|
+
options: ({ navigation }) => ({
|
|
35
|
+
presentation: 'modal',
|
|
36
|
+
title: 'Conversation details',
|
|
37
|
+
headerRight: (props) => (<HeaderRightButton {...props} onPress={navigation.goBack}>
|
|
38
|
+
Done
|
|
39
|
+
</HeaderRightButton>),
|
|
40
|
+
}),
|
|
41
|
+
},
|
|
30
42
|
MessageActions: {
|
|
31
43
|
screen: MessageActionsScreen,
|
|
32
44
|
// Something about sheetAllowedDetents declared inline breaks TS
|