Files
Papo/public/ts/components/guildSelect.ts
Pascal Prießnitz 22caa79b54
All checks were successful
Deploy Discord Bot / deploy (push) Successful in 37s
[deploy]
2025-12-04 16:43:38 +01:00

57 lines
2.0 KiB
TypeScript

import { api } from '../services/api.js';
import { getConfig } from '../state/store.js';
import { showToast } from '../ui/toast.js';
export async function initSelectionView() {
const cfg = getConfig();
const grid = document.getElementById('guildGrid');
const logoutBtn = document.getElementById('logoutBtn');
const userInfo = document.getElementById('userInfo');
if (logoutBtn && cfg) {
logoutBtn.addEventListener('click', () => {
window.location.href = `${cfg.baseAuth}/logout`;
});
}
try {
const me = await api.me();
if (userInfo && me?.user) userInfo.textContent = `${me.user.username}#${me.user.discriminator}`;
} catch {
// ignore
}
if (!grid || !cfg) return;
grid.innerHTML = '<div class="muted">Lade Guilds...</div>';
try {
const data = await api.guilds();
grid.innerHTML = '';
(data.guilds || []).forEach((g) => {
const card = document.createElement('div');
card.className = 'card clickable';
card.innerHTML = `
<div class="row">
<img src="${g.icon ? `https://cdn.discordapp.com/icons/${g.id}/${g.icon}.png` : 'https://cdn.discordapp.com/embed/avatars/0.png'}" alt="icon" style="width:42px;height:42px;border-radius:12px;object-fit:cover;"/>
<div>
<div style="font-weight:700;">${g.name}</div>
<div class="muted">ID: ${g.id}</div>
</div>
</div>
<div style="margin-top:10px;" class="pill">Zum Dashboard</div>
`;
card.addEventListener('click', () => {
const qs = g.id ? `?guildId=${encodeURIComponent(g.id)}` : '';
window.location.href = `${cfg.baseDashboard}${qs}`;
});
grid.appendChild(card);
});
if (!data.guilds?.length) {
grid.innerHTML = '<div class="empty-state">Bot ist in keiner Guild. Bitte Bot einladen.</div>';
}
} catch (err) {
console.error(err);
grid.innerHTML = '<div class="empty-state">Fehler beim Laden der Guilds</div>';
showToast('Guilds konnten nicht geladen werden', true);
}
}