diff options
Diffstat (limited to 'apps/web/lib/hooks/useImportSessions.ts')
| -rw-r--r-- | apps/web/lib/hooks/useImportSessions.ts | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/apps/web/lib/hooks/useImportSessions.ts b/apps/web/lib/hooks/useImportSessions.ts new file mode 100644 index 00000000..cee99bbc --- /dev/null +++ b/apps/web/lib/hooks/useImportSessions.ts @@ -0,0 +1,62 @@ +"use client"; + +import { toast } from "@/components/ui/use-toast"; + +import { api } from "@karakeep/shared-react/trpc"; + +export function useCreateImportSession() { + const apiUtils = api.useUtils(); + + return api.importSessions.createImportSession.useMutation({ + onSuccess: () => { + apiUtils.importSessions.listImportSessions.invalidate(); + }, + onError: (error) => { + toast({ + description: error.message || "Failed to create import session", + variant: "destructive", + }); + }, + }); +} + +export function useListImportSessions() { + return api.importSessions.listImportSessions.useQuery( + {}, + { + select: (data) => data.sessions, + }, + ); +} + +export function useImportSessionStats(importSessionId: string) { + return api.importSessions.getImportSessionStats.useQuery( + { + importSessionId, + }, + { + refetchInterval: 5000, // Refetch every 5 seconds to show progress + enabled: !!importSessionId, + }, + ); +} + +export function useDeleteImportSession() { + const apiUtils = api.useUtils(); + + return api.importSessions.deleteImportSession.useMutation({ + onSuccess: () => { + apiUtils.importSessions.listImportSessions.invalidate(); + toast({ + description: "Import session deleted successfully", + variant: "default", + }); + }, + onError: (error) => { + toast({ + description: error.message || "Failed to delete import session", + variant: "destructive", + }); + }, + }); +} |
