query.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import {Query as VuexQuery, Model} 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 du premier item
  25. * @param {VuexQuery} query
  26. * @return {Item} l'Item
  27. */
  28. public getFirstItem(query: VuexQuery): Item{
  29. const item = query.first()
  30. if(!item || typeof item === "undefined")
  31. throw new Error('item not found')
  32. return item;
  33. }
  34. /**
  35. * Récupération la collection de la Query
  36. * @param {VuexQuery} query
  37. * @return {Collection} Array d'Item
  38. */
  39. public getCollection(query: VuexQuery):Collection{
  40. return query.get()
  41. }
  42. /**
  43. * Récupération de l'Item souhaité puis transformation en JSON applatit
  44. * @param {VuexQuery} query
  45. * @param {number} id
  46. * @return {AnyJson} réponse
  47. */
  48. public getFlattenEntry(query: VuexQuery, id:number): AnyJson{
  49. return $objectProperties.cloneAndFlatten(this.getItem(query, id) as AnyJson);
  50. }
  51. /**
  52. * Récupération la collection de la Query puis transformation en JSON applatit
  53. * @param {VuexQuery} query
  54. * @return {Array<AnyJson>} réponse
  55. */
  56. public getFlattenEntries(query: VuexQuery): Array<AnyJson>{
  57. const entries = this.getCollection(query)
  58. return entries.map((entry:AnyJson) => {
  59. return $objectProperties.cloneAndFlatten(entry)
  60. })
  61. }
  62. }
  63. export const queryHelper = new Query()