Projektvorschläge toggelbar

This commit is contained in:
2026-03-15 23:43:51 +01:00
parent 2d0bcbbd2f
commit dbeda9c2ae
6 changed files with 231 additions and 3 deletions

View File

@@ -14,6 +14,7 @@ let activeProjectSearchInput = null;
let projectSearchDebounceTimer = null;
const PROJECT_SEARCH_DEBOUNCE_MS = 300;
const PROJECT_SEARCH_CLOSE_DELAY_MS = 200;
let projectSearchEnabled = true; // Standard: aktiviert
// Wochenend-Prozentsätze laden
async function loadWeekendPercentages() {
@@ -179,6 +180,9 @@ document.addEventListener('DOMContentLoaded', async function() {
// Ping-IP laden
loadPingIP();
// Projektvorschläge-Einstellung laden
loadProjectSearchEnabled();
// Wochenend-Prozentsätze laden
loadWeekendPercentages();
@@ -2456,6 +2460,68 @@ window.savePingIP = async function() {
}
};
// Projektvorschläge-Einstellung laden
async function loadProjectSearchEnabled() {
try {
const response = await fetch('/api/user/project-search-enabled');
if (!response.ok) {
throw new Error('Fehler beim Laden der Einstellung');
}
const data = await response.json();
projectSearchEnabled = data.project_search_enabled !== false; // Standard: true
// Toggle-Switch aktualisieren
const toggle = document.getElementById('projectSearchToggle');
if (toggle) {
toggle.checked = projectSearchEnabled;
}
} catch (error) {
console.error('Fehler beim Laden der Projektvorschläge-Einstellung:', error);
// Bei Fehler: Standard auf aktiviert setzen
projectSearchEnabled = true;
}
}
// Projektvorschläge-Einstellung speichern
async function saveProjectSearchEnabled(enabled) {
try {
const response = await fetch('/api/user/project-search-enabled', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ project_search_enabled: enabled })
});
const result = await response.json();
if (!response.ok) {
throw new Error(result.error || 'Fehler beim Speichern der Einstellung');
}
projectSearchEnabled = enabled;
console.log('Projektvorschläge-Einstellung gespeichert:', enabled);
} catch (error) {
console.error('Fehler beim Speichern der Projektvorschläge-Einstellung:', error);
alert('Fehler beim Speichern der Einstellung');
// Toggle zurücksetzen bei Fehler
const toggle = document.getElementById('projectSearchToggle');
if (toggle) {
toggle.checked = projectSearchEnabled;
}
}
}
// Toggle-Event-Handler registrieren
document.addEventListener('DOMContentLoaded', function() {
const toggle = document.getElementById('projectSearchToggle');
if (toggle) {
toggle.addEventListener('change', function() {
saveProjectSearchEnabled(this.checked);
});
}
});
// --- Projektsuche-Overlay im Dashboard ---
(function initProjectSearchOverlay() {
const overlay = document.getElementById('projectSearchOverlay');
@@ -2491,6 +2557,10 @@ window.savePingIP = async function() {
}
function showOverlay(input) {
// Nur anzeigen wenn Projektvorschläge aktiviert sind
if (!projectSearchEnabled) {
return;
}
activeProjectSearchInput = input;
overlay.style.display = 'block';
overlay.setAttribute('aria-hidden', 'false');
@@ -2550,6 +2620,10 @@ window.savePingIP = async function() {
function onProjectInputFocus(ev) {
const input = ev.target;
if (!input.classList.contains('activity-project-input')) return;
// Nur Overlay anzeigen wenn Projektvorschläge aktiviert sind
if (!projectSearchEnabled) {
return;
}
if (projectSearchDebounceTimer) {
clearTimeout(projectSearchDebounceTimer);
projectSearchDebounceTimer = null;
@@ -2560,6 +2634,14 @@ window.savePingIP = async function() {
function onProjectInputInput(ev) {
const input = ev.target;
if (!input.classList.contains('activity-project-input')) return;
// Nur Overlay anzeigen wenn Projektvorschläge aktiviert sind
if (!projectSearchEnabled) {
// Wenn deaktiviert, verstecke Overlay falls es noch angezeigt wird
if (activeProjectSearchInput === input) {
hideOverlay();
}
return;
}
if (!activeProjectSearchInput || activeProjectSearchInput !== input) showOverlay(input);
if (projectSearchDebounceTimer) clearTimeout(projectSearchDebounceTimer);