48 lines
1.4 KiB
JavaScript
48 lines
1.4 KiB
JavaScript
import {defineStore} from "pinia";
|
|
import {useSessionStorage} from "@vueuse/core";
|
|
import {useClient} from "@/plugins/api.js";
|
|
import {useAuthStore} from "@/stores/authStore.js";
|
|
import {watch, onMounted} from "vue";
|
|
|
|
export const useSubscriptionStore = defineStore(
|
|
'subscription',
|
|
() => {
|
|
|
|
const authStore = useAuthStore()
|
|
|
|
watch(
|
|
() => authStore.isAuthenticated,
|
|
async (newValue) => {
|
|
if (newValue) {
|
|
await loadSubscriptions()
|
|
} else {
|
|
subscriptions.value = {}
|
|
}
|
|
})
|
|
|
|
const subscriptions = useSessionStorage(
|
|
'subscription-subscriptions',
|
|
{})
|
|
|
|
function isSubscribeTo(creatorId) {
|
|
return !!subscriptions.value[creatorId];
|
|
}
|
|
|
|
async function loadSubscriptions() {
|
|
try {
|
|
const client = useClient()
|
|
const response = await client.get(`/api/membership/active`);
|
|
|
|
subscriptions.value = response.data.reduce(
|
|
(acc, sub) => {
|
|
acc[sub.creatorId] = sub;
|
|
return acc;
|
|
},
|
|
{});
|
|
} catch (error) {
|
|
console.error("Error loading subscriptions:", error);
|
|
}
|
|
}
|
|
|
|
return {subscriptions, isSubscribeTo}
|
|
}); |