Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 14 additions & 34 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,6 @@ import { updateUrlState, restoreStateFromUrl, levelOrder, currentLevelIndex, sel

declare const __APP_VERSION__: string

type AdminFlagsWindow = Window & {
__IS_ADMIN__?: boolean
__IS_DEBUG__?: boolean
}

type OrgPosition = {
positionId?: number
userId?: number
Expand Down Expand Up @@ -139,30 +134,21 @@ L.tileLayer('https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png', {
const layerGroup = L.layerGroup().addTo(map)
const infoPanel = document.querySelector<HTMLDivElement>('#info')!

function isAdminUser(): boolean {
const flags = window as AdminFlagsWindow
return flags.__IS_ADMIN__ === true || flags.__IS_DEBUG__ === true
}

const showAdminDebug = isAdminUser()

function encodeAdminLog(payload: unknown): string {
return encodeURIComponent(JSON.stringify(payload))
}

if (showAdminDebug) {
infoPanel.addEventListener('click', (e) => {
const target = (e.target as HTMLElement).closest<HTMLElement>('[data-admin-log]')
if (!target) return
const raw = target.dataset.adminLog
if (!raw) return
try {
console.log('[admin]', JSON.parse(decodeURIComponent(raw)))
} catch {
console.log('[admin]', raw)
}
})
}
infoPanel.addEventListener('click', (e) => {
const target = (e.target as HTMLElement).closest<HTMLElement>('[data-admin-log]')
if (!target) return
const raw = target.dataset.adminLog
if (!raw) return
try {
console.log('[admin]', JSON.parse(decodeURIComponent(raw)))
} catch {
console.log('[admin]', raw)
}
})
const breadcrumbEl = document.querySelector<HTMLDivElement>('#breadcrumb')!
const layersContainer = document.querySelector<HTMLDivElement>('#layers')!
const mapLoadingEl = document.querySelector<HTMLDivElement>('#map-loading')!
Expand Down Expand Up @@ -631,9 +617,7 @@ function renderInfo(org: Org, detail?: OrgInfo) {
const safeName = escapeHtml(name)
const safeAvatar = escapeHtml(avatar)
const avatarMarkup = `<img src="${safeAvatar}" alt="${safeName}" class="info-avatar" loading="lazy" />`
const adminLogAttr = showAdminDebug
? ` data-admin-log="${encodeAdminLog({ positionId: pos.positionId, userId: pos.userId, f3Name: name })}"`
: ''
const adminLogAttr = ` data-admin-log="${encodeAdminLog({ positionId: pos.positionId, userId: pos.userId, f3Name: name })}"`
return `<li class="info-position"${adminLogAttr}>${avatarMarkup}<div><div class="info-role">${safeTitle}</div><div class="info-person">${safeName}</div></div></li>`
})
.join('')
Expand All @@ -649,19 +633,15 @@ function renderInfo(org: Org, detail?: OrgInfo) {
const safeName = escapeHtml(name)
const safeAvatar = escapeHtml(avatar)
const avatarMarkup = `<img src="${safeAvatar}" alt="${safeName}" class="info-avatar" loading="lazy" />`
const adminLogAttr = showAdminDebug
? ` data-admin-log="${encodeAdminLog({ roleId: role.roleId, userId: role.userId, f3Name: name })}"`
: ''
const adminLogAttr = ` data-admin-log="${encodeAdminLog({ roleId: role.roleId, userId: role.userId, f3Name: name })}"`
return `<li class="info-position"${adminLogAttr}>${avatarMarkup}<div><div class="info-role">${safeTitle}</div><div class="info-person">${safeName}</div></div></li>`
})
.join('')
: '<li class="info-empty">This organization has no admins. If you would like to take ownership of this organization, please fill out <a href="https://forms.gle/8AR4JCK3txSVr1Xy7" target="_blank" rel="noopener noreferrer">this form</a> and a Nation admin will get back to you.</li>'

const displayName = escapeHtml(detail?.name ?? org.name)
const displayOrgType = escapeHtml((detail?.orgType ?? org.orgType).toUpperCase())
const orgAdminLogAttr = showAdminDebug
? ` data-admin-log="${encodeAdminLog({ orgId: detail?.id ?? org.id, name: detail?.name ?? org.name, orgType: detail?.orgType ?? org.orgType })}"`
: ''
const orgAdminLogAttr = ` data-admin-log="${encodeAdminLog({ orgId: detail?.id ?? org.id, name: detail?.name ?? org.name, orgType: detail?.orgType ?? org.orgType })}"`

infoPanel.innerHTML = `
<div class="info-title"${orgAdminLogAttr}>${displayName}</div>
Expand Down