trans3 / ui /hooks /useScene.ts
Mayo
refactor(ui): rewrite hooks around the new scene snapshot + selection store
71ff5df unverified
Raw
History Blame Contribute Delete
1.13 kB
'use client'
import { useGetSceneJson } from '@/lib/api/default/default'
import type { Scene } from '@/lib/api/schemas'
/**
* Backend is the source of truth for the scene. Components read it through
* this hook — which is just a thin wrapper around the orval-generated
* `useGetSceneJson` query. Mutations must invalidate `getGetSceneJsonQueryKey`
* for the UI to pick up changes (see `lib/io/scene.ts`).
*
* When no project is open, `GET /scene.json` returns 400; React Query stores
* that as an error and `scene` is `null`.
*/
export function useScene(): { scene: Scene | null; epoch: number } {
const { data, isError } = useGetSceneJson({
query: {
retry: false,
staleTime: Infinity,
gcTime: Infinity,
},
})
// React Query preserves `data` across a failed refetch, so closing a
// project would leave the stale scene visible until the cache is
// manually cleared. Treat an error response (e.g. 400 "no project open")
// as an explicit "no scene".
if (isError) return { scene: null, epoch: 0 }
return {
scene: data?.scene ?? null,
epoch: data?.epoch ?? 0,
}
}