User settings have two sources of truth that must stay in sync:
- localStorage (
vuetify@user) - loaded instores/user.ts - Server settings (
user.settings) - synced instores/auth.ts
When adding new fields to DEFAULT_USER:
- Add the field to
DEFAULT_USERinstores/user.ts - Update
RootStatetype instores/migrations.ts - Bump version number (e.g., 6 → 7)
- Create migration function (e.g.,
migrateV6ToV7) - Critical: Update BOTH migration points:
user.tsload()function - handles localStorageauth.tsuser watcher - handles server settings sync
The auth.ts watcher overwrites the store with server settings. If server settings don't have the new field and you don't merge with defaults, you'll get undefined errors.
// auth.ts - correct pattern for server settings sync
let settings = user.settings
if (settings.version === 6) {
settings = migrateV6ToV7(settings)
}
const merged = {
version: 7,
ecosystem: merge(structuredClone(DEFAULT_USER.ecosystem), settings.ecosystem || {}),
one: merge(structuredClone(DEFAULT_USER.one), settings.one || {}),
}
Object.assign(userStore, merged)auth.ts- Authentication, user session, settings syncuser.ts- User preferences (theme, notifications, etc.)one.ts- Vuetify One subscription stateteam.ts- Team management