import { defineStore } from "pinia"; import type { RespiratoryGearViewModel, CreateRespiratoryGearViewModel, UpdateRespiratoryGearViewModel, } from "@/viewmodels/admin/unit/respiratoryGear/respiratoryGear.models"; import { http } from "@/serverCom"; import type { AxiosResponse } from "axios"; import { respiratoryGearDemoData } from "@/demodata/respiratoryGear"; export const useRespiratoryGearStore = defineStore("respiratoryGear", { state: () => { return { respiratoryGears: [] as Array, totalCount: 0 as number, loading: "loading" as "loading" | "fetched" | "failed", activeRespiratoryGear: null as string | null, activeRespiratoryGearObj: null as RespiratoryGearViewModel | null, loadingActive: "loading" as "loading" | "fetched" | "failed", }; }, actions: { fetchRespiratoryGears(offset = 0, count = 25, search = "", clear = false) { this.respiratoryGears = respiratoryGearDemoData.map((e, i) => ({ ...e, tab_pos: i })); this.totalCount = this.respiratoryGears.length; this.loading = "fetched"; return; if (clear) this.respiratoryGears = []; this.loading = "loading"; http .get(`/admin/respiratoryGear?offset=${offset}&count=${count}${search != "" ? "&search=" + search : ""}`) .then((result) => { this.totalCount = result.data.total; result.data.respiratoryGears .filter((elem: RespiratoryGearViewModel) => this.respiratoryGears.findIndex((m) => m.id == elem.id) == -1) .map((elem: RespiratoryGearViewModel, index: number): RespiratoryGearViewModel & { tab_pos: number } => { return { ...elem, tab_pos: index + offset, }; }) .forEach((elem: RespiratoryGearViewModel & { tab_pos: number }) => { this.respiratoryGears.push(elem); }); this.loading = "fetched"; }) .catch((err) => { this.loading = "failed"; }); }, async getAllRespiratoryGears(): Promise> { return await http.get(`/admin/respiratoryGear?noLimit=true`).then((res) => { return { ...res, data: res.data.respiratoryGears }; }); }, async searchRespiratoryGears(search: string): Promise> { return await http.get(`/admin/respiratoryGear?search=${search}&noLimit=true`).then((res) => { return { ...res, data: res.data.respiratoryGears }; }); }, fetchRespiratoryGearByActiveId() { this.activeRespiratoryGearObj = respiratoryGearDemoData.find( (e) => e.id == this.activeRespiratoryGear ) as RespiratoryGearViewModel; this.loading = "fetched"; return; this.loadingActive = "loading"; http .get(`/admin/respiratoryGear/${this.activeRespiratoryGear}`) .then((res) => { this.activeRespiratoryGearObj = res.data; this.loadingActive = "fetched"; }) .catch((err) => { this.loadingActive = "failed"; }); }, fetchRespiratoryGearById(id: string) { return http.get(`/admin/respiratoryGear/${id}`); }, async createRespiratoryGear(respiratoryGear: CreateRespiratoryGearViewModel): Promise> { const result = await http.post(`/admin/respiratoryGear`, { // TODO: data }); this.fetchRespiratoryGears(); return result; }, async updateActiveRespiratoryGear( respiratoryGear: UpdateRespiratoryGearViewModel ): Promise> { const result = await http.patch(`/admin/respiratoryGear/${respiratoryGear.id}`, { // TODO: data }); this.fetchRespiratoryGears(); return result; }, async deleteRespiratoryGear(respiratoryGear: number): Promise> { const result = await http.delete(`/admin/respiratoryGear/${respiratoryGear}`); this.fetchRespiratoryGears(); return result; }, }, });