Convert files in themes/ services/ contexts/ to TS
Convert all Javascript files in `client/src/themes`, `client/src/service`, `client/src/contexts` to Typescript.
Convert SvgIcon, Input, ConversationView, Button components to Typescript
Gitlab #30
Change-Id: I0d0505c28e21c771906edf8d5e7b8ce36126fa64
diff --git a/client/src/services/Conversation.ts b/client/src/services/Conversation.ts
new file mode 100644
index 0000000..400617c
--- /dev/null
+++ b/client/src/services/Conversation.ts
@@ -0,0 +1,30 @@
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
+import axios from 'axios';
+
+export const useConversationQuery = (accountId: string, conversationId: string) => {
+ return useQuery(['conversation', accountId, conversationId], () => fetchConversation(accountId, conversationId), {
+ enabled: !!(accountId && conversationId),
+ });
+};
+
+export const useMessagesQuery = (accountId: string, conversationId: string) => {
+ return useQuery(['messages', accountId, conversationId], () => fetchMessages(accountId, conversationId), {
+ enabled: !!(accountId && conversationId),
+ });
+};
+
+export const useSendMessageMutation = (accountId: string, conversationId: string) => {
+ const queryClient = useQueryClient();
+ return useMutation(
+ (message: string) => axios.post(`/api/accounts/${accountId}/conversations/${conversationId}`, { message }),
+ {
+ onSuccess: () => queryClient.invalidateQueries(['messages', accountId, conversationId]),
+ }
+ );
+};
+
+const fetchConversation = (accountId: string, conversationId: string) =>
+ axios.get(`/api/accounts/${accountId}/conversations/${conversationId}`).then((result) => result.data);
+
+const fetchMessages = (accountId: string, conversationId: string) =>
+ axios.get(`/api/accounts/${accountId}/conversations/${conversationId}/messages`).then((result) => result.data);