@planningcenter/chat-react-native 3.39.0-rc.0 → 3.39.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/hooks/direct_messages/use_direct_message_affiliations.d.ts +5 -0
- package/build/hooks/direct_messages/use_direct_message_affiliations.d.ts.map +1 -0
- package/build/hooks/direct_messages/use_direct_message_affiliations.js +20 -0
- package/build/hooks/direct_messages/use_direct_message_affiliations.js.map +1 -0
- package/build/hooks/direct_messages/use_direct_message_candidates.d.ts +4 -0
- package/build/hooks/direct_messages/use_direct_message_candidates.d.ts.map +1 -0
- package/build/hooks/direct_messages/use_direct_message_candidates.js +27 -0
- package/build/hooks/direct_messages/use_direct_message_candidates.js.map +1 -0
- package/build/hooks/direct_messages/use_direct_message_conversation_validate.d.ts +11 -0
- package/build/hooks/direct_messages/use_direct_message_conversation_validate.d.ts.map +1 -0
- package/build/hooks/direct_messages/use_direct_message_conversation_validate.js +25 -0
- package/build/hooks/direct_messages/use_direct_message_conversation_validate.js.map +1 -0
- package/build/hooks/direct_messages/use_find_or_create_direct_message_conversation.d.ts +13 -0
- package/build/hooks/direct_messages/use_find_or_create_direct_message_conversation.d.ts.map +1 -0
- package/build/hooks/direct_messages/use_find_or_create_direct_message_conversation.js +51 -0
- package/build/hooks/direct_messages/use_find_or_create_direct_message_conversation.js.map +1 -0
- package/build/types/resources/direct_message_affiliations.d.ts +8 -0
- package/build/types/resources/direct_message_affiliations.d.ts.map +1 -0
- package/build/types/resources/direct_message_affiliations.js +2 -0
- package/build/types/resources/direct_message_affiliations.js.map +1 -0
- package/build/types/resources/direct_message_candidate.d.ts +12 -0
- package/build/types/resources/direct_message_candidate.d.ts.map +1 -0
- package/build/types/resources/direct_message_candidate.js +2 -0
- package/build/types/resources/direct_message_candidate.js.map +1 -0
- package/build/types/resources/index.d.ts +2 -0
- package/build/types/resources/index.d.ts.map +1 -1
- package/build/types/resources/index.js +2 -0
- package/build/types/resources/index.js.map +1 -1
- package/package.json +2 -2
- package/src/hooks/direct_messages/use_direct_message_affiliations.ts +39 -0
- package/src/hooks/direct_messages/use_direct_message_candidates.ts +30 -0
- package/src/hooks/direct_messages/use_direct_message_conversation_validate.ts +35 -0
- package/src/hooks/direct_messages/use_find_or_create_direct_message_conversation.ts +66 -0
- package/src/types/resources/direct_message_affiliations.ts +8 -0
- package/src/types/resources/direct_message_candidate.ts +12 -0
- package/src/types/resources/index.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_direct_message_affiliations.d.ts","sourceRoot":"","sources":["../../../src/hooks/direct_messages/use_direct_message_affiliations.ts"],"names":[],"mappings":"AAMA,wBAAgB,4BAA4B;;;EAgC3C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { useApiClient } from '../use_api_client';
|
|
4
|
+
export function useDirectMessageAffiliations() {
|
|
5
|
+
const apiClient = useApiClient();
|
|
6
|
+
const { data } = useQuery({
|
|
7
|
+
queryKey: ['chat', '/me/direct_message_affiliations'],
|
|
8
|
+
queryFn: () => apiClient.chat.get({
|
|
9
|
+
url: '/me/direct_message_affiliations',
|
|
10
|
+
data: {
|
|
11
|
+
fields: { DirectMessageAffiliations: ['groups', 'teams'] },
|
|
12
|
+
},
|
|
13
|
+
}),
|
|
14
|
+
staleTime: 5 * 60 * 1000,
|
|
15
|
+
});
|
|
16
|
+
const groups = useMemo(() => new Map(Object.entries(data?.data?.groups ?? {}).map(([id, name]) => [+id, name])), [data]);
|
|
17
|
+
const teams = useMemo(() => new Map(Object.entries(data?.data?.teams ?? {}).map(([id, name]) => [+id, name])), [data]);
|
|
18
|
+
return { groups, teams };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=use_direct_message_affiliations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_direct_message_affiliations.js","sourceRoot":"","sources":["../../../src/hooks/direct_messages/use_direct_message_affiliations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAG/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,UAAU,4BAA4B;IAC1C,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAEhC,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QACxB,QAAQ,EAAE,CAAC,MAAM,EAAE,iCAAiC,CAAC;QACrD,OAAO,EAAE,GAAG,EAAE,CACZ,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;YACjB,GAAG,EAAE,iCAAiC;YACtC,IAAI,EAAE;gBACJ,MAAM,EAAE,EAAE,yBAAyB,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE;aAC3D;SACF,CAA4D;QAC/D,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;KACzB,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CACH,IAAI,GAAG,CACL,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAC1E,EACH,CAAC,IAAI,CAAC,CACP,CAAA;IAED,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CACH,IAAI,GAAG,CACL,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CACzE,EACH,CAAC,IAAI,CAAC,CACP,CAAA;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AAC1B,CAAC","sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport { useMemo } from 'react'\nimport { ApiResource } from '../../types'\nimport { DirectMessageAffiliationsResource } from '../../types/resources/direct_message_affiliations'\nimport { useApiClient } from '../use_api_client'\n\nexport function useDirectMessageAffiliations() {\n const apiClient = useApiClient()\n\n const { data } = useQuery({\n queryKey: ['chat', '/me/direct_message_affiliations'],\n queryFn: () =>\n apiClient.chat.get({\n url: '/me/direct_message_affiliations',\n data: {\n fields: { DirectMessageAffiliations: ['groups', 'teams'] },\n },\n }) as Promise<ApiResource<DirectMessageAffiliationsResource>>,\n staleTime: 5 * 60 * 1000,\n })\n\n const groups = useMemo(\n () =>\n new Map<number, string>(\n Object.entries(data?.data?.groups ?? {}).map(([id, name]) => [+id, name])\n ),\n [data]\n )\n\n const teams = useMemo(\n () =>\n new Map<number, string>(\n Object.entries(data?.data?.teams ?? {}).map(([id, name]) => [+id, name])\n ),\n [data]\n )\n\n return { groups, teams }\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ApiCollection } from '../../types';
|
|
2
|
+
import { DirectMessageCandidateResource } from '../../types/resources/direct_message_candidate';
|
|
3
|
+
export declare function useDirectMessageCandidates(term: string): import("@tanstack/react-query").UseQueryResult<ApiCollection<DirectMessageCandidateResource>, Error>;
|
|
4
|
+
//# sourceMappingURL=use_direct_message_candidates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_direct_message_candidates.d.ts","sourceRoot":"","sources":["../../../src/hooks/direct_messages/use_direct_message_candidates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,8BAA8B,EAAE,MAAM,gDAAgD,CAAA;AAG/F,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,wGAwBtD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { useApiClient } from '../use_api_client';
|
|
3
|
+
export function useDirectMessageCandidates(term) {
|
|
4
|
+
const apiClient = useApiClient();
|
|
5
|
+
return useQuery({
|
|
6
|
+
queryKey: ['chat', '/me/direct_message_candidates', term],
|
|
7
|
+
queryFn: () => apiClient.chat.get({
|
|
8
|
+
url: '/me/direct_message_candidates',
|
|
9
|
+
data: {
|
|
10
|
+
q: term,
|
|
11
|
+
fields: {
|
|
12
|
+
DirectMessageCandidate: [
|
|
13
|
+
'name',
|
|
14
|
+
'avatar',
|
|
15
|
+
'groups',
|
|
16
|
+
'teams',
|
|
17
|
+
'under_18',
|
|
18
|
+
'direct_messages_disabled',
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
}),
|
|
23
|
+
enabled: term.length >= 1,
|
|
24
|
+
staleTime: 1000 * 60,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=use_direct_message_candidates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_direct_message_candidates.js","sourceRoot":"","sources":["../../../src/hooks/direct_messages/use_direct_message_candidates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAGhD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,MAAM,EAAE,+BAA+B,EAAE,IAAI,CAAC;QACzD,OAAO,EAAE,GAAG,EAAE,CACZ,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;YACjB,GAAG,EAAE,+BAA+B;YACpC,IAAI,EAAE;gBACJ,CAAC,EAAE,IAAI;gBACP,MAAM,EAAE;oBACN,sBAAsB,EAAE;wBACtB,MAAM;wBACN,QAAQ;wBACR,QAAQ;wBACR,OAAO;wBACP,UAAU;wBACV,0BAA0B;qBAC3B;iBACF;aACF;SACF,CAA2D;QAC9D,OAAO,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;QACzB,SAAS,EAAE,IAAI,GAAG,EAAE;KACrB,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport { ApiCollection } from '../../types'\nimport { DirectMessageCandidateResource } from '../../types/resources/direct_message_candidate'\nimport { useApiClient } from '../use_api_client'\n\nexport function useDirectMessageCandidates(term: string) {\n const apiClient = useApiClient()\n return useQuery({\n queryKey: ['chat', '/me/direct_message_candidates', term],\n queryFn: () =>\n apiClient.chat.get({\n url: '/me/direct_message_candidates',\n data: {\n q: term,\n fields: {\n DirectMessageCandidate: [\n 'name',\n 'avatar',\n 'groups',\n 'teams',\n 'under_18',\n 'direct_messages_disabled',\n ],\n },\n },\n }) as Promise<ApiCollection<DirectMessageCandidateResource>>,\n enabled: term.length >= 1,\n staleTime: 1000 * 60,\n })\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ConversationWarning } from '../../types';
|
|
2
|
+
interface Props {
|
|
3
|
+
recipientIds: string[];
|
|
4
|
+
enabled?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function useDirectMessageConversationValidate({ recipientIds, enabled }: Props): {
|
|
7
|
+
warnings: ConversationWarning[];
|
|
8
|
+
validationPending: boolean;
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=use_direct_message_conversation_validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_direct_message_conversation_validate.d.ts","sourceRoot":"","sources":["../../../src/hooks/direct_messages/use_direct_message_conversation_validate.ts"],"names":[],"mappings":"AACA,OAAO,EAA6C,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAG5F,UAAU,KAAK;IACb,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,oCAAoC,CAAC,EAAE,YAAY,EAAE,OAAc,EAAE,EAAE,KAAK;;;EAyB3F"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { useApiClient } from '../use_api_client';
|
|
3
|
+
export function useDirectMessageConversationValidate({ recipientIds, enabled = true }) {
|
|
4
|
+
const apiClient = useApiClient();
|
|
5
|
+
const { data, isLoading } = useQuery({
|
|
6
|
+
queryKey: ['chat', '/me/conversation_validate', { recipient_ids: recipientIds }],
|
|
7
|
+
queryFn: () => apiClient.chat.post({
|
|
8
|
+
url: '/me/conversation_validate',
|
|
9
|
+
data: {
|
|
10
|
+
data: {
|
|
11
|
+
type: 'ConversationValidate',
|
|
12
|
+
attributes: { recipient_ids: recipientIds },
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
}),
|
|
16
|
+
enabled: enabled && recipientIds.length > 0,
|
|
17
|
+
retry: false,
|
|
18
|
+
});
|
|
19
|
+
const warnings = data?.data.warnings ?? [];
|
|
20
|
+
return {
|
|
21
|
+
warnings,
|
|
22
|
+
validationPending: enabled && recipientIds.length > 0 && isLoading,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=use_direct_message_conversation_validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_direct_message_conversation_validate.js","sourceRoot":"","sources":["../../../src/hooks/direct_messages/use_direct_message_conversation_validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAOhD,MAAM,UAAU,oCAAoC,CAAC,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI,EAAS;IAC1F,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,aAAa,EAAE,YAAY,EAAE,CAAC;QAChF,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,EAAE,aAAa,EAAE,YAAY,EAAE;iBAC5C;aACF;SACF,CAAC;QACJ,OAAO,EAAE,OAAO,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;QAC3C,KAAK,EAAE,KAAK;KACb,CAAC,CAAA;IAEF,MAAM,QAAQ,GAA0B,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;IAEjE,OAAO;QACL,QAAQ;QACR,iBAAiB,EAAE,OAAO,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS;KACnE,CAAA;AACH,CAAC","sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport { ApiResource, ConversationValidateResource, ConversationWarning } from '../../types'\nimport { useApiClient } from '../use_api_client'\n\ninterface Props {\n recipientIds: string[]\n enabled?: boolean\n}\n\nexport function useDirectMessageConversationValidate({ recipientIds, enabled = true }: Props) {\n const apiClient = useApiClient()\n\n const { data, isLoading } = useQuery({\n queryKey: ['chat', '/me/conversation_validate', { recipient_ids: recipientIds }],\n queryFn: () =>\n apiClient.chat.post<ApiResource<ConversationValidateResource>>({\n url: '/me/conversation_validate',\n data: {\n data: {\n type: 'ConversationValidate',\n attributes: { recipient_ids: recipientIds },\n },\n },\n }),\n enabled: enabled && recipientIds.length > 0,\n retry: false,\n })\n\n const warnings: ConversationWarning[] = data?.data.warnings ?? []\n\n return {\n warnings,\n validationPending: enabled && recipientIds.length > 0 && isLoading,\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ConversationResource } from '../../types';
|
|
2
|
+
interface Props {
|
|
3
|
+
recipientIds: string[];
|
|
4
|
+
onSuccess: (conversationId: ConversationResource['id']) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function useFindOrCreateDirectMessageConversation({ recipientIds, onSuccess }: Props): {
|
|
7
|
+
findOrCreateConversation: (participantIds: string[]) => Promise<void>;
|
|
8
|
+
directMessageExists: boolean;
|
|
9
|
+
isFinding: boolean;
|
|
10
|
+
isError: boolean;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=use_find_or_create_direct_message_conversation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_find_or_create_direct_message_conversation.d.ts","sourceRoot":"","sources":["../../../src/hooks/direct_messages/use_find_or_create_direct_message_conversation.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8B,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAwB9E,UAAU,KAAK;IACb,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA;CAChE;AAED,wBAAgB,wCAAwC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,KAAK;+CAchE,MAAM,EAAE;;;;EAoBlC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { useState, useCallback } from 'react';
|
|
3
|
+
import { useApiClient } from '../use_api_client';
|
|
4
|
+
const findDirectMessageConversation = (apiClient, participantIds) => apiClient.chat.get({
|
|
5
|
+
url: '/me/conversations',
|
|
6
|
+
data: {
|
|
7
|
+
fields: { Conversation: ['title'] },
|
|
8
|
+
filter: 'with_exact_direct_message_participants',
|
|
9
|
+
participant_ids: participantIds.join(','),
|
|
10
|
+
},
|
|
11
|
+
});
|
|
12
|
+
const createDirectMessageConversation = (apiClient, ids) => apiClient.chat.post({
|
|
13
|
+
url: '/me/direct_messages',
|
|
14
|
+
data: {
|
|
15
|
+
data: {
|
|
16
|
+
type: 'DirectMessage',
|
|
17
|
+
attributes: { recipients: ids },
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
export function useFindOrCreateDirectMessageConversation({ recipientIds, onSuccess }) {
|
|
22
|
+
const apiClient = useApiClient();
|
|
23
|
+
const [isFinding, setIsFinding] = useState(false);
|
|
24
|
+
const [isError, setIsError] = useState(false);
|
|
25
|
+
const { data } = useQuery({
|
|
26
|
+
queryKey: ['chat', '/me/conversations', 'with_exact_direct_message_participants', recipientIds],
|
|
27
|
+
queryFn: () => findDirectMessageConversation(apiClient, recipientIds),
|
|
28
|
+
enabled: recipientIds.length > 0,
|
|
29
|
+
});
|
|
30
|
+
const directMessageExists = (data?.data.length ?? 0) > 0;
|
|
31
|
+
const findOrCreateConversation = useCallback(async (participantIds) => {
|
|
32
|
+
setIsFinding(true);
|
|
33
|
+
setIsError(false);
|
|
34
|
+
try {
|
|
35
|
+
const findResponse = await findDirectMessageConversation(apiClient, participantIds);
|
|
36
|
+
if (findResponse.data.length > 0) {
|
|
37
|
+
onSuccess(findResponse.data[0].id);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
const createResponse = await createDirectMessageConversation(apiClient, participantIds);
|
|
41
|
+
onSuccess(createResponse.data.id);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
setIsError(true);
|
|
46
|
+
setIsFinding(false);
|
|
47
|
+
}
|
|
48
|
+
}, [apiClient, onSuccess]);
|
|
49
|
+
return { findOrCreateConversation, directMessageExists, isFinding, isError };
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=use_find_or_create_direct_message_conversation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_find_or_create_direct_message_conversation.js","sourceRoot":"","sources":["../../../src/hooks/direct_messages/use_find_or_create_direct_message_conversation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAE7C,OAAO,EAAa,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE3D,MAAM,6BAA6B,GAAG,CAAC,SAAoB,EAAE,cAAwB,EAAE,EAAE,CACvF,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;IACjB,GAAG,EAAE,mBAAmB;IACxB,IAAI,EAAE;QACJ,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE;QACnC,MAAM,EAAE,wCAAwC;QAChD,eAAe,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;KAC1C;CACF,CAAiD,CAAA;AAEpD,MAAM,+BAA+B,GAAG,CAAC,SAAoB,EAAE,GAAa,EAAE,EAAE,CAC9E,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAClB,GAAG,EAAE,qBAAqB;IAC1B,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,IAAI,EAAE,eAAe;YACrB,UAAU,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;SAChC;KACF;CACF,CAA+C,CAAA;AAOlD,MAAM,UAAU,wCAAwC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAS;IACzF,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7C,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QACxB,QAAQ,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,wCAAwC,EAAE,YAAY,CAAC;QAC/F,OAAO,EAAE,GAAG,EAAE,CAAC,6BAA6B,CAAC,SAAS,EAAE,YAAY,CAAC;QACrE,OAAO,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC;KACjC,CAAC,CAAA;IAEF,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;IAExD,MAAM,wBAAwB,GAAG,WAAW,CAC1C,KAAK,EAAE,cAAwB,EAAE,EAAE;QACjC,YAAY,CAAC,IAAI,CAAC,CAAA;QAClB,UAAU,CAAC,KAAK,CAAC,CAAA;QACjB,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,6BAA6B,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;YACnF,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YACpC,CAAC;iBAAM,CAAC;gBACN,MAAM,cAAc,GAAG,MAAM,+BAA+B,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;gBACvF,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,CAAC,IAAI,CAAC,CAAA;YAChB,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;IACH,CAAC,EACD,CAAC,SAAS,EAAE,SAAS,CAAC,CACvB,CAAA;IAED,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;AAC9E,CAAC","sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport { useState, useCallback } from 'react'\nimport { ApiCollection, ApiResource, ConversationResource } from '../../types'\nimport { ApiClient, useApiClient } from '../use_api_client'\n\nconst findDirectMessageConversation = (apiClient: ApiClient, participantIds: string[]) =>\n apiClient.chat.get({\n url: '/me/conversations',\n data: {\n fields: { Conversation: ['title'] },\n filter: 'with_exact_direct_message_participants',\n participant_ids: participantIds.join(','),\n },\n }) as Promise<ApiCollection<ConversationResource>>\n\nconst createDirectMessageConversation = (apiClient: ApiClient, ids: string[]) =>\n apiClient.chat.post({\n url: '/me/direct_messages',\n data: {\n data: {\n type: 'DirectMessage',\n attributes: { recipients: ids },\n },\n },\n }) as Promise<ApiResource<ConversationResource>>\n\ninterface Props {\n recipientIds: string[]\n onSuccess: (conversationId: ConversationResource['id']) => void\n}\n\nexport function useFindOrCreateDirectMessageConversation({ recipientIds, onSuccess }: Props) {\n const apiClient = useApiClient()\n const [isFinding, setIsFinding] = useState(false)\n const [isError, setIsError] = useState(false)\n\n const { data } = useQuery({\n queryKey: ['chat', '/me/conversations', 'with_exact_direct_message_participants', recipientIds],\n queryFn: () => findDirectMessageConversation(apiClient, recipientIds),\n enabled: recipientIds.length > 0,\n })\n\n const directMessageExists = (data?.data.length ?? 0) > 0\n\n const findOrCreateConversation = useCallback(\n async (participantIds: string[]) => {\n setIsFinding(true)\n setIsError(false)\n try {\n const findResponse = await findDirectMessageConversation(apiClient, participantIds)\n if (findResponse.data.length > 0) {\n onSuccess(findResponse.data[0].id)\n } else {\n const createResponse = await createDirectMessageConversation(apiClient, participantIds)\n onSuccess(createResponse.data.id)\n }\n } catch {\n setIsError(true)\n setIsFinding(false)\n }\n },\n [apiClient, onSuccess]\n )\n\n return { findOrCreateConversation, directMessageExists, isFinding, isError }\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ResourceObject } from '../api_primitives';
|
|
2
|
+
export interface DirectMessageAffiliationsResource extends ResourceObject {
|
|
3
|
+
type: 'DirectMessageAffiliations';
|
|
4
|
+
id: string;
|
|
5
|
+
groups: Record<string, string>;
|
|
6
|
+
teams: Record<string, string>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=direct_message_affiliations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"direct_message_affiliations.d.ts","sourceRoot":"","sources":["../../../src/types/resources/direct_message_affiliations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,MAAM,WAAW,iCAAkC,SAAQ,cAAc;IACvE,IAAI,EAAE,2BAA2B,CAAA;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"direct_message_affiliations.js","sourceRoot":"","sources":["../../../src/types/resources/direct_message_affiliations.ts"],"names":[],"mappings":"","sourcesContent":["import { ResourceObject } from '../api_primitives'\n\nexport interface DirectMessageAffiliationsResource extends ResourceObject {\n type: 'DirectMessageAffiliations'\n id: string\n groups: Record<string, string>\n teams: Record<string, string>\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ResourceObject } from '../api_primitives';
|
|
2
|
+
export interface DirectMessageCandidateResource extends ResourceObject {
|
|
3
|
+
type: 'DirectMessageCandidate';
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
avatar: string;
|
|
7
|
+
groups: number[];
|
|
8
|
+
teams: number[];
|
|
9
|
+
under_18: boolean;
|
|
10
|
+
directMessagesDisabled: boolean;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=direct_message_candidate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"direct_message_candidate.d.ts","sourceRoot":"","sources":["../../../src/types/resources/direct_message_candidate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,MAAM,WAAW,8BAA+B,SAAQ,cAAc;IACpE,IAAI,EAAE,wBAAwB,CAAA;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,EAAE,OAAO,CAAA;IACjB,sBAAsB,EAAE,OAAO,CAAA;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"direct_message_candidate.js","sourceRoot":"","sources":["../../../src/types/resources/direct_message_candidate.ts"],"names":[],"mappings":"","sourcesContent":["import { ResourceObject } from '../api_primitives'\n\nexport interface DirectMessageCandidateResource extends ResourceObject {\n type: 'DirectMessageCandidate'\n id: string\n name: string\n avatar: string\n groups: number[]\n teams: number[]\n under_18: boolean\n directMessagesDisabled: boolean\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/resources/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,2BAA2B,CAAA;AACzC,cAAc,yBAAyB,CAAA;AACvC,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/resources/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,2BAA2B,CAAA;AACzC,cAAc,yBAAyB,CAAA;AACvC,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/resources/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,2BAA2B,CAAA;AACzC,cAAc,yBAAyB,CAAA;AACvC,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA","sourcesContent":["export * from './analytics_metadata'\nexport * from './conversation'\nexport * from './conversation_membership'\nexport * from './conversation_validate'\nexport * from './member'\nexport * from './message'\nexport * from './oauth_token'\nexport * from './person'\nexport * from './groups'\nexport * from './app_grant'\nexport * from './services'\nexport * from './organization'\nexport * from './group_membership'\nexport * from './group_resource'\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/resources/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,2BAA2B,CAAA;AACzC,cAAc,yBAAyB,CAAA;AACvC,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA","sourcesContent":["export * from './analytics_metadata'\nexport * from './direct_message_affiliations'\nexport * from './direct_message_candidate'\nexport * from './conversation'\nexport * from './conversation_membership'\nexport * from './conversation_validate'\nexport * from './member'\nexport * from './message'\nexport * from './oauth_token'\nexport * from './person'\nexport * from './groups'\nexport * from './app_grant'\nexport * from './services'\nexport * from './organization'\nexport * from './group_membership'\nexport * from './group_resource'\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@planningcenter/chat-react-native",
|
|
3
|
-
"version": "3.39.0-rc.
|
|
3
|
+
"version": "3.39.0-rc.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"react-native": "./src/index.tsx",
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
"react-native-url-polyfill": "^2.0.0",
|
|
73
73
|
"typescript": "~5.9.2"
|
|
74
74
|
},
|
|
75
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "03a375a045ff2ae572627318c41bfc6cdcf1bc74"
|
|
76
76
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query'
|
|
2
|
+
import { useMemo } from 'react'
|
|
3
|
+
import { ApiResource } from '../../types'
|
|
4
|
+
import { DirectMessageAffiliationsResource } from '../../types/resources/direct_message_affiliations'
|
|
5
|
+
import { useApiClient } from '../use_api_client'
|
|
6
|
+
|
|
7
|
+
export function useDirectMessageAffiliations() {
|
|
8
|
+
const apiClient = useApiClient()
|
|
9
|
+
|
|
10
|
+
const { data } = useQuery({
|
|
11
|
+
queryKey: ['chat', '/me/direct_message_affiliations'],
|
|
12
|
+
queryFn: () =>
|
|
13
|
+
apiClient.chat.get({
|
|
14
|
+
url: '/me/direct_message_affiliations',
|
|
15
|
+
data: {
|
|
16
|
+
fields: { DirectMessageAffiliations: ['groups', 'teams'] },
|
|
17
|
+
},
|
|
18
|
+
}) as Promise<ApiResource<DirectMessageAffiliationsResource>>,
|
|
19
|
+
staleTime: 5 * 60 * 1000,
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
const groups = useMemo(
|
|
23
|
+
() =>
|
|
24
|
+
new Map<number, string>(
|
|
25
|
+
Object.entries(data?.data?.groups ?? {}).map(([id, name]) => [+id, name])
|
|
26
|
+
),
|
|
27
|
+
[data]
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
const teams = useMemo(
|
|
31
|
+
() =>
|
|
32
|
+
new Map<number, string>(
|
|
33
|
+
Object.entries(data?.data?.teams ?? {}).map(([id, name]) => [+id, name])
|
|
34
|
+
),
|
|
35
|
+
[data]
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
return { groups, teams }
|
|
39
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query'
|
|
2
|
+
import { ApiCollection } from '../../types'
|
|
3
|
+
import { DirectMessageCandidateResource } from '../../types/resources/direct_message_candidate'
|
|
4
|
+
import { useApiClient } from '../use_api_client'
|
|
5
|
+
|
|
6
|
+
export function useDirectMessageCandidates(term: string) {
|
|
7
|
+
const apiClient = useApiClient()
|
|
8
|
+
return useQuery({
|
|
9
|
+
queryKey: ['chat', '/me/direct_message_candidates', term],
|
|
10
|
+
queryFn: () =>
|
|
11
|
+
apiClient.chat.get({
|
|
12
|
+
url: '/me/direct_message_candidates',
|
|
13
|
+
data: {
|
|
14
|
+
q: term,
|
|
15
|
+
fields: {
|
|
16
|
+
DirectMessageCandidate: [
|
|
17
|
+
'name',
|
|
18
|
+
'avatar',
|
|
19
|
+
'groups',
|
|
20
|
+
'teams',
|
|
21
|
+
'under_18',
|
|
22
|
+
'direct_messages_disabled',
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
}) as Promise<ApiCollection<DirectMessageCandidateResource>>,
|
|
27
|
+
enabled: term.length >= 1,
|
|
28
|
+
staleTime: 1000 * 60,
|
|
29
|
+
})
|
|
30
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query'
|
|
2
|
+
import { ApiResource, ConversationValidateResource, ConversationWarning } from '../../types'
|
|
3
|
+
import { useApiClient } from '../use_api_client'
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
recipientIds: string[]
|
|
7
|
+
enabled?: boolean
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function useDirectMessageConversationValidate({ recipientIds, enabled = true }: Props) {
|
|
11
|
+
const apiClient = useApiClient()
|
|
12
|
+
|
|
13
|
+
const { data, isLoading } = useQuery({
|
|
14
|
+
queryKey: ['chat', '/me/conversation_validate', { recipient_ids: recipientIds }],
|
|
15
|
+
queryFn: () =>
|
|
16
|
+
apiClient.chat.post<ApiResource<ConversationValidateResource>>({
|
|
17
|
+
url: '/me/conversation_validate',
|
|
18
|
+
data: {
|
|
19
|
+
data: {
|
|
20
|
+
type: 'ConversationValidate',
|
|
21
|
+
attributes: { recipient_ids: recipientIds },
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
}),
|
|
25
|
+
enabled: enabled && recipientIds.length > 0,
|
|
26
|
+
retry: false,
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
const warnings: ConversationWarning[] = data?.data.warnings ?? []
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
warnings,
|
|
33
|
+
validationPending: enabled && recipientIds.length > 0 && isLoading,
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query'
|
|
2
|
+
import { useState, useCallback } from 'react'
|
|
3
|
+
import { ApiCollection, ApiResource, ConversationResource } from '../../types'
|
|
4
|
+
import { ApiClient, useApiClient } from '../use_api_client'
|
|
5
|
+
|
|
6
|
+
const findDirectMessageConversation = (apiClient: ApiClient, participantIds: string[]) =>
|
|
7
|
+
apiClient.chat.get({
|
|
8
|
+
url: '/me/conversations',
|
|
9
|
+
data: {
|
|
10
|
+
fields: { Conversation: ['title'] },
|
|
11
|
+
filter: 'with_exact_direct_message_participants',
|
|
12
|
+
participant_ids: participantIds.join(','),
|
|
13
|
+
},
|
|
14
|
+
}) as Promise<ApiCollection<ConversationResource>>
|
|
15
|
+
|
|
16
|
+
const createDirectMessageConversation = (apiClient: ApiClient, ids: string[]) =>
|
|
17
|
+
apiClient.chat.post({
|
|
18
|
+
url: '/me/direct_messages',
|
|
19
|
+
data: {
|
|
20
|
+
data: {
|
|
21
|
+
type: 'DirectMessage',
|
|
22
|
+
attributes: { recipients: ids },
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
}) as Promise<ApiResource<ConversationResource>>
|
|
26
|
+
|
|
27
|
+
interface Props {
|
|
28
|
+
recipientIds: string[]
|
|
29
|
+
onSuccess: (conversationId: ConversationResource['id']) => void
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function useFindOrCreateDirectMessageConversation({ recipientIds, onSuccess }: Props) {
|
|
33
|
+
const apiClient = useApiClient()
|
|
34
|
+
const [isFinding, setIsFinding] = useState(false)
|
|
35
|
+
const [isError, setIsError] = useState(false)
|
|
36
|
+
|
|
37
|
+
const { data } = useQuery({
|
|
38
|
+
queryKey: ['chat', '/me/conversations', 'with_exact_direct_message_participants', recipientIds],
|
|
39
|
+
queryFn: () => findDirectMessageConversation(apiClient, recipientIds),
|
|
40
|
+
enabled: recipientIds.length > 0,
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
const directMessageExists = (data?.data.length ?? 0) > 0
|
|
44
|
+
|
|
45
|
+
const findOrCreateConversation = useCallback(
|
|
46
|
+
async (participantIds: string[]) => {
|
|
47
|
+
setIsFinding(true)
|
|
48
|
+
setIsError(false)
|
|
49
|
+
try {
|
|
50
|
+
const findResponse = await findDirectMessageConversation(apiClient, participantIds)
|
|
51
|
+
if (findResponse.data.length > 0) {
|
|
52
|
+
onSuccess(findResponse.data[0].id)
|
|
53
|
+
} else {
|
|
54
|
+
const createResponse = await createDirectMessageConversation(apiClient, participantIds)
|
|
55
|
+
onSuccess(createResponse.data.id)
|
|
56
|
+
}
|
|
57
|
+
} catch {
|
|
58
|
+
setIsError(true)
|
|
59
|
+
setIsFinding(false)
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
[apiClient, onSuccess]
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
return { findOrCreateConversation, directMessageExists, isFinding, isError }
|
|
66
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ResourceObject } from '../api_primitives'
|
|
2
|
+
|
|
3
|
+
export interface DirectMessageCandidateResource extends ResourceObject {
|
|
4
|
+
type: 'DirectMessageCandidate'
|
|
5
|
+
id: string
|
|
6
|
+
name: string
|
|
7
|
+
avatar: string
|
|
8
|
+
groups: number[]
|
|
9
|
+
teams: number[]
|
|
10
|
+
under_18: boolean
|
|
11
|
+
directMessagesDisabled: boolean
|
|
12
|
+
}
|