Files
2025-04-06 12:54:48 -04:00

61 lines
1.8 KiB
JavaScript

/**
* Controller event handlers for controller mapping
* Handles events from connected controllers and provides UI feedback (Client-Side)
*/
import { app } from "../../../../scripts/app.js"; // Needed for highlightNodeParameter
import { contextProvider } from "../core/contextProvider.js";
import { eventBus } from "../core/eventBus.js";
/**
* Highlight a node parameter for visual feedback
* @param {String} nodeId - The ID of the node
* @param {String} paramName - The name of the parameter
*/
function highlightNodeParameter(nodeId, paramName) {
// Find the node
const node = app.graph.getNodeById(+nodeId); // Convert to number if needed
if (!node || !app?.canvas) return;
// Add a visual highlight
node.highlight = true;
// Remove highlight after a short delay
setTimeout(() => {
node.highlight = false;
app.canvas.draw(true, true);
}, 100);
// Force redraw
app.canvas.draw(true, true);
}
/**
* Handle control update with visual feedback
* @param {Object} data - The update data
*/
function handleControlUpdate(data) {
// If data has the target structure
if (data?.target?.type === 'widget' && data.target.nodeId) {
highlightNodeParameter(data.target.nodeId, data.target.widgetName);
// Emit event for other handlers
eventBus.emit('widget:highlighted', {
nodeId: data.target.nodeId,
widgetName: data.target.widgetName,
value: data.value
});
}
}
// Set up event listeners for the event bus
eventBus.on('mapping:applying', (mapping, rawValue, transformedValue) => {
handleControlUpdate({
target: mapping.target,
value: transformedValue,
rawValue: rawValue
});
});
// Export the remaining functions
export { highlightNodeParameter, handleControlUpdate };