Settings entrümpelt: Züchter-Block komplett in den Züchter-Bereich umgezogen
Rene: 'Dieser Bereich könnte auch in den Züchter-Bereich, dann ist alles sauber.' - Settings zeigt für verifizierte Züchter/Admins KEINE Züchter-Karte mehr — der Welten-Chip ist der Einstieg (wie beim Partner). Antrag/Prüfung/Abgelehnt bleiben in Settings (Nicht-Züchter sehen den Chip nicht). - Züchter-Bereich neu: KI-Züchter-Assistenz-Karte (5 Toggles, optimistisches Update + Revert), Status-Badge unterscheidet Admin/Züchter, Admin ohne Profil bekommt 'Profil anlegen' direkt im Hub. - Toter Code raus: _openBreederEditModal (75 Z., Settings-Doppel-Editor — breeder-editor-Seite ist der vollwertige), _kiToggleRow + 3 verwaiste Bindings aus settings.js.
This commit is contained in:
parent
8c76263ea0
commit
dfffd07a96
7 changed files with 111 additions and 293 deletions
|
|
@ -7,9 +7,11 @@
|
|||
window.Page_breeder_dashboard = (() => {
|
||||
|
||||
let _container = null;
|
||||
let _appState = null;
|
||||
|
||||
async function init(container) {
|
||||
async function init(container, appState) {
|
||||
_container = container;
|
||||
_appState = appState;
|
||||
_render();
|
||||
await _load();
|
||||
}
|
||||
|
|
@ -73,15 +75,35 @@ window.Page_breeder_dashboard = (() => {
|
|||
<div style="font-weight:700">${UI.escape(profile?.zwingername || 'Noch kein Profil angelegt')}</div>
|
||||
${profile?.rasse_text ? `<div class="text-xs-muted">${UI.escape(profile.rasse_text)}</div>` : ''}
|
||||
<span class="badge" style="background:#dcfce7;color:#16a34a;margin-top:var(--space-1)">
|
||||
${UI.icon('check-circle')} Verifizierter Züchter
|
||||
${UI.icon('check-circle')} ${status?.rolle === 'admin' ? 'Admin — alle Züchter-Features' : 'Verifizierter Züchter'}
|
||||
</span>
|
||||
</div>
|
||||
<button class="btn btn-sm btn-secondary" data-bd-nav="breeder-editor">
|
||||
${UI.icon('pencil-simple')} Profil
|
||||
</button>
|
||||
${profile
|
||||
? `<button class="btn btn-sm btn-secondary" data-bd-nav="breeder-editor">
|
||||
${UI.icon('pencil-simple')} Profil
|
||||
</button>`
|
||||
: status?.rolle === 'admin'
|
||||
? `<button class="btn btn-sm btn-primary" id="bd-admin-create">
|
||||
${UI.icon('plus')} Profil anlegen
|
||||
</button>` : ''}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
${profile ? `
|
||||
<!-- KI-Züchter-Assistenz (aus den Einstellungen hierher umgezogen) -->
|
||||
<div class="card" style="padding:var(--space-4);margin-bottom:var(--space-3)">
|
||||
<div style="font-size:var(--text-xs);font-weight:700;text-transform:uppercase;
|
||||
letter-spacing:.06em;color:var(--c-text-muted);margin-bottom:var(--space-2)">KI-Züchter-Assistenz</div>
|
||||
${_kiToggleRow('ki_zucht_wurfankuendigung', 'Wurfankündigungen schreiben')}
|
||||
${_kiToggleRow('ki_zucht_genetik', 'Genetik-Erklärung für Käufer')}
|
||||
${_kiToggleRow('ki_zucht_paarung', 'Paarungsanalyse')}
|
||||
${_kiToggleRow('ki_zucht_beschreibung', 'Hunde-Beschreibungen')}
|
||||
${_kiToggleRow('ki_zucht_jahresbericht', 'Jahresauswertung')}
|
||||
<div style="font-size:var(--text-xs);color:var(--c-text-muted);margin-top:var(--space-2)">
|
||||
${UI.icon('info')} Der Tierschutz-Check läuft immer automatisch und ist nicht abschaltbar.
|
||||
</div>
|
||||
</div>` : ''}
|
||||
|
||||
<!-- Wurfverwaltung -->
|
||||
<div class="card" style="padding:var(--space-4);margin-bottom:var(--space-3)">
|
||||
<div style="display:flex;align-items:center;gap:var(--space-3)">
|
||||
|
|
@ -129,10 +151,74 @@ window.Page_breeder_dashboard = (() => {
|
|||
`;
|
||||
}
|
||||
|
||||
// KI-Toggle-Zeile (aus settings.js umgezogen — Zustand kommt aus _appState.user)
|
||||
function _kiToggleRow(key, label) {
|
||||
const user = _appState?.user || {};
|
||||
const active = user[key] !== 0;
|
||||
return `
|
||||
<div style="display:flex;justify-content:space-between;align-items:center;
|
||||
padding:var(--space-2) 0;font-size:var(--text-sm)">
|
||||
<span>${UI.escape(label)}</span>
|
||||
<button class="by-toggle bd-ki-toggle" data-key="${UI.escape(key)}"
|
||||
data-active="${active ? '1' : '0'}"
|
||||
style="position:relative;display:inline-block;width:44px;height:24px;
|
||||
border:none;border-radius:12px;cursor:pointer;flex-shrink:0;
|
||||
background:${active ? 'var(--c-primary)' : 'var(--c-border)'};
|
||||
transition:background .2s">
|
||||
<span class="by-toggle-thumb"
|
||||
style="position:absolute;top:2px;left:${active ? '22px' : '2px'};
|
||||
width:20px;height:20px;border-radius:50%;
|
||||
background:#fff;transition:left .2s;
|
||||
box-shadow:0 1px 3px rgba(0,0,0,.3)"></span>
|
||||
</button>
|
||||
</div>`;
|
||||
}
|
||||
|
||||
function _bindEvents(el) {
|
||||
el.querySelectorAll('[data-bd-nav]').forEach(btn => {
|
||||
btn.addEventListener('click', () => App.navigate(btn.dataset.bdNav));
|
||||
});
|
||||
|
||||
// Admin ohne Profil: Züchterprofil anlegen
|
||||
el.querySelector('#bd-admin-create')?.addEventListener('click', async e => {
|
||||
const btn = e.currentTarget;
|
||||
btn.disabled = true;
|
||||
btn.textContent = 'Wird angelegt…';
|
||||
try {
|
||||
await API.breeder.adminCreateProfile();
|
||||
UI.toast.success('Admin-Züchterprofil angelegt.');
|
||||
await _load();
|
||||
} catch (err) {
|
||||
UI.toast.error(err.message || 'Fehler beim Anlegen.');
|
||||
btn.disabled = false;
|
||||
btn.innerHTML = `${UI.icon('plus')} Profil anlegen`;
|
||||
}
|
||||
});
|
||||
|
||||
// KI-Toggles — optimistisches Update mit Revert bei Fehler
|
||||
el.querySelectorAll('.bd-ki-toggle').forEach(btn => {
|
||||
btn.addEventListener('click', async () => {
|
||||
const key = btn.dataset.key;
|
||||
const active = btn.dataset.active === '1';
|
||||
const newVal = active ? 0 : 1;
|
||||
const thumb = btn.querySelector('.by-toggle-thumb');
|
||||
|
||||
btn.dataset.active = newVal ? '1' : '0';
|
||||
btn.style.background = newVal ? 'var(--c-primary)' : 'var(--c-border)';
|
||||
if (thumb) thumb.style.left = newVal ? '22px' : '2px';
|
||||
|
||||
try {
|
||||
await API.patch('/profile', { [key]: newVal });
|
||||
if (_appState?.user) _appState.user[key] = newVal;
|
||||
UI.toast.success(newVal ? 'KI-Feature aktiviert.' : 'KI-Feature deaktiviert.');
|
||||
} catch (err) {
|
||||
btn.dataset.active = active ? '1' : '0';
|
||||
btn.style.background = active ? 'var(--c-primary)' : 'var(--c-border)';
|
||||
if (thumb) thumb.style.left = active ? '22px' : '2px';
|
||||
UI.toast.error(err?.message || 'Einstellung konnte nicht gespeichert werden.');
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return { init, refresh, onDogChange };
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue