feat(dashboard): add conversations workspace

This commit is contained in:
jjbrunton committed 2026-08-08 15:05:08 +01:00
1 parent 40e5f4c818
commit 8d4eae7ab5
8 files changed
+840

No files matched your search

@@ -0,0 +1,47 @@
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { conversationApi } from './conversation-api.js';
export const conversationQueryKeys = {
all: ['conversations'] as const,
detail: (id: string) => ['conversations', 'detail', id] as const,
};
export function useConversationsQuery() {
return useQuery({ queryKey: conversationQueryKeys.all, queryFn: conversationApi.list });
}
export function useConversationDetailQuery(id: string | null) {
return useQuery({
queryKey: conversationQueryKeys.detail(id ?? ''),
queryFn: () => conversationApi.detail(id ?? ''),
enabled: id !== null,
});
}
export function useSuggestReplyMutation(id: string) {
return useMutation({ mutationFn: () => conversationApi.suggestReply(id) });
}
export function useSendReplyMutation(id: string) {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (message: string) => conversationApi.sendReply(id, message),
async onSuccess() {
await Promise.all([
queryClient.invalidateQueries({ queryKey: conversationQueryKeys.all }),
queryClient.invalidateQueries({ queryKey: conversationQueryKeys.detail(id) }),
]);
},
});
}
export function useStartConversationMutation() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ username, message }: { username: string; message: string }) =>
conversationApi.startConversation(username, message),
async onSuccess() {
await queryClient.invalidateQueries({ queryKey: conversationQueryKeys.all });
},
});
}