@apia/dashboard-controller 3.0.1 → 3.0.6
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.d.ts +414 -23
- package/dist/index.js +2238 -22
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
- package/dist/actions/basicAction.d.ts +0 -15
- package/dist/actions/basicAction.d.ts.map +0 -1
- package/dist/actions/basicAction.js +0 -40
- package/dist/actions/basicAction.js.map +0 -1
- package/dist/actions/externalFirePanelAction.d.ts +0 -6
- package/dist/actions/externalFirePanelAction.d.ts.map +0 -1
- package/dist/actions/externalFirePanelAction.js +0 -12
- package/dist/actions/externalFirePanelAction.js.map +0 -1
- package/dist/actions/firePanelAction.d.ts +0 -6
- package/dist/actions/firePanelAction.d.ts.map +0 -1
- package/dist/actions/firePanelAction.js +0 -75
- package/dist/actions/firePanelAction.js.map +0 -1
- package/dist/actions/usePanelActions.d.ts +0 -63
- package/dist/actions/usePanelActions.d.ts.map +0 -1
- package/dist/actions/usePanelActions.js +0 -55
- package/dist/actions/usePanelActions.js.map +0 -1
- package/dist/actions/usePanelIsLoading.d.ts +0 -4
- package/dist/actions/usePanelIsLoading.d.ts.map +0 -1
- package/dist/actions/usePanelIsLoading.js +0 -14
- package/dist/actions/usePanelIsLoading.js.map +0 -1
- package/dist/actions/usePanelNetworkState.d.ts +0 -8
- package/dist/actions/usePanelNetworkState.d.ts.map +0 -1
- package/dist/actions/usePanelNetworkState.js +0 -21
- package/dist/actions/usePanelNetworkState.js.map +0 -1
- package/dist/common/usePanelIdentity.d.ts +0 -10
- package/dist/common/usePanelIdentity.d.ts.map +0 -1
- package/dist/common/usePanelIdentity.js +0 -12
- package/dist/common/usePanelIdentity.js.map +0 -1
- package/dist/config/parametersStore.d.ts +0 -15
- package/dist/config/parametersStore.d.ts.map +0 -1
- package/dist/config/parametersStore.js +0 -25
- package/dist/config/parametersStore.js.map +0 -1
- package/dist/config/saveParameters.d.ts +0 -11
- package/dist/config/saveParameters.d.ts.map +0 -1
- package/dist/config/saveParameters.js +0 -16
- package/dist/config/saveParameters.js.map +0 -1
- package/dist/config/usePanelConfig.js +0 -22
- package/dist/config/usePanelConfig.js.map +0 -1
- package/dist/config/usePanelParametersSelector.d.ts +0 -25
- package/dist/config/usePanelParametersSelector.d.ts.map +0 -1
- package/dist/config/usePanelParametersSelector.js +0 -17
- package/dist/config/usePanelParametersSelector.js.map +0 -1
- package/dist/dashboard/DashboardContext.d.ts +0 -6
- package/dist/dashboard/DashboardContext.d.ts.map +0 -1
- package/dist/dashboard/DashboardContext.js +0 -12
- package/dist/dashboard/DashboardContext.js.map +0 -1
- package/dist/dashboard/DashboardPanel.d.ts +0 -45
- package/dist/dashboard/DashboardPanel.d.ts.map +0 -1
- package/dist/dashboard/DashboardPanel.js +0 -236
- package/dist/dashboard/DashboardPanel.js.map +0 -1
- package/dist/dashboard/DashboardPanelContext.d.ts +0 -6
- package/dist/dashboard/DashboardPanelContext.d.ts.map +0 -1
- package/dist/dashboard/DashboardPanelContext.js +0 -12
- package/dist/dashboard/DashboardPanelContext.js.map +0 -1
- package/dist/dashboard/DashboardPanelsBootstraper.d.ts +0 -33
- package/dist/dashboard/DashboardPanelsBootstraper.d.ts.map +0 -1
- package/dist/dashboard/DashboardPanelsBootstraper.js +0 -135
- package/dist/dashboard/DashboardPanelsBootstraper.js.map +0 -1
- package/dist/dashboard/DashboardRouter.d.ts +0 -30
- package/dist/dashboard/DashboardRouter.d.ts.map +0 -1
- package/dist/dashboard/DashboardRouter.js +0 -74
- package/dist/dashboard/DashboardRouter.js.map +0 -1
- package/dist/dashboard/PanelNotFound.js +0 -14
- package/dist/dashboard/PanelNotFound.js.map +0 -1
- package/dist/dashboard/dashboard.d.ts +0 -26
- package/dist/dashboard/dashboard.d.ts.map +0 -1
- package/dist/dashboard/dashboard.js +0 -167
- package/dist/dashboard/dashboard.js.map +0 -1
- package/dist/eventsController/eventsController.d.ts +0 -11
- package/dist/eventsController/eventsController.d.ts.map +0 -1
- package/dist/eventsController/eventsController.js +0 -57
- package/dist/eventsController/eventsController.js.map +0 -1
- package/dist/eventsController/types.d.ts +0 -21
- package/dist/eventsController/types.d.ts.map +0 -1
- package/dist/eventsController/usePanelFireEvent.d.ts +0 -13
- package/dist/eventsController/usePanelFireEvent.d.ts.map +0 -1
- package/dist/eventsController/usePanelFireEvent.js +0 -21
- package/dist/eventsController/usePanelFireEvent.js.map +0 -1
- package/dist/eventsController/usePanelOnEvent.d.ts +0 -12
- package/dist/eventsController/usePanelOnEvent.d.ts.map +0 -1
- package/dist/eventsController/usePanelOnEvent.js +0 -14
- package/dist/eventsController/usePanelOnEvent.js.map +0 -1
- package/dist/panelsStore/createPanelStore.d.ts +0 -16
- package/dist/panelsStore/createPanelStore.d.ts.map +0 -1
- package/dist/panelsStore/createPanelStore.js +0 -58
- package/dist/panelsStore/createPanelStore.js.map +0 -1
- package/dist/panelsStore/panelsStore.js +0 -59
- package/dist/panelsStore/panelsStore.js.map +0 -1
- package/dist/panelsStore/usePanelSelector.js +0 -32
- package/dist/panelsStore/usePanelSelector.js.map +0 -1
- package/dist/panelsUtil/usePanelChangeTitle.d.ts +0 -5
- package/dist/panelsUtil/usePanelChangeTitle.d.ts.map +0 -1
- package/dist/panelsUtil/usePanelChangeTitle.js +0 -23
- package/dist/panelsUtil/usePanelChangeTitle.js.map +0 -1
- package/dist/panelsUtil/usePanelTitleAction.js +0 -34
- package/dist/panelsUtil/usePanelTitleAction.js.map +0 -1
- package/dist/position/usePanelPosition.d.ts +0 -13
- package/dist/position/usePanelPosition.d.ts.map +0 -1
- package/dist/position/usePanelPosition.js +0 -40
- package/dist/position/usePanelPosition.js.map +0 -1
- package/dist/splash/events/Dragleave.js +0 -15
- package/dist/splash/events/Dragleave.js.map +0 -1
- package/dist/splash/events/Dragover.js +0 -120
- package/dist/splash/events/Dragover.js.map +0 -1
- package/dist/splash/events/Dragstart.js +0 -65
- package/dist/splash/events/Dragstart.js.map +0 -1
- package/dist/splash/events/Drop.js +0 -60
- package/dist/splash/events/Drop.js.map +0 -1
- package/dist/splash/panels/DefaultPanelWrapper/NetworkState.js +0 -28
- package/dist/splash/panels/DefaultPanelWrapper/NetworkState.js.map +0 -1
- package/dist/splash/panels/DefaultPanelWrapper/PanelButtons.js +0 -16
- package/dist/splash/panels/DefaultPanelWrapper/PanelButtons.js.map +0 -1
- package/dist/splash/panels/DefaultPanelWrapper/RefreshButton.js +0 -35
- package/dist/splash/panels/DefaultPanelWrapper/RefreshButton.js.map +0 -1
- package/dist/splash/panels/DefaultPanelWrapper/SettingsButton.js +0 -45
- package/dist/splash/panels/DefaultPanelWrapper/SettingsButton.js.map +0 -1
- package/dist/splash/panels/DefaultPanelWrapper/defaultPanelWrapperStyles.js +0 -103
- package/dist/splash/panels/DefaultPanelWrapper/defaultPanelWrapperStyles.js.map +0 -1
- package/dist/splash/panels/DefaultPanelWrapper/index.js +0 -57
- package/dist/splash/panels/DefaultPanelWrapper/index.js.map +0 -1
- package/dist/splash/panels/LandingPagePanelWrapper.d.ts +0 -6
- package/dist/splash/panels/LandingPagePanelWrapper.d.ts.map +0 -1
- package/dist/splash/panels/LandingPagePanelWrapper.js +0 -52
- package/dist/splash/panels/LandingPagePanelWrapper.js.map +0 -1
- package/dist/splash/panels/PanelContext/PanelFooter.js +0 -70
- package/dist/splash/panels/PanelContext/PanelFooter.js.map +0 -1
- package/dist/splash/panels/PanelContext/index.d.ts +0 -26
- package/dist/splash/panels/PanelContext/index.d.ts.map +0 -1
- package/dist/splash/panels/PanelContext/index.js +0 -73
- package/dist/splash/panels/PanelContext/index.js.map +0 -1
- package/dist/splash/panels/PanelContext/usePanelContextLayout.d.ts +0 -6
- package/dist/splash/panels/PanelContext/usePanelContextLayout.d.ts.map +0 -1
- package/dist/splash/panels/PanelContext/usePanelContextLayout.js +0 -38
- package/dist/splash/panels/PanelContext/usePanelContextLayout.js.map +0 -1
- package/dist/splash/panels/PanelContext/usePanelFooter.js +0 -38
- package/dist/splash/panels/PanelContext/usePanelFooter.js.map +0 -1
- package/dist/splash/panels/PanelContext/useYieldPanelIsReady.d.ts +0 -45
- package/dist/splash/panels/PanelContext/useYieldPanelIsReady.d.ts.map +0 -1
- package/dist/splash/panels/PanelContext/useYieldPanelIsReady.js +0 -12
- package/dist/splash/panels/PanelContext/useYieldPanelIsReady.js.map +0 -1
- package/dist/splash/panels/PanelErrorBoundary.js +0 -53
- package/dist/splash/panels/PanelErrorBoundary.js.map +0 -1
- package/dist/splash/panels/PanelIdentifier.d.ts +0 -16
- package/dist/splash/panels/PanelIdentifier.d.ts.map +0 -1
- package/dist/splash/panels/PanelIdentifier.js +0 -19
- package/dist/splash/panels/PanelIdentifier.js.map +0 -1
- package/dist/splash/util/DragAndDrop.js +0 -243
- package/dist/splash/util/DragAndDrop.js.map +0 -1
- package/dist/splash/util/getColumnAreas.js +0 -19
- package/dist/splash/util/getColumnAreas.js.map +0 -1
- package/dist/splash/util/isCursorInArea.js +0 -13
- package/dist/splash/util/isCursorInArea.js.map +0 -1
- package/dist/types.d.ts +0 -27
- package/dist/types.d.ts.map +0 -1
- package/dist/util.d.ts +0 -8
- package/dist/util.d.ts.map +0 -1
- package/dist/util.js +0 -30
- package/dist/util.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { jsx } from '@apia/theme/jsx-runtime';
|
|
2
|
-
import { EventEmitter, useMount } from '@apia/util';
|
|
3
|
-
import { useState, useDeferredValue } from 'react';
|
|
4
|
-
import { DefaultPanelWrapper } from '../splash/panels/DefaultPanelWrapper/index.js';
|
|
5
|
-
import { DashboardPanelsBootstraper } from './DashboardPanelsBootstraper.js';
|
|
6
|
-
import { DashboardContext } from './DashboardContext.js';
|
|
7
|
-
import { DashboardPanel } from './DashboardPanel.js';
|
|
8
|
-
import { DragAndDrop } from '../splash/util/DragAndDrop.js';
|
|
9
|
-
import { eventsController } from '../eventsController/eventsController.js';
|
|
10
|
-
import { Router } from './DashboardRouter.js';
|
|
11
|
-
|
|
12
|
-
var __defProp = Object.defineProperty;
|
|
13
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
14
|
-
var __publicField = (obj, key, value) => {
|
|
15
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
16
|
-
return value;
|
|
17
|
-
};
|
|
18
|
-
var __accessCheck = (obj, member, msg) => {
|
|
19
|
-
if (!member.has(obj))
|
|
20
|
-
throw TypeError("Cannot " + msg);
|
|
21
|
-
};
|
|
22
|
-
var __privateGet = (obj, member, getter) => {
|
|
23
|
-
__accessCheck(obj, member, "read from private field");
|
|
24
|
-
return getter ? getter.call(obj) : member.get(obj);
|
|
25
|
-
};
|
|
26
|
-
var __privateAdd = (obj, member, value) => {
|
|
27
|
-
if (member.has(obj))
|
|
28
|
-
throw TypeError("Cannot add the same private member more than once");
|
|
29
|
-
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
30
|
-
};
|
|
31
|
-
var __privateSet = (obj, member, value, setter) => {
|
|
32
|
-
__accessCheck(obj, member, "write to private field");
|
|
33
|
-
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
34
|
-
return value;
|
|
35
|
-
};
|
|
36
|
-
var _currentScene, _dragAndDrop, _PanelContainer, _panelsRenderedPortals, _loadPanels, _Context, _suscribeToEvents, _usePanelsList, _SceneRenderer;
|
|
37
|
-
class Dashboard extends EventEmitter {
|
|
38
|
-
constructor(panelsContainer = DefaultPanelWrapper, urlContext) {
|
|
39
|
-
super();
|
|
40
|
-
this.urlContext = urlContext;
|
|
41
|
-
__publicField(this, "bootstrapper", new DashboardPanelsBootstraper(this));
|
|
42
|
-
__publicField(this, "panels", null);
|
|
43
|
-
__publicField(this, "router", new Router());
|
|
44
|
-
__publicField(this, "scenes", {});
|
|
45
|
-
__privateAdd(this, _currentScene, "/");
|
|
46
|
-
__privateAdd(this, _dragAndDrop, new DragAndDrop());
|
|
47
|
-
__privateAdd(this, _PanelContainer, DefaultPanelWrapper);
|
|
48
|
-
__privateAdd(this, _panelsRenderedPortals, []);
|
|
49
|
-
__publicField(this, "getPanel", (id) => this.panels?.[id]);
|
|
50
|
-
__publicField(this, "getPanelByName", (name) => Object.values(this.panels ?? {}).find(
|
|
51
|
-
(current) => current.props.name === name
|
|
52
|
-
));
|
|
53
|
-
__privateAdd(this, _loadPanels, () => {
|
|
54
|
-
this.panels = {};
|
|
55
|
-
const panelsElements = document.querySelectorAll(
|
|
56
|
-
"[data-panel]"
|
|
57
|
-
);
|
|
58
|
-
Array.from(panelsElements).forEach((current) => {
|
|
59
|
-
const panel = new DashboardPanel({
|
|
60
|
-
dashboard: this,
|
|
61
|
-
PanelContainer: __privateGet(this, _PanelContainer),
|
|
62
|
-
id: current.dataset.id
|
|
63
|
-
});
|
|
64
|
-
let panelPath = panel.getParameters().PAR_SPA_PATH || "*";
|
|
65
|
-
if (panelPath === "/")
|
|
66
|
-
panelPath = `/${this.urlContext}`;
|
|
67
|
-
if (panelPath !== "*")
|
|
68
|
-
panel.hide();
|
|
69
|
-
else
|
|
70
|
-
panel.show();
|
|
71
|
-
const paths = panelPath.split(",");
|
|
72
|
-
paths.forEach((currentPath) => {
|
|
73
|
-
if (!this.scenes[currentPath])
|
|
74
|
-
this.scenes[currentPath] = [];
|
|
75
|
-
this.scenes[currentPath].push(panel.props.id);
|
|
76
|
-
});
|
|
77
|
-
this.panels[panel.props.id] = panel;
|
|
78
|
-
__privateGet(this, _panelsRenderedPortals).push(panel.portal);
|
|
79
|
-
});
|
|
80
|
-
__privateGet(this, _dragAndDrop).bootstrap();
|
|
81
|
-
});
|
|
82
|
-
__privateAdd(this, _Context, ({ children }) => {
|
|
83
|
-
return /* @__PURE__ */ jsx(DashboardContext.Provider, { value: this, children });
|
|
84
|
-
});
|
|
85
|
-
__privateAdd(this, _suscribeToEvents, () => {
|
|
86
|
-
eventsController.onEvent({ eventType: "dashboard__focus" }, () => {
|
|
87
|
-
Object.values(this.panels ?? {}).forEach((current) => {
|
|
88
|
-
if (current.props.refreshOnHome) {
|
|
89
|
-
void current.refresh();
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
__privateAdd(this, _usePanelsList, () => {
|
|
95
|
-
const [panels, setPanels] = useState(null);
|
|
96
|
-
const deferredPanels = useDeferredValue(panels);
|
|
97
|
-
useMount(() => {
|
|
98
|
-
this.loadScene();
|
|
99
|
-
setPanels(__privateGet(this, _panelsRenderedPortals));
|
|
100
|
-
});
|
|
101
|
-
this.router.useSwitch([
|
|
102
|
-
{
|
|
103
|
-
route: new RegExp(`(?:/spa)?/(\\w+)`),
|
|
104
|
-
callback: (result) => {
|
|
105
|
-
console.log("Dashboard", { scene: result[1] });
|
|
106
|
-
this.loadScene(result[1]);
|
|
107
|
-
}
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
route: new RegExp(`/`),
|
|
111
|
-
callback: () => {
|
|
112
|
-
console.log("Dashboard", { noScene: "/" });
|
|
113
|
-
this.loadScene("/");
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
]);
|
|
117
|
-
return deferredPanels;
|
|
118
|
-
});
|
|
119
|
-
__privateAdd(this, _SceneRenderer, () => {
|
|
120
|
-
const Context = __privateGet(this, _Context);
|
|
121
|
-
const panels = __privateGet(this, _usePanelsList).call(this);
|
|
122
|
-
return /* @__PURE__ */ jsx(Context, { children: panels });
|
|
123
|
-
});
|
|
124
|
-
__publicField(this, "loadScene", (scene = __privateGet(this, _currentScene)) => {
|
|
125
|
-
let actualScene = scene;
|
|
126
|
-
if (!actualScene.startsWith("/"))
|
|
127
|
-
actualScene = `/${actualScene}`;
|
|
128
|
-
if (!this.panels)
|
|
129
|
-
__privateGet(this, _loadPanels).call(this);
|
|
130
|
-
if (!this.scenes[actualScene])
|
|
131
|
-
this.scenes[actualScene] = [];
|
|
132
|
-
this.scenes[__privateGet(this, _currentScene)].forEach((scenePanelId) => {
|
|
133
|
-
if (!this.scenes[actualScene].includes(scenePanelId))
|
|
134
|
-
this.panels?.[scenePanelId]?.hide();
|
|
135
|
-
});
|
|
136
|
-
this.scenes[actualScene].forEach((scenePanelIds) => {
|
|
137
|
-
const panel = this.panels?.[scenePanelIds];
|
|
138
|
-
if (panel) {
|
|
139
|
-
panel.show();
|
|
140
|
-
if (panel.hasInited && panel.props.refreshOnStart)
|
|
141
|
-
void panel.refresh();
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
__privateSet(this, _currentScene, actualScene);
|
|
145
|
-
return __privateGet(this, _panelsRenderedPortals);
|
|
146
|
-
});
|
|
147
|
-
__publicField(this, "Component", () => {
|
|
148
|
-
const R = __privateGet(this, _SceneRenderer);
|
|
149
|
-
return /* @__PURE__ */ jsx(R, {});
|
|
150
|
-
});
|
|
151
|
-
__privateSet(this, _currentScene, `/`);
|
|
152
|
-
__privateSet(this, _PanelContainer, panelsContainer ?? __privateGet(this, _PanelContainer));
|
|
153
|
-
__privateGet(this, _suscribeToEvents).call(this);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
_currentScene = new WeakMap();
|
|
157
|
-
_dragAndDrop = new WeakMap();
|
|
158
|
-
_PanelContainer = new WeakMap();
|
|
159
|
-
_panelsRenderedPortals = new WeakMap();
|
|
160
|
-
_loadPanels = new WeakMap();
|
|
161
|
-
_Context = new WeakMap();
|
|
162
|
-
_suscribeToEvents = new WeakMap();
|
|
163
|
-
_usePanelsList = new WeakMap();
|
|
164
|
-
_SceneRenderer = new WeakMap();
|
|
165
|
-
|
|
166
|
-
export { Dashboard };
|
|
167
|
-
//# sourceMappingURL=dashboard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sources":["../../src/dashboard/dashboard.tsx"],"sourcesContent":["import { EventEmitter, useMount } from '@apia/util';\nimport { ReactNode, ReactPortal, useDeferredValue, useState } from 'react';\nimport { PanelContainer } from '../types';\nimport { DefaultPanelWrapper } from '../splash/panels/DefaultPanelWrapper';\nimport { DashboardPanelsBootstraper } from './DashboardPanelsBootstraper';\nimport { DashboardContext } from './DashboardContext';\nimport { DashboardPanel } from './DashboardPanel';\nimport { DragAndDrop } from '../splash/util/DragAndDrop';\nimport { eventsController } from '../eventsController';\nimport { Router } from './DashboardRouter';\n\nexport class Dashboard extends EventEmitter<{\n changeScene: string;\n}> {\n bootstrapper = new DashboardPanelsBootstraper(this);\n panels: Record<string, DashboardPanel> | null = null;\n router = new Router();\n scenes: Record<string, string[]> = {};\n\n #currentScene = '/';\n #dragAndDrop = new DragAndDrop();\n #PanelContainer: PanelContainer = DefaultPanelWrapper;\n #panelsRenderedPortals: ReactPortal[] = [];\n\n getPanel = (id: string) => this.panels?.[id] as DashboardPanel;\n getPanelByName = (name: string) =>\n Object.values(this.panels ?? {}).find(\n (current) => current.props.name === name,\n );\n\n #loadPanels = () => {\n this.panels = {};\n\n const panelsElements = document.querySelectorAll(\n '[data-panel]',\n ) as NodeListOf<HTMLElement>;\n\n Array.from(panelsElements).forEach((current) => {\n const panel = new DashboardPanel({\n dashboard: this,\n PanelContainer: this.#PanelContainer,\n id: current.dataset.id as string,\n });\n\n let panelPath = (panel.getParameters().PAR_SPA_PATH as string) || '*';\n if (panelPath === '/') panelPath = `/${this.urlContext}`;\n if (panelPath !== '*') panel.hide();\n else panel.show();\n\n const paths = panelPath.split(',');\n paths.forEach((currentPath) => {\n if (!this.scenes[currentPath]) this.scenes[currentPath] = [];\n this.scenes[currentPath].push(panel.props.id);\n });\n\n (this.panels as Record<string, DashboardPanel>)[panel.props.id] = panel;\n\n this.#panelsRenderedPortals.push(panel.portal);\n });\n\n this.#dragAndDrop.bootstrap();\n };\n\n #Context = ({ children }: { children: ReactNode }) => {\n return (\n <DashboardContext.Provider value={this}>\n {children}\n </DashboardContext.Provider>\n );\n };\n\n #suscribeToEvents = () => {\n eventsController.onEvent({ eventType: 'dashboard__focus' }, () => {\n Object.values(this.panels ?? {}).forEach((current) => {\n if (current.props.refreshOnHome) {\n void current.refresh();\n }\n });\n });\n };\n #usePanelsList = () => {\n const [panels, setPanels] = useState<ReactNode>(null);\n const deferredPanels = useDeferredValue(panels);\n\n useMount(() => {\n this.loadScene();\n setPanels(this.#panelsRenderedPortals);\n });\n\n this.router.useSwitch([\n {\n route: new RegExp(`(?:/spa)?/(\\\\w+)`),\n callback: (result) => {\n console.log('Dashboard', { scene: result[1] });\n this.loadScene(result[1]);\n },\n },\n {\n route: new RegExp(`/`),\n callback: () => {\n console.log('Dashboard', { noScene: '/' });\n this.loadScene('/');\n },\n },\n ]);\n\n return deferredPanels;\n };\n\n constructor(\n panelsContainer: PanelContainer = DefaultPanelWrapper,\n public urlContext: string,\n ) {\n super();\n\n this.#currentScene = `/`;\n this.#PanelContainer = panelsContainer ?? this.#PanelContainer;\n this.#suscribeToEvents();\n }\n\n #SceneRenderer = () => {\n const Context = this.#Context;\n const panels = this.#usePanelsList();\n\n return <Context>{panels}</Context>;\n };\n\n loadScene = (scene: string = this.#currentScene): ReactPortal[] => {\n let actualScene = scene;\n if (!actualScene.startsWith('/')) actualScene = `/${actualScene}`;\n\n if (!this.panels) this.#loadPanels();\n if (!this.scenes[actualScene]) this.scenes[actualScene] = [];\n\n this.scenes[this.#currentScene].forEach((scenePanelId) => {\n if (!this.scenes[actualScene].includes(scenePanelId))\n this.panels?.[scenePanelId]?.hide();\n });\n this.scenes[actualScene].forEach((scenePanelIds) => {\n const panel = this.panels?.[scenePanelIds];\n if (panel) {\n panel.show();\n if (panel.hasInited && panel.props.refreshOnStart) void panel.refresh();\n }\n });\n\n this.#currentScene = actualScene;\n\n return this.#panelsRenderedPortals;\n };\n\n Component = () => {\n const R = this.#SceneRenderer;\n return <R />;\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { TPanelEventRegister, TPanelIdentifier, TPanelEventIdentifier, TPanelEventCallback } from './types.js';
|
|
2
|
-
|
|
3
|
-
declare const eventsController: {
|
|
4
|
-
callbacks: TPanelEventRegister<any>[];
|
|
5
|
-
broadcast(eventType: string, payload: any): void;
|
|
6
|
-
fireEvent(origin: TPanelIdentifier, eventType: string, payload: any): void;
|
|
7
|
-
onEvent<PayloadEvent>(distinction: Partial<TPanelEventIdentifier>, callback: TPanelEventCallback<PayloadEvent>): () => void;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export { eventsController };
|
|
11
|
-
//# sourceMappingURL=eventsController.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"eventsController.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
-
var __publicField = (obj, key, value) => {
|
|
4
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
-
return value;
|
|
6
|
-
};
|
|
7
|
-
function identifierAfitsOnB(a, b) {
|
|
8
|
-
for (const key of Object.keys(a)) {
|
|
9
|
-
if (a[key] !== b[key])
|
|
10
|
-
return false;
|
|
11
|
-
}
|
|
12
|
-
return true;
|
|
13
|
-
}
|
|
14
|
-
const eventsController = new class EventsController {
|
|
15
|
-
constructor() {
|
|
16
|
-
__publicField(this, "callbacks", []);
|
|
17
|
-
}
|
|
18
|
-
broadcast(eventType, payload) {
|
|
19
|
-
const origin = {
|
|
20
|
-
panelId: "broadcast",
|
|
21
|
-
panelName: "broadcast",
|
|
22
|
-
panelType: "broadcast",
|
|
23
|
-
panelTitle: "broadcast"
|
|
24
|
-
};
|
|
25
|
-
this.callbacks.forEach(({ callback, ...current }) => {
|
|
26
|
-
if (eventType === current.eventType) {
|
|
27
|
-
callback({ ...origin, eventType, payload });
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
fireEvent(origin, eventType, payload) {
|
|
32
|
-
if ([origin.panelId, origin.panelName, origin.panelType].includes("*"))
|
|
33
|
-
throw new Error(
|
|
34
|
-
"Broadcast is not allowed through fireEvent, use broadcast instead"
|
|
35
|
-
);
|
|
36
|
-
this.callbacks.forEach(({ callback, ...current }) => {
|
|
37
|
-
if (identifierAfitsOnB(current, { ...origin, eventType })) {
|
|
38
|
-
callback({ ...origin, eventType, payload });
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
onEvent(distinction, callback) {
|
|
43
|
-
const register = {
|
|
44
|
-
...distinction,
|
|
45
|
-
callback
|
|
46
|
-
};
|
|
47
|
-
this.callbacks.push(register);
|
|
48
|
-
return () => {
|
|
49
|
-
this.callbacks = this.callbacks.filter((current) => {
|
|
50
|
-
return current !== register;
|
|
51
|
-
});
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
}();
|
|
55
|
-
|
|
56
|
-
export { eventsController };
|
|
57
|
-
//# sourceMappingURL=eventsController.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"eventsController.js","sources":["../../src/eventsController/eventsController.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n TPanelEventCallback,\n TPanelEventIdentifier,\n TPanelEventRegister,\n TPanelIdentifier,\n} from './types';\n\nfunction identifierAfitsOnB(\n a: Partial<TPanelEventIdentifier>,\n b: TPanelEventIdentifier,\n) {\n // eslint-disable-next-line no-restricted-syntax, @typescript-eslint/no-for-in-array\n for (const key of Object.keys(a)) {\n if (\n a[key as keyof Partial<TPanelIdentifier>] !==\n b[key as keyof TPanelIdentifier]\n )\n return false;\n }\n\n return true;\n}\n\nexport const eventsController = new (class EventsController {\n callbacks: TPanelEventRegister<any>[] = [];\n\n broadcast(eventType: string, payload: any) {\n const origin: TPanelIdentifier = {\n panelId: 'broadcast',\n panelName: 'broadcast',\n panelType: 'broadcast',\n panelTitle: 'broadcast',\n };\n\n this.callbacks.forEach(({ callback, ...current }) => {\n if (eventType === current.eventType) {\n callback({ ...origin, eventType, payload });\n }\n });\n }\n\n fireEvent(origin: TPanelIdentifier, eventType: string, payload: any) {\n if ([origin.panelId, origin.panelName, origin.panelType].includes('*'))\n throw new Error(\n 'Broadcast is not allowed through fireEvent, use broadcast instead',\n );\n\n this.callbacks.forEach(({ callback, ...current }) => {\n if (identifierAfitsOnB(current, { ...origin, eventType })) {\n callback({ ...origin, eventType, payload });\n }\n });\n }\n\n onEvent<PayloadEvent>(\n distinction: Partial<TPanelEventIdentifier>,\n callback: TPanelEventCallback<PayloadEvent>,\n ) {\n const register: TPanelEventRegister<PayloadEvent> = {\n ...distinction,\n callback,\n };\n\n this.callbacks.push(register);\n\n return () => {\n this.callbacks = this.callbacks.filter((current) => {\n return current !== register;\n });\n };\n }\n})();\n"],"names":[],"mappings":";;;;;;AASA,SAAS,kBAAA,CACP,GACA,CACA,EAAA;AAEA,EAAA,KAAA,MAAW,GAAO,IAAA,MAAA,CAAO,IAAK,CAAA,CAAC,CAAG,EAAA;AAChC,IAAA,IACE,CAAE,CAAA,GAAsC,CACxC,KAAA,CAAA,CAAE,GAA6B,CAAA;AAE/B,MAAO,OAAA,KAAA,CAAA;AAAA,GACX;AAEA,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEa,MAAA,gBAAA,GAAmB,IAAK,MAAM,gBAAiB,CAAA;AAAA,EAAvB,WAAA,GAAA;AACnC,IAAA,aAAA,CAAA,IAAA,EAAA,WAAA,EAAwC,EAAC,CAAA,CAAA;AAAA,GAAA;AAAA,EAEzC,SAAA,CAAU,WAAmB,OAAc,EAAA;AACzC,IAAA,MAAM,MAA2B,GAAA;AAAA,MAC/B,OAAS,EAAA,WAAA;AAAA,MACT,SAAW,EAAA,WAAA;AAAA,MACX,SAAW,EAAA,WAAA;AAAA,MACX,UAAY,EAAA,WAAA;AAAA,KACd,CAAA;AAEA,IAAA,IAAA,CAAK,UAAU,OAAQ,CAAA,CAAC,EAAE,QAAU,EAAA,GAAG,SAAc,KAAA;AACnD,MAAI,IAAA,SAAA,KAAc,QAAQ,SAAW,EAAA;AACnC,QAAA,QAAA,CAAS,EAAE,GAAG,MAAQ,EAAA,SAAA,EAAW,SAAS,CAAA,CAAA;AAAA,OAC5C;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,SAAA,CAAU,MAA0B,EAAA,SAAA,EAAmB,OAAc,EAAA;AACnE,IAAI,IAAA,CAAC,OAAO,OAAS,EAAA,MAAA,CAAO,WAAW,MAAO,CAAA,SAAS,CAAE,CAAA,QAAA,CAAS,GAAG,CAAA;AACnE,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,mEAAA;AAAA,OACF,CAAA;AAEF,IAAA,IAAA,CAAK,UAAU,OAAQ,CAAA,CAAC,EAAE,QAAU,EAAA,GAAG,SAAc,KAAA;AACnD,MAAA,IAAI,mBAAmB,OAAS,EAAA,EAAE,GAAG,MAAQ,EAAA,SAAA,EAAW,CAAG,EAAA;AACzD,QAAA,QAAA,CAAS,EAAE,GAAG,MAAQ,EAAA,SAAA,EAAW,SAAS,CAAA,CAAA;AAAA,OAC5C;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,OAAA,CACE,aACA,QACA,EAAA;AACA,IAAA,MAAM,QAA8C,GAAA;AAAA,MAClD,GAAG,WAAA;AAAA,MACH,QAAA;AAAA,KACF,CAAA;AAEA,IAAK,IAAA,CAAA,SAAA,CAAU,KAAK,QAAQ,CAAA,CAAA;AAE5B,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,SAAY,GAAA,IAAA,CAAK,SAAU,CAAA,MAAA,CAAO,CAAC,OAAY,KAAA;AAClD,QAAA,OAAO,OAAY,KAAA,QAAA,CAAA;AAAA,OACpB,CAAA,CAAA;AAAA,KACH,CAAA;AAAA,GACF;AACF,CAAG;;;;"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { TPanelId, TPanelName, TPanelType } from '../types.js';
|
|
2
|
-
|
|
3
|
-
interface TPanelIdentifier {
|
|
4
|
-
panelId: TPanelId;
|
|
5
|
-
panelName: TPanelName;
|
|
6
|
-
panelTitle: string;
|
|
7
|
-
panelType: TPanelType;
|
|
8
|
-
}
|
|
9
|
-
type TPanelEventIdentifier = TPanelIdentifier & {
|
|
10
|
-
eventType: string;
|
|
11
|
-
};
|
|
12
|
-
type TPanelEvent<PayloadEvent = unknown> = TPanelEventIdentifier & {
|
|
13
|
-
payload: PayloadEvent;
|
|
14
|
-
};
|
|
15
|
-
type TPanelEventCallback<PayloadEvent> = (event: TPanelEvent<PayloadEvent>) => unknown;
|
|
16
|
-
type TPanelEventRegister<PayloadEvent> = {
|
|
17
|
-
callback: TPanelEventCallback<PayloadEvent>;
|
|
18
|
-
} & Partial<TPanelEventIdentifier>;
|
|
19
|
-
|
|
20
|
-
export type { TPanelEvent, TPanelEventCallback, TPanelEventIdentifier, TPanelEventRegister, TPanelIdentifier };
|
|
21
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Este hook devuelve un método que puede ser llamado para emitir un evento en
|
|
3
|
-
* el panel desde el cual es llamado. Los eventos de panel son emitidos con id
|
|
4
|
-
* de panel, tipo de panel, nombre de panel y tipo de evento y las suscripciones
|
|
5
|
-
* pueden ser realizadas a un conjunto arbitrario de estos identificadores.
|
|
6
|
-
*
|
|
7
|
-
* El segundo parámetro del método fireEvent devuelto es el payload, que puede
|
|
8
|
-
* ser de cualquier tipo.
|
|
9
|
-
*/
|
|
10
|
-
declare function usePanelFireEvent(): (eventType: string, payload: any) => void;
|
|
11
|
-
|
|
12
|
-
export { usePanelFireEvent };
|
|
13
|
-
//# sourceMappingURL=usePanelFireEvent.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePanelFireEvent.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { useCallback } from 'react';
|
|
2
|
-
import { eventsController } from './eventsController.js';
|
|
3
|
-
import { usePanelIdentity } from '../common/usePanelIdentity.js';
|
|
4
|
-
|
|
5
|
-
function usePanelFireEvent() {
|
|
6
|
-
const { panelId, panelName, panelType, panelTitle } = usePanelIdentity();
|
|
7
|
-
const fireEvent = useCallback(
|
|
8
|
-
(eventType, payload) => {
|
|
9
|
-
eventsController.fireEvent(
|
|
10
|
-
{ panelId, panelName, panelType, panelTitle },
|
|
11
|
-
eventType,
|
|
12
|
-
payload
|
|
13
|
-
);
|
|
14
|
-
},
|
|
15
|
-
[panelId, panelName, panelType, panelTitle]
|
|
16
|
-
);
|
|
17
|
-
return fireEvent;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export { usePanelFireEvent };
|
|
21
|
-
//# sourceMappingURL=usePanelFireEvent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePanelFireEvent.js","sources":["../../src/eventsController/usePanelFireEvent.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { useCallback } from 'react';\nimport { eventsController } from './eventsController';\nimport { usePanelIdentity } from '../common/usePanelIdentity';\n\n/**\n * Este hook devuelve un método que puede ser llamado para emitir un evento en\n * el panel desde el cual es llamado. Los eventos de panel son emitidos con id\n * de panel, tipo de panel, nombre de panel y tipo de evento y las suscripciones\n * pueden ser realizadas a un conjunto arbitrario de estos identificadores.\n *\n * El segundo parámetro del método fireEvent devuelto es el payload, que puede\n * ser de cualquier tipo.\n */\nexport function usePanelFireEvent() {\n const { panelId, panelName, panelType, panelTitle } = usePanelIdentity();\n\n const fireEvent = useCallback(\n (eventType: string, payload: any) => {\n eventsController.fireEvent(\n { panelId, panelName, panelType, panelTitle },\n eventType,\n payload,\n );\n },\n [panelId, panelName, panelType, panelTitle],\n );\n\n return fireEvent;\n}\n"],"names":[],"mappings":";;;;AAeO,SAAS,iBAAoB,GAAA;AAClC,EAAA,MAAM,EAAE,OAAS,EAAA,SAAA,EAAW,SAAW,EAAA,UAAA,KAAe,gBAAiB,EAAA,CAAA;AAEvE,EAAA,MAAM,SAAY,GAAA,WAAA;AAAA,IAChB,CAAC,WAAmB,OAAiB,KAAA;AACnC,MAAiB,gBAAA,CAAA,SAAA;AAAA,QACf,EAAE,OAAA,EAAS,SAAW,EAAA,SAAA,EAAW,UAAW,EAAA;AAAA,QAC5C,SAAA;AAAA,QACA,OAAA;AAAA,OACF,CAAA;AAAA,KACF;AAAA,IACA,CAAC,OAAA,EAAS,SAAW,EAAA,SAAA,EAAW,UAAU,CAAA;AAAA,GAC5C,CAAA;AAEA,EAAO,OAAA,SAAA,CAAA;AACT;;;;"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { TPanelEventIdentifier, TPanelEventCallback } from './types.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Este hook permite realizar suscripciones a eventos de paneles. Deberá ser
|
|
5
|
-
* llamado una vez por cada suscripción que desee hacerse dentro de un panel y
|
|
6
|
-
* no se deberán ejecutar acciones para romper las suscripciones hechas, ya que
|
|
7
|
-
* este hook maneja esa lógica de forma automática.
|
|
8
|
-
*/
|
|
9
|
-
declare function usePanelOnEvent<PayloadEvent>(distinction: Partial<TPanelEventIdentifier>, callback: TPanelEventCallback<PayloadEvent>): void;
|
|
10
|
-
|
|
11
|
-
export { usePanelOnEvent };
|
|
12
|
-
//# sourceMappingURL=usePanelOnEvent.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePanelOnEvent.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { useEffect } from 'react';
|
|
2
|
-
import { eventsController } from './eventsController.js';
|
|
3
|
-
|
|
4
|
-
function usePanelOnEvent(distinction, callback) {
|
|
5
|
-
useEffect(() => {
|
|
6
|
-
const unsuscriber = eventsController.onEvent(distinction, callback);
|
|
7
|
-
return () => {
|
|
8
|
-
unsuscriber();
|
|
9
|
-
};
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export { usePanelOnEvent };
|
|
14
|
-
//# sourceMappingURL=usePanelOnEvent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePanelOnEvent.js","sources":["../../src/eventsController/usePanelOnEvent.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { eventsController } from './eventsController';\nimport { TPanelEventIdentifier, TPanelEventCallback } from './types';\n\n/**\n * Este hook permite realizar suscripciones a eventos de paneles. Deberá ser\n * llamado una vez por cada suscripción que desee hacerse dentro de un panel y\n * no se deberán ejecutar acciones para romper las suscripciones hechas, ya que\n * este hook maneja esa lógica de forma automática.\n */\nexport function usePanelOnEvent<PayloadEvent>(\n distinction: Partial<TPanelEventIdentifier>,\n callback: TPanelEventCallback<PayloadEvent>,\n) {\n useEffect(() => {\n const unsuscriber = eventsController.onEvent(distinction, callback);\n\n return () => {\n unsuscriber();\n };\n });\n}\n"],"names":[],"mappings":";;;AAUgB,SAAA,eAAA,CACd,aACA,QACA,EAAA;AACA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,WAAc,GAAA,gBAAA,CAAiB,OAAQ,CAAA,WAAA,EAAa,QAAQ,CAAA,CAAA;AAElE,IAAA,OAAO,MAAM;AACX,MAAY,WAAA,EAAA,CAAA;AAAA,KACd,CAAA;AAAA,GACD,CAAA,CAAA;AACH;;;;"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { SliceCaseReducers } from '@apia/store';
|
|
2
|
-
import { TPanelType, TPanelName } from '../types.js';
|
|
3
|
-
|
|
4
|
-
declare type ActionCreatorForCaseReducer<CR> = CR extends (state: any, action: infer Action) => any ? Action extends {
|
|
5
|
-
payload: infer P;
|
|
6
|
-
} ? (payload: P, panelName?: string) => unknown : () => unknown : () => unknown;
|
|
7
|
-
type CaseReducerActions<CaseReducers extends SliceCaseReducers<any>> = {
|
|
8
|
-
[Type in keyof CaseReducers]: ActionCreatorForCaseReducer<CaseReducers[Type]>;
|
|
9
|
-
};
|
|
10
|
-
declare function createPanelStore<PanelState = any, Reducers extends SliceCaseReducers<PanelState> = SliceCaseReducers<PanelState>>(panelType: TPanelType, initialState: PanelState, reducers: Reducers): [
|
|
11
|
-
() => CaseReducerActions<Reducers>,
|
|
12
|
-
<Selected>(panelName: TPanelName, selector: (state: PanelState) => Selected, comparator?: (a: Selected, b: Selected) => boolean) => Selected
|
|
13
|
-
];
|
|
14
|
-
|
|
15
|
-
export { createPanelStore };
|
|
16
|
-
//# sourceMappingURL=createPanelStore.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createPanelStore.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { shallowEqual } from '@apia/store';
|
|
2
|
-
import { useLatest } from '@apia/util';
|
|
3
|
-
import { useMemo, useEffect } from 'react';
|
|
4
|
-
import { registerReducers, panelsStore, panelsActions } from './panelsStore.js';
|
|
5
|
-
import { usePanelSelector } from './usePanelSelector.js';
|
|
6
|
-
import { usePanelIdentity } from '../common/usePanelIdentity.js';
|
|
7
|
-
import { useDashboardContext } from '../dashboard/DashboardContext.js';
|
|
8
|
-
|
|
9
|
-
function createPanelStore(panelType, initialState, reducers) {
|
|
10
|
-
const useSelector = (panelName, selector, comparator = shallowEqual) => {
|
|
11
|
-
const dashboard = useDashboardContext();
|
|
12
|
-
const props = useMemo(
|
|
13
|
-
() => dashboard.getPanelByName(panelName)?.props,
|
|
14
|
-
[dashboard, panelName]
|
|
15
|
-
);
|
|
16
|
-
const propsRef = useLatest(props);
|
|
17
|
-
useEffect(() => {
|
|
18
|
-
panelsStore.dispatch(
|
|
19
|
-
panelsActions.initState({
|
|
20
|
-
panelType,
|
|
21
|
-
panelId: propsRef.current.id,
|
|
22
|
-
initialState
|
|
23
|
-
})
|
|
24
|
-
);
|
|
25
|
-
}, []);
|
|
26
|
-
return usePanelSelector(
|
|
27
|
-
panelType,
|
|
28
|
-
panelName,
|
|
29
|
-
initialState,
|
|
30
|
-
selector,
|
|
31
|
-
comparator
|
|
32
|
-
);
|
|
33
|
-
};
|
|
34
|
-
registerReducers(panelType, reducers);
|
|
35
|
-
const usePanelDispatcher = () => {
|
|
36
|
-
const { panelName: contextPanelName } = usePanelIdentity();
|
|
37
|
-
const dispatchers = {};
|
|
38
|
-
const dashboard = useDashboardContext();
|
|
39
|
-
Object.entries(reducers).forEach(([name]) => {
|
|
40
|
-
dispatchers[name] = (payload, panelName) => {
|
|
41
|
-
const props = dashboard.getPanelByName(panelName ?? contextPanelName)?.props;
|
|
42
|
-
panelsStore.dispatch(
|
|
43
|
-
panelsActions.updatePanelStore({
|
|
44
|
-
panelId: props.id,
|
|
45
|
-
panelType,
|
|
46
|
-
data: { payload },
|
|
47
|
-
reducer: name
|
|
48
|
-
})
|
|
49
|
-
);
|
|
50
|
-
};
|
|
51
|
-
});
|
|
52
|
-
return dispatchers;
|
|
53
|
-
};
|
|
54
|
-
return [usePanelDispatcher, useSelector];
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export { createPanelStore };
|
|
58
|
-
//# sourceMappingURL=createPanelStore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createPanelStore.js","sources":["../../src/panelsStore/createPanelStore.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { SliceCaseReducers, shallowEqual } from '@apia/store';\nimport { useLatest } from '@apia/util';\nimport { useEffect, useMemo } from 'react';\nimport { TLoadedPanelProps, TPanelName, TPanelType } from '../types';\nimport { panelsActions, panelsStore, registerReducers } from './panelsStore';\nimport { usePanelSelector } from './usePanelSelector';\nimport { usePanelIdentity } from '../common';\nimport { useDashboardContext } from '../dashboard';\n\ndeclare type ActionCreatorForCaseReducer<CR> = CR extends (\n state: any,\n action: infer Action,\n) => any\n ? Action extends {\n payload: infer P;\n }\n ? (payload: P, panelName?: string) => unknown\n : () => unknown\n : () => unknown;\n\ntype CaseReducerActions<CaseReducers extends SliceCaseReducers<any>> = {\n [Type in keyof CaseReducers]: ActionCreatorForCaseReducer<CaseReducers[Type]>;\n};\n\nexport function createPanelStore<\n PanelState = any,\n Reducers extends SliceCaseReducers<PanelState> = SliceCaseReducers<PanelState>,\n>(\n panelType: TPanelType,\n initialState: PanelState,\n reducers: Reducers,\n): [\n () => CaseReducerActions<Reducers>,\n <Selected>(\n panelName: TPanelName,\n selector: (state: PanelState) => Selected,\n comparator?: (a: Selected, b: Selected) => boolean,\n ) => Selected,\n] {\n const useSelector = <Selected>(\n panelName: TPanelName,\n selector: (state: PanelState) => Selected,\n comparator: (a: Selected, b: Selected) => boolean = shallowEqual,\n ): Selected => {\n const dashboard = useDashboardContext();\n const props = useMemo(\n () => dashboard.getPanelByName(panelName)?.props as TLoadedPanelProps,\n [dashboard, panelName],\n );\n\n const propsRef = useLatest(props);\n\n useEffect(() => {\n panelsStore.dispatch(\n panelsActions.initState({\n panelType,\n panelId: propsRef.current.id,\n initialState,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return usePanelSelector<PanelState, Selected>(\n panelType,\n panelName,\n initialState,\n selector,\n comparator,\n );\n };\n\n registerReducers<PanelState>(panelType, reducers);\n\n /**\n * Devuelve un objeto de dispatchers asociados al panel. Este hook puede ser\n * exportado pero es importante comprender su funcionamiento: cuando es usado\n * acepta un segundo parámetro opcional panelName que en caso de no ser\n * pasado, utilizará el del contexto del panel desde el que se ejecuta.\n */\n const usePanelDispatcher = () => {\n const { panelName: contextPanelName } = usePanelIdentity();\n const dispatchers: CaseReducerActions<Reducers> =\n {} as CaseReducerActions<Reducers>;\n const dashboard = useDashboardContext();\n\n Object.entries(reducers).forEach(([name]) => {\n dispatchers[name as keyof typeof dispatchers] = ((\n payload: any,\n panelName?: TPanelName,\n ) => {\n const props = dashboard.getPanelByName(panelName ?? contextPanelName)\n ?.props as TLoadedPanelProps;\n\n panelsStore.dispatch(\n panelsActions.updatePanelStore({\n panelId: props.id,\n panelType,\n data: { payload },\n reducer: name,\n }),\n );\n }) as any;\n });\n\n return dispatchers;\n };\n\n return [usePanelDispatcher, useSelector];\n}\n"],"names":[],"mappings":";;;;;;;;AA0BgB,SAAA,gBAAA,CAId,SACA,EAAA,YAAA,EACA,QAQA,EAAA;AACA,EAAA,MAAM,WAAc,GAAA,CAClB,SACA,EAAA,QAAA,EACA,aAAoD,YACvC,KAAA;AACb,IAAA,MAAM,YAAY,mBAAoB,EAAA,CAAA;AACtC,IAAA,MAAM,KAAQ,GAAA,OAAA;AAAA,MACZ,MAAM,SAAA,CAAU,cAAe,CAAA,SAAS,CAAG,EAAA,KAAA;AAAA,MAC3C,CAAC,WAAW,SAAS,CAAA;AAAA,KACvB,CAAA;AAEA,IAAM,MAAA,QAAA,GAAW,UAAU,KAAK,CAAA,CAAA;AAEhC,IAAA,SAAA,CAAU,MAAM;AACd,MAAY,WAAA,CAAA,QAAA;AAAA,QACV,cAAc,SAAU,CAAA;AAAA,UACtB,SAAA;AAAA,UACA,OAAA,EAAS,SAAS,OAAQ,CAAA,EAAA;AAAA,UAC1B,YAAA;AAAA,SACD,CAAA;AAAA,OACH,CAAA;AAAA,KAEF,EAAG,EAAE,CAAA,CAAA;AAEL,IAAO,OAAA,gBAAA;AAAA,MACL,SAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA;AAEA,EAAA,gBAAA,CAA6B,WAAW,QAAQ,CAAA,CAAA;AAQhD,EAAA,MAAM,qBAAqB,MAAM;AAC/B,IAAA,MAAM,EAAE,SAAA,EAAW,gBAAiB,EAAA,GAAI,gBAAiB,EAAA,CAAA;AACzD,IAAA,MAAM,cACJ,EAAC,CAAA;AACH,IAAA,MAAM,YAAY,mBAAoB,EAAA,CAAA;AAEtC,IAAA,MAAA,CAAO,QAAQ,QAAQ,CAAA,CAAE,QAAQ,CAAC,CAAC,IAAI,CAAM,KAAA;AAC3C,MAAA,WAAA,CAAY,IAAgC,CAAA,GAAK,CAC/C,OAAA,EACA,SACG,KAAA;AACH,QAAA,MAAM,KAAQ,GAAA,SAAA,CAAU,cAAe,CAAA,SAAA,IAAa,gBAAgB,CAChE,EAAA,KAAA,CAAA;AAEJ,QAAY,WAAA,CAAA,QAAA;AAAA,UACV,cAAc,gBAAiB,CAAA;AAAA,YAC7B,SAAS,KAAM,CAAA,EAAA;AAAA,YACf,SAAA;AAAA,YACA,IAAA,EAAM,EAAE,OAAQ,EAAA;AAAA,YAChB,OAAS,EAAA,IAAA;AAAA,WACV,CAAA;AAAA,SACH,CAAA;AAAA,OACF,CAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAO,OAAA,WAAA,CAAA;AAAA,GACT,CAAA;AAEA,EAAO,OAAA,CAAC,oBAAoB,WAAW,CAAA,CAAA;AACzC;;;;"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { createSlice, injectReducers } from '@apia/store';
|
|
2
|
-
|
|
3
|
-
const reducers = {};
|
|
4
|
-
function initPanelTypeUpdater(panelType) {
|
|
5
|
-
if (!reducers[panelType]) {
|
|
6
|
-
reducers[panelType] = {
|
|
7
|
-
defaultReducer: (panelsState, payload) => {
|
|
8
|
-
Object.assign(panelsState, payload);
|
|
9
|
-
}
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
function registerReducers(panelType, newReducers) {
|
|
14
|
-
initPanelTypeUpdater(panelType);
|
|
15
|
-
Object.assign(reducers[panelType], newReducers);
|
|
16
|
-
}
|
|
17
|
-
function initPanelState(state, panelType, panelId, initialState) {
|
|
18
|
-
if (!state[panelType]) {
|
|
19
|
-
state[panelType] = {};
|
|
20
|
-
}
|
|
21
|
-
if (!state[panelType][panelId])
|
|
22
|
-
state[panelType][panelId] = {};
|
|
23
|
-
state[panelType][panelId] = initialState;
|
|
24
|
-
}
|
|
25
|
-
const panelsSlice = createSlice({
|
|
26
|
-
name: "panelsSlice",
|
|
27
|
-
initialState: {},
|
|
28
|
-
reducers: {
|
|
29
|
-
initState(state, {
|
|
30
|
-
payload: { panelId, panelType, initialState }
|
|
31
|
-
}) {
|
|
32
|
-
if (!state[panelType]?.[panelId]) {
|
|
33
|
-
initPanelState(state, panelType, panelId, initialState);
|
|
34
|
-
state[panelType][panelId] = initialState;
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
updatePanelStore(state, {
|
|
38
|
-
payload: { data, panelId, panelType, reducer, initialState }
|
|
39
|
-
}) {
|
|
40
|
-
if (!state[panelType]?.[panelId]) {
|
|
41
|
-
initPanelState(state, panelType, panelId, initialState ?? {});
|
|
42
|
-
}
|
|
43
|
-
const panelsStore2 = state[panelType][panelId];
|
|
44
|
-
initPanelTypeUpdater(panelType);
|
|
45
|
-
if (!reducers[panelType][reducer ?? "default"]) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const currentReducer = reducers[panelType][reducer ?? "default"];
|
|
49
|
-
currentReducer(panelsStore2, data);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
const { useSelector: usePanelStoreSelector, store: panelsStore } = injectReducers({
|
|
54
|
-
panelsSlice: panelsSlice.reducer
|
|
55
|
-
});
|
|
56
|
-
const panelsActions = panelsSlice.actions;
|
|
57
|
-
|
|
58
|
-
export { initPanelState, initPanelTypeUpdater, panelsActions, panelsSlice, panelsStore, reducers, registerReducers, usePanelStoreSelector };
|
|
59
|
-
//# sourceMappingURL=panelsStore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"panelsStore.js","sources":["../../src/panelsStore/panelsStore.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable no-restricted-imports */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport {\n createSlice,\n injectReducers,\n PayloadAction,\n Draft,\n SliceCaseReducers,\n CaseReducer,\n} from '@apia/store';\nimport { TPanelId, TPanelType } from '../types';\n\ntype ValidateSliceCaseReducers<S, ACR extends SliceCaseReducers<S>> = ACR & {\n [T in keyof ACR]: ACR[T] extends {\n reducer(s: S, action?: infer A): any;\n }\n ? {\n prepare(...a: never[]): Omit<A, 'type'>;\n }\n : {};\n};\n\nexport type TPanelsSliceState = Record<string, Record<string, unknown>>;\n\nexport type TReducers<\n State = any,\n CR extends SliceCaseReducers<State> = SliceCaseReducers<State>,\n> = ValidateSliceCaseReducers<State, CR>;\n\ntype TPanelsReducers<\n State = any,\n CR extends SliceCaseReducers<State> = SliceCaseReducers<State>,\n> = Record<string, TReducers<State, CR>>;\n\n/**\n * Los updaters son funciones que permiten modificar la forma en la que un\n * panel modifica su estado, se puede pensar como un análogo del reducer\n *\n * {\n * panelTypeA: {\n * updaterA: (state, data) => { ...update panel store },\n * updaterB: (state, data) => { ...update panel store },\n * }\n * }\n */\nexport const reducers: TPanelsReducers<Record<string, unknown>> = {};\n\nexport function initPanelTypeUpdater(panelType: TPanelType) {\n if (!reducers[panelType]) {\n reducers[panelType] = {\n defaultReducer: (\n panelsState,\n payload: PayloadAction<{ name: string }>,\n ) => {\n Object.assign(panelsState, payload);\n },\n };\n }\n}\n\n/**\n * Permite registrar nuevas formas de actualizar el estado de un tipo de panel\n */\nexport function registerReducers<\n State = any,\n CR extends SliceCaseReducers<State> = SliceCaseReducers<State>,\n>(panelType: TPanelType, newReducers: TReducers<State, CR>) {\n initPanelTypeUpdater(panelType);\n Object.assign(reducers[panelType], newReducers);\n}\n\nexport function initPanelState(\n state: Draft<TPanelsSliceState>,\n panelType: TPanelType,\n panelId: TPanelId,\n initialState: any,\n) {\n if (!state[panelType]) {\n state[panelType] = {};\n }\n if (!state[panelType][panelId]) state[panelType][panelId] = {};\n state[panelType][panelId] = initialState;\n}\n\nexport const panelsSlice = createSlice({\n name: 'panelsSlice',\n initialState: {} as TPanelsSliceState,\n reducers: {\n initState(\n state,\n {\n payload: { panelId, panelType, initialState },\n }: PayloadAction<{\n panelType: TPanelType;\n panelId: TPanelId;\n reducer?: string; // reducer will be used to customize the way the slice is updated\n initialState: any;\n }>,\n ) {\n if (!state[panelType]?.[panelId]) {\n initPanelState(state, panelType, panelId, initialState);\n state[panelType][panelId] = initialState;\n }\n },\n updatePanelStore(\n state,\n {\n payload: { data, panelId, panelType, reducer, initialState },\n }: PayloadAction<{\n panelType: TPanelType;\n panelId: TPanelId;\n reducer?: string; // Updater will be used to customize the way the slice is updated\n data: any;\n initialState?: any;\n }>,\n ) {\n if (!state[panelType]?.[panelId]) {\n initPanelState(state, panelType, panelId, initialState ?? {});\n }\n const panelsStore = state[panelType][panelId];\n initPanelTypeUpdater(panelType);\n\n if (!reducers[panelType][reducer ?? 'default']) {\n return;\n }\n\n const currentReducer = reducers[panelType][\n reducer ?? 'default'\n ] as CaseReducer;\n currentReducer(panelsStore, data);\n },\n },\n});\n\nexport const { useSelector: usePanelStoreSelector, store: panelsStore } =\n injectReducers({\n panelsSlice: panelsSlice.reducer,\n });\n\nexport const panelsActions = panelsSlice.actions;\n"],"names":["panelsStore"],"mappings":";;AAgDO,MAAM,WAAqD,GAAC;AAE5D,SAAS,qBAAqB,SAAuB,EAAA;AAC1D,EAAI,IAAA,CAAC,QAAS,CAAA,SAAS,CAAG,EAAA;AACxB,IAAA,QAAA,CAAS,SAAS,CAAI,GAAA;AAAA,MACpB,cAAA,EAAgB,CACd,WAAA,EACA,OACG,KAAA;AACH,QAAO,MAAA,CAAA,MAAA,CAAO,aAAa,OAAO,CAAA,CAAA;AAAA,OACpC;AAAA,KACF,CAAA;AAAA,GACF;AACF,CAAA;AAKgB,SAAA,gBAAA,CAGd,WAAuB,WAAmC,EAAA;AAC1D,EAAA,oBAAA,CAAqB,SAAS,CAAA,CAAA;AAC9B,EAAA,MAAA,CAAO,MAAO,CAAA,QAAA,CAAS,SAAS,CAAA,EAAG,WAAW,CAAA,CAAA;AAChD,CAAA;AAEO,SAAS,cACd,CAAA,KAAA,EACA,SACA,EAAA,OAAA,EACA,YACA,EAAA;AACA,EAAI,IAAA,CAAC,KAAM,CAAA,SAAS,CAAG,EAAA;AACrB,IAAM,KAAA,CAAA,SAAS,IAAI,EAAC,CAAA;AAAA,GACtB;AACA,EAAA,IAAI,CAAC,KAAA,CAAM,SAAS,CAAA,CAAE,OAAO,CAAA;AAAG,IAAA,KAAA,CAAM,SAAS,CAAA,CAAE,OAAO,CAAA,GAAI,EAAC,CAAA;AAC7D,EAAM,KAAA,CAAA,SAAS,CAAE,CAAA,OAAO,CAAI,GAAA,YAAA,CAAA;AAC9B,CAAA;AAEO,MAAM,cAAc,WAAY,CAAA;AAAA,EACrC,IAAM,EAAA,aAAA;AAAA,EACN,cAAc,EAAC;AAAA,EACf,QAAU,EAAA;AAAA,IACR,UACE,KACA,EAAA;AAAA,MACE,OAAS,EAAA,EAAE,OAAS,EAAA,SAAA,EAAW,YAAa,EAAA;AAAA,KAO9C,EAAA;AACA,MAAA,IAAI,CAAC,KAAA,CAAM,SAAS,CAAA,GAAI,OAAO,CAAG,EAAA;AAChC,QAAe,cAAA,CAAA,KAAA,EAAO,SAAW,EAAA,OAAA,EAAS,YAAY,CAAA,CAAA;AACtD,QAAM,KAAA,CAAA,SAAS,CAAE,CAAA,OAAO,CAAI,GAAA,YAAA,CAAA;AAAA,OAC9B;AAAA,KACF;AAAA,IACA,iBACE,KACA,EAAA;AAAA,MACE,SAAS,EAAE,IAAA,EAAM,OAAS,EAAA,SAAA,EAAW,SAAS,YAAa,EAAA;AAAA,KAQ7D,EAAA;AACA,MAAA,IAAI,CAAC,KAAA,CAAM,SAAS,CAAA,GAAI,OAAO,CAAG,EAAA;AAChC,QAAA,cAAA,CAAe,KAAO,EAAA,SAAA,EAAW,OAAS,EAAA,YAAA,IAAgB,EAAE,CAAA,CAAA;AAAA,OAC9D;AACA,MAAA,MAAMA,YAAc,GAAA,KAAA,CAAM,SAAS,CAAA,CAAE,OAAO,CAAA,CAAA;AAC5C,MAAA,oBAAA,CAAqB,SAAS,CAAA,CAAA;AAE9B,MAAA,IAAI,CAAC,QAAS,CAAA,SAAS,CAAE,CAAA,OAAA,IAAW,SAAS,CAAG,EAAA;AAC9C,QAAA,OAAA;AAAA,OACF;AAEA,MAAA,MAAM,cAAiB,GAAA,QAAA,CAAS,SAAS,CAAA,CACvC,WAAW,SACb,CAAA,CAAA;AACA,MAAA,cAAA,CAAeA,cAAa,IAAI,CAAA,CAAA;AAAA,KAClC;AAAA,GACF;AACF,CAAC,EAAA;AAEM,MAAM,EAAE,WAAa,EAAA,qBAAA,EAAuB,KAAO,EAAA,WAAA,KACxD,cAAe,CAAA;AAAA,EACb,aAAa,WAAY,CAAA,OAAA;AAC3B,CAAC,EAAA;AAEI,MAAM,gBAAgB,WAAY,CAAA;;;;"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { shallowEqual } from '@apia/store';
|
|
2
|
-
import { useState, useRef } from 'react';
|
|
3
|
-
import { panelsStore, usePanelStoreSelector } from './panelsStore.js';
|
|
4
|
-
import { usePanelIdentity } from '../common/usePanelIdentity.js';
|
|
5
|
-
|
|
6
|
-
const undefinedObject = {};
|
|
7
|
-
function usePanelSelector(panelType, panelName, initialState, selector, comparator = shallowEqual) {
|
|
8
|
-
const { panelId } = usePanelIdentity();
|
|
9
|
-
if (!panelId)
|
|
10
|
-
throw new Error(`Cannot find panel with name ${panelName}`);
|
|
11
|
-
const storeState = panelsStore.getState().panelsSlice[panelType];
|
|
12
|
-
const [selection, setSelection] = useState(
|
|
13
|
-
initialState ? selector(storeState?.[panelId] ?? initialState) : {}
|
|
14
|
-
);
|
|
15
|
-
const previousSelected = useRef(
|
|
16
|
-
selection ?? undefinedObject
|
|
17
|
-
);
|
|
18
|
-
usePanelStoreSelector((global) => {
|
|
19
|
-
const newState = global.panelsSlice[panelType]?.[panelId];
|
|
20
|
-
if (newState !== void 0) {
|
|
21
|
-
const newSelected = selector(newState);
|
|
22
|
-
if (previousSelected.current === undefinedObject || !comparator(previousSelected.current, newSelected)) {
|
|
23
|
-
previousSelected.current = newSelected;
|
|
24
|
-
setSelection(newSelected);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
return selection;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export { undefinedObject, usePanelSelector };
|
|
32
|
-
//# sourceMappingURL=usePanelSelector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePanelSelector.js","sources":["../../src/panelsStore/usePanelSelector.ts"],"sourcesContent":["import { shallowEqual } from '@apia/store';\nimport { useRef, useState } from 'react';\nimport { TPanelName, TPanelType } from '../types';\nimport { panelsStore, usePanelStoreSelector } from './panelsStore';\nimport { usePanelIdentity } from '../common';\n\nexport const undefinedObject = {};\n\n/**\n * Permite escuchar el store de un panel al igual que se haría con un\n * useSelector de redux.\n *\n * @param selector Una función selectora que recibe el estado del panel y devuelve la selección deseada\n * @param comparator Opcionalmente se puede pasar un comparador para determinar si el estado debe actualizarse o no, dependiendo de la selección actual y la selección previa. Por defecto se usa shallowEqual de redux.\n * @returns La selección determinada en el selector, siempre que haya cambiado de acuerdo al comparador.\n *\n * @example\n *\n import { TRecordsPanelStore } from '..../recordsPanel';\n\n // Assume TRecordsPanelStore = { peopleNames: string[] }\n\n const firstName = usePanelSelector<TRecordsPanelStore>(\n 'RecordsPanel',\n 'RecordThisYear',\n (state) => { return state.peopleNames[0] }\n );\n */\nexport function usePanelSelector<StoreType, Selected>(\n panelType: TPanelType,\n panelName: TPanelName,\n initialState: StoreType,\n selector: (state: StoreType) => Selected,\n comparator: (a: Selected, b: Selected) => boolean = shallowEqual,\n): Selected {\n const { panelId } = usePanelIdentity();\n if (!panelId) throw new Error(`Cannot find panel with name ${panelName}`);\n\n const storeState = panelsStore.getState().panelsSlice[panelType];\n const [selection, setSelection] = useState<Selected>(\n initialState\n ? selector((storeState?.[panelId] as StoreType) ?? initialState)\n : ({} as Selected),\n );\n\n const previousSelected = useRef<Selected>(\n selection ?? (undefinedObject as Selected),\n );\n\n usePanelStoreSelector((global) => {\n const newState = global.panelsSlice[panelType]?.[panelId] as\n | StoreType\n | undefined;\n if (newState !== undefined) {\n const newSelected = selector(newState);\n if (\n previousSelected.current === undefinedObject ||\n !comparator(previousSelected.current as Selected, newSelected)\n ) {\n previousSelected.current = newSelected;\n setSelection(newSelected);\n }\n }\n });\n\n return selection;\n}\n"],"names":[],"mappings":";;;;;AAMO,MAAM,kBAAkB,GAAC;AAsBzB,SAAS,iBACd,SACA,EAAA,SAAA,EACA,YACA,EAAA,QAAA,EACA,aAAoD,YAC1C,EAAA;AACV,EAAM,MAAA,EAAE,OAAQ,EAAA,GAAI,gBAAiB,EAAA,CAAA;AACrC,EAAA,IAAI,CAAC,OAAA;AAAS,IAAA,MAAM,IAAI,KAAA,CAAM,CAA+B,4BAAA,EAAA,SAAS,CAAE,CAAA,CAAA,CAAA;AAExE,EAAA,MAAM,UAAa,GAAA,WAAA,CAAY,QAAS,EAAA,CAAE,YAAY,SAAS,CAAA,CAAA;AAC/D,EAAM,MAAA,CAAC,SAAW,EAAA,YAAY,CAAI,GAAA,QAAA;AAAA,IAChC,eACI,QAAU,CAAA,UAAA,GAAa,OAAO,CAAmB,IAAA,YAAY,IAC5D,EAAC;AAAA,GACR,CAAA;AAEA,EAAA,MAAM,gBAAmB,GAAA,MAAA;AAAA,IACvB,SAAc,IAAA,eAAA;AAAA,GAChB,CAAA;AAEA,EAAA,qBAAA,CAAsB,CAAC,MAAW,KAAA;AAChC,IAAA,MAAM,QAAW,GAAA,MAAA,CAAO,WAAY,CAAA,SAAS,IAAI,OAAO,CAAA,CAAA;AAGxD,IAAA,IAAI,aAAa,KAAW,CAAA,EAAA;AAC1B,MAAM,MAAA,WAAA,GAAc,SAAS,QAAQ,CAAA,CAAA;AACrC,MACE,IAAA,gBAAA,CAAiB,YAAY,eAC7B,IAAA,CAAC,WAAW,gBAAiB,CAAA,OAAA,EAAqB,WAAW,CAC7D,EAAA;AACA,QAAA,gBAAA,CAAiB,OAAU,GAAA,WAAA,CAAA;AAC3B,QAAA,YAAA,CAAa,WAAW,CAAA,CAAA;AAAA,OAC1B;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAO,OAAA,SAAA,CAAA;AACT;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePanelChangeTitle.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { useCallback } from 'react';
|
|
2
|
-
import { eventsController } from '../eventsController/eventsController.js';
|
|
3
|
-
import { usePanelFireEvent } from '../eventsController/usePanelFireEvent.js';
|
|
4
|
-
|
|
5
|
-
function changePanelTitle(panelId, newTitle) {
|
|
6
|
-
eventsController.fireEvent(
|
|
7
|
-
{ panelId },
|
|
8
|
-
"changeTitle",
|
|
9
|
-
newTitle
|
|
10
|
-
);
|
|
11
|
-
}
|
|
12
|
-
function usePanelChangeTitle() {
|
|
13
|
-
const fireEvent = usePanelFireEvent();
|
|
14
|
-
return useCallback(
|
|
15
|
-
(newTitle) => {
|
|
16
|
-
fireEvent("changeTitle", newTitle);
|
|
17
|
-
},
|
|
18
|
-
[fireEvent]
|
|
19
|
-
);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export { changePanelTitle, usePanelChangeTitle };
|
|
23
|
-
//# sourceMappingURL=usePanelChangeTitle.js.map
|