// Projects List View - Shows all projects import { api } from '../api.js'; export async function renderProjects(app) { let projects = []; try { const result = await api.getProjects(); projects = result.projects || []; } catch (e) { app.showToast('Failed to load projects', 'error'); } const appEl = document.getElementById('app'); // Mobile sidebar functions - consistent with other views window.toggleMobileSidebar = function() { const sidebar = document.getElementById('sidebar'); const overlay = document.querySelector('.sidebar-overlay'); if (sidebar) { sidebar.classList.toggle('mobile-open'); if (overlay) overlay.classList.toggle('active'); } }; window.closeMobileSidebar = function() { const sidebar = document.getElementById('sidebar'); const overlay = document.querySelector('.sidebar-overlay'); if (sidebar) { sidebar.classList.remove('mobile-open'); if (overlay) overlay.classList.remove('active'); } }; function render() { appEl.innerHTML = `

Projects

Organize your documents into projects and folders

${projects.length === 0 ? `
📋

No projects yet

Create your first project to get started

` : projects.map(project => renderProjectCard(project)).join('')}
`; } render(); } function renderProjectCard(project) { const createdDate = formatDate(project.createdAt); const docCount = project.documentCount || 0; const folderCount = project.folderCount || 0; return `
📋

${escapeHtml(project.name)}

${project.description ? `

${escapeHtml(project.description)}

` : ''}
📄 ${docCount} docs 📁 ${folderCount} folders 📅 ${createdDate}
`; } function escapeHtml(str) { if (!str) return ''; const div = document.createElement('div'); div.textContent = str; return div.innerHTML; } function formatDate(dateStr) { if (!dateStr) return ''; const date = new Date(dateStr); return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }); } // Global function: Show modal to create new project window.showNewProjectModal = function() { const backdrop = document.createElement('div'); backdrop.className = 'modal-backdrop'; backdrop.innerHTML = ` `; document.body.appendChild(backdrop); const nameInput = document.getElementById('new-project-name'); const descInput = document.getElementById('new-project-description'); const createBtn = document.getElementById('create-project-btn'); createBtn.onclick = async () => { const name = nameInput.value.trim(); if (!name) { window.app.showToast('Please enter a project name', 'error'); return; } try { await api.createProject({ name, description: descInput.value.trim() }); backdrop.remove(); window.app.showToast('Project created successfully', 'success'); window.app.navigate('projects'); } catch (e) { window.app.showToast('Failed to create project: ' + e.message, 'error'); } }; backdrop.onclick = (e) => { if (e.target === backdrop) backdrop.remove(); }; nameInput.focus(); }