use zustand
This commit is contained in:
parent
d2d358bff2
commit
5f29bc436c
15 changed files with 74 additions and 83 deletions
|
@ -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 }),
|
||||
}))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue