query.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import {Query as VuexQuery} from "@vuex-orm/core";
  2. import {$objectProperties} from "~/services/utils/objectProperties";
  3. import {AnyJson} from "~/types/interfaces";
  4. import {Collection, Item} from "@vuex-orm/core/dist/src/data/Data";
  5. /**
  6. * @category Services/store
  7. * @class Query
  8. * Classe Wrapper pour assurer les opérations les plus communes des Query de VuexORM
  9. */
  10. class Query{
  11. /**
  12. * Récupération de l'Item souhaité
  13. * @param {VuexQuery} query
  14. * @param {number} id
  15. * @return {Item} l'Item
  16. */
  17. public getItem(query: VuexQuery, id:number): Item{
  18. const item = query.find(id)
  19. if(!item || typeof item === "undefined")
  20. throw new Error('item not found')
  21. return item;
  22. }
  23. /**
  24. * Récupération la collection de la Query
  25. * @param {VuexQuery} query
  26. * @return {Collection} Array d'Item
  27. */
  28. public getCollection(query: VuexQuery):Collection{
  29. return query.get()
  30. }
  31. /**
  32. * Récupération de l'Item souhaité puis transformation en JSON applatit
  33. * @param {VuexQuery} query
  34. * @param {number} id
  35. * @return {AnyJson} réponse
  36. */
  37. public getFlattenEntry(query: VuexQuery, id:number): AnyJson{
  38. return $objectProperties.cloneAndFlatten(this.getItem(query, id) as AnyJson);
  39. }
  40. /**
  41. * Récupération la collection de la Query puis transformation en JSON applatit
  42. * @param {VuexQuery} query
  43. * @return {Array<AnyJson>} réponse
  44. */
  45. public getFlattenEntries(query: VuexQuery): Array<AnyJson>{
  46. const entries = this.getCollection(query)
  47. return entries.map((entry:AnyJson) => {
  48. return $objectProperties.cloneAndFlatten(entry)
  49. })
  50. }
  51. }
  52. export const queryHelper = new Query()