Merge pull request #15 from Fretuks/fix-redeclaration-of-const-fetchjson

Namespace dashboard helpers to avoid redeclaration collisions
This commit is contained in:
2026-01-27 16:00:12 +01:00
committed by GitHub
+22 -21
View File
@@ -35,7 +35,8 @@ const elements = {
warningStatus: document.getElementById('warningStatus'), warningStatus: document.getElementById('warningStatus'),
}; };
const {fetchJson, setBanner, clearBanner, formatUserDisplay} = window.dashboardApi; const dashboardApi = window.dashboardApi;
const fetchDashboardJson = dashboardApi.fetchJson;
const COMMAND_NAME_REGEX = /^[a-z0-9_-]{1,32}$/i; const COMMAND_NAME_REGEX = /^[a-z0-9_-]{1,32}$/i;
@@ -246,8 +247,8 @@ const renderCommandsTable = () => {
}; };
const loadSession = async () => { const loadSession = async () => {
const data = await fetchJson('/api/me'); const data = await fetchDashboardJson('/api/me');
elements.userDisplay.textContent = formatUserDisplay(data.user); elements.userDisplay.textContent = dashboardApi.formatUserDisplay(data.user);
if (data.expiresAt) { if (data.expiresAt) {
const expires = new Date(data.expiresAt); const expires = new Date(data.expiresAt);
elements.sessionExpiry.textContent = `Session expires ${expires.toLocaleString()}`; elements.sessionExpiry.textContent = `Session expires ${expires.toLocaleString()}`;
@@ -255,7 +256,7 @@ const loadSession = async () => {
}; };
const loadGuilds = async () => { const loadGuilds = async () => {
const data = await fetchJson('/api/guilds'); const data = await fetchDashboardJson('/api/guilds');
state.guilds = data.guilds || []; state.guilds = data.guilds || [];
if (state.guilds.length > 0) { if (state.guilds.length > 0) {
state.selectedGuildId = state.guilds[0].id; state.selectedGuildId = state.guilds[0].id;
@@ -270,9 +271,9 @@ const loadGuildDetails = async () => {
setLoading(true); setLoading(true);
try { try {
const [permissionsData, rolesData, commandsData] = await Promise.all([ const [permissionsData, rolesData, commandsData] = await Promise.all([
fetchJson(`/api/guilds/${state.selectedGuildId}/permissions`), fetchDashboardJson(`/api/guilds/${state.selectedGuildId}/permissions`),
fetchJson(`/api/guilds/${state.selectedGuildId}/roles`), fetchDashboardJson(`/api/guilds/${state.selectedGuildId}/roles`),
fetchJson(`/api/guilds/${state.selectedGuildId}/commands`), fetchDashboardJson(`/api/guilds/${state.selectedGuildId}/commands`),
]); ]);
state.permissions = permissionsData.permissions || { state.permissions = permissionsData.permissions || {
@@ -294,9 +295,9 @@ const loadGuildDetails = async () => {
renderAdminUsers(); renderAdminUsers();
renderCommandsTable(); renderCommandsTable();
elements.permissionsStatus.textContent = ''; elements.permissionsStatus.textContent = '';
clearBanner(elements.banner); dashboardApi.clearBanner(elements.banner);
} catch (error) { } catch (error) {
setBanner(elements.banner, error.message || 'Failed to load guild data.'); dashboardApi.setBanner(elements.banner, error.message || 'Failed to load guild data.');
} finally { } finally {
setLoading(false); setLoading(false);
} }
@@ -326,7 +327,7 @@ const addCommand = () => {
return; return;
} }
if (!COMMAND_NAME_REGEX.test(value)) { if (!COMMAND_NAME_REGEX.test(value)) {
setBanner(elements.banner, 'Command name must be 1-32 characters and use letters, numbers, - or _.'); dashboardApi.setBanner(elements.banner, 'Command name must be 1-32 characters and use letters, numbers, - or _.');
return; return;
} }
if (!state.commands.includes(value)) { if (!state.commands.includes(value)) {
@@ -352,18 +353,18 @@ const savePermissions = async () => {
setLoading(true); setLoading(true);
try { try {
const data = await fetchJson(`/api/guilds/${state.selectedGuildId}/permissions`, { const data = await fetchDashboardJson(`/api/guilds/${state.selectedGuildId}/permissions`, {
method: 'PATCH', method: 'PATCH',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}); });
state.permissions = data.permissions; state.permissions = data.permissions;
elements.permissionsStatus.textContent = 'Permissions saved successfully.'; elements.permissionsStatus.textContent = 'Permissions saved successfully.';
setBanner(elements.banner, 'Permissions updated successfully.', 'success'); dashboardApi.setBanner(elements.banner, 'Permissions updated successfully.', 'success');
renderRolesSelect(); renderRolesSelect();
renderAdminUsers(); renderAdminUsers();
renderCommandsTable(); renderCommandsTable();
} catch (error) { } catch (error) {
setBanner(elements.banner, error.message || 'Failed to save permissions.'); dashboardApi.setBanner(elements.banner, error.message || 'Failed to save permissions.');
} finally { } finally {
setLoading(false); setLoading(false);
} }
@@ -380,12 +381,12 @@ const switchTab = (tabName) => {
const fetchWarnings = async () => { const fetchWarnings = async () => {
const userId = elements.warningsUserInput.value.trim(); const userId = elements.warningsUserInput.value.trim();
if (!userId) { if (!userId) {
setBanner(elements.banner, 'Enter a user ID to fetch warnings.'); dashboardApi.setBanner(elements.banner, 'Enter a user ID to fetch warnings.');
return; return;
} }
setLoading(true); setLoading(true);
try { try {
const data = await fetchJson(`/api/guilds/${state.selectedGuildId}/warnings/${userId}`); const data = await fetchDashboardJson(`/api/guilds/${state.selectedGuildId}/warnings/${userId}`);
const warnings = data.warnings || []; const warnings = data.warnings || [];
elements.warningsList.innerHTML = ''; elements.warningsList.innerHTML = '';
if (warnings.length === 0) { if (warnings.length === 0) {
@@ -399,9 +400,9 @@ const fetchWarnings = async () => {
elements.warningsList.appendChild(item); elements.warningsList.appendChild(item);
}); });
} }
clearBanner(elements.banner); dashboardApi.clearBanner(elements.banner);
} catch (error) { } catch (error) {
setBanner(elements.banner, error.message || 'Failed to fetch warnings.'); dashboardApi.setBanner(elements.banner, error.message || 'Failed to fetch warnings.');
} finally { } finally {
setLoading(false); setLoading(false);
} }
@@ -417,15 +418,15 @@ const addWarning = async () => {
setLoading(true); setLoading(true);
try { try {
const data = await fetchJson(`/api/guilds/${state.selectedGuildId}/warnings/${userId}`, { const data = await fetchDashboardJson(`/api/guilds/${state.selectedGuildId}/warnings/${userId}`, {
method: 'POST', method: 'POST',
body: JSON.stringify({reason}), body: JSON.stringify({reason}),
}); });
elements.warningStatus.textContent = `Warning added. Total warnings: ${data.warnings?.length || 0}`; elements.warningStatus.textContent = `Warning added. Total warnings: ${data.warnings?.length || 0}`;
elements.warningReasonInput.value = ''; elements.warningReasonInput.value = '';
clearBanner(elements.banner); dashboardApi.clearBanner(elements.banner);
} catch (error) { } catch (error) {
setBanner(elements.banner, error.message || 'Failed to add warning.'); dashboardApi.setBanner(elements.banner, error.message || 'Failed to add warning.');
} finally { } finally {
setLoading(false); setLoading(false);
} }
@@ -439,7 +440,7 @@ const initDashboard = async () => {
await loadGuildDetails(); await loadGuildDetails();
} }
} catch (error) { } catch (error) {
setBanner(elements.banner, 'Please log in to access the dashboard.'); dashboardApi.setBanner(elements.banner, 'Please log in to access the dashboard.');
window.location.href = '/'; window.location.href = '/';
return; return;
} }