import { api } from '../api.js'; // Open a rename modal for the given workspace. Uses the existing .modal-overlay // / .modal / .modal-header / .modal-body / .modal-footer CSS classes. On // successful save, reloads the page (matches the workspace-switch flow). export function openWorkspaceRenameModal(workspace) { const overlay = document.createElement('div'); overlay.className = 'modal-overlay'; overlay.innerHTML = ` `; document.body.appendChild(overlay); const nameInput = overlay.querySelector('#renameWsName'); const slugInput = overlay.querySelector('#renameWsSlug'); const errorEl = overlay.querySelector('#renameWsError'); const saveBtn = overlay.querySelector('#renameWsSave'); nameInput.focus(); nameInput.select(); function close() { overlay.remove(); document.removeEventListener('keydown', onKey); } function onKey(e) { if (e.key === 'Escape') close(); else if (e.key === 'Enter' && (e.target === nameInput || e.target === slugInput)) save(); } document.addEventListener('keydown', onKey); overlay.addEventListener('click', (e) => { if (e.target === overlay) close(); }); overlay.querySelectorAll('[data-rename-close]').forEach(b => b.addEventListener('click', close)); async function save() { errorEl.style.display = 'none'; const name = nameInput.value.trim(); const slug = slugInput.value.trim(); if (!name) { showError('Name cannot be empty'); return; } saveBtn.disabled = true; saveBtn.textContent = 'Saving...'; try { await api.renameWorkspace(workspace.id, { name, slug }); window.location.reload(); } catch (err) { saveBtn.disabled = false; saveBtn.textContent = 'Save'; showError(err.message || 'Rename failed'); } } function showError(msg) { errorEl.textContent = msg; errorEl.style.display = 'block'; } saveBtn.addEventListener('click', save); } function esc(s) { return String(s ?? '').replace(/[&<>"']/g, c => ({ '&':'&','<':'<','>':'>','"':'"',"'":''' }[c])); }