29 lines
737 B
TypeScript
29 lines
737 B
TypeScript
import { atom } from 'nanostores';
|
|
|
|
interface Profile {
|
|
username: string;
|
|
bio: string;
|
|
avatar: string;
|
|
}
|
|
|
|
// Initialize with stored profile or defaults
|
|
const storedProfile = typeof window !== 'undefined' ? localStorage.getItem('upage_profile') : null;
|
|
const initialProfile: Profile = storedProfile
|
|
? JSON.parse(storedProfile)
|
|
: {
|
|
username: '',
|
|
bio: '',
|
|
avatar: '',
|
|
};
|
|
|
|
export const profileStore = atom<Profile>(initialProfile);
|
|
|
|
export const updateProfile = (updates: Partial<Profile>) => {
|
|
profileStore.set({ ...profileStore.get(), ...updates });
|
|
|
|
// Persist to localStorage
|
|
if (typeof window !== 'undefined') {
|
|
localStorage.setItem('upage_profile', JSON.stringify(profileStore.get()));
|
|
}
|
|
};
|