import { AnyJson } from '~/types/interfaces' import {FORM_STATUS, QUERY_TYPE} from "~/types/enums"; import {ref, Ref, useContext, useFetch} from '@nuxtjs/composition-api' import DataProvider from "~/services/data/dataProvider"; import {Model} from "@vuex-orm/core"; import {repositoryHelper} from "~/services/store/repository"; import {Store} from "vuex"; /** * @category composables/data * @class UseDataUtils * Use Classe qui va récupérer les Accesses suivant des critères de recherche */ export class UseDataUtils { private $dataProvider: DataProvider private route: Ref private store: Store constructor() { const { route, $dataProvider, store } = useContext() this.$dataProvider = $dataProvider this.store = store this.route = route } public invoke(): AnyJson{ return { getItemToEdit: (model: typeof Model) => this.getItemToEdit(model), createItem: () => this.createItem(), } } /** * recherche l'item a éditer * @param model * @private */ private getItemToEdit(model: typeof Model){ const id = parseInt(this.route.value.params.id) const {fetchState} = useFetch(async () => { await this.$dataProvider.invoke({ type: QUERY_TYPE.MODEL, model, id }) }) return { fetchState, id } } /** * Créer l'Item quand l'utilisateur veux créer un nouvel enregistrement * @param itemToCreate * @param model * @private */ private createItem(){ this.store.commit('form/setFormStatus', FORM_STATUS.CREATE) const loading:Ref = ref(true) const item: Ref = ref('') const create = async (itemToCreate: AnyJson, model: typeof Model) =>{ item.value = await repositoryHelper.persist(model, itemToCreate) loading.value = false } return { loading, create, item } } }