import { defineStore } from "pinia"; import { http } from "@/serverCom"; import { useWearableStore } from "./wearable"; import type { DamageReportViewModel } from "@/viewmodels/admin/unit/damageReport/damageReport.models"; import { damageReportDemoData } from "@/demodata/damageReport"; export const useWearableDamageReportStore = defineStore("wearableDamageReport", { state: () => { return { damageReports: [] as Array, totalCount: 0 as number, loading: "loading" as "loading" | "fetched" | "failed", }; }, actions: { fetchDamageReportForWearable(offset = 0, count = 25, search = "", clear = false) { const wearableId = useWearableStore().activeWearable; this.damageReports = damageReportDemoData .filter((drdd) => drdd.relatedId == wearableId) .map((e, i) => ({ ...e, tab_pos: i })); this.totalCount = this.damageReports.length; this.loading = "fetched"; return; if (clear) this.damageReports = []; this.loading = "loading"; http .get( `/admin/wearable/${wearableId}/damageReport?offset=${offset}&count=${count}${search != "" ? "&search=" + search : ""}` ) .then((result) => { this.totalCount = result.data.total; result.data.reports .filter((elem: DamageReportViewModel) => this.damageReports.findIndex((m) => m.id == elem.id) == -1) .map((elem: DamageReportViewModel, index: number): DamageReportViewModel & { tab_pos: number } => { return { ...elem, tab_pos: index + offset, }; }) .forEach((elem: DamageReportViewModel & { tab_pos: number }) => { this.damageReports.push(elem); }); this.loading = "fetched"; }) .catch((err) => { this.loading = "failed"; }); }, }, });