import { defineStore } from "pinia"; import type { CreateAwardViewModel, UpdateAwardViewModel, AwardViewModel } from "../../viewmodels/admin/award.models"; import { http } from "../../serverCom"; import type { AxiosResponse } from "axios"; import type { MemberViewModel } from "../../viewmodels/admin/member.models"; export const useMemberStore = defineStore("member", { state: () => { return { members: [] as Array, totalCount: 0 as number, loading: "loading" as "loading" | "fetched" | "failed", activeMember: null as null | MemberViewModel, }; }, actions: { fetchMembers(offset = 0, count = 25, clear = false) { if (clear) this.members = []; this.loading = "loading"; http .get(`/admin/member?offset=${offset}&count=${count}`) .then((result) => { this.members = result.data.members; this.totalCount = result.data.total; result.data.members .filter((elem: MemberViewModel) => this.members.findIndex((m) => m.id == elem.id) == -1) .map((elem: MemberViewModel, index: number): MemberViewModel & { tab_pos: number } => { return { ...elem, tab_pos: index + offset, }; }) .forEach((elem: MemberViewModel & { tab_pos: number }) => { this.members.push(elem); }); this.loading = "fetched"; }) .catch((err) => { this.loading = "failed"; }); }, }, });