Added delete modal confirmation

This commit is contained in:
Alexis
2024-06-05 18:35:13 +02:00
parent 6749fdb46e
commit 53024c6117
3 changed files with 23 additions and 65 deletions

View File

@@ -12,7 +12,7 @@ import {
} from '@phosphor-icons/vue' } from '@phosphor-icons/vue'
const { defaultDate, getFormattedDateTitle, jumpToDate, getRelativeString } = useCalendar() const { defaultDate, getFormattedDateTitle, jumpToDate, getRelativeString } = useCalendar()
const { deleteEvent, revealEditEventModal } = useCalendarEvents() const { revealEditEventModal, revealDeleteEventModal } = useCalendarEvents()
const { lastActiveEvent } = storeToRefs(useCalendarEvents()) const { lastActiveEvent } = storeToRefs(useCalendarEvents())
const props = defineProps<{ const props = defineProps<{
@@ -47,6 +47,15 @@ function deployEditModal() {
revealEditEventModal() revealEditEventModal()
commandMenuOpened.value = false commandMenuOpened.value = false
} }
/**
* Confirm event deletion
*/
function deployDeleteModal() {
lastActiveEvent.value = { ...props.event }
revealDeleteEventModal()
commandMenuOpened.value = false
}
</script> </script>
<template> <template>
@@ -146,7 +155,7 @@ function deployEditModal() {
<UiCommandList> <UiCommandList>
<UiCommandGroup> <UiCommandGroup>
<UiCommandItem value="edit-event" @select="deployEditModal"> Modifier </UiCommandItem> <UiCommandItem value="edit-event" @select="deployEditModal"> Modifier </UiCommandItem>
<UiCommandItem value="delete-event" @select="deleteEvent(event.id!)"> Supprimer </UiCommandItem> <UiCommandItem value="delete-event" @select="deployDeleteModal"> Supprimer </UiCommandItem>
</UiCommandGroup> </UiCommandGroup>
</UiCommandList> </UiCommandList>
</UiCommand> </UiCommand>

View File

@@ -1,9 +1,6 @@
<script lang="ts" setup> <script lang="ts" setup>
import { PhAlarm } from '@phosphor-icons/vue'
import { VisuallyHidden } from 'radix-vue'
const isModalOpened = defineModel<boolean>({ default: false }) const isModalOpened = defineModel<boolean>({ default: false })
const { resetSkeleton, updateEventFromSkeleton } = useCalendarEvents() const { resetSkeleton, deleteEventFromSkeleton } = useCalendarEvents()
const { eventSkeleton, lastActiveEvent } = storeToRefs(useCalendarEvents()) const { eventSkeleton, lastActiveEvent } = storeToRefs(useCalendarEvents())
const formErrors = reactive<{ message: string | null }>({ const formErrors = reactive<{ message: string | null }>({
@@ -21,7 +18,7 @@ watch(isModalOpened, (hasOpened, _o) => {
async function handleSubmit() { async function handleSubmit() {
try { try {
await updateEventFromSkeleton() await deleteEventFromSkeleton()
isModalOpened.value = false isModalOpened.value = false
} catch (err) { } catch (err) {
@@ -42,58 +39,14 @@ async function handleSubmit() {
:trap-focus="true" :trap-focus="true"
class="pl-3 min-w-96 bg-slate-900 border-slate-800" class="pl-3 min-w-96 bg-slate-900 border-slate-800"
> >
<VisuallyHidden> <UiDialogTitle> Supprimer l'évènement</UiDialogTitle>
<UiDialogTitle> Modifier l'évènement</UiDialogTitle>
<UiDialogDescription> <UiDialogDescription>
Mettre à jour les données de l'évènement Les données associés à cet évènement seront supprimées et vous ne pourrez plus les récupérer !
</UiDialogDescription> </UiDialogDescription>
</VisuallyHidden>
<form @submit.prevent="handleSubmit"> <form @submit.prevent="handleSubmit">
<div class="grid grid-cols-2 gap-y-4"> <div class="grid grid-cols-2 gap-y-4">
<div class="col-span-2 ml-8">
<input
id="new-event-title"
v-model="eventSkeleton.title"
type="text"
name="new-event-title"
required
placeholder="Titre de l'évènement"
class="w-full -my-1 py-1 -mx-1 px-1 text-lg border-b-[1px] bg-transparent focus-visible:outline-none focus-visible:border-blue-600">
</div>
<div class="col-span-2 ml-8">
<textarea
id="new-event-description"
v-model="eventSkeleton.description"
name="new-event-description"
placeholder="Description brève de l'évènement"
class="w-full -my-1 py-1 -mx-1 px-1 min-h-24 max-h-36 text-sm border-b-[1px] bg-transparent focus-visible:outline-none focus-visible:border-blue-600"
/>
</div>
<div class="col-span-2">
<div class="flex items-center gap-2">
<PhAlarm size="18" weight="fill" />
<CalendarInputRPGDate
v-model:model-value="eventSkeleton.startDate"
placeholder="Date de début"
:initial-date="lastActiveEvent?.startDate"
:required="true"
/>
<span></span>
<CalendarInputRPGDate
v-model:model-value="eventSkeleton.endDate"
placeholder="Date de fin"
:initial-date="lastActiveEvent?.endDate"
/>
</div>
</div>
<div class="text-red-500 ml-8"> <div class="text-red-500 ml-8">
<span class="text-sm"> <span class="text-sm">
{{ formErrors.message }} {{ formErrors.message }}
@@ -101,8 +54,8 @@ async function handleSubmit() {
</div> </div>
<div class="text-right"> <div class="text-right">
<UiButton size="sm" type="submit"> <UiButton size="sm" type="submit" variant="destructive">
Sauvegarder Supprimer
</UiButton> </UiButton>
</div> </div>
</div> </div>

View File

@@ -223,14 +223,10 @@ export const useCalendarEvents = defineStore('calendar-events', () => {
} }
} }
async function deleteEvent(eventId: number) { async function deleteEventFromSkeleton() {
if (!eventId) {
throw new Error('ID of the event is required')
}
try { try {
await $fetch(`/api/calendars/events/${eventId}`, { method: 'DELETE' }) await $fetch(`/api/calendars/events/${eventSkeleton.value.id}`, { method: 'DELETE' })
const eventIndex = baseEvents.value.findIndex(e => e.id === eventId) const eventIndex = baseEvents.value.findIndex(e => e.id === eventSkeleton.value.id)
baseEvents.value.splice(eventIndex, 1) baseEvents.value.splice(eventIndex, 1)
} catch (err) { } catch (err) {
console.log(err) console.log(err)
@@ -248,7 +244,7 @@ export const useCalendarEvents = defineStore('calendar-events', () => {
submitSkeleton, submitSkeleton,
lastActiveEvent, lastActiveEvent,
updateEventFromSkeleton, updateEventFromSkeleton,
deleteEvent, deleteEventFromSkeleton,
isEditEventModalOpen, isEditEventModalOpen,
revealEditEventModal, revealEditEventModal,
isDeleteEventModalOpen, isDeleteEventModalOpen,