diff --git a/src/main.js b/src/main.js index 3f80faf..950b618 100644 --- a/src/main.js +++ b/src/main.js @@ -11,8 +11,9 @@ import * as directives from 'vuetify/directives' import vueGoogleOauth from 'vue3-google-login' import {useSubscriptionStore} from "@/stores/subscriptionStore.js"; import {useAuthStore} from "@/stores/authStore.js"; -import {useUserStore} from "@/stores/userStore.js"; import i18n from './i18n.js'; +import {useUserProfileStore} from "@/stores/userProfileStore.js"; +import {useCreatorProfileStore} from "@/stores/creatorProfileStore.js"; const vuetify = createVuetify({ components, @@ -31,9 +32,10 @@ const app = createApp(App) // Make $t globally available app.config.globalProperties.$t = i18n.global.t; -// this force the creation of the stores -const subscriptionStore = useSubscriptionStore() -const authStore = useAuthStore() -const userStore = useUserStore() +// this force the creation and initialization of the stores +useSubscriptionStore() +useAuthStore() +useUserProfileStore() +useCreatorProfileStore() app.mount('#app'); diff --git a/src/stores/brandingStore.js b/src/stores/brandingStore.js new file mode 100644 index 0000000..6e8fb59 --- /dev/null +++ b/src/stores/brandingStore.js @@ -0,0 +1,53 @@ +import {defineStore} from 'pinia' +import {useClient} from "@/plugins/api.js"; +import {useSessionStorage} from "@vueuse/core"; +import {onBeforeMount, ref, watch} from "vue"; +import {useRoute} from "vue-router"; + +export const useBrandingStore = defineStore( + 'branding', + () => { + + const currentBrand = ref('') + + const value = useSessionStorage( + 'branding', + {}, + {writeDefaults: false}) + + const loading = ref(true) + + const route = useRoute() + + onBeforeMount(async () => await fetchCreatorData(route.params.creator)) + + watch( + () => route.params.creator, + async () => { + console.log(`creator: ${route.params.creator}`) + console.log(`currentBrand: ${currentBrand.value}`) + if (route.params.creator != currentBrand.value) { + await fetchCreatorData(route.params.creator); + currentBrand.value = route.params.creator + } + } + ) + + const fetchCreatorData = async (creatorAlias) => { + try { + loading.value = true + const client = useClient() + const response = await client.get(`/api/creators/@${creatorAlias}`) + value.value = response.data + } catch (error) { + console.error(`Error fetching content: ${error}`) + } finally { + loading.value = false + } + } + + return { + value, + loading + } + }) diff --git a/src/stores/creatorProfileStore.js b/src/stores/creatorProfileStore.js new file mode 100644 index 0000000..7b15ccd --- /dev/null +++ b/src/stores/creatorProfileStore.js @@ -0,0 +1,47 @@ +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 useCreatorProfileStore = defineStore( + 'creator-profile', + () => { + const authStore = useAuthStore() + + const authWatcher = watch( + () => authStore.isAuthenticated, + async (newValue) => { + if (newValue) { + await fetchCurrentCreatorProfile() + } else { + value.value = undefined + } + }) + + const value = useSessionStorage( + 'creator-profile', + {}, + {writeDefaults: false}) + + const hasCreator = computed(() => + value.value + && Object.getOwnPropertyNames(value.value).length >= 1) + + const client = useClient() + + async function fetchCurrentCreatorProfile() { + try { + const creatorResponse = await client.get(`/api/creators/profile`) + value.value = creatorResponse.data + // TODO: no cache-busting ??? + } catch (error) { + value.value = undefined + } + } + + return { + creator: value, + hasCreator + } + }) diff --git a/src/stores/userStore.js b/src/stores/userProfileStore.js similarity index 66% rename from src/stores/userStore.js rename to src/stores/userProfileStore.js index b702e66..6cd490d 100644 --- a/src/stores/userStore.js +++ b/src/stores/userProfileStore.js @@ -4,38 +4,30 @@ import {useAuthStore} from "@/stores/authStore.js"; import {useClient} from "@/plugins/api.js"; import {useSessionStorage} from "@vueuse/core"; -export const useUserStore = defineStore( - 'user', +export const useUserProfileStore = defineStore( + 'user-profile', () => { + const authStore = useAuthStore() + const authWatcher = watch( () => authStore.isAuthenticated, async (newValue) => { if (newValue) { await fetchCurrentUserProfile() - await fetchCurrentCreatorProfile() } else { - user.value = undefined - creator.value = undefined + value.value = undefined } }) - const user = useSessionStorage( - 'user-user', + const value = useSessionStorage( + 'user-profile', {}, {writeDefaults: false}) - const creator = useSessionStorage( - 'user-creator', - {}, - {writeDefaults: false}) - - const hasCreator = computed(() => - creator.value - && Object.getOwnPropertyNames(creator.value).length >= 1) const fullname = computed(() => { - if (user.value) { - const {firstname, lastname} = user.value; + if (value.value) { + const {firstname, lastname} = value.value; if (firstname && lastname) { return `${lastname}, ${firstname}`; @@ -49,38 +41,29 @@ export const useUserStore = defineStore( }) const alias = computed(() => { - if (user.value) { - return user.value.alias || `${user.value.firstname || ''} ${user.value.lastname || ''}`.trim() || 'Anonyme' + if (value.value) { + return value.value.alias || `${value.value.firstname || ''} ${value.value.lastname || ''}`.trim() || 'Anonyme' } return 'Anonyme'; }) + const portraitUrl = computed(() => { - return user.value && user.value.portraitUrl - ? user.value.portraitUrl + return value.value && value.value.portraitUrl + ? value.value.portraitUrl : '/images/usersmedia/anonyme/profilepictures/profileAnonymeSquare.png' }) - const client = useClient() - async function fetchCurrentUserProfile() { try { + const client = useClient() const userResponse = await client.get("/api/users/profile"); - user.value = userResponse.data + value.value = userResponse.data // Cache-busting only if portraitUrl exists - if (user.value.portraitUrl) { - user.value.portraitUrl = `${user.value.portraitUrl}?${Date.now()}`; + if (value.value.portraitUrl) { + value.value.portraitUrl = `${value.value.portraitUrl}?${Date.now()}`; } } catch (error) { - user.value = undefined; - } - } - - async function fetchCurrentCreatorProfile() { - try { - const creatorResponse = await client.get(`/api/creators/profile`) - creator.value = creatorResponse.data - } catch (error) { - creator.value = undefined + value.value = undefined; } } @@ -92,8 +75,8 @@ export const useUserStore = defineStore( firstname: firstname, lastname: lastname }) - user.value.firstname = firstname; - user.value.lastname = lastname; + value.value.firstname = firstname; + value.value.lastname = lastname; } catch (error) { console.error(error) } @@ -106,7 +89,7 @@ export const useUserStore = defineStore( { alias: alias }) - user.value.alias = alias; + value.value.alias = alias; } catch (error) { console.error(error) } @@ -119,7 +102,7 @@ export const useUserStore = defineStore( { birthdate: birthdate }) - user.value.birthDate = birthdate; + value.value.birthDate = birthdate; } catch (error) { console.error(error) } @@ -132,7 +115,7 @@ export const useUserStore = defineStore( { phoneNumber: phoneNumber }) - user.value.phoneNumber = phoneNumber; + value.value.phoneNumber = phoneNumber; } catch (error) { console.error(error) } @@ -145,7 +128,7 @@ export const useUserStore = defineStore( { email: email }) - user.value.email = email; + value.value.email = email; } catch (error) { console.error(error) } @@ -158,12 +141,12 @@ export const useUserStore = defineStore( { address: address }) - user.value.address = address; + value.value.address = address; } catch (error) { console.error(error) } } - + async function changePortrait(selectedFile) { try { const formData = new FormData(); @@ -172,18 +155,16 @@ export const useUserStore = defineStore( const response = await client.post( `/api/users/portrait`, formData) - - user.value.portraitUrl = `${response.data.blobUrl}?${Date.now()}` // the Date.now() is for cache-busting + + value.value.portraitUrl = `${response.data.blobUrl}?${Date.now()}` // the Date.now() is for cache-busting } catch (error) { console.error(error) } } return { - user, - creator, + user: value, alias, - hasCreator, fullname, portraitUrl, changeFullname, @@ -192,7 +173,6 @@ export const useUserStore = defineStore( changePhone, changeEmail, changeAddress, - changePortrait, - fetchCurrentCreatorProfile + changePortrait } }) diff --git a/src/views/contents/ContentCard.vue b/src/views/contents/ContentCard.vue index 8fb9d47..151ed39 100644 --- a/src/views/contents/ContentCard.vue +++ b/src/views/contents/ContentCard.vue @@ -72,13 +72,7 @@ {{ messageCount }} - + diff --git a/src/views/contents/PublishContentButton.vue b/src/views/contents/PublishContentButton.vue index f87c946..a277a7e 100644 --- a/src/views/contents/PublishContentButton.vue +++ b/src/views/contents/PublishContentButton.vue @@ -1,8 +1,9 @@  \ No newline at end of file diff --git a/src/views/creators/CreatorHome.vue b/src/views/creators/CreatorHome.vue index a7bfa2b..7bf4e4f 100644 --- a/src/views/creators/CreatorHome.vue +++ b/src/views/creators/CreatorHome.vue @@ -5,11 +5,9 @@ -
-

{{ userStore.creator.about.title }}

-

- {{ userStore.creator.about.description }} -

+
+

TEST

+

GET ME AN EDITOR NOW!

@@ -17,10 +15,12 @@