|
|
|
import { useEffect, useState } from 'preact/hooks'
|
|
|
|
|
|
|
|
import { createContext } from 'preact'
|
|
|
|
|
|
|
|
export const MetadataContext = createContext({})
|
|
|
|
|
|
|
|
export const useCurrentUser = onLoaded => {
|
|
|
|
const [user, setUser] = useState(null)
|
|
|
|
|
|
|
|
const logout = () => {
|
|
|
|
setUser(null)
|
|
|
|
}
|
|
|
|
|
|
|
|
useEffect(async () => {
|
|
|
|
const res = await fetch(`/api/current-user`, {
|
|
|
|
credentials: 'include',
|
|
|
|
})
|
|
|
|
const user = await res.json()
|
|
|
|
setUser(user)
|
|
|
|
|
|
|
|
console.log(`Current user is`, user)
|
|
|
|
|
|
|
|
onLoaded?.(user)
|
|
|
|
}, [])
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
console.log(user)
|
|
|
|
}, [user])
|
|
|
|
|
|
|
|
return [user, logout]
|
|
|
|
}
|
|
|
|
|
|
|
|
export const useReadResource = (url, initialValue) => {
|
|
|
|
const [value, setValue] = useState(initialValue)
|
|
|
|
|
|
|
|
function refresh() {
|
|
|
|
const controller = new AbortController()
|
|
|
|
|
|
|
|
fetch(url, { signal: controller.signal })
|
|
|
|
.then(res => {
|
|
|
|
if (res.ok) {
|
|
|
|
return res.json()
|
|
|
|
} else {
|
|
|
|
return initialValue
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.then(newValue => {
|
|
|
|
setValue(newValue)
|
|
|
|
})
|
|
|
|
|
|
|
|
return controller
|
|
|
|
}
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
const controller = refresh()
|
|
|
|
return () => {
|
|
|
|
controller.abort()
|
|
|
|
}
|
|
|
|
}, [])
|
|
|
|
|
|
|
|
return [value, refresh]
|
|
|
|
}
|