aboutsummaryrefslogtreecommitdiff
path: root/apps/browser-extension/utils/query-hooks.ts
blob: 5c7cfc21144f3cc3e71616a96d2f9606f4789fad (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/**
 * React Query hooks for supermemory API
 */
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"
import {
	fetchProjects,
	getDefaultProject,
	getUserData,
	saveMemory,
	searchMemories,
	setDefaultProject,
} from "./api"
import type { MemoryPayload } from "./types"

// Query Keys
export const queryKeys = {
	projects: ["projects"] as const,
	defaultProject: ["defaultProject"] as const,
	userData: ["userData"] as const,
}

// Projects Query
export function useProjects(options?: { enabled?: boolean }) {
	return useQuery({
		queryKey: queryKeys.projects,
		queryFn: fetchProjects,
		staleTime: 5 * 60 * 1000, // 5 minutes
		enabled: options?.enabled ?? true,
	})
}

// Default Project Query
export function useDefaultProject(options?: { enabled?: boolean }) {
	return useQuery({
		queryKey: queryKeys.defaultProject,
		queryFn: getDefaultProject,
		staleTime: 2 * 60 * 1000, // 2 minutes
		enabled: options?.enabled ?? true,
	})
}

// User Data Query
export function useUserData(options?: { enabled?: boolean }) {
	return useQuery({
		queryKey: queryKeys.userData,
		queryFn: getUserData,
		staleTime: 5 * 60 * 1000, // 5 minutes
		enabled: options?.enabled ?? true,
	})
}

// Set Default Project Mutation
export function useSetDefaultProject() {
	const queryClient = useQueryClient()

	return useMutation({
		mutationFn: setDefaultProject,
		onSuccess: (_, project) => {
			queryClient.setQueryData(queryKeys.defaultProject, project)
		},
	})
}

// Save Memory Mutation
export function useSaveMemory() {
	return useMutation({
		mutationFn: (payload: MemoryPayload) => saveMemory(payload),
	})
}

// Search Memories Mutation
export function useSearchMemories() {
	return useMutation({
		mutationFn: (query: string) => searchMemories(query),
	})
}