@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.esm.js CHANGED
@@ -5155,9 +5155,6 @@ var PanelEditItemHandlers = function PanelEditItemHandlers(_ref) {
5155
5155
  return array.indexOf(value) === index;
5156
5156
  }) : [];
5157
5157
 
5158
- // Get the listeners for the current item
5159
- var listeners = itemSelected ? itemSelected["listeners"] || {} : {};
5160
-
5161
5158
  // Get available source widgets with events
5162
5159
  var layoutArray = workspaceSelected !== null && Array.isArray(workspaceSelected.layout) ? workspaceSelected.layout : [];
5163
5160
  var sourceWidgets = layoutArray.filter(function (l) {
@@ -5168,6 +5165,31 @@ var PanelEditItemHandlers = function PanelEditItemHandlers(_ref) {
5168
5165
  return li["component"] !== (itemSelected === null || itemSelected === void 0 ? void 0 : itemSelected["component"]);
5169
5166
  });
5170
5167
 
5168
+ // Build a set of valid event strings from widgets currently in the layout
5169
+ var validEventStrings = new Set();
5170
+ sourceWidgets.forEach(function (layout) {
5171
+ if (Array.isArray(layout.events)) {
5172
+ layout.events.forEach(function (event) {
5173
+ validEventStrings.add("".concat(layout["component"], "[").concat(layout["id"], "].").concat(event));
5174
+ });
5175
+ }
5176
+ });
5177
+
5178
+ // Get the listeners for the current item, filtering out orphaned references
5179
+ var rawListeners = itemSelected ? itemSelected["listeners"] || {} : {};
5180
+ var listeners = {};
5181
+ Object.keys(rawListeners).forEach(function (handler) {
5182
+ var events = rawListeners[handler];
5183
+ if (Array.isArray(events)) {
5184
+ var validEvents = events.filter(function (e) {
5185
+ return validEventStrings.has(e);
5186
+ });
5187
+ if (validEvents.length > 0) {
5188
+ listeners[handler] = validEvents;
5189
+ }
5190
+ }
5191
+ });
5192
+
5171
5193
  // Count connected events for a handler
5172
5194
  function getConnectedCount(handler) {
5173
5195
  return (listeners[handler] || []).length;
@@ -17130,6 +17152,8 @@ var DashboardModel = /*#__PURE__*/function () {
17130
17152
  });
17131
17153
  // and now handle the parent...
17132
17154
  // while(newLayoutLength > 0) {
17155
+ // Clean up listener references to the removed widget
17156
+ this._cleanupListenerReferencesForId(id);
17133
17157
  var children = this.layout.filter(function (layoutItem) {
17134
17158
  return layoutItem.parent === id;
17135
17159
  });
@@ -17164,6 +17188,35 @@ var DashboardModel = /*#__PURE__*/function () {
17164
17188
  }
17165
17189
  }
17166
17190
 
17191
+ /**
17192
+ * Remove listener references to a deleted widget from all remaining layout items.
17193
+ * Listener event strings use the format "ComponentName[id].eventName".
17194
+ * @param {number} id - The id of the removed widget
17195
+ */
17196
+ }, {
17197
+ key: "_cleanupListenerReferencesForId",
17198
+ value: function _cleanupListenerReferencesForId(id) {
17199
+ var pattern = "[".concat(id, "].");
17200
+ this.layout.forEach(function (layoutItem) {
17201
+ if (layoutItem.listeners && _typeof(layoutItem.listeners) === "object") {
17202
+ var handlers = Object.keys(layoutItem.listeners);
17203
+ handlers.forEach(function (handler) {
17204
+ var events = layoutItem.listeners[handler];
17205
+ if (Array.isArray(events)) {
17206
+ var filtered = events.filter(function (event) {
17207
+ return !event.includes(pattern);
17208
+ });
17209
+ if (filtered.length > 0) {
17210
+ layoutItem.listeners[handler] = filtered;
17211
+ } else {
17212
+ delete layoutItem.listeners[handler];
17213
+ }
17214
+ }
17215
+ });
17216
+ }
17217
+ });
17218
+ }
17219
+
17167
17220
  /**
17168
17221
  * Normalize a grid by repairing hide flags, clamping spans, filling
17169
17222
  * missing cells, and compacting fully-hidden rows/columns.