Skip to content

Commit

Permalink
feat: cache navbar button data using TTL in contentful
Browse files Browse the repository at this point in the history
  • Loading branch information
cazala committed Nov 13, 2024
1 parent d666236 commit d65ff0c
Showing 1 changed file with 23 additions and 1 deletion.
24 changes: 23 additions & 1 deletion src/components/Navbar/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,28 @@ export type NavbarExtraButton = {
textColor?: `#${string}`
backgroundColor?: `#${string}`
id?: string
ttl: number
}

export type LocalStorageNavbarExtraButton = {
button: NavbarExtraButton
expiresAt: number
}

export const getExtraButton = async () => {
const cachedExtraButton = localStorage.getItem('navbarExtraButton')
if (cachedExtraButton) {
try {
const parsed = JSON.parse(
cachedExtraButton
) as LocalStorageNavbarExtraButton
if (parsed.expiresAt > Date.now()) {
return parsed.button
}
} catch (error) {
// error parsing cached data, ignore and fetch from Contentful
}
}
try {
const SPACE_ID = 'ea2ybdmmn1kv'
const ENV = 'master'
Expand All @@ -30,7 +49,10 @@ export const getExtraButton = async () => {
const response = await fetch(CONTENTFUL_URL)
const entry = await response.json()
const button = entry.fields as NavbarExtraButton
console.log('button', button)
localStorage.setItem(
'navbarExtraButton',
JSON.stringify({ button, expiresAt: Date.now() + button.ttl * 1000 })
)
return button
} catch (error) {
console.error(error)
Expand Down

0 comments on commit d65ff0c

Please sign in to comment.