user-profile.ts 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /**
  2. * User Profile Store
  3. * Persists avatar, nickname & bio to localStorage
  4. */
  5. import { create } from 'zustand';
  6. import { persist } from 'zustand/middleware';
  7. /** Predefined avatar options */
  8. export const AVATAR_OPTIONS = [
  9. '/avatars/user.png',
  10. '/avatars/teacher-2.png',
  11. '/avatars/assist-2.png',
  12. '/avatars/clown-2.png',
  13. '/avatars/curious-2.png',
  14. '/avatars/note-taker-2.png',
  15. '/avatars/thinker-2.png',
  16. ] as const;
  17. export interface UserProfileState {
  18. /** Local avatar path or data-URL (for custom uploads) */
  19. avatar: string;
  20. nickname: string;
  21. bio: string;
  22. setAvatar: (avatar: string) => void;
  23. setNickname: (nickname: string) => void;
  24. setBio: (bio: string) => void;
  25. }
  26. export const useUserProfileStore = create<UserProfileState>()(
  27. persist(
  28. (set) => ({
  29. avatar: AVATAR_OPTIONS[0],
  30. nickname: '',
  31. bio: '',
  32. setAvatar: (avatar) => set({ avatar }),
  33. setNickname: (nickname) => set({ nickname }),
  34. setBio: (bio) => set({ bio }),
  35. }),
  36. {
  37. name: 'user-profile-storage',
  38. },
  39. ),
  40. );