@trops/dash-core 0.1.40 → 0.1.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -5174,9 +5174,6 @@ var PanelEditItemHandlers = function PanelEditItemHandlers(_ref) {
5174
5174
  return array.indexOf(value) === index;
5175
5175
  }) : [];
5176
5176
 
5177
- // Get the listeners for the current item
5178
- var listeners = itemSelected ? itemSelected["listeners"] || {} : {};
5179
-
5180
5177
  // Get available source widgets with events
5181
5178
  var layoutArray = workspaceSelected !== null && Array.isArray(workspaceSelected.layout) ? workspaceSelected.layout : [];
5182
5179
  var sourceWidgets = layoutArray.filter(function (l) {
@@ -5187,6 +5184,31 @@ var PanelEditItemHandlers = function PanelEditItemHandlers(_ref) {
5187
5184
  return li["component"] !== (itemSelected === null || itemSelected === void 0 ? void 0 : itemSelected["component"]);
5188
5185
  });
5189
5186
 
5187
+ // Build a set of valid event strings from widgets currently in the layout
5188
+ var validEventStrings = new Set();
5189
+ sourceWidgets.forEach(function (layout) {
5190
+ if (Array.isArray(layout.events)) {
5191
+ layout.events.forEach(function (event) {
5192
+ validEventStrings.add("".concat(layout["component"], "[").concat(layout["id"], "].").concat(event));
5193
+ });
5194
+ }
5195
+ });
5196
+
5197
+ // Get the listeners for the current item, filtering out orphaned references
5198
+ var rawListeners = itemSelected ? itemSelected["listeners"] || {} : {};
5199
+ var listeners = {};
5200
+ Object.keys(rawListeners).forEach(function (handler) {
5201
+ var events = rawListeners[handler];
5202
+ if (Array.isArray(events)) {
5203
+ var validEvents = events.filter(function (e) {
5204
+ return validEventStrings.has(e);
5205
+ });
5206
+ if (validEvents.length > 0) {
5207
+ listeners[handler] = validEvents;
5208
+ }
5209
+ }
5210
+ });
5211
+
5190
5212
  // Count connected events for a handler
5191
5213
  function getConnectedCount(handler) {
5192
5214
  return (listeners[handler] || []).length;
@@ -17149,6 +17171,8 @@ var DashboardModel = /*#__PURE__*/function () {
17149
17171
  });
17150
17172
  // and now handle the parent...
17151
17173
  // while(newLayoutLength > 0) {
17174
+ // Clean up listener references to the removed widget
17175
+ this._cleanupListenerReferencesForId(id);
17152
17176
  var children = this.layout.filter(function (layoutItem) {
17153
17177
  return layoutItem.parent === id;
17154
17178
  });
@@ -17183,6 +17207,35 @@ var DashboardModel = /*#__PURE__*/function () {
17183
17207
  }
17184
17208
  }
17185
17209
 
17210
+ /**
17211
+ * Remove listener references to a deleted widget from all remaining layout items.
17212
+ * Listener event strings use the format "ComponentName[id].eventName".
17213
+ * @param {number} id - The id of the removed widget
17214
+ */
17215
+ }, {
17216
+ key: "_cleanupListenerReferencesForId",
17217
+ value: function _cleanupListenerReferencesForId(id) {
17218
+ var pattern = "[".concat(id, "].");
17219
+ this.layout.forEach(function (layoutItem) {
17220
+ if (layoutItem.listeners && _typeof(layoutItem.listeners) === "object") {
17221
+ var handlers = Object.keys(layoutItem.listeners);
17222
+ handlers.forEach(function (handler) {
17223
+ var events = layoutItem.listeners[handler];
17224
+ if (Array.isArray(events)) {
17225
+ var filtered = events.filter(function (event) {
17226
+ return !event.includes(pattern);
17227
+ });
17228
+ if (filtered.length > 0) {
17229
+ layoutItem.listeners[handler] = filtered;
17230
+ } else {
17231
+ delete layoutItem.listeners[handler];
17232
+ }
17233
+ }
17234
+ });
17235
+ }
17236
+ });
17237
+ }
17238
+
17186
17239
  /**
17187
17240
  * Normalize a grid by repairing hide flags, clamping spans, filling
17188
17241
  * missing cells, and compacting fully-hidden rows/columns.