57 lines
2.2 KiB
JavaScript
57 lines
2.2 KiB
JavaScript
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);
|
|
}
|
|
}
|