import { defineStore } from "pinia"; import type { DamageReportViewModel, CreateDamageReportViewModel, UpdateDamageReportViewModel, } from "@/viewmodels/admin/unit/damageReport/damageReport.models"; import { http } from "@/serverCom"; import type { AxiosResponse } from "axios"; import type { VehicleViewModel } from "@/viewmodels/admin/unit/vehicle/vehicle.models"; import { damageReportDemoData } from "@/demodata/damageReport"; export const useDamageReportStore = defineStore("damageReport", { state: () => { return { damageReports: [] as Array, totalCount: 0 as number, loading: "loading" as "loading" | "fetched" | "failed", }; }, actions: { fetchDamageReports(offset = 0, count = 25, search = "", clear = false) { this.damageReports = damageReportDemoData.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/damageReport?offset=${offset}&count=${count}${search != "" ? "&search=" + search : ""}`) .then((result) => { this.totalCount = result.data.total; result.data.damageReports .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"; }); }, async getAllDamageReports(): Promise> { return await http.get(`/admin/damageReport?noLimit=true`).then((res) => { return { ...res, data: res.data.damageReports }; }); }, async getDamageReportsByIds(ids: Array): Promise> { return await http .post(`/admin/damageReport/ids`, { ids, }) .then((res) => { return { ...res, data: res.data.damageReports }; }); }, async searchDamageReports(search: string): Promise> { return await http.get(`/admin/damageReport?search=${search}&noLimit=true`).then((res) => { return { ...res, data: res.data.damageReports }; }); }, fetchDamageReportById(id: string) { return http.get(`/admin/damageReport/${id}`); }, async createDamageReport(damageReport: CreateDamageReportViewModel): Promise> { const result = await http.post(`/admin/damageReport`, { // TODO: data }); this.fetchDamageReports(); return result; }, async updateDamageReport(damageReport: UpdateDamageReportViewModel): Promise> { const result = await http.patch(`/admin/damageReport/${damageReport.id}`, { // TODO: data }); this.fetchDamageReports(); return result; }, async deleteDamageReport(damageReport: number): Promise> { const result = await http.delete(`/admin/damageReport/${damageReport}`); this.fetchDamageReports(); return result; }, }, });