jan/web-app/src/hooks/useReleaseNotes.ts
Faisal Amir 434abaaca6
chore: app updater UI (#5054)
* chore: initial app updater UI and download management enhance

* chore: revert package version

* chore: update conditional app updater

* chore: remove console

* chore: add utils isDev

* chore: close popup when user click download

* revert yarn lock
2025-05-22 11:54:06 +07:00

50 lines
1.3 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-explicit-any */
// stores/useReleaseStore.ts
import { create } from 'zustand'
type Release = {
tag_name: string
prerelease: boolean
draft: boolean
[key: string]: any
}
type ReleaseState = {
release: Release | null
loading: boolean
error: string | null
fetchLatestRelease: (includeBeta: boolean) => Promise<void>
}
export const useReleaseNotes = create<ReleaseState>((set) => ({
release: null,
loading: false,
error: null,
fetchLatestRelease: async (includeBeta: boolean) => {
set({ loading: true, error: null })
try {
const res = await fetch(
'https://api.github.com/repos/menloresearch/jan/releases'
)
if (!res.ok) throw new Error('Failed to fetch releases')
const releases = await res.json()
const stableRelease = releases.find(
(release: { prerelease: boolean; draft: boolean }) =>
!release.prerelease && !release.draft
)
const betaRelease = releases.find(
(release: { prerelease: boolean }) => release.prerelease
)
const selected = includeBeta
? (betaRelease ?? stableRelease)
: stableRelease
set({ release: selected, loading: false })
} catch (err: any) {
set({ error: err.message, loading: false })
}
},
}))