/** * Jobs Safety Fix - Mercedes-Benz MYP Platform * Umfassende Lösung für "jobs undefined" Probleme * Version: 2.0.0 - Erweiterte Fehlerbehandlung */ (function() { 'use strict'; console.log('🛡️ Jobs Safety Fix v2.0.0 wird geladen...'); /** * Globale Jobs-Variable sicher initialisieren */ if (typeof window.jobsData === 'undefined') { window.jobsData = []; console.log('✅ window.jobsData initialisiert'); } if (typeof window.filteredJobs === 'undefined') { window.filteredJobs = []; console.log('✅ window.filteredJobs initialisiert'); } /** * Sichere Jobs-Funktionen */ window.safeJobsOperations = { /** * Jobs sicher abrufen */ getJobs: function() { try { if (window.jobManager && Array.isArray(window.jobManager.jobs)) { return window.jobManager.jobs; } if (Array.isArray(window.jobsData)) { return window.jobsData; } console.warn('⚠️ Keine gültigen Jobs gefunden, gebe leeres Array zurück'); return []; } catch (error) { console.error('❌ Fehler beim Abrufen der Jobs:', error); return []; } }, /** * Gefilterte Jobs sicher abrufen */ getFilteredJobs: function() { try { if (Array.isArray(window.filteredJobs)) { return window.filteredJobs; } return this.getJobs(); } catch (error) { console.error('❌ Fehler beim Abrufen der gefilterten Jobs:', error); return []; } }, /** * Jobs sicher setzen */ setJobs: function(jobs) { try { if (!Array.isArray(jobs)) { console.warn('⚠️ Jobs ist kein Array, konvertiere zu leerem Array:', typeof jobs); jobs = []; } if (window.jobManager) { window.jobManager.jobs = jobs; } window.jobsData = jobs; console.log(`✅ ${jobs.length} Jobs sicher gesetzt`); // Event für andere Komponenten window.dispatchEvent(new CustomEvent('jobsUpdated', { detail: { jobs: jobs, count: jobs.length } })); } catch (error) { console.error('❌ Fehler beim Setzen der Jobs:', error); window.jobsData = []; if (window.jobManager) { window.jobManager.jobs = []; } } }, /** * Job sicher finden */ findJob: function(jobId) { try { const jobs = this.getJobs(); const job = jobs.find(job => job && job.id && job.id.toString() === jobId.toString()); if (!job) { console.warn(`⚠️ Job mit ID ${jobId} nicht gefunden`); } return job || null; } catch (error) { console.error('❌ Fehler beim Suchen des Jobs:', error); return null; } }, /** * Jobs sicher filtern */ filterJobs: function(filterFn) { try { const jobs = this.getJobs(); if (typeof filterFn !== 'function') { console.warn('⚠️ Filter-Funktion ist nicht gültig'); return jobs; } return jobs.filter(job => { if (!job || typeof job !== 'object') { return false; } try { return filterFn(job); } catch (filterError) { console.warn('⚠️ Fehler beim Filtern eines Jobs:', filterError); return false; } }); } catch (error) { console.error('❌ Fehler beim Filtern der Jobs:', error); return this.getJobs(); } }, /** * Debug-Informationen ausgeben */ debugInfo: function() { console.group('🔍 Jobs Debug Info'); console.log('jobsData:', window.jobsData); console.log('filteredJobs:', window.filteredJobs); console.log('jobManager:', window.jobManager); console.log('jobManager.jobs:', window.jobManager?.jobs); console.groupEnd(); } }; /** * JobManager Sicherheitsprüfungen */ function ensureJobManagerSafety() { try { if (typeof window.jobManager !== 'undefined' && window.jobManager) { // Sicherstellen, dass jobs ein Array ist if (!Array.isArray(window.jobManager.jobs)) { console.warn('⚠️ JobManager.jobs ist kein Array, korrigiere...', typeof window.jobManager.jobs); window.jobManager.jobs = []; } // Originale loadJobs Methode wrappen if (window.jobManager.loadJobs && typeof window.jobManager.loadJobs === 'function' && !window.jobManager._loadJobsWrapped) { const originalLoadJobs = window.jobManager.loadJobs; window.jobManager.loadJobs = async function(...args) { try { console.log('🔄 Lade Jobs sicher...'); await originalLoadJobs.apply(this, args); // Nach dem Laden sicherstellen, dass jobs ein Array ist if (!Array.isArray(this.jobs)) { console.warn('⚠️ Jobs nach dem Laden kein Array, korrigiere...'); this.jobs = []; } console.log(`✅ ${this.jobs.length} Jobs erfolgreich geladen`); } catch (error) { console.error('❌ Fehler beim sicheren Laden der Jobs:', error); this.jobs = []; throw error; } }; window.jobManager._loadJobsWrapped = true; } // Originale renderJobs Methode wrappen if (window.jobManager.renderJobs && typeof window.jobManager.renderJobs === 'function' && !window.jobManager._renderJobsWrapped) { const originalRenderJobs = window.jobManager.renderJobs; window.jobManager.renderJobs = function(...args) { try { // Sicherstellen, dass jobs ein Array ist vor dem Rendern if (!Array.isArray(this.jobs)) { console.warn('⚠️ Jobs ist kein Array vor dem Rendern, korrigiere...'); this.jobs = []; } console.log(`🎨 Rendere ${this.jobs.length} Jobs...`); return originalRenderJobs.apply(this, args); } catch (error) { console.error('❌ Fehler beim sicheren Rendern der Jobs:', error); // Fallback-Rendering const jobsList = document.getElementById('jobs-list'); if (jobsList) { jobsList.innerHTML = `
Jobs konnten nicht angezeigt werden