/** * Jobs Safety Fix - Mercedes-Benz MYP Platform * Umfassende Lösung für "jobs undefined" Probleme * Version: 1.0.0 */ (function() { 'use strict'; console.log('🛡️ Jobs Safety Fix wird geladen...'); /** * Globale Jobs-Variable sicher initialisieren */ if (typeof window.jobsData === 'undefined') { window.jobsData = []; } if (typeof window.filteredJobs === 'undefined') { window.filteredJobs = []; } /** * Sichere Jobs-Funktionen */ window.safeJobsOperations = { /** * Jobs sicher abrufen */ getJobs: function() { if (window.jobManager && Array.isArray(window.jobManager.jobs)) { return window.jobManager.jobs; } if (Array.isArray(window.jobsData)) { return window.jobsData; } return []; }, /** * Gefilterte Jobs sicher abrufen */ getFilteredJobs: function() { if (Array.isArray(window.filteredJobs)) { return window.filteredJobs; } return this.getJobs(); }, /** * Jobs sicher setzen */ setJobs: function(jobs) { if (!Array.isArray(jobs)) { console.warn('⚠️ Jobs ist kein Array, konvertiere zu leerem Array'); jobs = []; } if (window.jobManager) { window.jobManager.jobs = jobs; } window.jobsData = jobs; console.log(`✅ ${jobs.length} Jobs sicher gesetzt`); }, /** * Job sicher finden */ findJob: function(jobId) { const jobs = this.getJobs(); return jobs.find(job => job && job.id && job.id.toString() === jobId.toString()) || null; }, /** * Jobs sicher filtern */ filterJobs: function(filterFn) { const jobs = this.getJobs(); if (typeof filterFn !== 'function') { return jobs; } try { return jobs.filter(job => { if (!job || typeof job !== 'object') { return false; } return filterFn(job); }); } catch (error) { console.error('❌ Fehler beim Filtern der Jobs:', error); return jobs; } } }; /** * JobManager Sicherheitsprüfungen */ function ensureJobManagerSafety() { 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...'); window.jobManager.jobs = []; } // Originale loadJobs Methode wrappen if (window.jobManager.loadJobs && typeof window.jobManager.loadJobs === 'function') { const originalLoadJobs = window.jobManager.loadJobs; window.jobManager.loadJobs = async function(...args) { try { await originalLoadJobs.apply(this, args); // Nach dem Laden sicherstellen, dass jobs ein Array ist if (!Array.isArray(this.jobs)) { this.jobs = []; } } catch (error) { console.error('❌ Fehler beim sicheren Laden der Jobs:', error); this.jobs = []; throw error; } }; } // Originale renderJobs Methode wrappen if (window.jobManager.renderJobs && typeof window.jobManager.renderJobs === 'function') { 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 = []; } 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 = `
⚠️

Renderingfehler

Jobs konnten nicht angezeigt werden

`; } } }; } } } /** * Globale Variablen-Überwachung */ function setupGlobalVariableWatching() { // jobsData überwachen let _jobsData = []; Object.defineProperty(window, 'jobsData', { get: function() { return _jobsData; }, set: function(value) { if (!Array.isArray(value)) { console.warn('⚠️ Versuche jobsData mit Non-Array zu setzen:', value); _jobsData = []; } else { _jobsData = value; } }, enumerable: true, configurable: true }); // filteredJobs überwachen let _filteredJobs = []; Object.defineProperty(window, 'filteredJobs', { get: function() { return _filteredJobs; }, set: function(value) { if (!Array.isArray(value)) { console.warn('⚠️ Versuche filteredJobs mit Non-Array zu setzen:', value); _filteredJobs = []; } else { _filteredJobs = value; } }, enumerable: true, configurable: true }); } /** * API-Response Validator */ window.validateJobsResponse = function(data) { if (!data || typeof data !== 'object') { console.warn('⚠️ Ungültige API-Response:', data); return { jobs: [], total: 0 }; } let jobs = []; // Verschiedene Response-Formate unterstützen if (Array.isArray(data.jobs)) { jobs = data.jobs; } else if (Array.isArray(data.data)) { jobs = data.data; } else if (Array.isArray(data)) { jobs = data; } else if (data.success && Array.isArray(data.jobs)) { jobs = data.jobs; } // Jobs validieren jobs = jobs.filter(job => { if (!job || typeof job !== 'object') { console.warn('⚠️ Ungültiges Job-Objekt gefiltert:', job); return false; } if (!job.id) { console.warn('⚠️ Job ohne ID gefiltert:', job); return false; } return true; }); console.log(`✅ ${jobs.length} Jobs validiert`); return { jobs: jobs, total: jobs.length, current_page: data.current_page || 1, total_pages: data.total_pages || 1 }; }; /** * Fehlerbehandlung für undefined Jobs */ window.addEventListener('error', function(e) { if (e.message && e.message.includes('jobs') && e.message.includes('undefined')) { console.log('🛡️ Jobs undefined Fehler abgefangen:', e.message); // Versuche Jobs zu reparieren window.safeJobsOperations.setJobs([]); e.preventDefault(); return false; } }); /** * Promise rejection handler für Jobs */ window.addEventListener('unhandledrejection', function(e) { if (e.reason && e.reason.message && e.reason.message.includes('jobs')) { console.log('🛡️ Jobs Promise rejection abgefangen:', e.reason); // Versuche Jobs zu reparieren window.safeJobsOperations.setJobs([]); e.preventDefault(); } }); /** * DOM bereit - Setup starten */ if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function() { setupGlobalVariableWatching(); ensureJobManagerSafety(); }); } else { setupGlobalVariableWatching(); ensureJobManagerSafety(); } /** * Periodische Sicherheitsprüfung */ setInterval(function() { ensureJobManagerSafety(); // Prüfe ob globale Jobs-Variablen noch Arrays sind if (!Array.isArray(window.jobsData)) { console.warn('⚠️ jobsData ist kein Array mehr, repariere...'); window.jobsData = []; } if (!Array.isArray(window.filteredJobs)) { console.warn('⚠️ filteredJobs ist kein Array mehr, repariere...'); window.filteredJobs = []; } }, 10000); // Alle 10 Sekunden console.log('✅ Jobs Safety Fix erfolgreich geladen'); })();