Add confirm dialog and custom text to room and room entry delete actions

Resolves MS-524
This commit is contained in:
Ramon Wenger 2022-07-11 16:34:33 +02:00
parent bf850198f7
commit 0aa60c5853
4 changed files with 56 additions and 34 deletions

View File

@ -9,7 +9,7 @@
</h3> </h3>
</template> </template>
<p class="confirm-dialog__content"> <p class="confirm-dialog__content">
Wollen Sie diesen Eintrag wirklich löschen? {{ message }}
</p> </p>
<template #footer> <template #footer>
<div> <div>
@ -48,6 +48,13 @@
} }
return 'Bestätigung'; return 'Bestätigung';
}, },
message() {
const {payload} = this.$modal.state;
if (payload && payload.message) {
return payload.message;
}
return 'Wollen Sie diesen Eintrag wirklich löschen?';
}
}, },
methods: { methods: {

View File

@ -1,5 +1,8 @@
<template> <template>
<more-actions data-cy="room-actions"> <more-actions
v-slot="{toggle}"
data-cy="room-actions"
>
<popover-link <popover-link
icon="pen-icon" icon="pen-icon"
text="Bearbeiten" text="Bearbeiten"
@ -15,7 +18,7 @@
icon="trash-icon" icon="trash-icon"
text="Löschen" text="Löschen"
data-cy="delete-room" data-cy="delete-room"
@link-action="deleteRoom()" @link-action="deleteRoom(toggle)"
/> />
</more-actions> </more-actions>
</template> </template>
@ -47,36 +50,45 @@
}, },
methods: { methods: {
deleteRoom() { deleteRoom(toggle) {
this.$apollo.mutate({ toggle();
mutation: DELETE_ROOM_MUTATION, this.$modal.open('confirm', {
variables: { title: 'Raum löschen',
input: { message: 'Willst du diesen Raum wirklich löschen? Wenn du diesen Raum löschst, werden auch alle dazugehörigen Einträge und Kommentare gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.',
id: this.id, }).then(() => {
}, this.$apollo.mutate({
}, mutation: DELETE_ROOM_MUTATION,
update: (store, {data: {deleteRoom: {success}}}) => { variables: {
if (success) { input: {
const {rooms} = store.readQuery({query: ROOMS_QUERY}); id: this.id,
if (rooms) { },
const index = rooms.findIndex(room => room.id === this.id); },
console.log(`found room index ${index} - rooms length ${rooms.length}`); update: (store, {data: {deleteRoom: {success}}}) => {
const slicedRooms = [ if (success) {
...rooms.slice(0, index), const {rooms} = store.readQuery({query: ROOMS_QUERY});
...rooms.slice(index+1) if (rooms) {
]; const index = rooms.findIndex(room => room.id === this.id);
console.log(`slicedRooms length ${slicedRooms.length}`); console.log(`found room index ${index} - rooms length ${rooms.length}`);
const data = { const slicedRooms = [
rooms: slicedRooms ...rooms.slice(0, index),
}; ...rooms.slice(index + 1),
store.writeQuery({query: ROOMS_QUERY, data}); ];
} console.log(`slicedRooms length ${slicedRooms.length}`);
} const data = {
this.$router.push({ rooms: slicedRooms,
name: ROOMS_PAGE, };
store.writeQuery({query: ROOMS_QUERY, data});
}
}
this.$router.push({
name: ROOMS_PAGE,
});
},
}); });
}, })
}); .catch(() => {
});
}, },
editRoom() { editRoom() {
this.$router.push({name: 'edit-room', params: {id: this.id}}); this.$router.push({name: 'edit-room', params: {id: this.id}});

View File

@ -48,7 +48,10 @@
methods: { methods: {
deleteRoomEntry(slug, toggle) { deleteRoomEntry(slug, toggle) {
toggle(); toggle();
this.$modal.open('confirm') this.$modal.open('confirm', {
title: 'Eintrag löschen',
message: 'Willst du diesen Eintrag wirklich löschen? Wenn du diesen Eintrag löschst, werden auch alle dazugehörigen Kommentare gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.',
})
.then(() => { .then(() => {
this.$apollo.mutate({ this.$apollo.mutate({
mutation: DELETE_ROOM_ENTRY_MUTATION, mutation: DELETE_ROOM_ENTRY_MUTATION,

View File

@ -59,7 +59,7 @@ class ModuleRoomSlug(TitleSlugDescriptionModel):
class Comment(models.Model): class Comment(models.Model):
text = models.TextField() text = models.TextField()
room_entry = models.ForeignKey(RoomEntry, related_name='comments', on_delete=models.PROTECT) room_entry = models.ForeignKey(RoomEntry, related_name='comments', on_delete=models.CASCADE)
owner = models.ForeignKey(get_user_model(), related_name='comments', on_delete=models.PROTECT) owner = models.ForeignKey(get_user_model(), related_name='comments', on_delete=models.PROTECT)
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)