Files
moreminimore-vibe/src/hooks/useLoadApp.ts
2025-06-16 23:36:43 -07:00

49 lines
1.3 KiB
TypeScript

import { useEffect } from "react";
import { useQuery, QueryClient } from "@tanstack/react-query";
import { IpcClient } from "@/ipc/ipc_client";
import { useAtom } from "jotai";
import { currentAppAtom } from "@/atoms/appAtoms";
import { App } from "@/ipc/ipc_types";
export function useLoadApp(appId: number | null) {
const [, setApp] = useAtom(currentAppAtom);
const {
data: appData,
isLoading: loading,
error,
refetch: refreshApp,
} = useQuery<App | null, Error>({
queryKey: ["app", appId],
queryFn: async () => {
if (appId === null) {
return null;
}
const ipcClient = IpcClient.getInstance();
return ipcClient.getApp(appId);
},
enabled: appId !== null,
// Deliberately not showing error toast here because
// this will pop up when app is deleted.
// meta: { showErrorToast: true },
});
useEffect(() => {
if (appId === null) {
setApp(null);
} else if (appData !== undefined) {
setApp(appData);
}
}, [appId, appData, setApp]);
return { app: appData, loading, error, refreshApp };
}
// Function to invalidate the app query
export const invalidateAppQuery = (
queryClient: QueryClient,
{ appId }: { appId: number | null },
) => {
return queryClient.invalidateQueries({ queryKey: ["app", appId] });
};