21 lines
5.1 KiB
JavaScript
21 lines
5.1 KiB
JavaScript
(function(){'use strict';console.log('🛡️ Jobs Safety Fix wird geladen...');if(typeof window.jobsData==='undefined'){window.jobsData=[];}
|
|
if(typeof window.filteredJobs==='undefined'){window.filteredJobs=[];}
|
|
window.safeJobsOperations={getJobs:function(){if(window.jobManager&&Array.isArray(window.jobManager.jobs)){return window.jobManager.jobs;}
|
|
if(Array.isArray(window.jobsData)){return window.jobsData;}
|
|
return[];},getFilteredJobs:function(){if(Array.isArray(window.filteredJobs)){return window.filteredJobs;}
|
|
return this.getJobs();},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`);},findJob:function(jobId){const jobs=this.getJobs();return jobs.find(job=>job&&job.id&&job.id.toString()===jobId.toString())||null;},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;}}};function ensureJobManagerSafety(){if(typeof window.jobManager!=='undefined'&&window.jobManager){if(!Array.isArray(window.jobManager.jobs)){console.warn('⚠️ JobManager.jobs ist kein Array, korrigiere...');window.jobManager.jobs=[];}
|
|
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);if(!Array.isArray(this.jobs)){this.jobs=[];}}catch(error){console.error('❌ Fehler beim sicheren Laden der Jobs:',error);this.jobs=[];throw error;}};}
|
|
if(window.jobManager.renderJobs&&typeof window.jobManager.renderJobs==='function'){const originalRenderJobs=window.jobManager.renderJobs;window.jobManager.renderJobs=function(...args){try{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);const jobsList=document.getElementById('jobs-list');if(jobsList){jobsList.innerHTML=`<div class="text-center py-12"><div class="text-red-400 dark:text-red-600 text-6xl mb-4">⚠️</div><h3 class="text-lg font-medium text-gray-900 dark:text-white mb-2">Renderingfehler</h3><p class="text-gray-500 dark:text-gray-400 mb-4">Jobs konnten nicht angezeigt werden</p><button onclick="window.jobManager.loadJobs()"class="px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700">Erneut laden</button></div>`;}}};}}}
|
|
function setupGlobalVariableWatching(){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});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});}
|
|
window.validateJobsResponse=function(data){if(!data||typeof data!=='object'){console.warn('⚠️ Ungültige API-Response:',data);return{jobs:[],total:0};}
|
|
let jobs=[];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=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};};window.addEventListener('error',function(e){if(e.message&&e.message.includes('jobs')&&e.message.includes('undefined')){console.log('🛡️ Jobs undefined Fehler abgefangen:',e.message);window.safeJobsOperations.setJobs([]);e.preventDefault();return false;}});window.addEventListener('unhandledrejection',function(e){if(e.reason&&e.reason.message&&e.reason.message.includes('jobs')){console.log('🛡️ Jobs Promise rejection abgefangen:',e.reason);window.safeJobsOperations.setJobs([]);e.preventDefault();}});if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',function(){setupGlobalVariableWatching();ensureJobManagerSafety();});}else{setupGlobalVariableWatching();ensureJobManagerSafety();}
|
|
setInterval(function(){ensureJobManagerSafety();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);console.log('✅ Jobs Safety Fix erfolgreich geladen');})(); |