aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/lib/hooks/useImportSessions.ts
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/lib/hooks/useImportSessions.ts')
-rw-r--r--apps/web/lib/hooks/useImportSessions.ts62
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",
+ });
+ },
+ });
+}