feat: test role switcher in sidebar (admin only) — amber banner when impersonating

This commit is contained in:
James 2026-03-12 03:19:37 -04:00
parent d19ce5e8fa
commit e89b4e5a5c
1 changed files with 17 additions and 0 deletions

View File

@ -18,6 +18,7 @@
{{block "header-left" .}}
<a href="/app/projects" class="text-2xl font-bold text-white tracking-tight"><span class="text-[#c9a84c]">Deal</span>space</a>
{{end}}
<div id="testRoleBanner" style="display:none;position:fixed;bottom:0;left:0;right:0;background:#b45309;color:#fff;text-align:center;font-size:12px;padding:3px 0;z-index:999;pointer-events:none"></div>
<div class="flex items-center gap-4">
{{block "header-right-extra" .}}{{end}}
<span id="userName" class="text-sm text-[#94a3b8]"></span>
@ -82,6 +83,22 @@
function escHtml(s) { if (!s) return ''; const d = document.createElement('div'); d.textContent = s; return d.innerHTML; }
// Theme switcher
function setTestRole(role) {
localStorage.setItem('ds_test_role', role);
document.getElementById('testRoleSelect').value = role;
// Show banner when impersonating
const banner = document.getElementById('testRoleBanner');
if (banner) { banner.textContent = role ? '⚠ Viewing as: ' + role : ''; banner.style.display = role ? 'block' : 'none'; }
}
// Restore test role select on load
(function(){
const r = localStorage.getItem('ds_test_role') || '';
const sel = document.getElementById('testRoleSelect');
if (sel) sel.value = r;
const banner = document.getElementById('testRoleBanner');
if (banner && r) { banner.textContent = '⚠ Viewing as: ' + r; banner.style.display = 'block'; }
})();
function setTheme(t){document.documentElement.setAttribute('data-theme',t);localStorage.setItem('ds_theme',t);document.querySelectorAll('#ds-theme-bar button').forEach(b=>b.classList.toggle('active',b.getAttribute('data-t')===t))}
setTheme(localStorage.getItem('ds_theme')||'midnight');
</script>