useDataUtils.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { AnyJson } from '~/types/interfaces'
  2. import {FORM_STATUS, QUERY_TYPE} from "~/types/enums";
  3. import {ref, Ref, useFetch} from '@nuxtjs/composition-api'
  4. import DataProvider from "~/services/data/dataProvider";
  5. import {Model} from "@vuex-orm/core";
  6. import {repositoryHelper} from "~/services/store/repository";
  7. import {Store} from "vuex";
  8. /**
  9. * @category composables/data
  10. * @param $dataProvider
  11. * Composable Classe qui va récupérer les Accesses suivant des critères de recherche
  12. */
  13. export function useDataUtils($dataProvider: DataProvider){
  14. /**
  15. * recherche la collection d'item et alimente le dataprovider
  16. * @param model
  17. * @param rootModel
  18. * @param rootId
  19. */
  20. function getCollection(model: typeof Model, rootModel?: typeof Model, rootId?: number){
  21. const {fetchState} = useFetch(async () => {
  22. await $dataProvider.invoke({
  23. type: QUERY_TYPE.MODEL,
  24. model: model,
  25. rootModel: rootModel,
  26. rootId: rootId
  27. })
  28. })
  29. return {
  30. fetchState
  31. }
  32. }
  33. /**
  34. * recherche l'item a éditer et alimente le dataprovider
  35. * @param id
  36. * @param model
  37. */
  38. function getItemToEdit(id: string|number, model: typeof Model){
  39. if(!id){
  40. throw new Error('id must be exist')
  41. }
  42. const {fetchState} = useFetch(async () => {
  43. await $dataProvider.invoke({
  44. type: QUERY_TYPE.MODEL,
  45. model,
  46. id,
  47. showProgress: process.browser
  48. })
  49. })
  50. return {
  51. fetchState
  52. }
  53. }
  54. /**
  55. * Créer l'Item quand l'utilisateur veux créer un nouvel enregistrement
  56. * @param store
  57. * @param model
  58. */
  59. function createItem(store: Store<any>, model: typeof Model){
  60. store.commit('form/setFormStatus', FORM_STATUS.CREATE)
  61. const loading:Ref<Boolean> = ref(true)
  62. const item: Ref<any> = ref('')
  63. const create = async (itemToCreate: AnyJson) =>{
  64. item.value = await repositoryHelper.persist(model, itemToCreate)
  65. loading.value = false
  66. }
  67. return {
  68. loading,
  69. create,
  70. item
  71. }
  72. }
  73. return {
  74. getCollection,
  75. getItemToEdit,
  76. createItem
  77. }
  78. }