45 lines
1.0 KiB
TypeScript
45 lines
1.0 KiB
TypeScript
/**
|
|
* User Profile Store
|
|
* Persists avatar, nickname & bio to localStorage
|
|
*/
|
|
|
|
import { create } from 'zustand';
|
|
import { persist } from 'zustand/middleware';
|
|
|
|
/** Predefined avatar options */
|
|
export const AVATAR_OPTIONS = [
|
|
'/avatars/user.png',
|
|
'/avatars/teacher-2.png',
|
|
'/avatars/assist-2.png',
|
|
'/avatars/clown-2.png',
|
|
'/avatars/curious-2.png',
|
|
'/avatars/note-taker-2.png',
|
|
'/avatars/thinker-2.png',
|
|
] as const;
|
|
|
|
export interface UserProfileState {
|
|
/** Local avatar path or data-URL (for custom uploads) */
|
|
avatar: string;
|
|
nickname: string;
|
|
bio: string;
|
|
setAvatar: (avatar: string) => void;
|
|
setNickname: (nickname: string) => void;
|
|
setBio: (bio: string) => void;
|
|
}
|
|
|
|
export const useUserProfileStore = create<UserProfileState>()(
|
|
persist(
|
|
(set) => ({
|
|
avatar: AVATAR_OPTIONS[0],
|
|
nickname: '',
|
|
bio: '',
|
|
setAvatar: (avatar) => set({ avatar }),
|
|
setNickname: (nickname) => set({ nickname }),
|
|
setBio: (bio) => set({ bio }),
|
|
}),
|
|
{
|
|
name: 'user-profile-storage',
|
|
},
|
|
),
|
|
);
|