import { html, nothing } from 'lit'; import { LightElement } from '../../lib/base.js'; import { ProjectListSection } from './project-list.js'; import { ProjectBoardSection } from './project-board.js'; export class ProjectsPage extends LightElement { static properties = { _open: { state: true }, _view: { state: true }, _projectId: { state: true }, }; constructor() { super(); this._open = false; this._view = 'list'; this._projectId = null; } connectedCallback() { super.connectedCallback(); window.addEventListener('llm-page-change', (e) => { const open = e.detail.page === 'projects'; this._open = open; this.style.display = open ? 'flex' : 'none'; if (open) { const { view, id } = this._parseHash(); this._view = view; this._projectId = id; this._loadCurrent(); } }); window.addEventListener('sidebar-open-project', (e) => { this._open = true; this.style.display = 'flex'; this._navigateToBoard(e.detail.id); }); } _parseHash() { const parts = location.hash.slice(1).split('/'); if (parts[0] === 'projects' && parts[1] && /^\d+$/.test(parts[1])) { return { view: 'board', id: parseInt(parts[1], 10) }; } return { view: 'list', id: null }; } _loadCurrent() { this.updateComplete.then(() => { if (this._view === 'list') { this.querySelector('project-list-section')?.load(); } else { this.querySelector('project-board-section')?.load(this._projectId); } }); } _navigateToBoard(id) { this._view = 'board'; this._projectId = id; history.pushState({ page: 'projects', id }, '', `#projects/${id}`); this.updateComplete.then(() => { this.querySelector('project-board-section')?.load(id); }); } _navigateToList() { this._view = 'list'; this._projectId = null; history.pushState({ page: 'projects' }, '', '#projects'); this.updateComplete.then(() => { this.querySelector('project-list-section')?.load(); }); } render() { if (!this._open) return nothing; return html` ${this._view === 'list' ? html` this._navigateToBoard(e.detail.id)} > ` : html` this._navigateToList()} > `} `; } } customElements.define('project-list-section', ProjectListSection); customElements.define('project-board-section', ProjectBoardSection);