use zustand

This commit is contained in:
john 2025-08-10 16:16:23 +02:00
parent d2d358bff2
commit 5f29bc436c
15 changed files with 74 additions and 83 deletions

View file

@ -1,8 +1,4 @@
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'
import { create } from 'zustand'
export interface User {
id: string
@ -15,38 +11,12 @@ export enum Role {
SuperUser = 1,
}
let globalUser: User | null
export function initUser() {
updateUser()
addMessageListener('auth:logged-in', updateUser)
addMessageListener('auth:registered', updateUser)
addMessageListener('auth:logged-out', updateUser)
addMessageListener('auth:refreshed', updateUser)
interface UserState {
user: User | null
setUser: (user: User | null) => void
}
function updateUser() {
globalUser = getUserFromCookie()
setGlobal('user', globalUser)
dispatchMessage('user:updated', globalUser)
}
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
}
export const useUserStore = create<UserState>()((set) => ({
user: null,
setUser: (user: User | null) => set({ user }),
}))