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`); value.value = creatorResponse.data; // TODO: no cache-busting ??? } catch (error) { 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, }; });