¡Todo listo por hoy! No tienes tareas.
' : ''} ${state.tasks.map(task => `${task.title}
${task.description ? `${task.description}
` : ''}(function() { const initApp = () => { const appContainer = document.getElementById('work-agenda-app'); if (!appContainer) return; // --- 1. ESTADO DE LA APLICACIÓN --- const state = new Proxy({ tasks: [], filter: 'all', loading: true, editingTaskId: null }, { set(target, property, value) { target[property] = value; if (property === 'tasks' || property === 'filter' || property === 'loading') { renderApp(); } return true; } }); // --- HELPER PARA LAS URLS CON TOKEN --- const getApiUrl = (endpoint = '') => { const config = window.WorkAgendaConfig || { root: '/wp-json/work-agenda/v1/', token: '' }; const separator = endpoint.includes('?') ? '&' : '?'; return `${config.root}${endpoint}${separator}token=${config.token}`; }; // --- 2. SERVICIOS API --- const API = { async fetchTasks() { state.loading = true; try { const response = await fetch(getApiUrl('tasks')); const data = await response.json(); state.tasks = Array.isArray(data) ? data : []; } catch (err) { console.error("Error cargando tareas:", err); state.tasks = []; } finally { state.loading = false; } }, async createTask(taskData) { try { const response = await fetch(getApiUrl('tasks'), { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(taskData) }); const newTask = await response.json(); if (newTask && newTask.id) { state.tasks = [newTask, ...state.tasks]; } } catch (err) { console.error("Error al guardar tarea:", err); } }, async updateTask(id, taskData) { state.tasks = state.tasks.map(t => t.id == id ? { ...t, ...taskData } : t); try { await fetch(getApiUrl(`tasks/${id}`), { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(taskData) }); } catch (err) { console.error("Error al actualizar tarea:", err); API.fetchTasks(); } }, async toggleTaskStatus(id, currentStatus) { const newStatus = currentStatus === 'pending' ? 'completed' : 'pending'; state.tasks = state.tasks.map(t => t.id == id ? { ...t, status: newStatus } : t); try { await fetch(getApiUrl(`tasks/${id}`), { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ status: newStatus }) }); } catch (err) { console.error("Error al actualizar estado:", err); API.fetchTasks(); } } }; // --- 3. COMPONENTES Y RENDERIZADO DE LA INTERFAZ --- function renderApp() { if (state.loading) { appContainer.innerHTML = `
¡Todo listo por hoy! No tienes tareas.
' : ''} ${state.tasks.map(task => `${task.description}
` : ''}