hyp / apps /ui /src /hooks /use-cursor-status-init.ts
Leon4gr45's picture
Upload folder using huggingface_hub
1dbc34b verified
import { useEffect, useRef } from 'react';
import { useSetupStore } from '@/store/setup-store';
import { getHttpApiClient } from '@/lib/http-api-client';
/**
* Hook to initialize Cursor CLI status on app startup.
* This ensures the cursorCliStatus is available in the setup store
* before the user opens feature dialogs.
*/
export function useCursorStatusInit() {
// Use individual selectors instead of bare useSetupStore() to prevent
// re-rendering on every setup store mutation during initialization.
const setCursorCliStatus = useSetupStore((s) => s.setCursorCliStatus);
const initialized = useRef(false);
useEffect(() => {
// Only initialize once per session
if (initialized.current) {
return;
}
// Check current status at call time rather than via dependency to avoid
// re-renders when other setup store fields change during initialization.
const currentStatus = useSetupStore.getState().cursorCliStatus;
if (currentStatus !== null) {
initialized.current = true;
return;
}
initialized.current = true;
const initCursorStatus = async () => {
try {
const api = getHttpApiClient();
const statusResult = await api.setup.getCursorStatus();
if (statusResult.success) {
setCursorCliStatus({
installed: statusResult.installed ?? false,
version: statusResult.version ?? undefined,
auth: statusResult.auth?.authenticated
? {
authenticated: true,
method: statusResult.auth.method || 'unknown',
}
: undefined,
});
}
} catch (error) {
// Silently fail - cursor is optional
console.debug('[CursorStatusInit] Failed to check cursor status:', error);
}
};
initCursorStatus();
}, [setCursorCliStatus]);
}