mirror of
https://github.com/Dvorinka/PPve.git
synced 2026-06-05 04:52:58 +00:00
d
This commit is contained in:
+30
-29
@@ -1056,24 +1056,24 @@
|
|||||||
<div class="md:col-span-2 space-y-4">
|
<div class="md:col-span-2 space-y-4">
|
||||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="appName" class="block text-sm font-medium text-gray-700 mb-1">Název aplikace</label>
|
<label for="name" class="block text-sm font-medium text-gray-700 mb-1">Název aplikace</label>
|
||||||
<input type="text" id="appName" name="appName" class="form-control w-full" required>
|
<input type="text" id="name" name="name" class="form-control w-full" required>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="appLink" class="block text-sm font-medium text-gray-700 mb-1">Odkaz</label>
|
<label for="url" class="block text-sm font-medium text-gray-700 mb-1">Odkaz</label>
|
||||||
<input type="url" id="appLink" name="appLink" class="form-control w-full" required>
|
<input type="url" id="url" name="url" class="form-control w-full" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="appDescription" class="block text-sm font-medium text-gray-700 mb-1">Popis</label>
|
<label for="description" class="block text-sm font-medium text-gray-700 mb-1">Popis</label>
|
||||||
<textarea id="appDescription" name="appDescription" rows="3" class="form-control w-full"></textarea>
|
<textarea id="description" name="description" rows="3" class="form-control w-full"></textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="space-y-4">
|
<div class="space-y-4">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="block text-sm font-medium text-gray-700 mb-2">Ikona</label>
|
<label class="block text-sm font-medium text-gray-700 mb-2">Ikona</label>
|
||||||
<div class="flex items-center space-x-4">
|
<div class="flex items-center space-x-4">
|
||||||
<input type="text" id="appIcon" name="appIcon" class="form-control w-full cursor-pointer" placeholder="Vyberte ikonu" readonly>
|
<input type="text" id="appIcon" name="iconClass" class="form-control w-full cursor-pointer" placeholder="Vyberte ikonu" readonly>
|
||||||
</div>
|
</div>
|
||||||
<div id="iconPreview" class="mt-2 flex items-center justify-center w-16 h-16 bg-gray-100 rounded-md overflow-hidden">
|
<div id="iconPreview" class="mt-2 flex items-center justify-center w-16 h-16 bg-gray-100 rounded-md overflow-hidden">
|
||||||
<i id="selectedIcon" class="fas fa-cube text-2xl text-gray-400"></i>
|
<i id="selectedIcon" class="fas fa-cube text-2xl text-gray-400"></i>
|
||||||
@@ -2609,43 +2609,44 @@ async function deleteApp(appId) {
|
|||||||
async function saveApp(event) {
|
async function saveApp(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
// Get form data
|
// Get form values
|
||||||
const form = document.getElementById('appForm');
|
const name = document.getElementById('name').value.trim();
|
||||||
const formData = new FormData(form);
|
const url = document.getElementById('url').value.trim();
|
||||||
|
const description = document.getElementById('description').value.trim();
|
||||||
// Get app ID
|
const iconClass = document.getElementById('appIcon').value.trim();
|
||||||
const appId = document.getElementById('appId').value;
|
const appId = document.getElementById('appId').value;
|
||||||
|
|
||||||
// Get icon class from the selected icon
|
// Validate required fields
|
||||||
const iconClass = document.getElementById('appIcon').value;
|
if (!name || !url || !iconClass) {
|
||||||
formData.set('iconClass', iconClass);
|
showNotification('Název, URL a ikona jsou povinné pole', 'error');
|
||||||
|
return;
|
||||||
// Convert FormData to URL-encoded string
|
|
||||||
const urlEncoded = new URLSearchParams();
|
|
||||||
for (const [key, value] of formData.entries()) {
|
|
||||||
urlEncoded.append(key, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create request URL
|
// Create form data
|
||||||
const url = appId ? `/api/apps/${appId}` : '/api/apps';
|
const formData = new URLSearchParams();
|
||||||
|
formData.append('name', name);
|
||||||
|
formData.append('url', url);
|
||||||
|
formData.append('description', description);
|
||||||
|
formData.append('iconClass', iconClass);
|
||||||
|
|
||||||
// Set request method
|
// Create request URL
|
||||||
|
const requestUrl = appId ? `/api/apps/${appId}` : '/api/apps';
|
||||||
const method = appId ? 'PUT' : 'POST';
|
const method = appId ? 'PUT' : 'POST';
|
||||||
|
|
||||||
// Send request
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch(url, {
|
const response = await fetch(requestUrl, {
|
||||||
method: method,
|
method: method,
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/x-www-form-urlencoded',
|
'Content-Type': 'application/x-www-form-urlencoded',
|
||||||
},
|
},
|
||||||
body: urlEncoded.toString(),
|
body: formData.toString(),
|
||||||
credentials: 'include'
|
credentials: 'include'
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
const errorData = await response.json().catch(() => ({}));
|
const errorText = await response.text();
|
||||||
throw new Error(errorData.error || 'Network response was not ok');
|
console.error('Server response:', errorText);
|
||||||
|
throw new Error(`HTTP error! status: ${response.status}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
@@ -2653,7 +2654,7 @@ async function saveApp(event) {
|
|||||||
loadApps();
|
loadApps();
|
||||||
closeAppModal();
|
closeAppModal();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error:', error);
|
console.error('Error saving app:', error);
|
||||||
showNotification(`Chyba při ukládání aplikace: ${error.message}`, 'error');
|
showNotification(`Chyba při ukládání aplikace: ${error.message}`, 'error');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user