simon | d47ef9e | 2022-09-28 22:24:28 -0400 | [diff] [blame] | 1 | import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; |
| 2 | import axios from 'axios'; |
idillon | 08f7717 | 2022-09-13 19:14:17 -0400 | [diff] [blame] | 3 | |
| 4 | export const useConversationQuery = (accountId, conversationId) => { |
simon | d47ef9e | 2022-09-28 22:24:28 -0400 | [diff] [blame] | 5 | return useQuery(['conversation', accountId, conversationId], () => fetchConversation(accountId, conversationId), { |
| 6 | enabled: !!(accountId && conversationId), |
| 7 | }); |
| 8 | }; |
idillon | 08f7717 | 2022-09-13 19:14:17 -0400 | [diff] [blame] | 9 | |
| 10 | export const useMessagesQuery = (accountId, conversationId) => { |
simon | d47ef9e | 2022-09-28 22:24:28 -0400 | [diff] [blame] | 11 | return useQuery(['messages', accountId, conversationId], () => fetchMessages(accountId, conversationId), { |
| 12 | enabled: !!(accountId && conversationId), |
| 13 | }); |
| 14 | }; |
idillon | 08f7717 | 2022-09-13 19:14:17 -0400 | [diff] [blame] | 15 | |
idillon | ea46560 | 2022-09-13 19:58:51 -0400 | [diff] [blame] | 16 | export const useSendMessageMutation = (accountId, conversationId) => { |
simon | d47ef9e | 2022-09-28 22:24:28 -0400 | [diff] [blame] | 17 | const queryClient = useQueryClient(); |
| 18 | return useMutation( |
| 19 | (message) => axios.post(`/api/accounts/${accountId}/conversations/${conversationId}`, { message }), |
| 20 | { |
| 21 | onSuccess: () => queryClient.invalidateQueries(['messages', accountId, conversationId]), |
| 22 | } |
| 23 | ); |
| 24 | }; |
idillon | ea46560 | 2022-09-13 19:58:51 -0400 | [diff] [blame] | 25 | |
simon | d47ef9e | 2022-09-28 22:24:28 -0400 | [diff] [blame] | 26 | const fetchConversation = (accountId, conversationId) => |
| 27 | axios.get(`/api/accounts/${accountId}/conversations/${conversationId}`).then((result) => result.data); |
idillon | 08f7717 | 2022-09-13 19:14:17 -0400 | [diff] [blame] | 28 | |
simon | d47ef9e | 2022-09-28 22:24:28 -0400 | [diff] [blame] | 29 | const fetchMessages = (accountId, conversationId) => |
| 30 | axios.get(`/api/accounts/${accountId}/conversations/${conversationId}/messages`).then((result) => result.data); |