import { atomWithQuery } from "jotai-tanstack-query"; import { activeSearchSpaceIdAtom } from "@/atoms/seach-spaces/seach-space-queries.atom"; import { chatsApiService } from "@/lib/apis/chats-api.service"; import { podcastsApiService } from "@/lib/apis/podcasts-api.service"; import { getBearerToken } from "@/lib/auth-utils"; import { cacheKeys } from "@/lib/query-client/cache-keys"; import { activeChatIdAtom, globalChatsQueryParamsAtom } from "./ui.atoms"; export const activeChatAtom = atomWithQuery((get) => { const activeChatId = get(activeChatIdAtom); const authToken = getBearerToken(); return { queryKey: cacheKeys.chats.activeChat(activeChatId ?? ""), enabled: !!activeChatId && !!authToken, queryFn: async () => { if (!authToken) { throw new Error("No authentication token found"); } if (!activeChatId) { throw new Error("No active chat id found"); } const [podcast, chatDetails] = await Promise.all([ podcastsApiService.getPodcastByChatId({ chat_id: Number(activeChatId) }), chatsApiService.getChatDetails({ id: Number(activeChatId) }), ]); return { chatId: activeChatId, chatDetails, podcast }; }, }; }); export const chatsAtom = atomWithQuery((get) => { const searchSpaceId = get(activeSearchSpaceIdAtom); const authToken = getBearerToken(); const queryParams = get(globalChatsQueryParamsAtom); return { queryKey: cacheKeys.chats.globalQueryParams(queryParams), enabled: !!searchSpaceId && !!authToken, queryFn: async () => { return chatsApiService.getChats({ queryParams: queryParams, }); }, }; });