use user from session

This commit is contained in:
john 2025-05-20 10:06:18 +02:00
parent 5f47162a50
commit 700eaf3eb2
16 changed files with 148 additions and 107 deletions

48
src/app/user/user.ts Normal file
View file

@ -0,0 +1,48 @@
import { addMessageListener, dispatchMessage } from '../messageBus/messageBus.ts'
import { getCookie } from '../auth/cookies.ts'
import { useMessageListener } from '../../hooks/useMessageListener.ts'
import { useState } from 'react'
import { setGlobal } from '../femtoApp.ts'
export interface User {
userId: string
username: string
isSuperUser: boolean
}
let globalUser: User | null
export function initUser() {
updateUser()
}
function updateUser() {
globalUser = getUserFromCookie()
console.debug(globalUser)
setGlobal('user', globalUser)
dispatchMessage('user:updated', globalUser)
}
addMessageListener('auth:logged-in', updateUser)
addMessageListener('auth:registered', updateUser)
addMessageListener('auth:logged-out', updateUser)
addMessageListener('auth:refreshed', updateUser)
export function useUser(): User | null {
const [user, setUser] = useState(globalUser)
useMessageListener('user:updated', (u) => {
setUser(u)
})
return user
}
function getUserFromCookie(): User | null {
const userCookie = getCookie('user')
if (!userCookie) return null
// TODO validate but it should be fine
return JSON.parse(decodeURIComponent(userCookie)) as User
}