Use in-memory store for home featured section data
This commit is contained in:
parent
bc6fab399e
commit
4e5b78f4ee
|
@ -1,12 +1,17 @@
|
||||||
import { GlobalConfig } from 'common/globalConfig'
|
import { GlobalConfig } from 'common/globalConfig'
|
||||||
import { useEffect, useState } from 'react'
|
import { useEffect } from 'react'
|
||||||
import { listenForGlobalConfig } from 'web/lib/firebase/globalConfig'
|
import { listenForGlobalConfig } from 'web/lib/firebase/globalConfig'
|
||||||
|
import { inMemoryStore, usePersistentState } from './use-persistent-state'
|
||||||
|
|
||||||
export const useGlobalConfig = () => {
|
export const useGlobalConfig = () => {
|
||||||
const [globalConfig, setGlobalConfig] = useState<GlobalConfig | null>(null)
|
const [globalConfig, setGlobalConfig] =
|
||||||
|
usePersistentState<GlobalConfig | null>(null, {
|
||||||
|
store: inMemoryStore(),
|
||||||
|
key: 'globalConfig',
|
||||||
|
})
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
return listenForGlobalConfig(setGlobalConfig)
|
return listenForGlobalConfig(setGlobalConfig)
|
||||||
}, [])
|
}, [setGlobalConfig])
|
||||||
return globalConfig
|
return globalConfig
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,6 +89,17 @@ export const historyStore = <T>(prefix = '__manifold'): PersistentStore<T> => ({
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const store: Record<string, any> = {}
|
||||||
|
|
||||||
|
export const inMemoryStore = <T>(): PersistentStore<T> => ({
|
||||||
|
get: (k: string) => {
|
||||||
|
return store[k]
|
||||||
|
},
|
||||||
|
set: (k: string, v: T | undefined) => {
|
||||||
|
store[k] = v
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
export const usePersistentState = <T>(
|
export const usePersistentState = <T>(
|
||||||
initial: T,
|
initial: T,
|
||||||
persist?: PersistenceOptions<T>
|
persist?: PersistenceOptions<T>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { ReactNode, useEffect, useState } from 'react'
|
import React, { ReactNode, useEffect } from 'react'
|
||||||
import Router from 'next/router'
|
import Router from 'next/router'
|
||||||
import {
|
import {
|
||||||
AdjustmentsIcon,
|
AdjustmentsIcon,
|
||||||
|
@ -63,6 +63,10 @@ import { useAllPosts } from 'web/hooks/use-post'
|
||||||
import { useGlobalConfig } from 'web/hooks/use-global-config'
|
import { useGlobalConfig } from 'web/hooks/use-global-config'
|
||||||
import { useAdmin } from 'web/hooks/use-admin'
|
import { useAdmin } from 'web/hooks/use-admin'
|
||||||
import { GlobalConfig } from 'common/globalConfig'
|
import { GlobalConfig } from 'common/globalConfig'
|
||||||
|
import {
|
||||||
|
inMemoryStore,
|
||||||
|
usePersistentState,
|
||||||
|
} from 'web/hooks/use-persistent-state'
|
||||||
|
|
||||||
export default function Home() {
|
export default function Home() {
|
||||||
const user = useUser()
|
const user = useUser()
|
||||||
|
@ -105,7 +109,10 @@ export default function Home() {
|
||||||
groups?.map((g) => g.slug)
|
groups?.map((g) => g.slug)
|
||||||
)
|
)
|
||||||
|
|
||||||
const [pinned, setPinned] = useState<JSX.Element[] | null>(null)
|
const [pinned, setPinned] = usePersistentState<JSX.Element[] | null>(null, {
|
||||||
|
store: inMemoryStore(),
|
||||||
|
key: 'home-pinned',
|
||||||
|
})
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const pinnedItems = globalConfig?.pinnedItems
|
const pinnedItems = globalConfig?.pinnedItems
|
||||||
|
@ -139,7 +146,7 @@ export default function Home() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
getPinned()
|
getPinned()
|
||||||
}, [globalConfig])
|
}, [globalConfig, setPinned])
|
||||||
|
|
||||||
const isLoading =
|
const isLoading =
|
||||||
!user ||
|
!user ||
|
||||||
|
|
Loading…
Reference in New Issue
Block a user