162 lines
4.6 KiB
JavaScript
162 lines
4.6 KiB
JavaScript
import {defineStore} from 'pinia'
|
|
import OneSignal from "onesignal-cordova-plugin";
|
|
import {Capacitor} from "@capacitor/core";
|
|
// @ts-ignore
|
|
export const useProfileStore = defineStore('profile', () => {
|
|
|
|
const supabase = useSupabaseClient()
|
|
const dataStore = useDataStore()
|
|
const user = useSupabaseUser()
|
|
const toast = useToast()
|
|
const router = useRouter()
|
|
|
|
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([])
|
|
const tenants = ref([])
|
|
const currentTenant = ref(null)
|
|
|
|
|
|
async function initializeData (userId) {
|
|
|
|
let profileconnections = (await supabase.from("profileconnections").select()).data
|
|
let profiles = (await supabase.from("profiles").select("*, role(*)")).data
|
|
let activeProfileConnection = profileconnections.find(i => i.active)
|
|
if(activeProfileConnection) {
|
|
if(!false) {
|
|
toast.add({title: 'Aktives Profil ausgewählt'})
|
|
}
|
|
|
|
console.log("Active Profile selected")
|
|
activeProfile.value = profiles.find(i => i.id === activeProfileConnection.profile_id)
|
|
currentTenant.value = activeProfile.value.tenant
|
|
|
|
if(Capacitor.getPlatform() === "ios") {
|
|
OneSignal.initialize("1295d5ff-28f8-46a6-9c62-fe5d090016d7");
|
|
OneSignal.Location.setShared(false)
|
|
OneSignal.Notifications.requestPermission();
|
|
OneSignal.login(activeProfileConnection.user_id)
|
|
}
|
|
|
|
|
|
await fetchData()
|
|
await dataStore.fetchData()
|
|
} else {
|
|
toast.add({title: 'Kein aktives Profil', color: 'orange'})
|
|
await fetchOwnProfiles()
|
|
await fetchTenants()
|
|
showProfileSelection.value = true
|
|
}
|
|
|
|
|
|
}
|
|
|
|
async function changeProfile(newActiveProfileId) {
|
|
loaded.value = false
|
|
|
|
let profileconnections = (await supabase.from("profileconnections").select()).data
|
|
|
|
let oldActiveProfileConnection = profileconnections.find(i => i.active)
|
|
|
|
const {error} = await supabase.from("profileconnections").update({active: true}).eq("profile_id", newActiveProfileId)
|
|
|
|
if(error) {
|
|
console.log(error)
|
|
} else {
|
|
if(oldActiveProfileConnection){
|
|
const {error} = await supabase.from("profileconnections").update({active: false}).eq("profile_id", oldActiveProfileConnection.profile_id)
|
|
}
|
|
|
|
reloadNuxtApp({
|
|
path:"/",
|
|
ttl: 10000
|
|
})
|
|
}
|
|
}
|
|
|
|
async function fetchData () {
|
|
await fetchOwnProfiles()
|
|
await fetchProfiles()
|
|
|
|
await fetchTenants()
|
|
await fetchOwnTenant()
|
|
|
|
loaded.value = true
|
|
console.log("Finished Loading")
|
|
}
|
|
|
|
function clearStore () {
|
|
loaded.value = false
|
|
ownTenant.value = {}
|
|
profiles.value = []
|
|
ownProfiles.value = []
|
|
tenants.value = []
|
|
}
|
|
|
|
async function fetchOwnTenant () {
|
|
ownTenant.value = (await supabase.from("tenants").select().eq('id', currentTenant.value).single()).data
|
|
}
|
|
|
|
async function fetchProfiles () {
|
|
profiles.value = (await supabase.from("profiles").select().eq("tenant",currentTenant.value).order("lastName")).data
|
|
}
|
|
|
|
async function fetchOwnProfiles () {
|
|
let profiles = (await supabase.from("profiles").select().order("tenant")).data
|
|
let conns = (await supabase.from("profileconnections").select()).data.map(i => i.profile_id)
|
|
ownProfiles.value = profiles.filter(i => conns.includes(i.id))
|
|
}
|
|
|
|
async function fetchTenants () {
|
|
tenants.value = (await supabase.from("tenants").select().order("id",{ascending: true})).data
|
|
}
|
|
|
|
const getOwnProfile = computed(() => {
|
|
return profiles.value.find(i => i.id === user.value.id)
|
|
|
|
})
|
|
|
|
const getProfileById = computed(() => (itemId) => {
|
|
return profiles.value.find(item => item.id === itemId)
|
|
})
|
|
|
|
return {
|
|
//General
|
|
currentTenant,
|
|
loaded,
|
|
showProfileSelection,
|
|
ownTenant,
|
|
initializeData,
|
|
changeProfile,
|
|
|
|
//Data
|
|
profiles,
|
|
ownProfiles,
|
|
activeProfile,
|
|
tenants,
|
|
fetchData,
|
|
clearStore,
|
|
fetchOwnTenant,
|
|
getOwnProfile,
|
|
getProfileById
|
|
}
|
|
|
|
|
|
}) |