78 lines
3.0 KiB
JavaScript
78 lines
3.0 KiB
JavaScript
import {computed, watch} from 'vue'
|
|
import {defineStore} from 'pinia'
|
|
import {useAuthStore} from "@/stores/authStore.js";
|
|
import {useClient} from "@/plugins/api.js";
|
|
import {useSessionStorage} from "@vueuse/core";
|
|
|
|
export const useUserStore = defineStore(
|
|
'user',
|
|
() => {
|
|
const authStore = useAuthStore()
|
|
const authWatcher = watch(
|
|
() => authStore.isAuthenticated,
|
|
async (newValue, oldValue) => {
|
|
if (newValue) {
|
|
await fetchCurrentUserProfile()
|
|
} else {
|
|
user.value = undefined
|
|
creator.value = undefined
|
|
}
|
|
})
|
|
|
|
const user = useSessionStorage('user-user', {}, {writeDefaults: false})
|
|
const creator = useSessionStorage('user-creator', {}, {writeDefaults: false})
|
|
|
|
const alias = computed(() => {
|
|
if (user.value) {
|
|
return user.value.alias || `${user.value.firstName || ''} ${user.value.lastName || ''}`.trim() || 'Anonyme'
|
|
}
|
|
return 'Anonyme';
|
|
})
|
|
const portraitUrl = computed(() => {
|
|
return user.value && user.value.portraitUrl
|
|
? user.value.portraitUrl
|
|
: '/images/usersmedia/anonyme/profilepictures/profileAnonymeSquare.png'
|
|
})
|
|
|
|
async function fetchCurrentUserProfile() {
|
|
try {
|
|
const client = useClient()
|
|
const userResponse = await client.get("/api/GetMyUser");
|
|
user.value = userResponse.data
|
|
|
|
try {
|
|
const creatorId = userResponse.data.id
|
|
const creatorResponse = await client.get(`/api/creators/${creatorId}`)
|
|
creator.value = creatorResponse.data
|
|
} catch (error) {
|
|
creator.value = undefined
|
|
}
|
|
} catch (error) {
|
|
user.value = undefined;
|
|
}
|
|
}
|
|
|
|
async function updateCurrentUser(userModel, profilePicture) {
|
|
const client = useClient()
|
|
await client.patch("/api/UpdateMyUser/profile", userModel)
|
|
|
|
if (typeof userModel.storedDataUrls.profilePictureUrl !== "object") {
|
|
const haveNewProfilePicture = profilePicture !== null && profilePicture.size !== 0;
|
|
const updateProfilePictureEndpoint = haveNewProfilePicture ? `/api/UpdateMyUser/profile-picture` : `/api/UpdateMyUser/profile-picture?url=${userModel.storedDataUrls.profilePictureUrl}`;
|
|
const response = await client.post(updateProfilePictureEndpoint, profilePicture, {
|
|
headers: {
|
|
'Content-Type': profilePicture?.type ?? "application/octet-stream",
|
|
}
|
|
});
|
|
|
|
if (haveNewProfilePicture) {
|
|
this.user.value.portraitUrl = response.data;
|
|
}
|
|
}
|
|
|
|
this.user.value = userModel;
|
|
}
|
|
|
|
return {user, creator, alias, portraitUrl}
|
|
})
|