import {Query as VuexQuery} from "@vuex-orm/core"; import {$objectProperties} from "~/services/utils/objectProperties"; import {AnyJson} from "~/types/interfaces"; import {Collection, Item} from "@vuex-orm/core/dist/src/data/Data"; /** * @category Services/store * @class Query * Classe Wrapper pour assurer les opérations les plus communes des Query de VuexORM */ class Query{ /** * Récupération de l'Item souhaité * @param {VuexQuery} query * @param {number} id * @return {Item} l'Item */ public getItem(query: VuexQuery, id:number): Item{ const item = query.find(id) if(!item || typeof item === "undefined") throw new Error('item not found') return item; } /** * Récupération la collection de la Query * @param {VuexQuery} query * @return {Collection} Array d'Item */ public getCollection(query: VuexQuery):Collection{ return query.get() } /** * Récupération de l'Item souhaité puis transformation en JSON applatit * @param {VuexQuery} query * @param {number} id * @return {AnyJson} réponse */ public getFlattenEntry(query: VuexQuery, id:number): AnyJson{ return $objectProperties.cloneAndFlatten(this.getItem(query, id) as AnyJson); } /** * Récupération la collection de la Query puis transformation en JSON applatit * @param {VuexQuery} query * @return {Array} réponse */ public getFlattenEntries(query: VuexQuery): Array{ const entries = this.getCollection(query) return entries.map((entry:AnyJson) => { return $objectProperties.cloneAndFlatten(entry) }) } } export const queryHelper = new Query()