diff --git a/app/Http/Controllers/PostController.php b/app/Http/Controllers/PostController.php index 546ecc0d..fe3ea727 100644 --- a/app/Http/Controllers/PostController.php +++ b/app/Http/Controllers/PostController.php @@ -291,6 +291,10 @@ public function destroy(Request $request, Post $post): RedirectResponse session()->flash('flash.banner', __('posts.flash.deleted')); session()->flash('flash.bannerStyle', 'success'); + if ($redirect = $request->input('redirect')) { + return redirect()->route($redirect); + } + return back(); } } diff --git a/resources/js/components/ConfirmDeleteModal.vue b/resources/js/components/ConfirmDeleteModal.vue index a2ecee5d..3913cf15 100644 --- a/resources/js/components/ConfirmDeleteModal.vue +++ b/resources/js/components/ConfirmDeleteModal.vue @@ -56,14 +56,19 @@ const emit = defineEmits(['deleted', 'closed']); const isOpen = ref(false); const loading = ref(false); const url = ref(null); +const redirect = ref(null); function remove() { if (!url.value) return; loading.value = true; + const targetUrl = redirect.value + ? `${url.value}?redirect=${encodeURIComponent(redirect.value)}` + : url.value; + router[props.method as 'delete' | 'get' | 'post' | 'put' | 'patch']( - url.value, + targetUrl, {}, { preserveState: props.preserveState, @@ -82,8 +87,9 @@ function remove() { ); } -function open(data: { url: string }) { +function open(data: { url: string; redirect?: string }) { url.value = data.url; + redirect.value = data.redirect ?? null; loading.value = false; isOpen.value = true; } diff --git a/resources/js/pages/posts/Edit.vue b/resources/js/pages/posts/Edit.vue index 48d98da8..f03e3e5b 100644 --- a/resources/js/pages/posts/Edit.vue +++ b/resources/js/pages/posts/Edit.vue @@ -627,6 +627,7 @@ const deletePost = () => { if (isReadOnly.value) return; deleteModal.value?.open({ url: destroyPost.url(post.value.id), + redirect: 'posts.index', }); };