Funktionen/News: Schlussdurchgang (Webhook-Retry, Checkout-Sitzung, Rechnungslink, Widerruf Funktion, UI- und Rechtstext-Korrekturen)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0dc57fe5e8
commit
4b7f73abba
22 files changed
+400
-57
No files matched your search
+11
-4
@@ -64,7 +64,7 @@ const isSetup = (state) => state === 'ordered' || state === 'setup'
|
||||
|
||||
// Vorauswahl: zuerst ein aktives Projekt, dann eins in Einrichtung, sonst das erste
|
||||
function pickProject(projects) {
|
||||
return projects.find((p) => newsOf(p).state === 'active') || projects.find((p) => isSetup(newsOf(p).state)) || projects[0]
|
||||
return projects.find((p) => newsOf(p).state === 'active') || projects.find((p) => isSetup(newsOf(p).state)) || projects.find((p) => newsOf(p).state === 'off') || projects[0]
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------ Kacheln --- */
|
||||
@@ -80,7 +80,7 @@ function newsTile(projects) {
|
||||
const active = states.filter((s) => s === 'active').length
|
||||
let pill = ['Aus', 'off']
|
||||
let cta = `Einrichten lassen · ${PRICE}`
|
||||
if (active) { pill = ['Aktiv', 'on']; cta = 'Beiträge schreiben' } else if (states.some(isSetup)) { pill = ['In Einrichtung', 'setup']; cta = 'Status ansehen' }
|
||||
if (active) { pill = ['Aktiv', 'on']; cta = 'Beiträge schreiben' } else if (states.some(isSetup)) { pill = ['In Einrichtung', 'setup']; cta = 'Status ansehen' } else if (states.length && states.every((s) => s === 'disabled')) { pill = ['Abgeschaltet', 'off']; cta = 'Status ansehen' }
|
||||
const target = pickProject(projects)
|
||||
const count = projects.length > 1 && active ? `<p class="fn-count">aktiv für ${active} von ${projects.length} Websites</p>` : ''
|
||||
return `
|
||||
@@ -126,7 +126,14 @@ export async function initNews(root, { projectId } = {}) {
|
||||
const project = projects.find((p) => p.projectId === selection.projectId) || pickProject(projects)
|
||||
selection.projectId = project.projectId
|
||||
const feature = newsOf(project)
|
||||
const ordered = /[?&]bestellt=1\b/.test(window.location.hash)
|
||||
// Rueckkehr von Stripe (#news?bestellt=1): Flag nur einmal auswerten und aus der Adresse nehmen
|
||||
const orderedFlag = /[?&]bestellt=1\b/.test(window.location.hash)
|
||||
if (orderedFlag) window.history.replaceState(null, '', `${window.location.pathname}${window.location.search}#news`)
|
||||
const ordered = orderedFlag && isSetup(feature.state)
|
||||
// Editor nicht neu aufbauen, solange Projekt und Zustand gleich sind: Entwurf und hochgeladenes Foto bleiben
|
||||
const renderKey = `${project.projectId}:${feature.state}`
|
||||
if (feature.state === 'active' && root.dataset.newsKey === renderKey && root.querySelector('.nw')) return
|
||||
root.dataset.newsKey = feature.state === 'active' ? renderKey : ''
|
||||
|
||||
root.innerHTML = `
|
||||
${projects.length > 1 ? `
|
||||
@@ -140,7 +147,7 @@ export async function initNews(root, { projectId } = {}) {
|
||||
initNews(root).catch((err) => { root.innerHTML = `<p class="muted">${esc(err.message)}</p>` })
|
||||
})
|
||||
const stage = root.querySelector('#news-stage')
|
||||
const thanks = ordered && feature.state !== 'active'
|
||||
const thanks = ordered
|
||||
? '<p class="fn-thanks" role="status">Danke! Sobald die Zahlung da ist, legen wir los.</p>'
|
||||
: ''
|
||||
if (feature.state === 'active') renderEditor(stage, project)
|
||||
|
||||
Reference in new issue
Block a user