mirror of
https://github.com/NNTmux/newznab-tmux.git
synced 2026-08-29 00:01:21 +00:00
Fix release deletion from admin releases list
This commit is contained in:
@@ -553,23 +553,6 @@ Alpine.data('regexDelete', () => ({
|
|||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Release delete
|
|
||||||
Alpine.data('releaseDelete', () => ({
|
|
||||||
deleteRelease(e, id, deleteUrl) {
|
|
||||||
e.preventDefault();
|
|
||||||
const el = e.currentTarget;
|
|
||||||
showConfirm({ title: 'Delete Release', message: 'Are you sure you want to delete this release? This action cannot be undone.', type: 'danger', confirmText: 'Delete', onConfirm: function() {
|
|
||||||
const csrf = document.querySelector('meta[name="csrf-token"]')?.content;
|
|
||||||
showToast('Deleting release...', 'info');
|
|
||||||
fetch(deleteUrl, { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest', 'X-CSRF-TOKEN': csrf, 'Content-Type': 'application/json', 'Accept': 'application/json' } })
|
|
||||||
.then(r => {
|
|
||||||
if (r.ok) { const row = el.closest('tr'); if (row) { row.style.transition = 'opacity 0.3s'; row.style.opacity = '0'; setTimeout(() => row.remove(), 300); } showToast('Release deleted successfully', 'success'); }
|
|
||||||
else showToast('Error deleting release: ' + r.status, 'error');
|
|
||||||
}).catch(err => showToast('Error deleting release: ' + err.message, 'error'));
|
|
||||||
}});
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
// My Movies confirm
|
// My Movies confirm
|
||||||
Alpine.data('myMovies', () => ({
|
Alpine.data('myMovies', () => ({
|
||||||
confirmRemove(e) {
|
confirmRemove(e) {
|
||||||
@@ -741,23 +724,6 @@ Alpine.data('myMovies', () => ({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Release delete
|
|
||||||
var relDel = e.target.closest('[data-delete-release]');
|
|
||||||
if (relDel) {
|
|
||||||
e.preventDefault();
|
|
||||||
var deleteUrl = relDel.getAttribute('data-delete-url');
|
|
||||||
showConfirm({ title: 'Delete Release', message: 'Are you sure? This cannot be undone.', type: 'danger', confirmText: 'Delete',
|
|
||||||
onConfirm: function() {
|
|
||||||
var csrf = document.querySelector('meta[name="csrf-token"]')?.content;
|
|
||||||
showToast('Deleting...', 'info');
|
|
||||||
fetch(deleteUrl, { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest', 'X-CSRF-TOKEN': csrf, 'Content-Type': 'application/json', 'Accept': 'application/json' } })
|
|
||||||
.then(function(r) { if (r.ok) { var row = relDel.closest('tr'); if (row) { row.style.transition='opacity 0.3s'; row.style.opacity='0'; setTimeout(function() { row.remove(); },300); } showToast('Deleted', 'success'); } else showToast('Error: ' + r.status, 'error'); })
|
|
||||||
.catch(function(err) { showToast('Error: ' + err.message, 'error'); });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Binary blacklist delete
|
// Binary blacklist delete
|
||||||
var blDel = e.target.closest('[data-delete-blacklist]');
|
var blDel = e.target.closest('[data-delete-blacklist]');
|
||||||
if (blDel) {
|
if (blDel) {
|
||||||
|
|||||||
@@ -63,6 +63,83 @@ Alpine.data('adminReleaseList', () => ({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
showToast(message, type) {
|
||||||
|
Alpine.store('toast').show(message, type);
|
||||||
|
},
|
||||||
|
|
||||||
|
deleteRelease(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
const button = e.currentTarget;
|
||||||
|
const deleteUrl = button.dataset.deleteUrl;
|
||||||
|
|
||||||
|
if (!deleteUrl) {
|
||||||
|
this.showToast('Release delete URL is missing.', 'error');
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.showModal({
|
||||||
|
title: 'Delete Release',
|
||||||
|
message: 'Are you sure you want to delete this release?',
|
||||||
|
details: 'This action cannot be undone.',
|
||||||
|
type: 'danger',
|
||||||
|
confirmText: 'Delete',
|
||||||
|
cancelText: 'Cancel',
|
||||||
|
onConfirm: () => this.submitReleaseDelete(button, deleteUrl),
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
submitReleaseDelete(button, deleteUrl) {
|
||||||
|
const csrf = document.querySelector('meta[name="csrf-token"]')?.content;
|
||||||
|
|
||||||
|
if (!csrf) {
|
||||||
|
this.showToast('Unable to delete release: CSRF token is missing.', 'error');
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.disabled = true;
|
||||||
|
button.setAttribute('aria-busy', 'true');
|
||||||
|
this.showToast('Deleting release...', 'info');
|
||||||
|
|
||||||
|
fetch(deleteUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'X-Requested-With': 'XMLHttpRequest',
|
||||||
|
'X-CSRF-TOKEN': csrf,
|
||||||
|
'Accept': 'application/json',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.then(response => response.json().catch(() => ({})).then(data => ({ response, data })))
|
||||||
|
.then(({ response, data }) => {
|
||||||
|
if (!response.ok || data.success === false) {
|
||||||
|
throw new Error(data.message || 'Error deleting release: ' + response.status);
|
||||||
|
}
|
||||||
|
|
||||||
|
const row = button.closest('tr');
|
||||||
|
if (row) {
|
||||||
|
row.style.transition = 'opacity 0.3s';
|
||||||
|
row.style.opacity = '0';
|
||||||
|
setTimeout(() => {
|
||||||
|
row.remove();
|
||||||
|
this.syncSelectionState();
|
||||||
|
}, 300);
|
||||||
|
} else {
|
||||||
|
this.syncSelectionState();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.showToast(data.message || 'Release deleted successfully', 'success');
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
button.disabled = false;
|
||||||
|
this.showToast(error.message || 'Error deleting release.', 'error');
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
button.removeAttribute('aria-busy');
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
validateBulkAction(e) {
|
validateBulkAction(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
@@ -99,7 +176,6 @@ Alpine.data('adminReleaseList', () => ({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const self = this;
|
|
||||||
this.showModal({
|
this.showModal({
|
||||||
title: 'Change category',
|
title: 'Change category',
|
||||||
message: 'Change category for ' + checkedCount + ' release(s)?',
|
message: 'Change category for ' + checkedCount + ' release(s)?',
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
@extends('layouts.admin')
|
@extends('layouts.admin')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="space-y-6">
|
<div x-data="adminReleaseList" class="space-y-6">
|
||||||
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm">
|
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm">
|
||||||
<!-- Header -->
|
<!-- Header -->
|
||||||
<div class="px-6 py-4 border-b border-gray-200 dark:border-gray-700">
|
<div class="px-6 py-4 border-b border-gray-200 dark:border-gray-700">
|
||||||
@@ -145,6 +145,7 @@
|
|||||||
@endif
|
@endif
|
||||||
<button type="button"
|
<button type="button"
|
||||||
class="text-red-600 dark:text-red-400 hover:text-red-900 dark:hover:text-red-300"
|
class="text-red-600 dark:text-red-400 hover:text-red-900 dark:hover:text-red-300"
|
||||||
|
@click="deleteRelease($event)"
|
||||||
data-delete-release="{{ $release->guid }}"
|
data-delete-release="{{ $release->guid }}"
|
||||||
data-delete-url="{{ url('/admin/release-delete/' . $release->guid) }}"
|
data-delete-url="{{ url('/admin/release-delete/' . $release->guid) }}"
|
||||||
title="Delete release">
|
title="Delete release">
|
||||||
|
|||||||
@@ -158,6 +158,7 @@
|
|||||||
</a>
|
</a>
|
||||||
<button type="button"
|
<button type="button"
|
||||||
class="text-red-600 dark:text-red-400 hover:text-red-900 dark:hover:text-red-300"
|
class="text-red-600 dark:text-red-400 hover:text-red-900 dark:hover:text-red-300"
|
||||||
|
@click="deleteRelease($event)"
|
||||||
data-delete-release="{{ $release->guid }}"
|
data-delete-release="{{ $release->guid }}"
|
||||||
data-delete-url="{{ url('admin/release-delete/' . $release->guid) }}"
|
data-delete-url="{{ url('admin/release-delete/' . $release->guid) }}"
|
||||||
title="Delete">
|
title="Delete">
|
||||||
|
|||||||
Reference in New Issue
Block a user