import { defineStore } from "pinia"; import { http } from "@/serverCom"; import { useNewsletterStore } from "./newsletter"; import type { AxiosResponse } from "axios"; export const useNewsletterPrintoutStore = defineStore("newsletterPrintout", { state: () => { return { printout: [] as Array, loading: "loading" as "loading" | "fetched" | "failed", printing: undefined as undefined | "loading" | "success" | "failed", sending: undefined as undefined | "loading" | "success" | "failed", sendingPreview: undefined as undefined | "loading" | "success" | "failed", }; }, actions: { fetchNewsletterPrintout() { const newsletterId = useNewsletterStore().activeNewsletter; this.loading = "loading"; http .get(`/admin/newsletter/${newsletterId}/printouts`) .then((result) => { this.printout = result.data; this.loading = "fetched"; }) .catch((err) => { this.loading = "failed"; }); }, fetchNewsletterPrintoutById(printout: string): Promise> { const newsletterId = useNewsletterStore().activeNewsletter; return http.get(`/admin/newsletter/${newsletterId}/printout/${printout}`, { responseType: "blob", }); }, fetchNewsletterPrintoutPreview(): Promise> { const newsletterId = useNewsletterStore().activeNewsletter; return http.get(`/admin/newsletter/${newsletterId}/printoutpreview`, { responseType: "blob", }); }, createNewsletterMailPreview() { this.sendingPreview = "loading"; const newsletterId = useNewsletterStore().activeNewsletter; if (newsletterId == null) return; return http .post(`/admin/newsletter/${newsletterId}/mailpreview`) .then((res) => { this.sendingPreview = "success"; }) .catch((err) => { this.sendingPreview = "failed"; }) .finally(() => { setTimeout(() => { this.sendingPreview = undefined; }, 1500); }); }, createNewsletterPrintout() { this.printing = "loading"; const newsletterId = useNewsletterStore().activeNewsletter; if (newsletterId == null) return; return http .post(`/admin/newsletter/${newsletterId}/printout`) .then((res) => { this.fetchNewsletterPrintout(); this.printing = "success"; }) .catch((err) => { this.printing = "failed"; }) .finally(() => { setTimeout(() => { this.printing = undefined; }, 1500); }); }, createNewsletterSend() { this.sending = "loading"; const newsletterId = useNewsletterStore().activeNewsletter; if (newsletterId == null) return; return http .post(`/admin/newsletter/${newsletterId}/send`) .then((res) => { this.sending = "success"; }) .catch((err) => { this.sending = "failed"; }) .finally(() => { setTimeout(() => { this.sending = undefined; }, 1500); }); }, }, });