43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
import { useCallback } from 'react';
|
|
import { useQuery, useQueryClient } from '@tanstack/react-query';
|
|
import { useClient } from 'hooks/useClient';
|
|
|
|
type AIHarnesses = {
|
|
claudeCode: boolean;
|
|
opencode: boolean;
|
|
piMono: boolean;
|
|
};
|
|
|
|
type ServerSettings = {
|
|
onboardingComplete?: boolean;
|
|
accountMode?: 'organization' | 'single';
|
|
aiHarnesses?: AIHarnesses;
|
|
plugins?: Record<string, boolean>;
|
|
};
|
|
|
|
const SETTINGS_KEY = ['SERVER_SETTINGS'];
|
|
|
|
export const useServerSettings = () => {
|
|
const client = useClient();
|
|
const queryClient = useQueryClient();
|
|
|
|
const { data: settings, isLoading } = useQuery({
|
|
queryKey: SETTINGS_KEY,
|
|
queryFn: () => client.get<ServerSettings>('/server-settings/settings'),
|
|
});
|
|
|
|
const onboardingComplete = settings?.onboardingComplete ?? true;
|
|
const accountMode = settings?.accountMode;
|
|
const aiHarnesses = settings?.aiHarnesses;
|
|
const plugins = settings?.plugins;
|
|
const saveSettings = useCallback(
|
|
async (update: Partial<ServerSettings>) => {
|
|
const result = await client.put<ServerSettings>('/server-settings', update);
|
|
queryClient.setQueryData(SETTINGS_KEY, result);
|
|
},
|
|
[client, queryClient],
|
|
);
|
|
|
|
return { onboardingComplete, accountMode, aiHarnesses, plugins, isLoading, saveSettings };
|
|
};
|