From 72956a05635c44f7137e89a3683e01e8e36accf9 Mon Sep 17 00:00:00 2001 From: Tomas Dvorak Date: Fri, 30 May 2025 09:43:53 +0200 Subject: [PATCH] test --- admin-dashboard.html | 159 +++++++++++++++++++++++-------------------- 1 file changed, 86 insertions(+), 73 deletions(-) diff --git a/admin-dashboard.html b/admin-dashboard.html index ca28a5a..162bbeb 100644 --- a/admin-dashboard.html +++ b/admin-dashboard.html @@ -1390,7 +1390,7 @@ function handleImageUpload(event) { } // Hardcoded apps data - should match the ones in index.html -const HARDCODED_APPS = [ +window.HARDCODED_APPS = [ { id: 'hardcoded-car', name: 'Záznam služebních jízd', @@ -1425,54 +1425,40 @@ const HARDCODED_APPS = [ } ]; +console.log("HARDCODED_APPS defined:", window.HARDCODED_APPS); + // Load hardcoded apps -async function loadHardcodedApps() { - const hardcodedAppsList = document.getElementById('hardcodedAppsList'); - +function loadHardcodedApps() { + console.log("Loading hardcoded apps..."); try { - // Get the list of dynamic apps to check for duplicates - const token = localStorage.getItem('token'); - if (!token) { - window.location.href = '/login.html'; + const hardcodedAppsList = document.getElementById('hardcodedAppsList'); + + if (!hardcodedAppsList) { + console.error("hardcodedAppsList element not found"); return; } - const response = await fetch('/api/apps', { - headers: { - 'Authorization': `Bearer ${token}`, - 'Content-Type': 'application/json' - } - }); - - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - const dynamicApps = await response.json(); - const dynamicAppIds = new Set(dynamicApps.map(app => app.id)); - - // Filter out hardcoded apps that are already in the dynamic apps list - const uniqueHardcodedApps = HARDCODED_APPS.filter(app => !dynamicAppIds.has(app.id)); - - if (uniqueHardcodedApps.length === 0) { + if (!window.HARDCODED_APPS || !Array.isArray(window.HARDCODED_APPS) || window.HARDCODED_APPS.length === 0) { + console.log("No hardcoded apps found"); hardcodedAppsList.innerHTML = `
- Žádné přednastavené aplikace k zobrazení + Žádné přednastavené aplikace nebyly nalezeny
`; return; } - hardcodedAppsList.innerHTML = uniqueHardcodedApps.map(app => ` + console.log("Rendering", window.HARDCODED_APPS.length, "hardcoded apps"); + hardcodedAppsList.innerHTML = window.HARDCODED_APPS.map(app => `
-
- +
+
-

${app.name}

-

${app.url}

-

${app.description}

+

${app.name || 'Neznámá aplikace'}

+

${app.url || ''}

+ ${app.description ? `

${app.description}

` : ''}
@@ -1481,12 +1467,15 @@ async function loadHardcodedApps() {
`).join(''); } catch (error) { - console.error('Error loading hardcoded apps:', error); - hardcodedAppsList.innerHTML = ` -
- Chyba při načítání přednastavených aplikací -
- `; + console.error("Error in loadHardcodedApps:", error); + const hardcodedAppsList = document.getElementById('hardcodedAppsList'); + if (hardcodedAppsList) { + hardcodedAppsList.innerHTML = ` +
+ Chyba při načítání přednastavených aplikací +
+ `; + } } } @@ -1521,18 +1510,10 @@ async function loadDynamicApps() { const apps = await response.json(); console.log("Loaded dynamic apps:", apps); - if (!Array.isArray(apps) || apps.length === 0) { - dynamicAppsList.innerHTML = ` -
- -

Žádné vlastní aplikace nebyly nalezeny

-
- `; - return; - } - // Filter out hardcoded apps and map only custom apps to HTML - const customApps = apps.filter(app => !app.id || !app.id.startsWith('hardcoded-')); + const customApps = Array.isArray(apps) + ? apps.filter(app => !app.id || !app.id.startsWith('hardcoded-')) + : []; if (customApps.length === 0) { dynamicAppsList.innerHTML = ` @@ -1544,18 +1525,28 @@ async function loadDynamicApps() { return; } - const dynamicApps = customApps.map(app => ` -
+ // Generate a random color if not specified + const colors = ['blue', 'green', 'red', 'yellow', 'indigo', 'purple', 'pink', 'gray']; + const randomColor = colors[Math.floor(Math.random() * colors.length)]; + + dynamicAppsList.innerHTML = customApps.map(app => { + // Use the app's color or generate a random one + const appColor = app.color || randomColor; + const iconClass = app.icon ? 'fa-apple-alt' : (app.iconClass || 'fa-globe'); + + return ` +
${app.icon ? `${app.name}` : - `
- + `
+
` }

${app.name || 'Neznámá aplikace'}

${app.url || ''}

+ ${app.description ? `

${app.description}

` : ''}
@@ -1567,18 +1558,8 @@ async function loadDynamicApps() {
- `).join(''); - - if (dynamicApps.length > 0) { - dynamicAppsList.innerHTML = dynamicApps; - } else { - dynamicAppsList.innerHTML = ` -
- -

Žádné vlastní aplikace nebyly nalezeny

-
`; - } + }).join(''); } catch (error) { console.error('Error loading dynamic apps:', error); @@ -1601,12 +1582,39 @@ async function loadDynamicApps() { // Load all apps (both hardcoded and dynamic) async function loadApps() { + console.log("Starting to load all apps..."); try { - // Load hardcoded apps first, then dynamic apps - await loadHardcodedApps(); + // First load hardcoded apps (synchronous) + console.log("Loading hardcoded apps..."); + loadHardcodedApps(); + + // Then load dynamic apps (asynchronous) + console.log("Loading dynamic apps..."); await loadDynamicApps(); + + console.log("All apps loaded successfully"); } catch (error) { console.error('Error loading apps:', error); + + // Show error message in the UI + const appsList = document.getElementById('appsList'); + if (appsList) { + const errorDiv = document.createElement('div'); + errorDiv.className = 'bg-red-50 border-l-4 border-red-400 p-4 mb-4'; + errorDiv.innerHTML = ` +
+
+ +
+
+

+ Chyba při načítání aplikací: ${error.message} +

+
+
+ `; + appsList.insertBefore(errorDiv, appsList.firstChild); + } } } @@ -1631,9 +1639,14 @@ async function saveApp(event) { return; } + // Generate a random color for the app + const colors = ['blue', 'green', 'red', 'yellow', 'indigo', 'purple', 'pink', 'gray']; + const randomColor = colors[Math.floor(Math.random() * colors.length)]; + formData.append('name', name); formData.append('url', url); formData.append('description', document.getElementById('appDescription').value.trim()); + formData.append('color', randomColor); // Handle icon upload if a new file is selected const iconInput = document.getElementById('appIcon'); @@ -3253,11 +3266,11 @@ function applyTemplate(templateId) { bannerPreview.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); } } - - // Load apps when the page loads - document.addEventListener('DOMContentLoaded', function() { - loadApps(); - }); - + +// Load apps when the page loads +document.addEventListener('DOMContentLoaded', function() { + loadApps(); +}); + \ No newline at end of file