query.ts 1.9 KB

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