var WS_LIST = [ { id: 'ws_default', slug: 'default', name: 'Default workspace', role: 'Owner', letter: 'D', color: '#0d9488' } ]; var workspaceLoadPromise = null; var workspaceLoadFailed = false; function workspaceColor(index) { return ['#0d9488', '#7c3aed', '#0891b2', '#f59e0b', '#2563eb'][index % 5]; } function mapWorkspace(record, index) { var workspace = record && record.workspace ? record.workspace : record; var displayName = workspace.display_name || workspace.slug || workspace.id; return { id: workspace.id, slug: workspace.slug, name: displayName, role: 'Owner', letter: displayName.charAt(0).toUpperCase(), color: workspaceColor(index), status: workspace.status, }; } function selectedWorkspaceId() { return localStorage.getItem('crank_workspace_id'); } function selectedWorkspaceSlug() { return localStorage.getItem('crank_workspace_slug'); } function persistCurrentWorkspace(workspace) { if (!workspace) return; localStorage.setItem('crank_workspace_id', workspace.id); localStorage.setItem('crank_workspace_slug', workspace.slug); } function getCurrentWs() { var workspaceId = selectedWorkspaceId(); var workspaceSlug = selectedWorkspaceSlug(); var workspace = WS_LIST.find(function(item) { return item.id === workspaceId; }) || WS_LIST.find(function(item) { return item.slug === workspaceSlug; }) || WS_LIST[0]; if (workspace) { persistCurrentWorkspace(workspace); } return workspace; } function updateWorkspaceHeader(workspace) { var nameEl = document.getElementById('ws-current-name'); var dotEl = document.getElementById('ws-dot'); if (nameEl) nameEl.textContent = workspace ? workspace.name : 'No workspace'; if (dotEl && workspace) { dotEl.textContent = workspace.letter; dotEl.style.background = workspace.color; } } function renderWorkspaceList() { var current = getCurrentWs(); updateWorkspaceHeader(current); var list = document.getElementById('ws-dropdown-list'); if (!list) return; list.innerHTML = WS_LIST.map(function(workspace) { var active = current && workspace.id === current.id; return '
' + '
' + workspace.letter + '
' + '
' + '
' + workspace.name + '
' + '
' + workspace.role + '
' + '
' + (active ? '' : '') + '
'; }).join('') + '
' + '' + '' + 'Workspace settings' + ''; } async function loadWorkspaces() { if (workspaceLoadPromise) return workspaceLoadPromise; workspaceLoadPromise = (async function() { if (!window.CrankApi) { renderWorkspaceList(); return WS_LIST; } try { var response = await window.CrankApi.listWorkspaces(); var items = (response && response.items ? response.items : []).map(mapWorkspace); if (items.length > 0) { WS_LIST = items; } workspaceLoadFailed = false; } catch (_error) { workspaceLoadFailed = true; } renderWorkspaceList(); return WS_LIST; }()); return workspaceLoadPromise; } function initWorkspaceSwitcher() { renderWorkspaceList(); loadWorkspaces(); } function toggleWsSwitcher(e) { e.stopPropagation(); var dd = document.getElementById('ws-dropdown'); if (dd) dd.style.display = dd.style.display === 'none' ? '' : 'none'; } function switchWorkspace(workspaceId) { var workspace = WS_LIST.find(function(item) { return item.id === workspaceId; }); if (!workspace) return; persistCurrentWorkspace(workspace); var dd = document.getElementById('ws-dropdown'); if (dd) dd.style.display = 'none'; renderWorkspaceList(); window.dispatchEvent(new CustomEvent('crank:workspacechange', { detail: workspace })); } window.getCurrentWorkspace = getCurrentWs; window.whenWorkspacesReady = loadWorkspaces; window.hasWorkspaceApiFailure = function() { return workspaceLoadFailed; }; document.addEventListener('DOMContentLoaded', initWorkspaceSwitcher); document.addEventListener('click', function(e) { if (!e.target.closest('#ws-switcher')) { var dd = document.getElementById('ws-dropdown'); if (dd) dd.style.display = 'none'; } });