Fix sent emails: use data-attributes for read modal, fix delete route collision with /emails/<email_id>
This commit is contained in:
parent
7a9a69c86d
commit
04eaac3094
2 changed files with 29 additions and 20 deletions
2
app.py
2
app.py
|
|
@ -3570,7 +3570,7 @@ def delete_journal_entry(message_id):
|
||||||
return redirect(url_for('email_log_view'))
|
return redirect(url_for('email_log_view'))
|
||||||
|
|
||||||
|
|
||||||
@app.route('/emails/sent/<int:sent_id>/delete', methods=['POST'])
|
@app.route('/api/sent-emails/<int:sent_id>/delete', methods=['POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def delete_sent_email(sent_id):
|
def delete_sent_email(sent_id):
|
||||||
"""Löscht einen einzelnen Outbox-Eintrag."""
|
"""Löscht einen einzelnen Outbox-Eintrag."""
|
||||||
|
|
|
||||||
|
|
@ -154,11 +154,16 @@
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="d-flex gap-1">
|
<div class="d-flex gap-1">
|
||||||
<button class="btn btn-sm btn-secondary"
|
<button class="btn btn-sm btn-secondary sent-read-btn"
|
||||||
onclick="showSentEmail({{ mail.id }}, {{ mail.to_address|tojson }}, {{ mail.subject|tojson }}, {{ mail.sent_at|tojson }}, {{ mail.triggered_by|tojson }}, {{ (mail.body or '')|tojson }})"
|
data-id="{{ mail.id }}"
|
||||||
|
data-to="{{ mail.to_address }}"
|
||||||
|
data-subject="{{ mail.subject|e }}"
|
||||||
|
data-date="{{ mail.sent_at }}"
|
||||||
|
data-agent="{{ mail.triggered_by }}"
|
||||||
|
data-body="{{ (mail.body or '')|e }}"
|
||||||
title="Lesen">👁</button>
|
title="Lesen">👁</button>
|
||||||
<button class="btn btn-sm btn-danger"
|
<button class="btn btn-sm btn-danger sent-delete-btn"
|
||||||
onclick="deleteSentEmail({{ mail.id }})"
|
data-id="{{ mail.id }}"
|
||||||
title="Löschen">✕</button>
|
title="Löschen">✕</button>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
|
|
@ -214,22 +219,26 @@ function viewEmail(emailId, subject, from) {
|
||||||
.catch(e => { document.getElementById('emailBody').textContent = 'Fehler: ' + e.message; });
|
.catch(e => { document.getElementById('emailBody').textContent = 'Fehler: ' + e.message; });
|
||||||
}
|
}
|
||||||
|
|
||||||
function showSentEmail(id, to, subject, date, agent, body) {
|
// Lesen
|
||||||
document.getElementById('sentEmailSubject').textContent = subject;
|
document.addEventListener('click', function(e) {
|
||||||
document.getElementById('sentEmailTo').textContent = to;
|
const btn = e.target.closest('.sent-read-btn');
|
||||||
document.getElementById('sentEmailDate').textContent = date.replace('T', ' ').slice(0, 16);
|
if (!btn) return;
|
||||||
document.getElementById('sentEmailAgent').textContent = agent;
|
document.getElementById('sentEmailSubject').textContent = btn.dataset.subject;
|
||||||
document.getElementById('sentEmailBody').textContent = body || '(kein Inhalt gespeichert)';
|
document.getElementById('sentEmailTo').textContent = btn.dataset.to;
|
||||||
|
document.getElementById('sentEmailDate').textContent = btn.dataset.date.replace('T',' ').slice(0,16);
|
||||||
|
document.getElementById('sentEmailAgent').textContent = btn.dataset.agent;
|
||||||
|
document.getElementById('sentEmailBody').textContent = btn.dataset.body || '(kein Inhalt gespeichert)';
|
||||||
new bootstrap.Modal(document.getElementById('sentEmailModal')).show();
|
new bootstrap.Modal(document.getElementById('sentEmailModal')).show();
|
||||||
}
|
});
|
||||||
|
|
||||||
function deleteSentEmail(id) {
|
// Löschen
|
||||||
|
document.addEventListener('click', function(e) {
|
||||||
|
const btn = e.target.closest('.sent-delete-btn');
|
||||||
|
if (!btn) return;
|
||||||
|
const id = btn.dataset.id;
|
||||||
if (!confirm('Eintrag #' + id + ' aus dem Log löschen?')) return;
|
if (!confirm('Eintrag #' + id + ' aus dem Log löschen?')) return;
|
||||||
fetch('/emails/sent/' + id + '/delete', {
|
fetch('/api/sent-emails/' + id + '/delete', {method: 'POST'})
|
||||||
method: 'POST',
|
.then(r => { if (!r.ok) throw new Error('HTTP ' + r.status); return r.json(); })
|
||||||
headers: {'Accept': 'application/json'}
|
|
||||||
})
|
|
||||||
.then(r => r.json())
|
|
||||||
.then(d => {
|
.then(d => {
|
||||||
if (d.success) {
|
if (d.success) {
|
||||||
const row = document.getElementById('sent-row-' + id);
|
const row = document.getElementById('sent-row-' + id);
|
||||||
|
|
@ -238,7 +247,7 @@ function deleteSentEmail(id) {
|
||||||
alert('Fehler: ' + d.message);
|
alert('Fehler: ' + d.message);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(() => alert('Netzwerkfehler.'));
|
.catch(err => alert('Fehler: ' + err.message));
|
||||||
}
|
});
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue