import { type Ref, defineComponent, inject, onMounted, ref } from 'vue'; import EventService from './event.service'; import { type IEvent } from '@/shared/model/event.model'; import useDataUtils from '@/shared/data/data-utils.service'; import { useAlertService } from '@/shared/alert/alert.service'; export default defineComponent({ compatConfig: { MODE: 3 }, name: 'Event', setup() { const dataUtils = useDataUtils(); const eventService = inject('eventService', () => new EventService()); const alertService = inject('alertService', () => useAlertService(), true); const events: Ref = ref([]); const isFetching = ref(false); const clear = () => {}; const retrieveEvents = async () => { isFetching.value = true; try { const res = await eventService().retrieve(); events.value = res.data; } catch (err) { alertService.showHttpError(err.response); } finally { isFetching.value = false; } }; const handleSyncList = () => { retrieveEvents(); }; onMounted(async () => { await retrieveEvents(); }); const removeId: Ref = ref(null); const removeEntity = ref(null); const prepareRemove = (instance: IEvent) => { removeId.value = instance.id; removeEntity.value.show(); }; const closeDialog = () => { removeEntity.value.hide(); }; const removeEvent = async () => { try { await eventService().delete(removeId.value); const message = `A Event is deleted with identifier ${removeId.value}`; alertService.showInfo(message, { variant: 'danger' }); removeId.value = null; retrieveEvents(); closeDialog(); } catch (error) { alertService.showHttpError(error.response); } }; return { events, handleSyncList, isFetching, retrieveEvents, clear, removeId, removeEntity, prepareRemove, closeDialog, removeEvent, ...dataUtils, }; }, });