import {useClient} from '@/plugins/api.js'; import {useAuthStore} from '@/stores/authStore.js'; import {useSessionStorage} from '@vueuse/core'; import {defineStore} from 'pinia'; import {computed, watch} from 'vue'; import {useRouter} from 'vue-router'; export const useCreatorProfileStore = defineStore( 'creator-profile', () => { const router = useRouter(); const authStore = useAuthStore(); watch( () => authStore.isAuthenticated, async (newValue) => { if (newValue) { await fetchCurrentCreatorProfile(); if (value.value === undefined) { await router.push('/'); } else { await router.push(`/@${value.value.name}`); } } 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`); console.log('creatorProfile'); console.dir(creatorResponse.data) value.value = creatorResponse.data; console.dir(value.value); // TODO: no cache-busting ??? } catch (error) { console.log(`!!!`) value.value = undefined; } } async function ConfigureStripeAccount() { try { await client.post(`/api/membership/stripe-account`); return true; } catch (error) { return false; } } return { creator: value, hasCreator, fetchCurrentCreatorProfile, ConfigureStripeAccount, }; });