@trops/dash-core 0.1.473 → 0.1.475
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 +286 -41
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +286 -41
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -57613,6 +57613,13 @@ var DashboardConfigModal = function DashboardConfigModal(_ref) {
|
|
|
57613
57613
|
},
|
|
57614
57614
|
className: "px-3 py-1.5 text-sm font-medium -mb-px border-b-2 ".concat(activeTab === "listeners" ? "border-indigo-400" : "border-transparent opacity-60 hover:opacity-100"),
|
|
57615
57615
|
children: "Listeners"
|
|
57616
|
+
}), /*#__PURE__*/jsxRuntime.jsx("button", {
|
|
57617
|
+
type: "button",
|
|
57618
|
+
onClick: function onClick() {
|
|
57619
|
+
return setActiveTab("notifications");
|
|
57620
|
+
},
|
|
57621
|
+
className: "px-3 py-1.5 text-sm font-medium -mb-px border-b-2 ".concat(activeTab === "notifications" ? "border-indigo-400" : "border-transparent opacity-60 hover:opacity-100"),
|
|
57622
|
+
children: "Notifications"
|
|
57616
57623
|
}), /*#__PURE__*/jsxRuntime.jsx("button", {
|
|
57617
57624
|
type: "button",
|
|
57618
57625
|
onClick: function onClick() {
|
|
@@ -57646,6 +57653,8 @@ var DashboardConfigModal = function DashboardConfigModal(_ref) {
|
|
|
57646
57653
|
providersByType: providersByType,
|
|
57647
57654
|
onBulk: stageBulk,
|
|
57648
57655
|
onPerWidget: stageBinding
|
|
57656
|
+
}), activeTab === "notifications" && /*#__PURE__*/jsxRuntime.jsx(NotificationsTab, {
|
|
57657
|
+
workspace: workspace
|
|
57649
57658
|
}), activeTab === "widgets" && /*#__PURE__*/jsxRuntime.jsx(WidgetsTab, {
|
|
57650
57659
|
workspace: workspace,
|
|
57651
57660
|
getWidgetConfig: getWidgetConfig,
|
|
@@ -57670,25 +57679,261 @@ var DashboardConfigModal = function DashboardConfigModal(_ref) {
|
|
|
57670
57679
|
});
|
|
57671
57680
|
};
|
|
57672
57681
|
|
|
57682
|
+
/**
|
|
57683
|
+
* Notifications tab — dashboard-scoped view of every widget instance
|
|
57684
|
+
* in the current workspace that declares notifications. Bulk Enable
|
|
57685
|
+
* all / Disable all controls flip every notification toggle in the
|
|
57686
|
+
* filtered list at once. Per-widget toggles persist immediately via
|
|
57687
|
+
* `mainApi.notifications.setPreferences` — same path Settings →
|
|
57688
|
+
* Notifications uses, so the two views stay consistent.
|
|
57689
|
+
*
|
|
57690
|
+
* Toggles are uncontrolled-with-respect-to-the-server: we mirror them
|
|
57691
|
+
* locally for snappy UI but the IPC call is fire-and-forget. If a
|
|
57692
|
+
* write fails the user can re-toggle. No staging — the bulk modal
|
|
57693
|
+
* doesn't gate the user behind a Save button for boolean prefs.
|
|
57694
|
+
*/
|
|
57695
|
+
function NotificationsTab(_ref4) {
|
|
57696
|
+
var workspace = _ref4.workspace;
|
|
57697
|
+
var _useState9 = React.useState(""),
|
|
57698
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
57699
|
+
searchQuery = _useState0[0],
|
|
57700
|
+
setSearchQuery = _useState0[1];
|
|
57701
|
+
// Local mirror of widgetUuid -> { typeKey: bool }. Seeded from the
|
|
57702
|
+
// main process on mount; updated optimistically on toggle.
|
|
57703
|
+
var _useState1 = React.useState({}),
|
|
57704
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
57705
|
+
prefs = _useState10[0],
|
|
57706
|
+
setPrefs = _useState10[1];
|
|
57707
|
+
var _useState11 = React.useState(false),
|
|
57708
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
57709
|
+
loaded = _useState12[0],
|
|
57710
|
+
setLoaded = _useState12[1];
|
|
57711
|
+
React.useEffect(function () {
|
|
57712
|
+
var _window$mainApi;
|
|
57713
|
+
var cancelled = false;
|
|
57714
|
+
if (!((_window$mainApi = window.mainApi) !== null && _window$mainApi !== void 0 && (_window$mainApi = _window$mainApi.notifications) !== null && _window$mainApi !== void 0 && _window$mainApi.getPreferences)) {
|
|
57715
|
+
setLoaded(true);
|
|
57716
|
+
return function () {
|
|
57717
|
+
cancelled = true;
|
|
57718
|
+
};
|
|
57719
|
+
}
|
|
57720
|
+
window.mainApi.notifications.getPreferences().then(function (p) {
|
|
57721
|
+
if (cancelled) return;
|
|
57722
|
+
setPrefs((p === null || p === void 0 ? void 0 : p.instances) || {});
|
|
57723
|
+
setLoaded(true);
|
|
57724
|
+
});
|
|
57725
|
+
return function () {
|
|
57726
|
+
cancelled = true;
|
|
57727
|
+
};
|
|
57728
|
+
}, []);
|
|
57729
|
+
|
|
57730
|
+
// Collect every widget instance in THIS workspace that declares
|
|
57731
|
+
// notifications, alphabetized by title. Mirrors the Settings →
|
|
57732
|
+
// Notifications collection logic but scoped to one workspace.
|
|
57733
|
+
var widgetInstances = React.useMemo(function () {
|
|
57734
|
+
var out = [];
|
|
57735
|
+
var _visit = function visit(item) {
|
|
57736
|
+
if (!item) return;
|
|
57737
|
+
if (Array.isArray(item)) {
|
|
57738
|
+
item.forEach(_visit);
|
|
57739
|
+
return;
|
|
57740
|
+
}
|
|
57741
|
+
if (item.component) {
|
|
57742
|
+
var _config$notifications;
|
|
57743
|
+
var config = ComponentManager.resolve(item.component, item);
|
|
57744
|
+
if ((config === null || config === void 0 || (_config$notifications = config.notifications) === null || _config$notifications === void 0 ? void 0 : _config$notifications.length) > 0) {
|
|
57745
|
+
var _item$userPrefs;
|
|
57746
|
+
out.push({
|
|
57747
|
+
uuid: item.uuid || item.uuidString,
|
|
57748
|
+
title: ((_item$userPrefs = item.userPrefs) === null || _item$userPrefs === void 0 ? void 0 : _item$userPrefs.title) || config.displayName || item.component,
|
|
57749
|
+
"package": config["package"] || "Other",
|
|
57750
|
+
// Scoped component id (e.g. "trops.google.GoogleWidget")
|
|
57751
|
+
// — disambiguates rows when several widgets share a
|
|
57752
|
+
// title or display the same package label. Mirrors the
|
|
57753
|
+
// Listeners tab convention so the user only learns one
|
|
57754
|
+
// identification scheme.
|
|
57755
|
+
component: item.component,
|
|
57756
|
+
// Layout instance id — disambiguates two widgets of the
|
|
57757
|
+
// SAME component on the dashboard (e.g. two GitHub
|
|
57758
|
+
// widgets in the same workspace).
|
|
57759
|
+
itemId: item.id,
|
|
57760
|
+
notifications: config.notifications
|
|
57761
|
+
});
|
|
57762
|
+
}
|
|
57763
|
+
}
|
|
57764
|
+
if (Array.isArray(item.children)) item.children.forEach(_visit);
|
|
57765
|
+
if (Array.isArray(item.layout)) item.layout.forEach(_visit);
|
|
57766
|
+
if (Array.isArray(item.items)) item.items.forEach(_visit);
|
|
57767
|
+
};
|
|
57768
|
+
_visit(workspace === null || workspace === void 0 ? void 0 : workspace.layout);
|
|
57769
|
+
if (Array.isArray(workspace === null || workspace === void 0 ? void 0 : workspace.pages)) {
|
|
57770
|
+
workspace.pages.forEach(function (p) {
|
|
57771
|
+
return _visit(p === null || p === void 0 ? void 0 : p.layout);
|
|
57772
|
+
});
|
|
57773
|
+
}
|
|
57774
|
+
_visit(workspace === null || workspace === void 0 ? void 0 : workspace.sidebarLayout);
|
|
57775
|
+
return out.sort(function (a, b) {
|
|
57776
|
+
return String(a.title).localeCompare(String(b.title), undefined, {
|
|
57777
|
+
sensitivity: "base"
|
|
57778
|
+
});
|
|
57779
|
+
});
|
|
57780
|
+
}, [workspace]);
|
|
57781
|
+
var filtered = React.useMemo(function () {
|
|
57782
|
+
var q = searchQuery.trim().toLowerCase();
|
|
57783
|
+
if (!q) return widgetInstances;
|
|
57784
|
+
return widgetInstances.filter(function (wi) {
|
|
57785
|
+
var hay = [wi.title, wi["package"], wi.component, wi.itemId != null ? "#".concat(wi.itemId) : ""].concat(_toConsumableArray(wi.notifications.map(function (n) {
|
|
57786
|
+
return "".concat(n.key, " ").concat(n.displayName || "");
|
|
57787
|
+
}))).join(" ").toLowerCase();
|
|
57788
|
+
return hay.includes(q);
|
|
57789
|
+
});
|
|
57790
|
+
}, [widgetInstances, searchQuery]);
|
|
57791
|
+
var isEnabled = function isEnabled(uuid, typeKey, defaultEnabled) {
|
|
57792
|
+
var w = prefs[uuid];
|
|
57793
|
+
if (w && typeof w[typeKey] === "boolean") return w[typeKey];
|
|
57794
|
+
return !!defaultEnabled;
|
|
57795
|
+
};
|
|
57796
|
+
var setOne = function setOne(uuid, typeKey, value) {
|
|
57797
|
+
var _window$mainApi2;
|
|
57798
|
+
setPrefs(function (prev) {
|
|
57799
|
+
return _objectSpread$a(_objectSpread$a({}, prev), {}, _defineProperty({}, uuid, _objectSpread$a(_objectSpread$a({}, prev[uuid] || {}), {}, _defineProperty({}, typeKey, value))));
|
|
57800
|
+
});
|
|
57801
|
+
(_window$mainApi2 = window.mainApi) === null || _window$mainApi2 === void 0 || (_window$mainApi2 = _window$mainApi2.notifications) === null || _window$mainApi2 === void 0 || _window$mainApi2.setPreferences(uuid, _defineProperty({}, typeKey, value));
|
|
57802
|
+
};
|
|
57803
|
+
var setAllVisible = function setAllVisible(value) {
|
|
57804
|
+
// Update local state in one pass + fire one IPC per widget.
|
|
57805
|
+
setPrefs(function (prev) {
|
|
57806
|
+
var next = _objectSpread$a({}, prev);
|
|
57807
|
+
filtered.forEach(function (wi) {
|
|
57808
|
+
var w = _objectSpread$a({}, next[wi.uuid] || {});
|
|
57809
|
+
wi.notifications.forEach(function (n) {
|
|
57810
|
+
w[n.key] = value;
|
|
57811
|
+
});
|
|
57812
|
+
next[wi.uuid] = w;
|
|
57813
|
+
});
|
|
57814
|
+
return next;
|
|
57815
|
+
});
|
|
57816
|
+
filtered.forEach(function (wi) {
|
|
57817
|
+
var _window$mainApi3;
|
|
57818
|
+
var update = {};
|
|
57819
|
+
wi.notifications.forEach(function (n) {
|
|
57820
|
+
update[n.key] = value;
|
|
57821
|
+
});
|
|
57822
|
+
(_window$mainApi3 = window.mainApi) === null || _window$mainApi3 === void 0 || (_window$mainApi3 = _window$mainApi3.notifications) === null || _window$mainApi3 === void 0 || _window$mainApi3.setPreferences(wi.uuid, update);
|
|
57823
|
+
});
|
|
57824
|
+
};
|
|
57825
|
+
if (!loaded) {
|
|
57826
|
+
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
57827
|
+
className: "p-4 text-sm opacity-50",
|
|
57828
|
+
children: "Loading\u2026"
|
|
57829
|
+
});
|
|
57830
|
+
}
|
|
57831
|
+
if (widgetInstances.length === 0) {
|
|
57832
|
+
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
57833
|
+
className: "p-4 text-sm opacity-50",
|
|
57834
|
+
children: "No widgets in this dashboard declare notifications. Add widgets that declare notifications to see per-type controls here."
|
|
57835
|
+
});
|
|
57836
|
+
}
|
|
57837
|
+
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
57838
|
+
className: "flex flex-col h-full",
|
|
57839
|
+
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
57840
|
+
className: "flex flex-col gap-2 px-2 py-2 flex-shrink-0 border-b border-white/10",
|
|
57841
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.SearchInput, {
|
|
57842
|
+
value: searchQuery,
|
|
57843
|
+
onChange: setSearchQuery,
|
|
57844
|
+
placeholder: "Search widgets...",
|
|
57845
|
+
inputClassName: "py-1.5 text-xs"
|
|
57846
|
+
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
57847
|
+
className: "flex flex-row items-center justify-between text-[10px]",
|
|
57848
|
+
children: [/*#__PURE__*/jsxRuntime.jsxs("span", {
|
|
57849
|
+
className: "opacity-50",
|
|
57850
|
+
children: [filtered.length, " of ", widgetInstances.length, " widget", widgetInstances.length === 1 ? "" : "s"]
|
|
57851
|
+
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
57852
|
+
className: "flex flex-row items-center gap-2",
|
|
57853
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("button", {
|
|
57854
|
+
type: "button",
|
|
57855
|
+
onClick: function onClick() {
|
|
57856
|
+
return setAllVisible(true);
|
|
57857
|
+
},
|
|
57858
|
+
className: "px-2 py-1 rounded bg-green-700 hover:bg-green-600 text-white text-xs font-medium transition-colors",
|
|
57859
|
+
"data-testid": "bulk-notifications-enable-all",
|
|
57860
|
+
children: "Enable all"
|
|
57861
|
+
}), /*#__PURE__*/jsxRuntime.jsx("button", {
|
|
57862
|
+
type: "button",
|
|
57863
|
+
onClick: function onClick() {
|
|
57864
|
+
return setAllVisible(false);
|
|
57865
|
+
},
|
|
57866
|
+
className: "px-2 py-1 rounded bg-gray-700 hover:bg-gray-600 text-gray-200 text-xs font-medium transition-colors",
|
|
57867
|
+
"data-testid": "bulk-notifications-disable-all",
|
|
57868
|
+
children: "Disable all"
|
|
57869
|
+
})]
|
|
57870
|
+
})]
|
|
57871
|
+
})]
|
|
57872
|
+
}), /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
57873
|
+
className: "flex-1 overflow-y-auto px-2 py-2 space-y-3",
|
|
57874
|
+
children: filtered.map(function (wi) {
|
|
57875
|
+
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
57876
|
+
className: "border border-white/10 rounded p-3 space-y-2",
|
|
57877
|
+
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
57878
|
+
className: "flex flex-col",
|
|
57879
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("span", {
|
|
57880
|
+
className: "text-sm font-medium",
|
|
57881
|
+
children: wi.title
|
|
57882
|
+
}), /*#__PURE__*/jsxRuntime.jsxs("span", {
|
|
57883
|
+
className: "text-[10px] opacity-50 font-mono",
|
|
57884
|
+
children: [wi.component, wi.itemId != null ? " \xB7 #".concat(wi.itemId) : ""]
|
|
57885
|
+
}), /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
57886
|
+
className: "text-[10px] opacity-40",
|
|
57887
|
+
children: wi["package"]
|
|
57888
|
+
})]
|
|
57889
|
+
}), /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
57890
|
+
className: "flex flex-col gap-1.5 pl-2 border-l border-white/10",
|
|
57891
|
+
children: wi.notifications.map(function (notif) {
|
|
57892
|
+
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
57893
|
+
className: "flex flex-row items-center justify-between py-0.5",
|
|
57894
|
+
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
57895
|
+
className: "flex flex-col",
|
|
57896
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("span", {
|
|
57897
|
+
className: "text-xs",
|
|
57898
|
+
children: notif.displayName
|
|
57899
|
+
}), notif.description && /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
57900
|
+
className: "text-[10px] opacity-50",
|
|
57901
|
+
children: notif.description
|
|
57902
|
+
})]
|
|
57903
|
+
}), /*#__PURE__*/jsxRuntime.jsx(DashReact.Switch, {
|
|
57904
|
+
checked: isEnabled(wi.uuid, notif.key, notif.defaultEnabled),
|
|
57905
|
+
onChange: function onChange(value) {
|
|
57906
|
+
return setOne(wi.uuid, notif.key, value);
|
|
57907
|
+
}
|
|
57908
|
+
})]
|
|
57909
|
+
}, notif.key);
|
|
57910
|
+
})
|
|
57911
|
+
})]
|
|
57912
|
+
}, wi.uuid);
|
|
57913
|
+
})
|
|
57914
|
+
})]
|
|
57915
|
+
});
|
|
57916
|
+
}
|
|
57917
|
+
|
|
57673
57918
|
/**
|
|
57674
57919
|
* Providers tab with a sidebar/detail layout mirroring the Listeners
|
|
57675
57920
|
* tab. Column 1 lists provider types in this workspace (with an amber
|
|
57676
57921
|
* dot per-type when any widget of that type is unresolved). Column 2
|
|
57677
57922
|
* shows the selected type's bulk dropdown + per-widget dropdowns.
|
|
57678
57923
|
*/
|
|
57679
|
-
function ProvidersTab(
|
|
57924
|
+
function ProvidersTab(_ref5) {
|
|
57680
57925
|
var _typeEntries$, _selectedRows$;
|
|
57681
|
-
var grouped =
|
|
57682
|
-
providersByType =
|
|
57683
|
-
onBulk =
|
|
57684
|
-
onPerWidget =
|
|
57926
|
+
var grouped = _ref5.grouped,
|
|
57927
|
+
providersByType = _ref5.providersByType,
|
|
57928
|
+
onBulk = _ref5.onBulk,
|
|
57929
|
+
onPerWidget = _ref5.onPerWidget;
|
|
57685
57930
|
var typeEntries = React.useMemo(function () {
|
|
57686
57931
|
return Array.from(grouped.entries());
|
|
57687
57932
|
}, [grouped]);
|
|
57688
|
-
var
|
|
57689
|
-
|
|
57690
|
-
selectedType =
|
|
57691
|
-
setSelectedType =
|
|
57933
|
+
var _useState13 = React.useState(((_typeEntries$ = typeEntries[0]) === null || _typeEntries$ === void 0 ? void 0 : _typeEntries$[0]) || null),
|
|
57934
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
57935
|
+
selectedType = _useState14[0],
|
|
57936
|
+
setSelectedType = _useState14[1];
|
|
57692
57937
|
|
|
57693
57938
|
// If the selected type disappears (workspace changed), fall back.
|
|
57694
57939
|
React.useMemo(function () {
|
|
@@ -57718,10 +57963,10 @@ function ProvidersTab(_ref4) {
|
|
|
57718
57963
|
children: "Provider Types"
|
|
57719
57964
|
}), /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
57720
57965
|
className: "overflow-y-auto flex-1",
|
|
57721
|
-
children: typeEntries.map(function (
|
|
57722
|
-
var
|
|
57723
|
-
providerType =
|
|
57724
|
-
rows =
|
|
57966
|
+
children: typeEntries.map(function (_ref6) {
|
|
57967
|
+
var _ref7 = _slicedToArray(_ref6, 2),
|
|
57968
|
+
providerType = _ref7[0],
|
|
57969
|
+
rows = _ref7[1];
|
|
57725
57970
|
var isActive = selectedType === providerType;
|
|
57726
57971
|
var unresolvedHere = rows.filter(function (r) {
|
|
57727
57972
|
return r.required && !r.resolvedProviderName;
|
|
@@ -57875,8 +58120,8 @@ function ProvidersTab(_ref4) {
|
|
|
57875
58120
|
* package (no `config.id` / `config.package` / item.workspace hint).
|
|
57876
58121
|
* Usually this is a stale layout item whose widget got uninstalled.
|
|
57877
58122
|
*/
|
|
57878
|
-
function DependenciesTab(
|
|
57879
|
-
var dependencies =
|
|
58123
|
+
function DependenciesTab(_ref9) {
|
|
58124
|
+
var dependencies = _ref9.dependencies;
|
|
57880
58125
|
if (!dependencies || dependencies.length === 0) {
|
|
57881
58126
|
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
57882
58127
|
className: "flex items-center justify-center h-full text-sm opacity-60 text-center",
|
|
@@ -57949,21 +58194,21 @@ function sameWiringEntry(a, b) {
|
|
|
57949
58194
|
* adjusts wiring per handler from a single dropdown of all emitters'
|
|
57950
58195
|
* (widget × event) pairs.
|
|
57951
58196
|
*/
|
|
57952
|
-
function ListenersTab(
|
|
58197
|
+
function ListenersTab(_ref0) {
|
|
57953
58198
|
var _receivers$;
|
|
57954
|
-
var emitters =
|
|
57955
|
-
receivers =
|
|
57956
|
-
wiring =
|
|
57957
|
-
onAdd =
|
|
57958
|
-
onRemove =
|
|
57959
|
-
var
|
|
57960
|
-
|
|
57961
|
-
selectedReceiverKey =
|
|
57962
|
-
setSelectedReceiverKey =
|
|
57963
|
-
var
|
|
57964
|
-
|
|
57965
|
-
selectedHandler =
|
|
57966
|
-
setSelectedHandler =
|
|
58199
|
+
var emitters = _ref0.emitters,
|
|
58200
|
+
receivers = _ref0.receivers,
|
|
58201
|
+
wiring = _ref0.wiring,
|
|
58202
|
+
onAdd = _ref0.onAdd,
|
|
58203
|
+
onRemove = _ref0.onRemove;
|
|
58204
|
+
var _useState17 = React.useState(((_receivers$ = receivers[0]) === null || _receivers$ === void 0 ? void 0 : _receivers$.key) || null),
|
|
58205
|
+
_useState18 = _slicedToArray(_useState17, 2),
|
|
58206
|
+
selectedReceiverKey = _useState18[0],
|
|
58207
|
+
setSelectedReceiverKey = _useState18[1];
|
|
58208
|
+
var _useState19 = React.useState(null),
|
|
58209
|
+
_useState20 = _slicedToArray(_useState19, 2),
|
|
58210
|
+
selectedHandler = _useState20[0],
|
|
58211
|
+
setSelectedHandler = _useState20[1];
|
|
57967
58212
|
|
|
57968
58213
|
// Re-anchor selection if the previously-selected widget disappeared
|
|
57969
58214
|
// (workspace switched, widget deleted, etc.).
|
|
@@ -58067,11 +58312,11 @@ function ListenersTab(_ref9) {
|
|
|
58067
58312
|
* third column. Matches the left-column look from
|
|
58068
58313
|
* PanelEditItemHandlers.
|
|
58069
58314
|
*/
|
|
58070
|
-
function HandlersColumn(
|
|
58071
|
-
var receiver =
|
|
58072
|
-
myWiring =
|
|
58073
|
-
selectedHandler =
|
|
58074
|
-
onSelectHandler =
|
|
58315
|
+
function HandlersColumn(_ref10) {
|
|
58316
|
+
var receiver = _ref10.receiver,
|
|
58317
|
+
myWiring = _ref10.myWiring,
|
|
58318
|
+
selectedHandler = _ref10.selectedHandler,
|
|
58319
|
+
onSelectHandler = _ref10.onSelectHandler;
|
|
58075
58320
|
var countsByHandler = React.useMemo(function () {
|
|
58076
58321
|
var m = new Map();
|
|
58077
58322
|
var _iterator9 = _createForOfIteratorHelper$6(myWiring),
|
|
@@ -58132,13 +58377,13 @@ function HandlersColumn(_ref1) {
|
|
|
58132
58377
|
* Checked = wired; toggling commits an add/remove. Mirrors the
|
|
58133
58378
|
* right-column UX of PanelEditItemHandlers.
|
|
58134
58379
|
*/
|
|
58135
|
-
function EventsColumn(
|
|
58136
|
-
var receiver =
|
|
58137
|
-
handlerName =
|
|
58138
|
-
myWiring =
|
|
58139
|
-
emitters =
|
|
58140
|
-
onAdd =
|
|
58141
|
-
onRemove =
|
|
58380
|
+
function EventsColumn(_ref11) {
|
|
58381
|
+
var receiver = _ref11.receiver,
|
|
58382
|
+
handlerName = _ref11.handlerName,
|
|
58383
|
+
myWiring = _ref11.myWiring,
|
|
58384
|
+
emitters = _ref11.emitters,
|
|
58385
|
+
onAdd = _ref11.onAdd,
|
|
58386
|
+
onRemove = _ref11.onRemove;
|
|
58142
58387
|
// Wired-for-this-handler: dedupe defensively (legacy workspaces
|
|
58143
58388
|
// occasionally contain duplicate entries under the same handler).
|
|
58144
58389
|
var wiredHere = React.useMemo(function () {
|