useDataUtils.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { AnyJson } from '~/types/interfaces'
  2. import {FORM_STATUS, QUERY_TYPE} from "~/types/enums";
  3. import {ref, Ref, useContext, 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. * @class UseDataUtils
  11. * Use Classe qui va récupérer les Accesses suivant des critères de recherche
  12. */
  13. export class UseDataUtils {
  14. private $dataProvider: DataProvider
  15. private route: Ref
  16. private store: Store<any>
  17. constructor() {
  18. const { route, $dataProvider, store } = useContext()
  19. this.$dataProvider = $dataProvider
  20. this.store = store
  21. this.route = route
  22. }
  23. public invoke(): AnyJson{
  24. return {
  25. getItemToEdit: (model: typeof Model) => this.getItemToEdit(model),
  26. createItem: () => this.createItem(),
  27. }
  28. }
  29. /**
  30. * recherche l'item a éditer
  31. * @param model
  32. * @private
  33. */
  34. private getItemToEdit(model: typeof Model){
  35. const id = parseInt(this.route.value.params.id)
  36. const {fetchState} = useFetch(async () => {
  37. await this.$dataProvider.invoke({
  38. type: QUERY_TYPE.MODEL,
  39. model,
  40. id
  41. })
  42. })
  43. return {
  44. fetchState,
  45. id
  46. }
  47. }
  48. /**
  49. * Créer l'Item quand l'utilisateur veux créer un nouvel enregistrement
  50. * @param itemToCreate
  51. * @param model
  52. * @private
  53. */
  54. private createItem(){
  55. this.store.commit('form/setFormStatus', FORM_STATUS.CREATE)
  56. const loading:Ref<Boolean> = ref(true)
  57. const item: Ref<any> = ref('')
  58. const create = async (itemToCreate: AnyJson, model: typeof Model) =>{
  59. item.value = await repositoryHelper.persist(model, itemToCreate)
  60. loading.value = false
  61. }
  62. return {
  63. loading,
  64. create,
  65. item
  66. }
  67. }
  68. }