| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import {Query as VuexQuery, Model} 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 du premier item
- * @param {VuexQuery} query
- * @return {Item} l'Item
- */
- public getFirstItem(query: VuexQuery): Item{
- const item = query.first()
- 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<AnyJson>} réponse
- */
- public getFlattenEntries(query: VuexQuery): Array<AnyJson>{
- const entries = this.getCollection(query)
- return entries.map((entry:AnyJson) => {
- return $objectProperties.cloneAndFlatten(entry)
- })
- }
- }
- export const queryHelper = new Query()
|