From ece4952330b4e8bc2f4923ea09adcb67a66e6614 Mon Sep 17 00:00:00 2001 From: openhands Date: Tue, 11 Nov 2025 17:35:41 +0000 Subject: [PATCH] Fix discovery service integration and JavaScript execution issues - Add simplified protocol signals table for discovery integration - Add signal modal for discovery data population - Fix JavaScript null element reference issues with fallback selectors - Improve auto-populate function to work with both signal and mapping forms - Add error handling for missing DOM elements - Fix global function exposure for discovery integration - Update template to include discovery-compatible UI elements --- src/dashboard/templates.py | 82 ++++++++++++++++++++++++++++++++++++++ static/protocol_mapping.js | 69 +++++++++++++++++++++++++++----- 2 files changed, 141 insertions(+), 10 deletions(-) diff --git a/src/dashboard/templates.py b/src/dashboard/templates.py index 0d68277..084d6b9 100644 --- a/src/dashboard/templates.py +++ b/src/dashboard/templates.py @@ -659,6 +659,31 @@ DASHBOARD_HTML = """ + +
+

Protocol Signals (Simplified)

+

Signals discovered through protocol discovery will appear here

+ +
+ + + + + + + + + + + + + + + +
Signal NameProtocol TypeTagsProtocol AddressDatabase SourceStatusActions
+
+
+ + + + diff --git a/static/protocol_mapping.js b/static/protocol_mapping.js index a55fd82..d057cd9 100644 --- a/static/protocol_mapping.js +++ b/static/protocol_mapping.js @@ -24,7 +24,18 @@ async function loadAllSignals() { } function displaySignals(signals) { - const tbody = document.getElementById('protocol-signals-body'); + // Try both possible table body IDs + let tbody = document.getElementById('protocol-signals-body'); + if (!tbody) { + tbody = document.getElementById('protocol-mappings-body'); + } + + // Check if the table body element exists + if (!tbody) { + console.warn('protocol signals/mappings table body element not found - table may not be available'); + return; + } + tbody.innerHTML = ''; if (signals.length === 0) { @@ -287,14 +298,36 @@ function autoPopulateSignalForm(discoveryData) { function populateModalFields(discoveryData) { console.log('Populating modal fields with:', discoveryData); - // Populate signal name - const signalNameField = document.getElementById('signal_name'); - if (signalNameField && discoveryData.signal_name) { - signalNameField.value = discoveryData.signal_name; - console.log('✓ Set signal_name to:', discoveryData.signal_name); + // Try to find the appropriate form + let form = document.getElementById('signal-form'); + if (!form) { + form = document.getElementById('mapping-form'); } - // Populate tags + if (!form) { + console.warn('No signal or mapping form found - cannot auto-populate'); + showSimplifiedAlert('No signal form found - please open the add signal/mapping modal first', 'error'); + return; + } + + // Show the modal if it's hidden + const signalModal = document.getElementById('signal-modal'); + const mappingModal = document.getElementById('mapping-modal'); + + if (signalModal && signalModal.style.display === 'none') { + signalModal.style.display = 'block'; + } else if (mappingModal && mappingModal.style.display === 'none') { + mappingModal.style.display = 'block'; + } + + // Populate signal name (try different field names) + const signalNameField = document.getElementById('signal_name') || document.getElementById('mapping_id'); + if (signalNameField && discoveryData.signal_name) { + signalNameField.value = discoveryData.signal_name; + console.log('✓ Set signal name to:', discoveryData.signal_name); + } + + // Populate tags (only in simplified template) const tagsField = document.getElementById('tags'); if (tagsField && discoveryData.tags) { tagsField.value = discoveryData.tags.join(', '); @@ -330,7 +363,14 @@ function populateModalFields(discoveryData) { // Utility Functions function showSimplifiedAlert(message, type = 'info') { - const alertsDiv = document.getElementById('simplified-alerts'); + const alertsDiv = document.getElementById('protocol-mapping-alerts'); + + // Check if alerts div exists + if (!alertsDiv) { + console.warn('protocol-mapping-alerts element not found - cannot show alert:', message); + return; + } + const alertDiv = document.createElement('div'); alertDiv.className = `alert ${type === 'error' ? 'error' : 'success'}`; alertDiv.textContent = message; @@ -348,7 +388,16 @@ function showSimplifiedAlert(message, type = 'info') { // Initialize document.addEventListener('DOMContentLoaded', function() { - const signalForm = document.getElementById('signal-form'); + // Try both possible form IDs + let signalForm = document.getElementById('signal-form'); + if (!signalForm) { + // Look for form inside mapping-modal + const mappingModal = document.getElementById('mapping-modal'); + if (mappingModal) { + signalForm = mappingModal.querySelector('form'); + } + } + if (signalForm) { signalForm.addEventListener('submit', saveSignal); } @@ -358,5 +407,5 @@ document.addEventListener('DOMContentLoaded', function() { }); // Expose functions to global scope for discovery integration -window.autoPopulateSignalForm = autoPopulateSignalForm; +window.autoPopulateSignalForm = populateModalFields; window.loadAllSignals = loadAllSignals; \ No newline at end of file