import { defineStore } from "pinia"; import type { CreateOrUpdateMembershipStatusViewModel, MembershipStatusViewModel, } from "../../viewmodels/admin/membershipStatus.models"; import { http } from "../../serverCom"; export const useMembershipStatusStore = defineStore("membershipStatus", { state: () => { return { membershipStatuss: [] as Array, membershipStatus: null as null | MembershipStatusViewModel, loadingAll: "loading" as "loading" | "fetched" | "failed", loadingSingle: "loading" as "loading" | "fetched" | "failed", createStatus: null as null | "loading" | { status: "success" | "failed"; reason?: string }, updateStatus: null as null | "loading" | { status: "success" | "failed"; reason?: string }, deleteStatus: null as null | "loading" | { status: "success" | "failed"; reason?: string }, }; }, actions: { resetStatus() { this.createStatus = null; this.updateStatus = null; this.deleteStatus = null; }, fetchMembershipStatuss() { this.loadingAll = "loading"; http .get("/admin/membershipStatus") .then((result) => { this.membershipStatuss = result.data; this.loadingAll = "fetched"; }) .catch((err) => { this.loadingAll = "failed"; }); }, fetchMembershipStatusById(id: number) { this.membershipStatus = null; this.loadingSingle = "loading"; http .get(`/admin/membershipStatus/${id}`) .then((result) => { this.membershipStatus = result.data; this.loadingSingle = "fetched"; }) .catch((err) => { this.loadingSingle = "failed"; }); }, createMembershipStatus(membershipStatus: CreateOrUpdateMembershipStatusViewModel) { this.createStatus = "loading"; http .post(`/admin/membershipStatus`, { membershipStatus: membershipStatus.status, }) .then((result) => { this.createStatus = { status: "success" }; this.fetchMembershipStatuss(); }) .catch((err) => { this.createStatus = { status: "failed" }; }); }, updateActiveMembershipStatus(membershipStatus: CreateOrUpdateMembershipStatusViewModel) { if (this.membershipStatus == null) return; let id = this.membershipStatus.id; this.updateStatus = "loading"; http .patch(`/admin/membershipStatus/${id}`, { membershipStatus: membershipStatus.status, }) .then((result) => { this.updateStatus = { status: "success" }; this.fetchMembershipStatusById(id); this.fetchMembershipStatuss(); }) .catch((err) => { this.updateStatus = { status: "failed" }; }); }, deleteMembershipStatus(membershipStatus: number) { this.deleteStatus = "loading"; http .delete(`/admin/membershipStatus/${membershipStatus}`) .then((res) => { this.deleteStatus = { status: "success" }; this.fetchMembershipStatuss(); }) .catch((err) => { this.deleteStatus = { status: "failed", reason: err.data }; }); }, }, });