105 lines
2.9 KiB
TypeScript
105 lines
2.9 KiB
TypeScript
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
|
|
import {
|
|
loadAppearanceSettings,
|
|
loadCitationDisplaySettings,
|
|
loadPrivateSquareStatus,
|
|
loadPromptPrefixSettings,
|
|
updateAppearanceSettings,
|
|
updateCitationDisplaySettings,
|
|
updatePrivateSquareSettings,
|
|
updatePromptPrefixSettings,
|
|
type AppearanceUpdate,
|
|
type CitationDisplayUpdate,
|
|
type PrivateSquareUpdate,
|
|
type PromptPrefixUpdate,
|
|
} from "./api";
|
|
|
|
const PROMPT_PREFIX_KEY = ["systemSettings", "promptPrefix"] as const;
|
|
const PRIVATE_SQUARE_KEY = ["systemSettings", "privateSquare"] as const;
|
|
const APPEARANCE_KEY = ["systemSettings", "appearance"] as const;
|
|
const CITATION_DISPLAY_KEY = ["systemSettings", "citationDisplay"] as const;
|
|
|
|
export function usePromptPrefixSettings() {
|
|
return useQuery({
|
|
queryKey: PROMPT_PREFIX_KEY,
|
|
queryFn: () => loadPromptPrefixSettings(),
|
|
staleTime: 60_000,
|
|
refetchOnWindowFocus: false,
|
|
refetchOnMount: false,
|
|
});
|
|
}
|
|
|
|
export function useUpdatePromptPrefixSettings() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (body: PromptPrefixUpdate) => updatePromptPrefixSettings(body),
|
|
onSuccess: (data) => {
|
|
queryClient.setQueryData(PROMPT_PREFIX_KEY, data);
|
|
},
|
|
});
|
|
}
|
|
|
|
export function usePrivateSquareStatus() {
|
|
return useQuery({
|
|
queryKey: PRIVATE_SQUARE_KEY,
|
|
queryFn: () => loadPrivateSquareStatus(),
|
|
staleTime: 60_000,
|
|
refetchOnWindowFocus: false,
|
|
});
|
|
}
|
|
|
|
export function useUpdatePrivateSquareSettings() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (body: PrivateSquareUpdate) =>
|
|
updatePrivateSquareSettings(body),
|
|
onSuccess: (data) => {
|
|
queryClient.setQueryData(PRIVATE_SQUARE_KEY, data);
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useAppearanceSettings() {
|
|
return useQuery({
|
|
queryKey: APPEARANCE_KEY,
|
|
queryFn: () => loadAppearanceSettings(),
|
|
staleTime: 60_000,
|
|
refetchOnWindowFocus: false,
|
|
// The provider runs even on the login page (where the user has no auth)
|
|
// — gracefully tolerate the fetch failing rather than retrying.
|
|
retry: false,
|
|
});
|
|
}
|
|
|
|
export function useUpdateAppearanceSettings() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (body: AppearanceUpdate) => updateAppearanceSettings(body),
|
|
onSuccess: (data) => {
|
|
queryClient.setQueryData(APPEARANCE_KEY, data);
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useCitationDisplaySettings() {
|
|
return useQuery({
|
|
queryKey: CITATION_DISPLAY_KEY,
|
|
queryFn: () => loadCitationDisplaySettings(),
|
|
staleTime: 60_000,
|
|
refetchOnWindowFocus: false,
|
|
retry: false,
|
|
});
|
|
}
|
|
|
|
export function useUpdateCitationDisplaySettings() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (body: CitationDisplayUpdate) =>
|
|
updateCitationDisplaySettings(body),
|
|
onSuccess: (data) => {
|
|
queryClient.setQueryData(CITATION_DISPLAY_KEY, data);
|
|
},
|
|
});
|
|
}
|