Files
openchamber/packages/ui/src/hooks/useOpenCodeReadiness.ts
T

24 lines
1.1 KiB
TypeScript
Raw Normal View History

import { useConfigStore } from '@/stores/useConfigStore';
export function useOpenCodeReadiness() {
const isInitialized = useConfigStore((s) => s.isInitialized);
const connectionPhase = useConfigStore((s) => s.connectionPhase);
const lastDisconnectReason = useConfigStore((s) => s.lastDisconnectReason);
// Stale-while-revalidate: when provider data was hydrated from the persisted
// cache, treat the pickers as ready immediately so they paint last-known
// models/agents while initializeApp() refreshes in the background. Without
// this, the cache is invisible — the pickers stay on "Loading…" until the
// full init round-trip completes even though the data is already in the store.
const hasCachedProviders = useConfigStore((s) => s.providers.length > 0);
const isReady = isInitialized || hasCachedProviders;
// Only surface "unavailable" when we have nothing to show AND init failed.
const isUnavailable = !isReady && lastDisconnectReason === 'init_error';
return {
isReady,
isLoading: !isReady && !isUnavailable,
isUnavailable,
connectionPhase,
};
}