useDataUtils.ts 1.6 KB

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