|
- // account.js
- document.addEventListener('DOMContentLoaded', () => {
-
- const toast = document.getElementById('account-toast');
-
- function showToast(msg, isError = false) {
- toast.textContent = msg;
- toast.classList.toggle('account-toast--error', isError);
- toast.classList.add('account-toast--visible');
- setTimeout(() => toast.classList.remove('account-toast--visible'), 3000);
- }
-
- async function patchJson(url, data) {
- const res = await fetch(url, {
- method: 'PATCH',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify(data),
- });
- const json = await res.json();
- if (!res.ok) throw new Error(json.error ?? 'Fehler');
- return json;
- }
-
- // ── Account-Formular ──────────────────────────────────────────────────────
- const btnAccountSave = document.getElementById('btn-account-save');
- if (btnAccountSave) {
- btnAccountSave.addEventListener('click', async () => {
- try {
- await patchJson('/api/account', {
- name: document.getElementById('account-name').value.trim(),
- trackingInterval: parseInt(document.getElementById('account-interval').value, 10),
- });
- showToast('Gespeichert.');
- } catch (e) {
- showToast(e.message, true);
- }
- });
- }
-
- // ── Besitzer des Accounts ─────────────────────────────────────────────────
- const superadminSelect = document.getElementById('superadmin-select');
- if (superadminSelect && !superadminSelect.disabled) {
- superadminSelect.addEventListener('change', async () => {
- const selectedName = superadminSelect.options[superadminSelect.selectedIndex].text;
- if (!confirm(`${selectedName} zum neuen Kontoinhaber machen?`)) {
- // Auswahl zurücksetzen
- superadminSelect.value = superadminSelect.dataset.original;
- return;
- }
-
- try {
- await patchJson('/api/account/superadmin', {
- userId: parseInt(superadminSelect.value, 10),
- });
- showToast('Kontoinhaber geändert. Seite wird neu geladen…');
- setTimeout(() => window.location.reload(), 1500);
- } catch (e) {
- showToast(e.message, true);
- superadminSelect.value = superadminSelect.dataset.original;
- }
- });
-
- // Original-Wert merken für Rollback
- superadminSelect.dataset.original = superadminSelect.value;
- }
-
- // ── Passwort-Toggle ───────────────────────────────────────────────────────
- const btnPwToggle = document.getElementById('btn-pw-toggle');
- const pwSection = document.getElementById('pw-section');
- if (btnPwToggle && pwSection) {
- btnPwToggle.addEventListener('click', (e) => {
- e.preventDefault();
- const open = !pwSection.hidden;
- pwSection.hidden = open;
- btnPwToggle.textContent = open ? 'ändern' : 'abbrechen';
- });
- }
-
- // ── Benutzer-Formular ─────────────────────────────────────────────────────
- const btnUserSave = document.getElementById('btn-user-save');
- if (btnUserSave) {
- btnUserSave.addEventListener('click', async () => {
- const data = {
- firstName: document.getElementById('user-firstname').value.trim(),
- lastName: document.getElementById('user-lastname').value.trim(),
- email: document.getElementById('user-email').value.trim(),
- };
-
- if (pwSection && !pwSection.hidden) {
- const pwNew = document.getElementById('user-pw-new').value;
- const pwRepeat = document.getElementById('user-pw-repeat').value;
- if (pwNew !== pwRepeat) {
- showToast('Die Passwörter stimmen nicht überein.', true);
- return;
- }
- data.currentPassword = document.getElementById('user-pw-current').value;
- data.newPassword = pwNew;
- }
-
- try {
- await patchJson('/api/account/user', data);
- showToast('Gespeichert.');
- if (pwSection) {
- pwSection.hidden = true;
- document.getElementById('btn-pw-toggle').textContent = 'ändern';
- ['user-pw-current', 'user-pw-new', 'user-pw-repeat'].forEach(id => {
- document.getElementById(id).value = '';
- });
- }
- } catch (e) {
- showToast(e.message, true);
- }
- });
- }
- });
|