useDataUtils.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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 l'item a éditer et alimente le dataprovider
  16. * @param route
  17. * @param model
  18. */
  19. function getItemToEdit(route: Ref, model: typeof Model){
  20. const id = parseInt(route.value.params.id)
  21. if(!id){
  22. throw new Error('id must be exist')
  23. }
  24. const {fetchState} = useFetch(async () => {
  25. await $dataProvider.invoke({
  26. type: QUERY_TYPE.MODEL,
  27. model,
  28. id
  29. })
  30. })
  31. return {
  32. fetchState,
  33. id
  34. }
  35. }
  36. /**
  37. * Créer l'Item quand l'utilisateur veux créer un nouvel enregistrement
  38. * @param store
  39. * @param model
  40. */
  41. function createItem(store: Store<any>, model: typeof Model){
  42. store.commit('form/setFormStatus', FORM_STATUS.CREATE)
  43. const loading:Ref<Boolean> = ref(true)
  44. const item: Ref<any> = ref('')
  45. const create = async (itemToCreate: AnyJson) =>{
  46. item.value = await repositoryHelper.persist(model, itemToCreate)
  47. loading.value = false
  48. }
  49. return {
  50. loading,
  51. create,
  52. item
  53. }
  54. }
  55. return {
  56. getItemToEdit,
  57. createItem
  58. }
  59. }