diff --git a/common/models/user.py b/common/models/user.py index d69c440..5274cc1 100644 --- a/common/models/user.py +++ b/common/models/user.py @@ -346,9 +346,9 @@ class TranslationCache(db.Model): class PartnerRAGRetriever(db.Model): __bind_key__ = 'public' __table_args__ = ( - {'schema': 'public'}, db.PrimaryKeyConstraint('tenant_id', 'retriever_id'), - db.UniqueConstraint('partner_id', 'tenant_id', 'retriever_id') + db.UniqueConstraint('partner_id', 'tenant_id', 'retriever_id'), + {'schema': 'public'}, ) partner_id = db.Column(db.Integer, db.ForeignKey('public.partner.id'), nullable=False) diff --git a/docker/rebuild_chat_client.sh b/docker/rebuild_chat_client.sh index 3c05bac..4416a09 100755 --- a/docker/rebuild_chat_client.sh +++ b/docker/rebuild_chat_client.sh @@ -1,9 +1,16 @@ #!/bin/bash +cd /Volumes/OWC4M2_1/Development/Josako/EveAI/TBD/docker source ./docker_env_switch.sh dev -source .env dcdown eveai_chat_client nginx -./update_chat_client_statics.sh + +cd ../nginx + +npm run clean +npm run build + +cd ../docker ./build_and_push_eveai.sh -b nginx + dcup eveai_chat_client nginx diff --git a/eveai_chat_client/static/assets/js/chat-app.js b/eveai_chat_client/static/assets/js/ChatApp.js similarity index 69% rename from eveai_chat_client/static/assets/js/chat-app.js rename to eveai_chat_client/static/assets/js/ChatApp.js index 6d10b22..4d8d6bd 100644 --- a/eveai_chat_client/static/assets/js/chat-app.js +++ b/eveai_chat_client/static/assets/js/ChatApp.js @@ -1,24 +1,8 @@ -// Import all components -import { TypingIndicator } from './components/TypingIndicator.js'; -import { FormField } from './components/FormField.js'; -import { DynamicForm } from './components/DynamicForm.js'; -import { ChatMessage } from './components/ChatMessage.js'; -import { MessageHistory } from './components/MessageHistory.js'; -import { ProgressTracker } from './components/ProgressTracker.js'; -import { LanguageSelector } from './components/LanguageSelector.js'; - -// Maak componenten globaal beschikbaar voordat andere componenten worden geladen -window.DynamicForm = DynamicForm; -window.FormField = FormField; -window.TypingIndicator = TypingIndicator; -window.ChatMessage = ChatMessage; -window.MessageHistory = MessageHistory; -window.ProgressTracker = ProgressTracker; - -// Nu kunnen we ChatInput importeren nadat de benodigde componenten globaal beschikbaar zijn -import { ChatInput } from './components/ChatInput.js'; +// Import all components via barrel export +import { TypingIndicator, FormField, DynamicForm, ChatMessage, MessageHistory, ProgressTracker, LanguageSelector, ChatInput } from './components/index.js'; // Main Chat Application +// Main Chat Application - geΓ«xporteerd als module export const ChatApp = { name: 'ChatApp', components: { @@ -27,6 +11,7 @@ export const ChatApp = { DynamicForm, ChatMessage, MessageHistory, + ProgressTracker, ChatInput }, @@ -36,12 +21,18 @@ export const ChatApp = { const settings = chatConfig.settings || {}; const initialLanguage = chatConfig.language || 'nl'; const originalExplanation = chatConfig.explanation || ''; + const tenantMake = chatConfig.tenantMake || {}; return { + // Tenant info + tenantName: tenantMake.name || 'EveAI', + tenantLogoUrl: tenantMake.logo_url || '', + // Taal gerelateerde data - currentLanguage: '', + currentLanguage: initialLanguage, supportedLanguageDetails: chatConfig.supportedLanguageDetails || {}, allowedLanguages: chatConfig.allowedLanguages || ['nl', 'en', 'fr', 'de'], + supportedLanguages: chatConfig.supportedLanguages || [], originalExplanation: originalExplanation, explanation: chatConfig.explanation || '', @@ -88,7 +79,7 @@ export const ChatApp = { if (typeof marked === 'function') { return marked(this.explanation); } else if (marked && typeof marked.parse === 'function') { - return marked.parse(this.explanation); + return marked.parse(this.explanation.replace(/\[\[(.*?)\]\]/g, '$1')); } else { console.error('Marked library not properly loaded'); return this.explanation; @@ -101,18 +92,64 @@ export const ChatApp = { hasMessages() { return this.allMessages.length > 0; + }, + + displayLanguages() { + // Filter de ondersteunde talen op basis van de toegestane talen + if (!this.supportedLanguages || !this.allowedLanguages) { + return []; + } + + return this.supportedLanguages.filter(lang => + this.allowedLanguages.includes(lang.code) + ); } }, mounted() { + console.log('π [DEBUG] ChatApp mounted'); + console.log('π [DEBUG] ChatApp data:', { + tenantName: this.tenantName, + currentLanguage: this.currentLanguage, + allowedLanguages: this.allowedLanguages, + conversationId: this.conversationId, + userId: this.userId + }); + + // Log beschikbare componenten + console.log('π [DEBUG] Geregistreerde componenten:', { + messageHistory: !!this.$options.components.MessageHistory, + chatInput: !!this.$options.components.ChatInput + }); + + // Render de component + this.renderComponent(); + + console.log('π [DEBUG] ChatApp mounted'); + console.log('π [DEBUG] Props en data:', { + currentLanguage: this.currentLanguage, + allowedLanguages: this.allowedLanguages, + tenantName: this.tenantName + }); + this.initializeChat(); this.setupEventListeners(); + + // Render de component + this.renderComponent(); }, beforeUnmount() { this.cleanup(); }, + // Nieuwe methode om de component direct te renderen + renderComponent() { + console.log('π [DEBUG] ChatApp.renderComponent() aangeroepen'); + // Hier kunnen we directe DOM-manipulatie toevoegen indien nodig + // Vergelijkbaar met LanguageSelector.renderComponent() + }, + methods: { // Initialization initializeChat() { @@ -574,6 +611,65 @@ export const ChatApp = { } }, + submitForm(formValues) { + console.log('π [DEBUG] Formulier verzenden:', formValues); + if (!formValues || this.isLoading) return; + + // Markeer formulier als bezig met verzenden + this.isSubmittingForm = true; + + // Voeg gebruikersformulier toe aan chat + this.addFormMessage(formValues, 'user'); + + // Verstuur naar backend + this.sendFormToBackend(formValues); + + // Reset input form + this.currentInputFormData = null; + }, + + sendFormToBackend(formValues) { + console.log('π [DEBUG] Formulier naar backend versturen', formValues); + // Implementatie voor het versturen van formulier data + this.isSubmittingForm = false; + }, + + sendMessageToBackend(message) { + console.log('π [DEBUG] Bericht naar backend versturen', message); + // Implementatie voor het versturen van berichten + }, + + addFormMessage(formValues, sender) { + console.log('π [DEBUG] Formulier bericht toevoegen:', formValues); + // Implementatie voor het toevoegen van een formulier bericht + }, + + focusChatInput() { + // Focus op de chat input als deze beschikbaar is + this.$nextTick(() => { + // Controleer of $el beschikbaar is + if (!this.$el) { + console.warn('$el is niet beschikbaar in focusChatInput'); + return; + } + + // Probeer de input te vinden en focus + try { + const chatInputComponent = this.$el.querySelector('.chat-input-container'); + if (chatInputComponent) { + console.log('π [DEBUG] Focus op chat input'); + // Probeer een input element te vinden om focus op te zetten + const inputElement = chatInputComponent.querySelector('input, textarea'); + if (inputElement) { + inputElement.focus(); + } + } + } catch (error) { + console.error('Fout bij focussen op chat input:', error); + } + }); + }, + removeMessage(messageId) { const index = this.allMessages.findIndex(m => m.id === messageId); if (index !== -1) { @@ -791,14 +887,186 @@ export const ChatApp = { return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; }, - focusChatInput() { - this.$refs.chatInput?.focusInput(); - }, - focusSearch() { this.$refs.searchInput?.focus(); }, + renderComponent() { + console.log('π [DEBUG] ChatApp.renderComponent() aangeroepen'); + console.log('π [DEBUG] window.Vue beschikbaar:', !!window.Vue); + if (window.Vue) { + console.log('π [DEBUG] window.Vue.createApp beschikbaar:', !!window.Vue.createApp); + console.log('π [DEBUG] window.Vue.version:', window.Vue.version); + } + + // We gaan direct de container manipuleren + const container = document.querySelector('.chat-container'); + if (!container) { + console.error('Container niet gevonden voor ChatApp (.chat-container)'); + return; + } + + console.log('π [DEBUG] ChatApp container gevonden, inhoud wordt gerenderd'); + console.log('π [DEBUG] Beschikbare components:', { + MessageHistory: !!window.Components?.MessageHistory, + ChatInput: !!window.Components?.ChatInput + }); + + // Basis layout voor de chat app + container.innerHTML = ` +