Initial commit
This commit is contained in:
108
stores/user.js
Normal file
108
stores/user.js
Normal file
@@ -0,0 +1,108 @@
|
||||
// stores/counter.js
|
||||
import { defineStore } from 'pinia'
|
||||
export const useUserStore = defineStore('user', {
|
||||
state: () => {
|
||||
return {
|
||||
user: {},
|
||||
is_login: false,
|
||||
token: '',
|
||||
active_subscription: '',
|
||||
audioInputDevice: {},
|
||||
audioOutputDevice: {},
|
||||
nextAuthRequired: Date.now(), // allow offline access for one day
|
||||
offlineMode: false, // if user is offline then don't try to connect to the backend
|
||||
soundMode: localStorage.getItem('soundMode') || 'soundscape'
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
login (user, token) {
|
||||
this.user = user
|
||||
this.is_login = true
|
||||
this.token = token
|
||||
if (!this.offlineMode) { this.nextAuthRequired = Date.now() + 24 * 60 * 60 * 1000 }
|
||||
},
|
||||
logout () {
|
||||
this.user = {}
|
||||
this.is_login = false
|
||||
},
|
||||
updateUser (user) {
|
||||
this.user = user
|
||||
},
|
||||
saveInputdevice (device) {
|
||||
this.audioInputDevice = device
|
||||
},
|
||||
saveOutputDevice (device) {
|
||||
this.audioOutputDevice = device
|
||||
},
|
||||
changeOfflineMode (state) {
|
||||
this.offlineMode = state
|
||||
},
|
||||
updateHeadsetType (state) {
|
||||
if (this.user) {
|
||||
if (!this.user.settings) {
|
||||
this.user.settings = {}
|
||||
}
|
||||
this.user.settings.headphone_type = state
|
||||
}
|
||||
},
|
||||
updateANC (state) {
|
||||
if (this.user) {
|
||||
if (!this.user.settings) {
|
||||
this.user.settings = {}
|
||||
}
|
||||
this.user.settings.anc_type = state
|
||||
}
|
||||
},
|
||||
updateSoundMode (mode) {
|
||||
if (['soundscape', 'music'].includes(mode)) {
|
||||
this.soundMode = mode
|
||||
localStorage.setItem('soundMode', mode)
|
||||
window.dispatchEvent(new Event('localStorageUpdated'))
|
||||
}
|
||||
},
|
||||
markOnboardingCompleted () {
|
||||
if (this.user) {
|
||||
this.user.onboarding_completed = true
|
||||
}
|
||||
},
|
||||
toggleTimerVisibility (status) {
|
||||
if (this.user) {
|
||||
this.user.timer_activated = status
|
||||
}
|
||||
}
|
||||
},
|
||||
getters: {
|
||||
getUserScenery () {
|
||||
if (this.user.scenery) {
|
||||
return this.user.settings.soundscape
|
||||
} else {
|
||||
return 'meadow'
|
||||
}
|
||||
},
|
||||
isAuthenticated () {
|
||||
if (this.is_login === true) {
|
||||
this.changeOfflineMode(false)
|
||||
return true
|
||||
} else if (Date.now() < this.nextAuthRequired) {
|
||||
this.changeOfflineMode(true)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
},
|
||||
isOnboardingCompleted: state => state.user?.onboarding_completed === true,
|
||||
isTimerActivated: state => state.user?.timer_activated === true
|
||||
},
|
||||
persist: {
|
||||
strategies: [
|
||||
{
|
||||
storage: localStorage,
|
||||
paths: ['token'] // nur das Token wird gespeichert
|
||||
}
|
||||
]
|
||||
}
|
||||
})
|
||||
|
||||
window.addEventListener('localStorageUpdated', () => {
|
||||
const store = useUserStore()
|
||||
store.soundMode = localStorage.getItem('soundMode') || 'soundscape'
|
||||
})
|
Reference in New Issue
Block a user