gateway/backend/webparts/part-prompts.js
2025-03-15 19:53:40 +01:00

168 lines
6.5 KiB
JavaScript

// prompts-module.js
(function() {
// DOM-Elemente
let addPromptBtn, promptsList;
// Initialisierungsfunktion für das Prompts-Modul
function initPromptsModule(globalState) {
// DOM-Elemente referenzieren
addPromptBtn = document.getElementById('add-prompt-btn');
promptsList = document.getElementById('prompts-list');
// Event-Listener hinzufügen
setupEventListeners(globalState);
// Initialdaten rendern
renderMyPrompts(globalState);
}
// Event-Listener einrichten
function setupEventListeners(globalState) {
// Neuen Prompt hinzufügen
addPromptBtn.addEventListener('click', () => {
const newPrompt = prompt('Geben Sie den neuen Prompt ein:');
if (newPrompt && newPrompt.trim()) {
const promptData = {
id: `prompt_${Date.now()}`,
content: newPrompt.trim(),
created_at: new Date().toISOString()
};
// Prompt zur globalen Liste hinzufügen
globalState.availablePrompts.push(promptData);
// UI aktualisieren
renderMyPrompts(globalState);
// Optional: Prompt speichern
savePrompt(promptData, globalState);
}
});
}
// Meine Prompts rendern
function renderMyPrompts(globalState) {
if (!promptsList) return;
promptsList.innerHTML = '';
if (globalState.availablePrompts.length === 0) {
promptsList.innerHTML = '<div class="empty-state">Keine Prompts vorhanden.</div>';
return;
}
globalState.availablePrompts.forEach(prompt => {
const promptItem = document.createElement('div');
promptItem.className = 'prompt-item';
promptItem.innerHTML = `
<div class="prompt-content">${prompt.content}</div>
<div class="prompt-meta">Erstellt am: ${new Date(prompt.created_at).toLocaleString()}</div>
<div class="prompt-actions">
<button class="use-prompt-btn" data-id="${prompt.id}">
<i class="fas fa-play"></i> Verwenden
</button>
<button class="delete-prompt-btn" data-id="${prompt.id}">
<i class="fas fa-trash"></i>
</button>
</div>
`;
promptsList.appendChild(promptItem);
});
// Event-Listener für Prompt-Aktionen einrichten
setupPromptActionListeners(globalState);
}
// Event-Listener für Prompt-Aktionen
function setupPromptActionListeners(globalState) {
// "Verwenden"-Button
document.querySelectorAll('.use-prompt-btn').forEach(btn => {
btn.addEventListener('click', () => {
const promptId = btn.getAttribute('data-id');
const selectedPrompt = globalState.availablePrompts.find(p => p.id === promptId);
if (selectedPrompt) {
// Workflow-Modul aktivieren und Prompt übernehmen
document.querySelector('a[href="#workflow"]').click();
// Prompt in Workflow-Eingabefeld setzen
const promptInput = document.getElementById('prompt-input');
const promptSelect = document.getElementById('prompt-select');
if (promptInput) {
promptInput.value = selectedPrompt.content;
}
if (promptSelect) {
// Wenn der Prompt bereits existiert, ihn in der Dropdown auswählen
const existingOption = Array.from(promptSelect.options).find(
option => option.textContent.includes(selectedPrompt.content.substring(0, 50))
);
if (existingOption) {
promptSelect.value = existingOption.value;
}
}
}
});
});
// "Löschen"-Button
document.querySelectorAll('.delete-prompt-btn').forEach(btn => {
btn.addEventListener('click', async () => {
const promptId = btn.getAttribute('data-id');
if (confirm('Möchten Sie diesen Prompt wirklich löschen?')) {
try {
// Aus dem globalen State entfernen
globalState.availablePrompts = globalState.availablePrompts.filter(p => p.id !== promptId);
// UI aktualisieren
renderMyPrompts(globalState);
// Optional: Prompt vom Server löschen
await deletePrompt(promptId);
} catch (error) {
console.error("Fehler beim Löschen des Prompts:", error);
}
}
});
});
}
// Prompt speichern
async function savePrompt(promptData, globalState) {
try {
// Prompt auf dem Server speichern
const response = await window.globalUtils.postData('/api/prompts/save', promptData);
// Rückmeldung vom Server verarbeiten
if (response && response.id) {
// Wenn der Server eine ID zurückgibt, diese aktualisieren
const index = globalState.availablePrompts.findIndex(p => p.id === promptData.id);
if (index !== -1) {
globalState.availablePrompts[index].id = response.id;
}
// UI aktualisieren
renderMyPrompts(globalState);
}
} catch (error) {
console.error("Fehler beim Speichern des Prompts:", error);
}
}
// Prompt löschen
async function deletePrompt(promptId) {
try {
// Prompt vom Server löschen
await window.globalUtils.postData('/api/prompts/delete', { id: promptId });
} catch (error) {
console.error("Fehler beim Löschen des Prompts:", error);
throw error;
}
}
// Modul-Initialisierung exportieren
window.initPromptsModule = initPromptsModule;
})();