user-context.tsx 708 B

12345678910111213141516171819202122232425
  1. import { createContext, FC, useContext, useMemo } from 'react'
  2. import getMeta from '../../utils/meta'
  3. import { LoggedOutUser, User } from '../../../../types/user'
  4. export const UserContext = createContext<User | LoggedOutUser | undefined>(
  5. undefined
  6. )
  7. export const UserProvider: FC<React.PropsWithChildren> = ({ children }) => {
  8. const user = useMemo(() => getMeta('ol-user'), [])
  9. return <UserContext.Provider value={user}>{children}</UserContext.Provider>
  10. }
  11. export function useUserContext() {
  12. const context = useContext(UserContext)
  13. if (!context) {
  14. throw new Error(
  15. 'useUserContext is only available inside UserContext, or `ol-user` meta is not defined'
  16. )
  17. }
  18. return context
  19. }