From c090cd3a717e02b3606475075c1b854a3c31ce5b Mon Sep 17 00:00:00 2001 From: Hiro Date: Sat, 28 Mar 2026 13:52:35 +0000 Subject: [PATCH] fix: add showNewDocModal and showNewFolderModal to projectView --- public/js/views/projectView.js | 123 +++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/public/js/views/projectView.js b/public/js/views/projectView.js index 90fc3c7..46f01d9 100644 --- a/public/js/views/projectView.js +++ b/public/js/views/projectView.js @@ -478,3 +478,126 @@ window.showMoveToFolderModal = async function(documentId) { if (e.target === backdrop) backdrop.remove(); }; }; + +// Global function: Show modal to create new document in project +window.showNewDocModal = async function(projectId, folderId = '') { + const backdrop = document.createElement('div'); + backdrop.className = 'modal-backdrop'; + + backdrop.innerHTML = ` + + `; + document.body.appendChild(backdrop); + + const titleInput = document.getElementById('new-doc-title'); + const typeSelect = document.getElementById('new-doc-type'); + const createBtn = document.getElementById('create-doc-btn'); + + titleInput.focus(); + + createBtn.onclick = async () => { + const title = titleInput.value.trim(); + if (!title) { + window.app.showToast('Please enter a title', 'error'); + return; + } + try { + const doc = await api.createDocument({ + title, + type: typeSelect.value, + projectId, + folderId: folderId || null + }); + backdrop.remove(); + window.app.showToast('Document created', 'success'); + window.app.navigate('editor', { id: doc.id, projectId, folderId: folderId || null }); + } catch (e) { + window.app.showToast('Failed to create document: ' + e.message, 'error'); + } + }; + + backdrop.onclick = (e) => { + if (e.target === backdrop) backdrop.remove(); + }; +}; + +// Global function: Show modal to create new folder in project +window.showNewFolderModal = async function(projectId, parentFolderId = null) { + const backdrop = document.createElement('div'); + backdrop.className = 'modal-backdrop'; + + backdrop.innerHTML = ` + + `; + document.body.appendChild(backdrop); + + const nameInput = document.getElementById('new-folder-name'); + const createBtn = document.getElementById('create-folder-btn'); + + nameInput.focus(); + + createBtn.onclick = async () => { + const name = nameInput.value.trim(); + if (!name) { + window.app.showToast('Please enter a folder name', 'error'); + return; + } + try { + await api.createFolder({ + name, + projectId, + parentId: parentFolderId + }); + backdrop.remove(); + window.app.showToast('Folder created', 'success'); + window.app.navigate('project', { id: projectId }); + } catch (e) { + window.app.showToast('Failed to create folder: ' + e.message, 'error'); + } + }; + + backdrop.onclick = (e) => { + if (e.target === backdrop) backdrop.remove(); + }; +};