61 lines
1.8 KiB
JavaScript
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 };
|