Skip to content

Commit e4e5ea1

Browse files
authored
Merge pull request #225 from cBioPortal/fix/frontend-only-home
fix: show My URLs in frontend-only mode
2 parents e8bde78 + 3545352 commit e4e5ea1

3 files changed

Lines changed: 11 additions & 18 deletions

File tree

packages/highperformer/src/pages/Home.tsx

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -327,22 +327,8 @@ function MyUrlsTab() {
327327

328328
function Home() {
329329
const backendInfo = useAppStore((s) => s.backendInfo)
330+
const backendProbed = useAppStore((s) => s.backendProbed)
330331
const [activeTab, setActiveTab] = useState('catalog')
331-
const [backendProbed, setBackendProbed] = useState(false)
332-
333-
useEffect(() => {
334-
// Wait for probeBackend to finish before rendering layout
335-
const check = () => {
336-
const { backendInfo } = useAppStore.getState()
337-
// backendInfo is set (backend found) or authChecked is true (probe finished, no backend)
338-
if (backendInfo !== null || useAppStore.getState().authChecked) {
339-
setBackendProbed(true)
340-
}
341-
}
342-
check()
343-
const unsub = useAppStore.subscribe(check)
344-
return unsub
345-
}, [])
346332

347333
if (!backendProbed) {
348334
return (

packages/highperformer/src/store/useAppStore.test.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,30 +1047,34 @@ describe('useAppStore', () => {
10471047
})
10481048

10491049
describe('probeBackend', () => {
1050-
it('sets backendInfo on success', async () => {
1050+
it('sets backendInfo and backendProbed on success', async () => {
10511051
const info = { version: '0.1.0', environment: 'development', git_sha: 'abc1234', auth_enabled: true }
10521052
mockGET.mockResolvedValue({ data: info })
10531053

1054+
expect(useAppStore.getState().backendProbed).toBe(false)
10541055
await useAppStore.getState().probeBackend()
10551056

10561057
expect(mockGET).toHaveBeenCalledWith('/api/info')
10571058
expect(useAppStore.getState().backendInfo).toEqual(info)
1059+
expect(useAppStore.getState().backendProbed).toBe(true)
10581060
})
10591061

1060-
it('leaves backendInfo null when data is undefined', async () => {
1062+
it('sets backendProbed when data is undefined', async () => {
10611063
mockGET.mockResolvedValue({ data: undefined, error: { detail: 'Not found' } })
10621064

10631065
await useAppStore.getState().probeBackend()
10641066

10651067
expect(useAppStore.getState().backendInfo).toBeNull()
1068+
expect(useAppStore.getState().backendProbed).toBe(true)
10661069
})
10671070

1068-
it('leaves backendInfo null on network error', async () => {
1071+
it('sets backendProbed on network error (frontend-only mode)', async () => {
10691072
mockGET.mockRejectedValue(new Error('Network error'))
10701073

10711074
await useAppStore.getState().probeBackend()
10721075

10731076
expect(useAppStore.getState().backendInfo).toBeNull()
1077+
expect(useAppStore.getState().backendProbed).toBe(true)
10741078
})
10751079
})
10761080

packages/highperformer/src/store/useAppStore.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ export interface AppState {
172172

173173
// Backend info (null = no backend detected)
174174
backendInfo: BackendInfo | null
175+
backendProbed: boolean
175176
probeBackend: () => Promise<void>
176177

177178
// Auth
@@ -373,6 +374,7 @@ const useAppStore = create<AppState>((set, get) => ({
373374

374375
// UI toggles
375376
backendInfo: null,
377+
backendProbed: false,
376378
probeBackend: async () => {
377379
try {
378380
const { api } = await import('../api')
@@ -381,6 +383,7 @@ const useAppStore = create<AppState>((set, get) => ({
381383
} catch {
382384
// No backend available — frontend-only mode
383385
}
386+
set({ backendProbed: true })
384387
},
385388

386389
user: null,

0 commit comments

Comments
 (0)