126 lines
3.4 KiB
JavaScript
126 lines
3.4 KiB
JavaScript
import { defineStore } from "pinia"
|
|
import OneSignal from "onesignal-cordova-plugin"
|
|
import { Capacitor } from "@capacitor/core"
|
|
|
|
export const useProfileStore = defineStore("profile", () => {
|
|
const auth = useAuthStore()
|
|
const dataStore = useDataStore()
|
|
const toast = useToast()
|
|
const tempStore = useTempStore()
|
|
|
|
const loaded = ref(false)
|
|
const showProfileSelection = ref(false)
|
|
|
|
const ownTenant = ref({
|
|
calendarConfig: { eventTypes: [] },
|
|
timeConfig: { timeTypes: [] },
|
|
tags: { documents: [], products: [] },
|
|
measures: []
|
|
})
|
|
|
|
const profiles = ref([])
|
|
const ownProfiles = ref([])
|
|
const activeProfile = ref(null)
|
|
const tenants = ref([])
|
|
const currentTenant = ref(null)
|
|
|
|
const syncFromAuth = () => {
|
|
currentTenant.value = auth.activeTenant || null
|
|
activeProfile.value = auth.profile || null
|
|
tenants.value = auth.tenants || []
|
|
}
|
|
|
|
async function initializeData() {
|
|
await auth.fetchMe()
|
|
syncFromAuth()
|
|
|
|
if (activeProfile.value?.temp_config) {
|
|
tempStore.setStoredTempConfig(activeProfile.value.temp_config)
|
|
}
|
|
|
|
if (currentTenant.value) {
|
|
await fetchData()
|
|
await dataStore.fetchData()
|
|
|
|
if (Capacitor.getPlatform() === "ios" && activeProfile.value?.user_id) {
|
|
OneSignal.initialize("1295d5ff-28f8-46a6-9c62-fe5d090016d7")
|
|
OneSignal.Location.setShared(false)
|
|
OneSignal.Notifications.requestPermission()
|
|
OneSignal.login(activeProfile.value.user_id)
|
|
}
|
|
} else {
|
|
toast.add({ title: "Kein aktiver Tenant", color: "orange" })
|
|
showProfileSelection.value = true
|
|
}
|
|
}
|
|
|
|
async function changeProfile(newActiveTenantId) {
|
|
loaded.value = false
|
|
await auth.switchTenant(String(newActiveTenantId))
|
|
}
|
|
|
|
async function fetchData() {
|
|
await fetchOwnProfiles()
|
|
await fetchProfiles()
|
|
await fetchTenants()
|
|
await fetchOwnTenant()
|
|
loaded.value = true
|
|
}
|
|
|
|
function clearStore() {
|
|
loaded.value = false
|
|
ownTenant.value = {}
|
|
profiles.value = []
|
|
ownProfiles.value = []
|
|
tenants.value = []
|
|
}
|
|
|
|
async function fetchOwnTenant() {
|
|
syncFromAuth()
|
|
ownTenant.value = auth.activeTenantData || ownTenant.value
|
|
}
|
|
|
|
async function fetchProfiles() {
|
|
try {
|
|
const res = await useNuxtApp().$api("/api/tenant/profiles")
|
|
profiles.value = res?.data || []
|
|
} catch (e) {
|
|
profiles.value = activeProfile.value ? [activeProfile.value] : []
|
|
}
|
|
}
|
|
|
|
async function fetchOwnProfiles() {
|
|
ownProfiles.value = profiles.value
|
|
}
|
|
|
|
async function fetchTenants() {
|
|
syncFromAuth()
|
|
}
|
|
|
|
const getOwnProfile = computed(() => {
|
|
return activeProfile.value
|
|
})
|
|
|
|
const getProfileById = computed(() => (itemId) => {
|
|
return profiles.value.find((item) => item.id === itemId || item.user_id === itemId)
|
|
})
|
|
|
|
return {
|
|
currentTenant,
|
|
loaded,
|
|
showProfileSelection,
|
|
ownTenant,
|
|
initializeData,
|
|
changeProfile,
|
|
profiles,
|
|
ownProfiles,
|
|
activeProfile,
|
|
tenants,
|
|
fetchData,
|
|
clearStore,
|
|
fetchOwnTenant,
|
|
getOwnProfile,
|
|
getProfileById
|
|
}
|
|
})
|