@victronenergy/mfd-modules 10.4.2 → 11.0.0

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.
Files changed (233) hide show
  1. package/README.md +1 -1
  2. package/dist/src/Modules/AcLoads/AcLoads.provider.d.ts.map +1 -1
  3. package/dist/src/Modules/AcLoads/AcLoads.provider.js +19 -19
  4. package/dist/src/Modules/AcLoads/AcLoads.provider.js.map +1 -1
  5. package/dist/src/Modules/AcMode/AcMode.provider.d.ts.map +1 -1
  6. package/dist/src/Modules/AcMode/AcMode.provider.js +19 -31
  7. package/dist/src/Modules/AcMode/AcMode.provider.js.map +1 -1
  8. package/dist/src/Modules/ActiveSource/ActiveInValues.provider.js +17 -17
  9. package/dist/src/Modules/ActiveSource/ActiveInValues.provider.js.map +1 -1
  10. package/dist/src/Modules/ActiveSource/ActiveSource.provider.js +11 -11
  11. package/dist/src/Modules/ActiveSource/ActiveSource.provider.js.map +1 -1
  12. package/dist/src/Modules/Alternators/Alternator.provider.d.ts.map +1 -1
  13. package/dist/src/Modules/Alternators/Alternator.provider.js +7 -8
  14. package/dist/src/Modules/Alternators/Alternator.provider.js.map +1 -1
  15. package/dist/src/Modules/Alternators/Alternators.provider.d.ts.map +1 -1
  16. package/dist/src/Modules/Alternators/Alternators.provider.js +16 -14
  17. package/dist/src/Modules/Alternators/Alternators.provider.js.map +1 -1
  18. package/dist/src/Modules/Alternators/Alternators.store.d.ts.map +1 -1
  19. package/dist/src/Modules/Alternators/Alternators.store.js +7 -10
  20. package/dist/src/Modules/Alternators/Alternators.store.js.map +1 -1
  21. package/dist/src/Modules/App/App.provider.js +47 -47
  22. package/dist/src/Modules/App/App.provider.js.map +1 -1
  23. package/dist/src/Modules/App/App.store.d.ts +2 -2
  24. package/dist/src/Modules/App/App.store.d.ts.map +1 -1
  25. package/dist/src/Modules/App/App.store.js +67 -110
  26. package/dist/src/Modules/App/App.store.js.map +1 -1
  27. package/dist/src/Modules/Battery/Batteries.provider.d.ts.map +1 -1
  28. package/dist/src/Modules/Battery/Batteries.provider.js +16 -14
  29. package/dist/src/Modules/Battery/Batteries.provider.js.map +1 -1
  30. package/dist/src/Modules/Battery/Batteries.store.d.ts.map +1 -1
  31. package/dist/src/Modules/Battery/Batteries.store.js +7 -10
  32. package/dist/src/Modules/Battery/Batteries.store.js.map +1 -1
  33. package/dist/src/Modules/Battery/SystemBatteries.provider.js +5 -5
  34. package/dist/src/Modules/Battery/SystemBatteries.provider.js.map +1 -1
  35. package/dist/src/Modules/Chargers/Charger.provider.js +23 -33
  36. package/dist/src/Modules/Chargers/Charger.provider.js.map +1 -1
  37. package/dist/src/Modules/Chargers/Chargers.provider.d.ts.map +1 -1
  38. package/dist/src/Modules/Chargers/Chargers.provider.js +16 -15
  39. package/dist/src/Modules/Chargers/Chargers.provider.js.map +1 -1
  40. package/dist/src/Modules/Chargers/Chargers.store.d.ts.map +1 -1
  41. package/dist/src/Modules/Chargers/Chargers.store.js +7 -10
  42. package/dist/src/Modules/Chargers/Chargers.store.js.map +1 -1
  43. package/dist/src/Modules/DcLoads/DcLoads.provider.d.ts.map +1 -1
  44. package/dist/src/Modules/DcLoads/DcLoads.provider.js +9 -20
  45. package/dist/src/Modules/DcLoads/DcLoads.provider.js.map +1 -1
  46. package/dist/src/Modules/Generators/ConnectedGenset.provider.d.ts.map +1 -1
  47. package/dist/src/Modules/Generators/ConnectedGenset.provider.js +36 -47
  48. package/dist/src/Modules/Generators/ConnectedGenset.provider.js.map +1 -1
  49. package/dist/src/Modules/Generators/ConnectedGensets.provider.d.ts.map +1 -1
  50. package/dist/src/Modules/Generators/ConnectedGensets.provider.js +16 -14
  51. package/dist/src/Modules/Generators/ConnectedGensets.provider.js.map +1 -1
  52. package/dist/src/Modules/Generators/ConnectedGensets.store.d.ts.map +1 -1
  53. package/dist/src/Modules/Generators/ConnectedGensets.store.js +8 -11
  54. package/dist/src/Modules/Generators/ConnectedGensets.store.js.map +1 -1
  55. package/dist/src/Modules/Generators/GeneratorConnectedGenset.provider.js +17 -27
  56. package/dist/src/Modules/Generators/GeneratorConnectedGenset.provider.js.map +1 -1
  57. package/dist/src/Modules/Generators/GeneratorRelay.provider.d.ts +2 -2
  58. package/dist/src/Modules/Generators/GeneratorRelay.provider.d.ts.map +1 -1
  59. package/dist/src/Modules/Generators/GeneratorRelay.provider.js +24 -34
  60. package/dist/src/Modules/Generators/GeneratorRelay.provider.js.map +1 -1
  61. package/dist/src/Modules/Header/Header.provider.js +4 -4
  62. package/dist/src/Modules/Header/Header.provider.js.map +1 -1
  63. package/dist/src/Modules/InverterCharger/InputLimit.provider.js +6 -17
  64. package/dist/src/Modules/InverterCharger/InputLimit.provider.js.map +1 -1
  65. package/dist/src/Modules/InverterCharger/InputLimitSelector.provider.d.ts.map +1 -1
  66. package/dist/src/Modules/InverterCharger/InputLimitSelector.provider.js +12 -26
  67. package/dist/src/Modules/InverterCharger/InputLimitSelector.provider.js.map +1 -1
  68. package/dist/src/Modules/InverterCharger/InverterCharger.provider.d.ts.map +1 -1
  69. package/dist/src/Modules/InverterCharger/InverterCharger.provider.js +16 -27
  70. package/dist/src/Modules/InverterCharger/InverterCharger.provider.js.map +1 -1
  71. package/dist/src/Modules/Inverters/Inverter.provider.d.ts.map +1 -1
  72. package/dist/src/Modules/Inverters/Inverter.provider.js +19 -30
  73. package/dist/src/Modules/Inverters/Inverter.provider.js.map +1 -1
  74. package/dist/src/Modules/Inverters/Inverters.provider.d.ts.map +1 -1
  75. package/dist/src/Modules/Inverters/Inverters.provider.js +14 -13
  76. package/dist/src/Modules/Inverters/Inverters.provider.js.map +1 -1
  77. package/dist/src/Modules/Inverters/Inverters.store.d.ts.map +1 -1
  78. package/dist/src/Modules/Inverters/Inverters.store.js +7 -10
  79. package/dist/src/Modules/Inverters/Inverters.store.js.map +1 -1
  80. package/dist/src/Modules/Inverters/index.js.map +1 -1
  81. package/dist/src/Modules/Language/Language.provider.d.ts +1 -1
  82. package/dist/src/Modules/Language/Language.provider.d.ts.map +1 -1
  83. package/dist/src/Modules/Language/Language.provider.js +21 -56
  84. package/dist/src/Modules/Language/Language.provider.js.map +1 -1
  85. package/dist/src/Modules/Mqtt/Mqtt.constants.js +1 -1
  86. package/dist/src/Modules/Mqtt/Mqtt.constants.js.map +1 -1
  87. package/dist/src/Modules/Mqtt/Mqtt.provider.d.ts +2 -2
  88. package/dist/src/Modules/Mqtt/Mqtt.provider.d.ts.map +1 -1
  89. package/dist/src/Modules/Mqtt/Mqtt.provider.js +4 -4
  90. package/dist/src/Modules/Mqtt/Mqtt.provider.js.map +1 -1
  91. package/dist/src/Modules/Mqtt/Mqtt.store.d.ts +3 -3
  92. package/dist/src/Modules/Mqtt/Mqtt.store.d.ts.map +1 -1
  93. package/dist/src/Modules/Mqtt/Mqtt.store.js +169 -193
  94. package/dist/src/Modules/Mqtt/Mqtt.store.js.map +1 -1
  95. package/dist/src/Modules/Mqtt/Mqtt.types.d.ts +1 -1
  96. package/dist/src/Modules/Mqtt/Mqtt.types.d.ts.map +1 -1
  97. package/dist/src/Modules/Mqtt/Mqtt.types.js +0 -1
  98. package/dist/src/Modules/Mqtt/Mqtt.types.js.map +1 -1
  99. package/dist/src/Modules/PvCharger/PvCharger.provider.js +8 -8
  100. package/dist/src/Modules/PvCharger/PvCharger.provider.js.map +1 -1
  101. package/dist/src/Modules/ShorePowerInput/ShorePowerInput.provider.d.ts +4 -1
  102. package/dist/src/Modules/ShorePowerInput/ShorePowerInput.provider.d.ts.map +1 -1
  103. package/dist/src/Modules/ShorePowerInput/ShorePowerInput.provider.js +24 -35
  104. package/dist/src/Modules/ShorePowerInput/ShorePowerInput.provider.js.map +1 -1
  105. package/dist/src/Modules/ShorePowerInput/index.d.ts +0 -1
  106. package/dist/src/Modules/ShorePowerInput/index.d.ts.map +1 -1
  107. package/dist/src/Modules/ShorePowerInput/index.js +0 -1
  108. package/dist/src/Modules/ShorePowerInput/index.js.map +1 -1
  109. package/dist/src/Modules/SwitchingPane/GenericInput.provider.d.ts +27 -0
  110. package/dist/src/Modules/SwitchingPane/GenericInput.provider.d.ts.map +1 -0
  111. package/dist/src/Modules/SwitchingPane/GenericInput.provider.js +32 -0
  112. package/dist/src/Modules/SwitchingPane/GenericInput.provider.js.map +1 -0
  113. package/dist/src/Modules/{SwitchableOutputs → SwitchingPane}/SwitchableOutput.provider.d.ts +25 -9
  114. package/dist/src/Modules/SwitchingPane/SwitchableOutput.provider.d.ts.map +1 -0
  115. package/dist/src/Modules/SwitchingPane/SwitchableOutput.provider.js +58 -0
  116. package/dist/src/Modules/SwitchingPane/SwitchableOutput.provider.js.map +1 -0
  117. package/dist/src/Modules/SwitchingPane/SwitchingDevice.provider.d.ts.map +1 -0
  118. package/dist/src/Modules/SwitchingPane/SwitchingDevice.provider.js +48 -0
  119. package/dist/src/Modules/SwitchingPane/SwitchingDevice.provider.js.map +1 -0
  120. package/dist/src/Modules/SwitchingPane/SwitchingDevices.store.d.ts.map +1 -0
  121. package/dist/src/Modules/{SwitchableOutputs → SwitchingPane}/SwitchingDevices.store.js +7 -10
  122. package/dist/src/Modules/SwitchingPane/SwitchingDevices.store.js.map +1 -0
  123. package/dist/src/Modules/SwitchingPane/SwitchingPane.provider.d.ts +2 -0
  124. package/dist/src/Modules/SwitchingPane/SwitchingPane.provider.d.ts.map +1 -0
  125. package/dist/src/Modules/SwitchingPane/SwitchingPane.provider.js +256 -0
  126. package/dist/src/Modules/SwitchingPane/SwitchingPane.provider.js.map +1 -0
  127. package/dist/src/Modules/SwitchingPane/SwitchingPane.store.d.ts +50 -0
  128. package/dist/src/Modules/SwitchingPane/SwitchingPane.store.d.ts.map +1 -0
  129. package/dist/src/Modules/{SwitchableOutputs/SwitchableOutputs.store.js → SwitchingPane/SwitchingPane.store.js} +67 -18
  130. package/dist/src/Modules/SwitchingPane/SwitchingPane.store.js.map +1 -0
  131. package/dist/src/Modules/SwitchingPane/index.d.ts +7 -0
  132. package/dist/src/Modules/SwitchingPane/index.d.ts.map +1 -0
  133. package/dist/src/Modules/SwitchingPane/index.js +7 -0
  134. package/dist/src/Modules/SwitchingPane/index.js.map +1 -0
  135. package/dist/src/Modules/SystemState/SystemState.provider.js +5 -5
  136. package/dist/src/Modules/SystemState/SystemState.provider.js.map +1 -1
  137. package/dist/src/Modules/Tanks/Tank.provider.d.ts.map +1 -1
  138. package/dist/src/Modules/Tanks/Tank.provider.js +11 -11
  139. package/dist/src/Modules/Tanks/Tank.provider.js.map +1 -1
  140. package/dist/src/Modules/Tanks/Tanks.provider.d.ts.map +1 -1
  141. package/dist/src/Modules/Tanks/Tanks.provider.js +19 -18
  142. package/dist/src/Modules/Tanks/Tanks.provider.js.map +1 -1
  143. package/dist/src/Modules/Tanks/Tanks.store.d.ts.map +1 -1
  144. package/dist/src/Modules/Tanks/Tanks.store.js +7 -10
  145. package/dist/src/Modules/Tanks/Tanks.store.js.map +1 -1
  146. package/dist/src/Modules/Temperatures/Temperature.provider.d.ts.map +1 -1
  147. package/dist/src/Modules/Temperatures/Temperature.provider.js +29 -29
  148. package/dist/src/Modules/Temperatures/Temperature.provider.js.map +1 -1
  149. package/dist/src/Modules/Temperatures/Temperatures.provider.d.ts.map +1 -1
  150. package/dist/src/Modules/Temperatures/Temperatures.provider.js +18 -17
  151. package/dist/src/Modules/Temperatures/Temperatures.provider.js.map +1 -1
  152. package/dist/src/Modules/Temperatures/Temperatures.store.d.ts.map +1 -1
  153. package/dist/src/Modules/Temperatures/Temperatures.store.js +7 -10
  154. package/dist/src/Modules/Temperatures/Temperatures.store.js.map +1 -1
  155. package/dist/src/Modules/Temperatures/index.d.ts +3 -3
  156. package/dist/src/Modules/Temperatures/index.js +3 -3
  157. package/dist/src/Modules/Temperatures/index.js.map +1 -1
  158. package/dist/src/Modules/Theme/Theme.provider.js +6 -6
  159. package/dist/src/Modules/Theme/Theme.provider.js.map +1 -1
  160. package/dist/src/Modules/Theme/Theme.store.d.ts.map +1 -1
  161. package/dist/src/Modules/Theme/Theme.store.js +35 -38
  162. package/dist/src/Modules/Theme/Theme.store.js.map +1 -1
  163. package/dist/src/Modules/Vebus/Vebus.provider.d.ts.map +1 -1
  164. package/dist/src/Modules/Vebus/Vebus.provider.js +39 -48
  165. package/dist/src/Modules/Vebus/Vebus.provider.js.map +1 -1
  166. package/dist/src/Modules/Vebus/Vebus.store.d.ts.map +1 -1
  167. package/dist/src/Modules/Vebus/Vebus.store.js +11 -14
  168. package/dist/src/Modules/Vebus/Vebus.store.js.map +1 -1
  169. package/dist/src/Modules/Vrm/Vrm.store.d.ts.map +1 -1
  170. package/dist/src/Modules/Vrm/Vrm.store.js +85 -154
  171. package/dist/src/Modules/Vrm/Vrm.store.js.map +1 -1
  172. package/dist/src/Modules/Vrm/Vrm.types.js +0 -1
  173. package/dist/src/Modules/WindGenerators/WindGenerator.provider.d.ts.map +1 -1
  174. package/dist/src/Modules/WindGenerators/WindGenerator.provider.js +6 -7
  175. package/dist/src/Modules/WindGenerators/WindGenerator.provider.js.map +1 -1
  176. package/dist/src/Modules/WindGenerators/WindGenerators.provider.d.ts.map +1 -1
  177. package/dist/src/Modules/WindGenerators/WindGenerators.provider.js +21 -19
  178. package/dist/src/Modules/WindGenerators/WindGenerators.provider.js.map +1 -1
  179. package/dist/src/Modules/WindGenerators/WindGenerators.store.d.ts.map +1 -1
  180. package/dist/src/Modules/WindGenerators/WindGenerators.store.js +7 -10
  181. package/dist/src/Modules/WindGenerators/WindGenerators.store.js.map +1 -1
  182. package/dist/src/index.d.ts +2 -1
  183. package/dist/src/index.d.ts.map +1 -1
  184. package/dist/src/index.js +2 -1
  185. package/dist/src/index.js.map +1 -1
  186. package/dist/src/utils/constants.d.ts +53 -3
  187. package/dist/src/utils/constants.d.ts.map +1 -1
  188. package/dist/src/utils/constants.js +82 -30
  189. package/dist/src/utils/constants.js.map +1 -1
  190. package/dist/src/utils/hsvw.d.ts.map +1 -1
  191. package/dist/src/utils/hsvw.js +24 -25
  192. package/dist/src/utils/hsvw.js.map +1 -1
  193. package/dist/src/utils/logger.d.ts +5 -8
  194. package/dist/src/utils/logger.d.ts.map +1 -1
  195. package/dist/src/utils/logger.js +11 -23
  196. package/dist/src/utils/logger.js.map +1 -1
  197. package/dist/src/utils/storage.d.ts.map +1 -1
  198. package/dist/src/utils/storage.js +7 -6
  199. package/dist/src/utils/storage.js.map +1 -1
  200. package/dist/src/utils/util.d.ts +6 -15
  201. package/dist/src/utils/util.d.ts.map +1 -1
  202. package/dist/src/utils/util.js +8 -100
  203. package/dist/src/utils/util.js.map +1 -1
  204. package/package.json +26 -15
  205. package/dist/eslint.config.d.mts +0 -13
  206. package/dist/eslint.config.d.mts.map +0 -1
  207. package/dist/eslint.config.mjs +0 -28
  208. package/dist/eslint.config.mjs.map +0 -1
  209. package/dist/src/Modules/ShorePowerInput/ShorePowerInput.store.d.ts +0 -11
  210. package/dist/src/Modules/ShorePowerInput/ShorePowerInput.store.d.ts.map +0 -1
  211. package/dist/src/Modules/ShorePowerInput/ShorePowerInput.store.js +0 -37
  212. package/dist/src/Modules/ShorePowerInput/ShorePowerInput.store.js.map +0 -1
  213. package/dist/src/Modules/SwitchableOutputs/SwitchableOutput.provider.d.ts.map +0 -1
  214. package/dist/src/Modules/SwitchableOutputs/SwitchableOutput.provider.js +0 -67
  215. package/dist/src/Modules/SwitchableOutputs/SwitchableOutput.provider.js.map +0 -1
  216. package/dist/src/Modules/SwitchableOutputs/SwitchableOutputs.provider.d.ts +0 -2
  217. package/dist/src/Modules/SwitchableOutputs/SwitchableOutputs.provider.d.ts.map +0 -1
  218. package/dist/src/Modules/SwitchableOutputs/SwitchableOutputs.provider.js +0 -168
  219. package/dist/src/Modules/SwitchableOutputs/SwitchableOutputs.provider.js.map +0 -1
  220. package/dist/src/Modules/SwitchableOutputs/SwitchableOutputs.store.d.ts +0 -38
  221. package/dist/src/Modules/SwitchableOutputs/SwitchableOutputs.store.d.ts.map +0 -1
  222. package/dist/src/Modules/SwitchableOutputs/SwitchableOutputs.store.js.map +0 -1
  223. package/dist/src/Modules/SwitchableOutputs/SwitchingDevice.provider.d.ts.map +0 -1
  224. package/dist/src/Modules/SwitchableOutputs/SwitchingDevice.provider.js +0 -50
  225. package/dist/src/Modules/SwitchableOutputs/SwitchingDevice.provider.js.map +0 -1
  226. package/dist/src/Modules/SwitchableOutputs/SwitchingDevices.store.d.ts.map +0 -1
  227. package/dist/src/Modules/SwitchableOutputs/SwitchingDevices.store.js.map +0 -1
  228. package/dist/src/Modules/SwitchableOutputs/index.d.ts +0 -6
  229. package/dist/src/Modules/SwitchableOutputs/index.d.ts.map +0 -1
  230. package/dist/src/Modules/SwitchableOutputs/index.js +0 -6
  231. package/dist/src/Modules/SwitchableOutputs/index.js.map +0 -1
  232. /package/dist/src/Modules/{SwitchableOutputs → SwitchingPane}/SwitchingDevice.provider.d.ts +0 -0
  233. /package/dist/src/Modules/{SwitchableOutputs → SwitchingPane}/SwitchingDevices.store.d.ts +0 -0
@@ -0,0 +1,48 @@
1
+ import { useEffect, useMemo } from "react";
2
+ import { useMqtt, useTopicsState } from "../Mqtt";
3
+ import Logger from "../../utils/logger";
4
+ import { useSwitchingDevicesStore } from "./SwitchingDevices.store";
5
+ import { autorun } from "mobx";
6
+ export const getSwitchingDeviceStateTopics = (portalId, tree, instanceId) => ({
7
+ productName: `N/${portalId}/${tree}/${instanceId}/ProductName`,
8
+ customName: `N/${portalId}/${tree}/${instanceId}/CustomName`,
9
+ instance: `N/${portalId}/${tree}/${instanceId}/DeviceInstance`,
10
+ });
11
+ export function useSwitchingDevice(instanceId) {
12
+ const { portalId } = useMqtt();
13
+ const topics = useMemo(() => getSwitchingDeviceStateTopics(portalId, "switch", instanceId), [portalId, instanceId]);
14
+ return useTopicsState(topics);
15
+ }
16
+ export function useSwitchingDevices() {
17
+ const switchingDevicesStore = useSwitchingDevicesStore();
18
+ const getTopics = (portalId) => ({
19
+ devices: `N/${portalId}/switch/+/DeviceInstance`,
20
+ });
21
+ const mqtt = useMqtt();
22
+ const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId]);
23
+ const messagesForSwitchingDevices = mqtt.messagesByWildcard(topics.devices);
24
+ // Examine MQTT to find all available switching devices
25
+ useEffect(() => {
26
+ if (!messagesForSwitchingDevices || Object.entries(messagesForSwitchingDevices).length === 0) {
27
+ Logger.log("Waiting for switching devices...");
28
+ }
29
+ else {
30
+ const deviceInstances = Object.values(messagesForSwitchingDevices);
31
+ const dispose = autorun(() => {
32
+ const oldDevices = switchingDevicesStore.devices;
33
+ const newDevices = deviceInstances.map((deviceId) => mqtt.messagesByTopics(getSwitchingDeviceStateTopics(mqtt.portalId, "switch", deviceId)));
34
+ // TODO: check unordered structural identify of old and new state
35
+ // TODO: to avoid unnecessary re-rendering: O(n^2) baby
36
+ if (oldDevices.length === 0 ||
37
+ oldDevices.length !== newDevices.length ||
38
+ !newDevices.every((id) => deviceInstances.includes(id))) {
39
+ Logger.log(`New switching devices instances: ${JSON.stringify(deviceInstances)}`);
40
+ switchingDevicesStore.setDevices(newDevices);
41
+ }
42
+ });
43
+ return () => dispose();
44
+ }
45
+ }, [messagesForSwitchingDevices, mqtt, switchingDevicesStore]);
46
+ return switchingDevicesStore;
47
+ }
48
+ //# sourceMappingURL=SwitchingDevice.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwitchingDevice.provider.js","sourceRoot":"/","sources":["src/Modules/SwitchingPane/SwitchingDevice.provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo } from \"react\"\nimport { PortalId, Topics, useMqtt, useTopicsState } from \"../Mqtt\"\nimport Logger from \"../../utils/logger\"\nimport { SwitchableOutputState, SwitchableOutputTree } from \"./SwitchableOutput.provider\"\nimport { useSwitchingDevicesStore } from \"./SwitchingDevices.store\"\nimport { autorun } from \"mobx\"\n\nexport type SwitchingDeviceInstanceId = number\n\nexport interface SwitchingDeviceState {\n productName: string\n customName: string\n instance: number\n switchableOutputs: SwitchableOutputState[]\n}\n\nexport interface SwitchingDeviceTopics extends Topics {\n productName?: string\n customName?: string\n instance?: string\n}\n\nexport const getSwitchingDeviceStateTopics = (\n portalId: PortalId,\n tree: SwitchableOutputTree,\n instanceId: SwitchingDeviceInstanceId\n) => ({\n productName: `N/${portalId}/${tree}/${instanceId}/ProductName`,\n customName: `N/${portalId}/${tree}/${instanceId}/CustomName`,\n instance: `N/${portalId}/${tree}/${instanceId}/DeviceInstance`,\n})\n\nexport function useSwitchingDevice(instanceId: SwitchingDeviceInstanceId): SwitchingDeviceState {\n const { portalId } = useMqtt()\n const topics = useMemo(() => getSwitchingDeviceStateTopics(portalId, \"switch\", instanceId), [portalId, instanceId])\n\n return useTopicsState<SwitchingDeviceState>(topics)\n}\n\nexport function useSwitchingDevices() {\n const switchingDevicesStore = useSwitchingDevicesStore()\n\n const getTopics = (portalId: PortalId) => ({\n devices: `N/${portalId}/switch/+/DeviceInstance`,\n })\n\n const mqtt = useMqtt()\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId])\n\n const messagesForSwitchingDevices = mqtt.messagesByWildcard(topics.devices)\n\n // Examine MQTT to find all available switching devices\n useEffect(() => {\n if (!messagesForSwitchingDevices || Object.entries(messagesForSwitchingDevices).length === 0) {\n Logger.log(\"Waiting for switching devices...\")\n } else {\n const deviceInstances = Object.values(messagesForSwitchingDevices) as SwitchingDeviceInstanceId[]\n const dispose = autorun(() => {\n const oldDevices = switchingDevicesStore.devices\n const newDevices = deviceInstances.map((deviceId) =>\n mqtt.messagesByTopics(getSwitchingDeviceStateTopics(mqtt.portalId, \"switch\", deviceId))\n ) as unknown as SwitchingDeviceInstanceId[]\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2) baby\n if (\n oldDevices.length === 0 ||\n oldDevices.length !== newDevices.length ||\n !newDevices.every((id) => deviceInstances.includes(id))\n ) {\n Logger.log(`New switching devices instances: ${JSON.stringify(deviceInstances)}`)\n switchingDevicesStore.setDevices(newDevices)\n }\n })\n return () => dispose()\n }\n }, [messagesForSwitchingDevices, mqtt, switchingDevicesStore])\n\n return switchingDevicesStore\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwitchingDevices.store.d.ts","sourceRoot":"/","sources":["src/Modules/SwitchingPane/SwitchingDevices.store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AAItE,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,yBAAyB,EAAE,CAAA;CACrC;AAED,qBAAa,qBAAqB;IAChC,OAAO,EAAE,yBAAyB,EAAE,CAAK;;IAMzC,UAAU,GAAI,SAAS,yBAAyB,EAAE,cAA6B;CAChF;AAYD,wBAAgB,wBAAwB,0BAEvC"}
@@ -1,9 +1,8 @@
1
1
  import { action, makeAutoObservable } from "mobx";
2
2
  import { useMemo } from "react";
3
- var store;
4
- var SwitchingDevicesStore = /** @class */ (function () {
5
- function SwitchingDevicesStore() {
6
- var _this = this;
3
+ let store;
4
+ export class SwitchingDevicesStore {
5
+ constructor() {
7
6
  Object.defineProperty(this, "devices", {
8
7
  enumerable: true,
9
8
  configurable: true,
@@ -14,15 +13,13 @@ var SwitchingDevicesStore = /** @class */ (function () {
14
13
  enumerable: true,
15
14
  configurable: true,
16
15
  writable: true,
17
- value: function (devices) { return (_this.devices = devices); }
16
+ value: (devices) => (this.devices = devices)
18
17
  });
19
18
  makeAutoObservable(this, { setDevices: action });
20
19
  }
21
- return SwitchingDevicesStore;
22
- }());
23
- export { SwitchingDevicesStore };
20
+ }
24
21
  function initializeStore() {
25
- var _store = store !== null && store !== void 0 ? store : new SwitchingDevicesStore();
22
+ const _store = store !== null && store !== void 0 ? store : new SwitchingDevicesStore();
26
23
  // For SSG and SSR always create a new store
27
24
  if (typeof window === "undefined")
28
25
  return _store;
@@ -32,6 +29,6 @@ function initializeStore() {
32
29
  return _store;
33
30
  }
34
31
  export function useSwitchingDevicesStore() {
35
- return useMemo(function () { return initializeStore(); }, []);
32
+ return useMemo(() => initializeStore(), []);
36
33
  }
37
34
  //# sourceMappingURL=SwitchingDevices.store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwitchingDevices.store.js","sourceRoot":"/","sources":["src/Modules/SwitchingPane/SwitchingDevices.store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAG/B,IAAI,KAA4B,CAAA;AAMhC,MAAM,OAAO,qBAAqB;IAGhC;QAFA;;;;mBAAuC,EAAE;WAAA;QAMzC;;;;mBAAa,CAAC,OAAoC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;WAAA;QAH7E,kBAAkB,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;IAClD,CAAC;CAGF;AAED,SAAS,eAAe;IACtB,MAAM,MAAM,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,IAAI,qBAAqB,EAAE,CAAA;IACnD,4CAA4C;IAC5C,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,MAAM,CAAA;IAChD,sCAAsC;IACtC,IAAI,CAAC,KAAK;QAAE,KAAK,GAAG,MAAM,CAAA;IAE1B,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,EAAE,EAAE,CAAC,CAAA;AAC7C,CAAC","sourcesContent":["import { action, makeAutoObservable } from \"mobx\"\nimport { useMemo } from \"react\"\nimport { SwitchingDeviceInstanceId } from \"./SwitchingDevice.provider\"\n\nlet store: SwitchingDevicesStore\n\nexport interface SwitchingDevicesState {\n devices: SwitchingDeviceInstanceId[]\n}\n\nexport class SwitchingDevicesStore {\n devices: SwitchingDeviceInstanceId[] = []\n\n constructor() {\n makeAutoObservable(this, { setDevices: action })\n }\n\n setDevices = (devices: SwitchingDeviceInstanceId[]) => (this.devices = devices)\n}\n\nfunction initializeStore() {\n const _store = store ?? new SwitchingDevicesStore()\n // For SSG and SSR always create a new store\n if (typeof window === \"undefined\") return _store\n // Create the store once in the client\n if (!store) store = _store\n\n return _store\n}\n\nexport function useSwitchingDevicesStore() {\n return useMemo(() => initializeStore(), [])\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const useSwitchingPane: (gxDeviceRelaysGroupName: string) => import("./SwitchingPane.store").SwitchingPaneStore;
2
+ //# sourceMappingURL=SwitchingPane.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwitchingPane.provider.d.ts","sourceRoot":"/","sources":["src/Modules/SwitchingPane/SwitchingPane.provider.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,gBAAgB,GAAI,yBAAyB,MAAM,uDAyR/D,CAAA"}
@@ -0,0 +1,256 @@
1
+ import { autorun } from "mobx";
2
+ import Logger from "../../utils/logger";
3
+ import { useMqtt } from "../Mqtt";
4
+ import { useMemo, useEffect } from "react";
5
+ import { useSwitchingPaneStore } from "./SwitchingPane.store";
6
+ import { getSwitchingDeviceStateTopics } from "./SwitchingDevice.provider";
7
+ import { getSwitchingPaneItemNameForDisplay, getSwitchableOutputStateTopics, SWITCHABLE_OUTPUT_TREES, } from "./SwitchableOutput.provider";
8
+ import { getGenericInputStateTopics } from "./GenericInput.provider";
9
+ import { remapGenericInputType, SWITCHABLE_OUTPUT_VISIBILITY } from "../../utils/constants";
10
+ const hasMessages = (messages) => messages && Object.keys(messages).length > 0;
11
+ export const useSwitchingPane = (gxDeviceRelaysGroupName) => {
12
+ const switchingPaneStore = useSwitchingPaneStore();
13
+ const getTopics = (portalId) => ({
14
+ switchableOutputs: `N/${portalId}/(${SWITCHABLE_OUTPUT_TREES.join("|")})/+/SwitchableOutput/+/Settings/+`,
15
+ genericInputs: `N/${portalId}/(${SWITCHABLE_OUTPUT_TREES.join("|")})/+/GenericInput/+/Settings/+`,
16
+ switchingDevices: `N/${portalId}/switch/+`,
17
+ });
18
+ const mqtt = useMqtt();
19
+ const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId]);
20
+ const messagesForSwitchableOutputs = mqtt.messagesByWildcard(topics.switchableOutputs);
21
+ const messagesForGenericInputs = mqtt.messagesByWildcard(topics.genericInputs);
22
+ const messagesForSwitchingDevices = mqtt.messagesByWildcard(topics.switchingDevices);
23
+ // Examine MQTT to find all available switchable outputs, generic inputs, and their group assignments
24
+ useEffect(() => {
25
+ if (!hasMessages(messagesForSwitchableOutputs) && !hasMessages(messagesForGenericInputs)) {
26
+ Logger.log("Waiting for switchable outputs or generic inputs...");
27
+ return;
28
+ }
29
+ // All switchable outputs in array sorted by topic
30
+ const availableSwitchableOutputs = messagesForSwitchableOutputs
31
+ ? Object.keys(messagesForSwitchableOutputs)
32
+ .filter((key) => key.endsWith("/Settings/Group"))
33
+ .sort()
34
+ : [];
35
+ // All switchable outputs group assignments in array sorted by topic
36
+ const customGroupAssigments = availableSwitchableOutputs.map((topic) => {
37
+ return messagesForSwitchableOutputs[topic];
38
+ });
39
+ // All switchable outputs types in array sorted by topic
40
+ const availableSwitchableOutputTypes = availableSwitchableOutputs.map((topic) => {
41
+ return messagesForSwitchableOutputs[`${topic.slice(0, -"/Group".length)}/Type`];
42
+ });
43
+ // All switchable outputs names in array sorted by topic
44
+ const availableSwitchableOutputNames = availableSwitchableOutputs.map((topic) => {
45
+ return messagesForSwitchableOutputs[`${topic.slice(0, -"/Group".length)}/CustomName`];
46
+ });
47
+ // All switchable outputs visibility in array sorted by topic
48
+ const availableSwitchableOutputVisibilityFlags = availableSwitchableOutputs.map((topic) => {
49
+ return messagesForSwitchableOutputs[`${topic.slice(0, -"/Group".length)}/ShowUIControl`];
50
+ });
51
+ // All generic inputs in array sorted by topic
52
+ const availableGenericInputs = messagesForGenericInputs
53
+ ? Object.keys(messagesForGenericInputs)
54
+ .filter((key) => key.endsWith("/Settings/Group"))
55
+ .sort()
56
+ : [];
57
+ // All generic input group assignments in array sorted by topic
58
+ const genericInputGroupAssignments = availableGenericInputs.map((topic) => {
59
+ return messagesForGenericInputs[topic];
60
+ });
61
+ // All generic input types in array sorted by topic
62
+ const availableGenericInputTypes = availableGenericInputs.map((topic) => {
63
+ return messagesForGenericInputs[`${topic.slice(0, -"/Group".length)}/Type`];
64
+ });
65
+ // All generic input names in array sorted by topic
66
+ const availableGenericInputNames = availableGenericInputs.map((topic) => {
67
+ return messagesForGenericInputs[`${topic.slice(0, -"/Group".length)}/CustomName`];
68
+ });
69
+ // All generic input visibility in array sorted by topic
70
+ const availableGenericInputVisibilityFlags = availableGenericInputs.map((topic) => {
71
+ return messagesForGenericInputs[`${topic.slice(0, -"/Group".length)}/ShowUIInput`];
72
+ });
73
+ // All switching devices in array sorted by instance number
74
+ const availableSwitchingDevices = Object.keys(messagesForSwitchingDevices)
75
+ .filter((key) => key.endsWith("/DeviceInstance"))
76
+ .sort();
77
+ // All switching device names in array sorted by instance number
78
+ const availableSwitchingDeviceNames = availableSwitchingDevices.map((topic) => {
79
+ const topicPrefix = topic.slice(0, -"/DeviceInstance".length);
80
+ return (messagesForSwitchingDevices[`${topicPrefix}/CustomName`] ||
81
+ messagesForSwitchingDevices[`${topicPrefix}/ProductName`]);
82
+ });
83
+ const dispose = autorun(() => {
84
+ const oldAssignments = switchingPaneStore.customGroupAssignments;
85
+ const newAssignments = customGroupAssigments;
86
+ const groupAssignmentsChanged = !arraysEqual(oldAssignments, newAssignments);
87
+ if (groupAssignmentsChanged) {
88
+ switchingPaneStore.setCustomGroupAssignments(newAssignments);
89
+ Logger.log(`Switchable outputs group assignments changed, recomputing...`);
90
+ }
91
+ const oldOutputTypes = switchingPaneStore.outputTypes;
92
+ const newOutputTypes = availableSwitchableOutputTypes;
93
+ const outputTypesChanged = !arraysEqual(oldOutputTypes, newOutputTypes);
94
+ if (outputTypesChanged) {
95
+ switchingPaneStore.setOutputTypes(newOutputTypes);
96
+ Logger.log(`Switchable outputs types changed, recomputing...`);
97
+ }
98
+ const oldOutputNames = switchingPaneStore.outputNames;
99
+ const newOutputNames = availableSwitchableOutputNames;
100
+ const outputNamesChanged = !arraysEqual(oldOutputNames, newOutputNames);
101
+ if (outputNamesChanged) {
102
+ switchingPaneStore.setOutputNames(newOutputNames);
103
+ Logger.log(`Switchable outputs names changed, recomputing...`);
104
+ }
105
+ const oldOutputVisibilityFlags = switchingPaneStore.outputVisibilityFlags;
106
+ const newOutputVisibilityFlags = availableSwitchableOutputVisibilityFlags;
107
+ const outputVisibilityFlagsChanged = !arraysEqual(oldOutputVisibilityFlags, newOutputVisibilityFlags);
108
+ if (outputVisibilityFlagsChanged) {
109
+ switchingPaneStore.setOutputVisibilityFlags(newOutputVisibilityFlags);
110
+ Logger.log(`Switchable outputs visibility flags changed, recomputing...`);
111
+ }
112
+ const oldSwitchingDevices = switchingPaneStore.switchingDevices;
113
+ const newSwitchingDevices = availableSwitchingDevices;
114
+ const switchingDevicesChanged = !arraysEqual(oldSwitchingDevices, newSwitchingDevices);
115
+ if (switchingDevicesChanged) {
116
+ switchingPaneStore.setSwitchingDevices(newSwitchingDevices);
117
+ Logger.log(`Switching devices changed, recomputing...`);
118
+ }
119
+ const oldSwitchingDeviceNames = switchingPaneStore.switchingDeviceNames;
120
+ const newSwitchingDeviceNames = availableSwitchingDeviceNames;
121
+ const switchingDeviceNamesChanged = !arraysEqual(oldSwitchingDeviceNames, newSwitchingDeviceNames);
122
+ if (switchingDeviceNamesChanged) {
123
+ switchingPaneStore.setSwitchingDeviceNames(newSwitchingDeviceNames);
124
+ Logger.log(`Switching device names changed, recomputing...`);
125
+ }
126
+ const oldGiAssignments = switchingPaneStore.genericInputGroupAssignments;
127
+ const newGiAssignments = genericInputGroupAssignments;
128
+ const giGroupAssignmentsChanged = !arraysEqual(oldGiAssignments, newGiAssignments);
129
+ if (giGroupAssignmentsChanged) {
130
+ switchingPaneStore.setGenericInputGroupAssignments(newGiAssignments);
131
+ Logger.log(`Generic input group assignments changed, recomputing...`);
132
+ }
133
+ const oldGiTypes = switchingPaneStore.genericInputTypes;
134
+ const newGiTypes = availableGenericInputTypes;
135
+ const giTypesChanged = !arraysEqual(oldGiTypes, newGiTypes);
136
+ if (giTypesChanged) {
137
+ switchingPaneStore.setGenericInputTypes(newGiTypes);
138
+ Logger.log(`Generic input types changed, recomputing...`);
139
+ }
140
+ const oldGiNames = switchingPaneStore.genericInputNames;
141
+ const newGiNames = availableGenericInputNames;
142
+ const giNamesChanged = !arraysEqual(oldGiNames, newGiNames);
143
+ if (giNamesChanged) {
144
+ switchingPaneStore.setGenericInputNames(newGiNames);
145
+ Logger.log(`Generic input names changed, recomputing...`);
146
+ }
147
+ const oldGiVisibilityFlags = switchingPaneStore.genericInputVisibilityFlags;
148
+ const newGiVisibilityFlags = availableGenericInputVisibilityFlags;
149
+ const giVisibilityFlagsChanged = !arraysEqual(oldGiVisibilityFlags, newGiVisibilityFlags);
150
+ if (giVisibilityFlagsChanged) {
151
+ switchingPaneStore.setGenericInputVisibilityFlags(newGiVisibilityFlags);
152
+ Logger.log(`Generic input visibility flags changed, recomputing...`);
153
+ }
154
+ if (groupAssignmentsChanged ||
155
+ outputTypesChanged ||
156
+ outputNamesChanged ||
157
+ outputVisibilityFlagsChanged ||
158
+ switchingDevicesChanged ||
159
+ switchingDeviceNamesChanged ||
160
+ giGroupAssignmentsChanged ||
161
+ giTypesChanged ||
162
+ giNamesChanged ||
163
+ giVisibilityFlagsChanged) {
164
+ // Collect all switching pane items (switchable outputs + generic inputs) with their group info
165
+ const items = [];
166
+ availableSwitchableOutputs.forEach((output, index) => {
167
+ const swo = extractSwitchableOutputInfo(output);
168
+ const switchingDevice = mqtt.messagesByTopics(getSwitchingDeviceStateTopics(mqtt.portalId, swo.tree, swo.deviceId));
169
+ const customGroupAssignment = customGroupAssigments[index].trim();
170
+ const deviceName = switchingDevice.customName || switchingDevice.productName || gxDeviceRelaysGroupName;
171
+ const groupName = customGroupAssignment === "" ? deviceName : customGroupAssignment;
172
+ const switchableOutput = mqtt.messagesByTopics(getSwitchableOutputStateTopics(mqtt.portalId, swo.tree, swo.deviceId, swo.outputId));
173
+ if (!(switchableOutput.showUIControl & SWITCHABLE_OUTPUT_VISIBILITY.VISIBLE ||
174
+ switchableOutput.showUIControl & SWITCHABLE_OUTPUT_VISIBILITY.VISIBLE_LOCAL_UI)) {
175
+ return;
176
+ }
177
+ items.push({
178
+ groupName,
179
+ item: Object.assign(Object.assign({}, switchableOutput), { kind: "switchableOutput", tree: swo.tree, deviceId: swo.deviceId, outputId: swo.outputId, parentDeviceName: deviceName }),
180
+ });
181
+ });
182
+ availableGenericInputs.forEach((input, index) => {
183
+ const gi = extractGenericInputInfo(input);
184
+ const switchingDevice = mqtt.messagesByTopics(getSwitchingDeviceStateTopics(mqtt.portalId, gi.tree, gi.deviceId));
185
+ const customGroupAssignment = genericInputGroupAssignments[index].trim();
186
+ const deviceName = switchingDevice.customName || switchingDevice.productName || gxDeviceRelaysGroupName;
187
+ const groupName = customGroupAssignment === "" ? deviceName : customGroupAssignment;
188
+ const genericInput = mqtt.messagesByTopics(getGenericInputStateTopics(mqtt.portalId, gi.tree, gi.deviceId, gi.inputId));
189
+ if (!(genericInput.showUIControl & SWITCHABLE_OUTPUT_VISIBILITY.VISIBLE ||
190
+ genericInput.showUIControl & SWITCHABLE_OUTPUT_VISIBILITY.VISIBLE_LOCAL_UI)) {
191
+ return;
192
+ }
193
+ items.push({
194
+ groupName,
195
+ item: Object.assign(Object.assign({}, genericInput), { kind: "genericInput", tree: gi.tree, deviceId: gi.deviceId, outputId: gi.inputId, parentDeviceName: deviceName, type: remapGenericInputType(genericInput.type) }),
196
+ });
197
+ });
198
+ // Distribute items to groups
199
+ const newGroups = {};
200
+ items.forEach(({ groupName, item }) => {
201
+ newGroups[groupName] || (newGroups[groupName] = []);
202
+ newGroups[groupName].push(item);
203
+ });
204
+ // Sort items in each group by display name
205
+ Object.values(newGroups).forEach((array) => {
206
+ array.sort((a, b) => {
207
+ const aName = getSwitchingPaneItemNameForDisplay(a, a.parentDeviceName);
208
+ const bName = getSwitchingPaneItemNameForDisplay(b, b.parentDeviceName);
209
+ return aName.localeCompare(bName);
210
+ });
211
+ });
212
+ Logger.log(`New switching pane groups: ${JSON.stringify(Object.keys(newGroups))}`);
213
+ switchingPaneStore.setGroups(newGroups);
214
+ }
215
+ });
216
+ return () => dispose();
217
+ }, [
218
+ messagesForSwitchableOutputs,
219
+ messagesForGenericInputs,
220
+ messagesForSwitchingDevices,
221
+ gxDeviceRelaysGroupName,
222
+ mqtt,
223
+ switchingPaneStore,
224
+ ]);
225
+ return switchingPaneStore;
226
+ };
227
+ function extractSwitchableOutputInfo(topic) {
228
+ var _a;
229
+ const pattern = new RegExp(`/(${SWITCHABLE_OUTPUT_TREES.join("|")})/`);
230
+ const match = topic.match(pattern);
231
+ const switchStart = match ? match.index + match[0].length : -1; // length of `/system/`, or `/switch/`, or ...
232
+ const outputStart = topic.indexOf("/SwitchableOutput/") + 18; // length of `/SwitchableOutput/`
233
+ return {
234
+ tree: (_a = match === null || match === void 0 ? void 0 : match[1]) !== null && _a !== void 0 ? _a : null, // "switch", "system", ...
235
+ deviceId: Number(topic.substring(switchStart, topic.indexOf("/", switchStart))),
236
+ outputId: topic.substring(outputStart, topic.indexOf("/", outputStart)),
237
+ };
238
+ }
239
+ function extractGenericInputInfo(topic) {
240
+ var _a;
241
+ const pattern = new RegExp(`/(${SWITCHABLE_OUTPUT_TREES.join("|")})/`);
242
+ const match = topic.match(pattern);
243
+ const treeEnd = match ? match.index + match[0].length : -1;
244
+ const inputStart = topic.indexOf("/GenericInput/") + 14; // length of `/GenericInput/`
245
+ return {
246
+ tree: (_a = match === null || match === void 0 ? void 0 : match[1]) !== null && _a !== void 0 ? _a : null,
247
+ deviceId: Number(topic.substring(treeEnd, topic.indexOf("/", treeEnd))),
248
+ inputId: topic.substring(inputStart, topic.indexOf("/", inputStart)),
249
+ };
250
+ }
251
+ function arraysEqual(a, b) {
252
+ if (a.length !== b.length)
253
+ return false;
254
+ return a.every((element, index) => b[index] === element);
255
+ }
256
+ //# sourceMappingURL=SwitchingPane.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwitchingPane.provider.js","sourceRoot":"/","sources":["src/Modules/SwitchingPane/SwitchingPane.provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { autorun } from \"mobx\"\nimport Logger from \"../../utils/logger\"\nimport { PortalId, useMqtt } from \"../Mqtt\"\nimport { useMemo, useEffect } from \"react\"\nimport { useSwitchingPaneStore } from \"./SwitchingPane.store\"\nimport { getSwitchingDeviceStateTopics, SwitchingDeviceInstanceId } from \"./SwitchingDevice.provider\"\nimport {\n getSwitchingPaneItemNameForDisplay,\n getSwitchableOutputStateTopics,\n SWITCHABLE_OUTPUT_TREES,\n SwitchableOutputId,\n SwitchableOutputState,\n SwitchableOutputTree,\n GenericInputState,\n SwitchingPaneItem,\n} from \"./SwitchableOutput.provider\"\nimport { getGenericInputStateTopics, GenericInputId } from \"./GenericInput.provider\"\nimport { remapGenericInputType, SWITCHABLE_OUTPUT_VISIBILITY } from \"../../utils/constants\"\n\nconst hasMessages = (messages: Record<string, string> | undefined) => messages && Object.keys(messages).length > 0\n\nexport const useSwitchingPane = (gxDeviceRelaysGroupName: string) => {\n const switchingPaneStore = useSwitchingPaneStore()\n\n const getTopics = (portalId: PortalId) => ({\n switchableOutputs: `N/${portalId}/(${SWITCHABLE_OUTPUT_TREES.join(\"|\")})/+/SwitchableOutput/+/Settings/+`,\n genericInputs: `N/${portalId}/(${SWITCHABLE_OUTPUT_TREES.join(\"|\")})/+/GenericInput/+/Settings/+`,\n switchingDevices: `N/${portalId}/switch/+`,\n })\n\n const mqtt = useMqtt()\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId])\n\n const messagesForSwitchableOutputs = mqtt.messagesByWildcard(topics.switchableOutputs)\n const messagesForGenericInputs = mqtt.messagesByWildcard(topics.genericInputs)\n const messagesForSwitchingDevices = mqtt.messagesByWildcard(topics.switchingDevices)\n\n // Examine MQTT to find all available switchable outputs, generic inputs, and their group assignments\n useEffect(() => {\n if (!hasMessages(messagesForSwitchableOutputs) && !hasMessages(messagesForGenericInputs)) {\n Logger.log(\"Waiting for switchable outputs or generic inputs...\")\n return\n }\n\n // All switchable outputs in array sorted by topic\n const availableSwitchableOutputs = messagesForSwitchableOutputs\n ? (Object.keys(messagesForSwitchableOutputs)\n .filter((key) => key.endsWith(\"/Settings/Group\"))\n .sort() as string[])\n : []\n\n // All switchable outputs group assignments in array sorted by topic\n const customGroupAssigments = availableSwitchableOutputs.map((topic) => {\n return messagesForSwitchableOutputs[topic]\n })\n // All switchable outputs types in array sorted by topic\n const availableSwitchableOutputTypes = availableSwitchableOutputs.map((topic) => {\n return messagesForSwitchableOutputs[`${topic.slice(0, -\"/Group\".length)}/Type`]\n })\n // All switchable outputs names in array sorted by topic\n const availableSwitchableOutputNames = availableSwitchableOutputs.map((topic) => {\n return messagesForSwitchableOutputs[`${topic.slice(0, -\"/Group\".length)}/CustomName`]\n })\n // All switchable outputs visibility in array sorted by topic\n const availableSwitchableOutputVisibilityFlags = availableSwitchableOutputs.map((topic) => {\n return messagesForSwitchableOutputs[`${topic.slice(0, -\"/Group\".length)}/ShowUIControl`]\n })\n\n // All generic inputs in array sorted by topic\n const availableGenericInputs = messagesForGenericInputs\n ? (Object.keys(messagesForGenericInputs)\n .filter((key) => key.endsWith(\"/Settings/Group\"))\n .sort() as string[])\n : []\n\n // All generic input group assignments in array sorted by topic\n const genericInputGroupAssignments = availableGenericInputs.map((topic) => {\n return messagesForGenericInputs[topic]\n })\n // All generic input types in array sorted by topic\n const availableGenericInputTypes = availableGenericInputs.map((topic) => {\n return messagesForGenericInputs[`${topic.slice(0, -\"/Group\".length)}/Type`]\n })\n // All generic input names in array sorted by topic\n const availableGenericInputNames = availableGenericInputs.map((topic) => {\n return messagesForGenericInputs[`${topic.slice(0, -\"/Group\".length)}/CustomName`]\n })\n // All generic input visibility in array sorted by topic\n const availableGenericInputVisibilityFlags = availableGenericInputs.map((topic) => {\n return messagesForGenericInputs[`${topic.slice(0, -\"/Group\".length)}/ShowUIInput`]\n })\n\n // All switching devices in array sorted by instance number\n const availableSwitchingDevices = Object.keys(messagesForSwitchingDevices)\n .filter((key) => key.endsWith(\"/DeviceInstance\"))\n .sort() as string[]\n\n // All switching device names in array sorted by instance number\n const availableSwitchingDeviceNames = availableSwitchingDevices.map((topic) => {\n const topicPrefix = topic.slice(0, -\"/DeviceInstance\".length)\n return (\n messagesForSwitchingDevices[`${topicPrefix}/CustomName`] ||\n messagesForSwitchingDevices[`${topicPrefix}/ProductName`]\n )\n })\n\n const dispose = autorun(() => {\n const oldAssignments = switchingPaneStore.customGroupAssignments\n const newAssignments = customGroupAssigments\n const groupAssignmentsChanged = !arraysEqual(oldAssignments, newAssignments)\n if (groupAssignmentsChanged) {\n switchingPaneStore.setCustomGroupAssignments(newAssignments)\n Logger.log(`Switchable outputs group assignments changed, recomputing...`)\n }\n\n const oldOutputTypes = switchingPaneStore.outputTypes\n const newOutputTypes = availableSwitchableOutputTypes\n const outputTypesChanged = !arraysEqual(oldOutputTypes, newOutputTypes)\n if (outputTypesChanged) {\n switchingPaneStore.setOutputTypes(newOutputTypes)\n Logger.log(`Switchable outputs types changed, recomputing...`)\n }\n\n const oldOutputNames = switchingPaneStore.outputNames\n const newOutputNames = availableSwitchableOutputNames\n const outputNamesChanged = !arraysEqual(oldOutputNames, newOutputNames)\n if (outputNamesChanged) {\n switchingPaneStore.setOutputNames(newOutputNames)\n Logger.log(`Switchable outputs names changed, recomputing...`)\n }\n\n const oldOutputVisibilityFlags = switchingPaneStore.outputVisibilityFlags\n const newOutputVisibilityFlags = availableSwitchableOutputVisibilityFlags\n const outputVisibilityFlagsChanged = !arraysEqual(oldOutputVisibilityFlags, newOutputVisibilityFlags)\n if (outputVisibilityFlagsChanged) {\n switchingPaneStore.setOutputVisibilityFlags(newOutputVisibilityFlags)\n Logger.log(`Switchable outputs visibility flags changed, recomputing...`)\n }\n\n const oldSwitchingDevices = switchingPaneStore.switchingDevices\n const newSwitchingDevices = availableSwitchingDevices\n const switchingDevicesChanged = !arraysEqual(oldSwitchingDevices, newSwitchingDevices)\n if (switchingDevicesChanged) {\n switchingPaneStore.setSwitchingDevices(newSwitchingDevices)\n Logger.log(`Switching devices changed, recomputing...`)\n }\n\n const oldSwitchingDeviceNames = switchingPaneStore.switchingDeviceNames\n const newSwitchingDeviceNames = availableSwitchingDeviceNames\n const switchingDeviceNamesChanged = !arraysEqual(oldSwitchingDeviceNames, newSwitchingDeviceNames)\n if (switchingDeviceNamesChanged) {\n switchingPaneStore.setSwitchingDeviceNames(newSwitchingDeviceNames)\n Logger.log(`Switching device names changed, recomputing...`)\n }\n\n const oldGiAssignments = switchingPaneStore.genericInputGroupAssignments\n const newGiAssignments = genericInputGroupAssignments\n const giGroupAssignmentsChanged = !arraysEqual(oldGiAssignments, newGiAssignments)\n if (giGroupAssignmentsChanged) {\n switchingPaneStore.setGenericInputGroupAssignments(newGiAssignments)\n Logger.log(`Generic input group assignments changed, recomputing...`)\n }\n\n const oldGiTypes = switchingPaneStore.genericInputTypes\n const newGiTypes = availableGenericInputTypes\n const giTypesChanged = !arraysEqual(oldGiTypes, newGiTypes)\n if (giTypesChanged) {\n switchingPaneStore.setGenericInputTypes(newGiTypes)\n Logger.log(`Generic input types changed, recomputing...`)\n }\n\n const oldGiNames = switchingPaneStore.genericInputNames\n const newGiNames = availableGenericInputNames\n const giNamesChanged = !arraysEqual(oldGiNames, newGiNames)\n if (giNamesChanged) {\n switchingPaneStore.setGenericInputNames(newGiNames)\n Logger.log(`Generic input names changed, recomputing...`)\n }\n\n const oldGiVisibilityFlags = switchingPaneStore.genericInputVisibilityFlags\n const newGiVisibilityFlags = availableGenericInputVisibilityFlags\n const giVisibilityFlagsChanged = !arraysEqual(oldGiVisibilityFlags, newGiVisibilityFlags)\n if (giVisibilityFlagsChanged) {\n switchingPaneStore.setGenericInputVisibilityFlags(newGiVisibilityFlags)\n Logger.log(`Generic input visibility flags changed, recomputing...`)\n }\n\n if (\n groupAssignmentsChanged ||\n outputTypesChanged ||\n outputNamesChanged ||\n outputVisibilityFlagsChanged ||\n switchingDevicesChanged ||\n switchingDeviceNamesChanged ||\n giGroupAssignmentsChanged ||\n giTypesChanged ||\n giNamesChanged ||\n giVisibilityFlagsChanged\n ) {\n // Collect all switching pane items (switchable outputs + generic inputs) with their group info\n const items: { groupName: string; item: SwitchingPaneItem }[] = []\n\n availableSwitchableOutputs.forEach((output, index) => {\n const swo = extractSwitchableOutputInfo(output)\n const switchingDevice = mqtt.messagesByTopics(\n getSwitchingDeviceStateTopics(mqtt.portalId, swo.tree, swo.deviceId)\n )\n const customGroupAssignment = customGroupAssigments[index].trim()\n const deviceName = switchingDevice.customName || switchingDevice.productName || gxDeviceRelaysGroupName\n const groupName = customGroupAssignment === \"\" ? deviceName : customGroupAssignment\n const switchableOutput = mqtt.messagesByTopics(\n getSwitchableOutputStateTopics(mqtt.portalId, swo.tree, swo.deviceId, swo.outputId)\n ) as unknown as SwitchableOutputState\n\n if (\n !(\n switchableOutput.showUIControl & SWITCHABLE_OUTPUT_VISIBILITY.VISIBLE ||\n switchableOutput.showUIControl & SWITCHABLE_OUTPUT_VISIBILITY.VISIBLE_LOCAL_UI\n )\n ) {\n return\n }\n\n items.push({\n groupName,\n item: {\n ...switchableOutput,\n kind: \"switchableOutput\",\n tree: swo.tree,\n deviceId: swo.deviceId,\n outputId: swo.outputId,\n parentDeviceName: deviceName as string,\n },\n })\n })\n\n availableGenericInputs.forEach((input, index) => {\n const gi = extractGenericInputInfo(input)\n const switchingDevice = mqtt.messagesByTopics(\n getSwitchingDeviceStateTopics(mqtt.portalId, gi.tree, gi.deviceId)\n )\n const customGroupAssignment = genericInputGroupAssignments[index].trim()\n const deviceName = switchingDevice.customName || switchingDevice.productName || gxDeviceRelaysGroupName\n const groupName = customGroupAssignment === \"\" ? deviceName : customGroupAssignment\n const genericInput = mqtt.messagesByTopics(\n getGenericInputStateTopics(mqtt.portalId, gi.tree, gi.deviceId, gi.inputId)\n ) as unknown as GenericInputState\n\n if (\n !(\n genericInput.showUIControl & SWITCHABLE_OUTPUT_VISIBILITY.VISIBLE ||\n genericInput.showUIControl & SWITCHABLE_OUTPUT_VISIBILITY.VISIBLE_LOCAL_UI\n )\n ) {\n return\n }\n\n items.push({\n groupName,\n item: {\n ...genericInput,\n kind: \"genericInput\",\n tree: gi.tree,\n deviceId: gi.deviceId,\n outputId: gi.inputId,\n parentDeviceName: deviceName as string,\n type: remapGenericInputType(genericInput.type as number),\n },\n })\n })\n\n // Distribute items to groups\n const newGroups: { [key: string]: SwitchingPaneItem[] } = {}\n items.forEach(({ groupName, item }) => {\n newGroups[groupName] ||= []\n newGroups[groupName].push(item)\n })\n\n // Sort items in each group by display name\n Object.values(newGroups).forEach((array) => {\n array.sort((a, b) => {\n const aName = getSwitchingPaneItemNameForDisplay(a, a.parentDeviceName)\n const bName = getSwitchingPaneItemNameForDisplay(b, b.parentDeviceName)\n return aName.localeCompare(bName)\n })\n })\n\n Logger.log(`New switching pane groups: ${JSON.stringify(Object.keys(newGroups))}`)\n switchingPaneStore.setGroups(newGroups)\n }\n })\n return () => dispose()\n }, [\n messagesForSwitchableOutputs,\n messagesForGenericInputs,\n messagesForSwitchingDevices,\n gxDeviceRelaysGroupName,\n mqtt,\n switchingPaneStore,\n ])\n\n return switchingPaneStore\n}\n\nfunction extractSwitchableOutputInfo(topic: string) {\n const pattern = new RegExp(`/(${SWITCHABLE_OUTPUT_TREES.join(\"|\")})/`)\n const match = topic.match(pattern)\n const switchStart = match ? match.index! + match[0].length : -1 // length of `/system/`, or `/switch/`, or ...\n const outputStart = topic.indexOf(\"/SwitchableOutput/\") + 18 // length of `/SwitchableOutput/`\n\n return {\n tree: (match?.[1] as SwitchableOutputTree) ?? null, // \"switch\", \"system\", ...\n deviceId: Number(topic.substring(switchStart, topic.indexOf(\"/\", switchStart))) as SwitchingDeviceInstanceId,\n outputId: topic.substring(outputStart, topic.indexOf(\"/\", outputStart)) as SwitchableOutputId,\n }\n}\n\nfunction extractGenericInputInfo(topic: string) {\n const pattern = new RegExp(`/(${SWITCHABLE_OUTPUT_TREES.join(\"|\")})/`)\n const match = topic.match(pattern)\n const treeEnd = match ? match.index! + match[0].length : -1\n const inputStart = topic.indexOf(\"/GenericInput/\") + 14 // length of `/GenericInput/`\n\n return {\n tree: (match?.[1] as SwitchableOutputTree) ?? null,\n deviceId: Number(topic.substring(treeEnd, topic.indexOf(\"/\", treeEnd))) as SwitchingDeviceInstanceId,\n inputId: topic.substring(inputStart, topic.indexOf(\"/\", inputStart)) as GenericInputId,\n }\n}\n\nfunction arraysEqual<T>(a: T[], b: T[]): boolean {\n if (a.length !== b.length) return false\n return a.every((element, index) => b[index] === element)\n}\n"]}
@@ -0,0 +1,50 @@
1
+ import { SwitchingPaneItem } from "./SwitchableOutput.provider";
2
+ import { GenericInputType, SwitchableOutputType } from "../../utils/constants";
3
+ export interface SwitchingPaneState {
4
+ groups: {
5
+ [key: string]: SwitchingPaneItem[];
6
+ };
7
+ customGroupAssignments: string[];
8
+ outputTypes: SwitchableOutputType[];
9
+ outputNames: string[];
10
+ outputVisibilityFlags: (0 | 1)[];
11
+ switchingDevices: string[];
12
+ switchingDeviceNames: string[];
13
+ genericInputGroupAssignments: string[];
14
+ genericInputTypes: GenericInputType[];
15
+ genericInputNames: string[];
16
+ genericInputVisibilityFlags: (0 | 1)[];
17
+ }
18
+ export declare class SwitchingPaneStore {
19
+ groups: {
20
+ [key: string]: SwitchingPaneItem[];
21
+ };
22
+ customGroupAssignments: string[];
23
+ outputTypes: SwitchableOutputType[];
24
+ outputNames: string[];
25
+ outputVisibilityFlags: (0 | 1)[];
26
+ switchingDevices: string[];
27
+ switchingDeviceNames: string[];
28
+ genericInputGroupAssignments: string[];
29
+ genericInputTypes: GenericInputType[];
30
+ genericInputNames: string[];
31
+ genericInputVisibilityFlags: (0 | 1)[];
32
+ constructor();
33
+ setGroups: (groups: {
34
+ [key: string]: SwitchingPaneItem[];
35
+ }) => {
36
+ [key: string]: SwitchingPaneItem[];
37
+ };
38
+ setCustomGroupAssignments: (assignments: string[]) => string[];
39
+ setOutputTypes: (outputTypes: SwitchableOutputType[]) => SwitchableOutputType[];
40
+ setOutputNames: (outputNames: string[]) => string[];
41
+ setOutputVisibilityFlags: (outputVisibilityFlags: (0 | 1)[]) => (0 | 1)[];
42
+ setSwitchingDevices: (switchingDevices: string[]) => string[];
43
+ setSwitchingDeviceNames: (switchingDeviceNames: string[]) => string[];
44
+ setGenericInputGroupAssignments: (assignments: string[]) => string[];
45
+ setGenericInputTypes: (types: GenericInputType[]) => GenericInputType[];
46
+ setGenericInputNames: (names: string[]) => string[];
47
+ setGenericInputVisibilityFlags: (flags: (0 | 1)[]) => (0 | 1)[];
48
+ }
49
+ export declare function useSwitchingPaneStore(): SwitchingPaneStore;
50
+ //# sourceMappingURL=SwitchingPane.store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwitchingPane.store.d.ts","sourceRoot":"/","sources":["src/Modules/SwitchingPane/SwitchingPane.store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAI9E,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAA;KAAE,CAAA;IAE9C,sBAAsB,EAAE,MAAM,EAAE,CAAA;IAEhC,WAAW,EAAE,oBAAoB,EAAE,CAAA;IAEnC,WAAW,EAAE,MAAM,EAAE,CAAA;IAErB,qBAAqB,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAA;IAEhC,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAE1B,oBAAoB,EAAE,MAAM,EAAE,CAAA;IAE9B,4BAA4B,EAAE,MAAM,EAAE,CAAA;IAEtC,iBAAiB,EAAE,gBAAgB,EAAE,CAAA;IAErC,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAE3B,2BAA2B,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAA;CACvC;AAED,qBAAa,kBAAkB;IAC7B,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAA;KAAE,CAAK;IACnD,sBAAsB,EAAE,MAAM,EAAE,CAAK;IACrC,WAAW,EAAE,oBAAoB,EAAE,CAAK;IACxC,WAAW,EAAE,MAAM,EAAE,CAAK;IAC1B,qBAAqB,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAK;IACrC,gBAAgB,EAAE,MAAM,EAAE,CAAK;IAC/B,oBAAoB,EAAE,MAAM,EAAE,CAAK;IACnC,4BAA4B,EAAE,MAAM,EAAE,CAAK;IAC3C,iBAAiB,EAAE,gBAAgB,EAAE,CAAK;IAC1C,iBAAiB,EAAE,MAAM,EAAE,CAAK;IAChC,2BAA2B,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAK;;IAiB3C,SAAS,GAAI,QAAQ;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAA;KAAE;;MAA2B;IACtF,yBAAyB,GAAI,aAAa,MAAM,EAAE,cAAgD;IAClG,cAAc,GAAI,aAAa,oBAAoB,EAAE,4BAAqC;IAC1F,cAAc,GAAI,aAAa,MAAM,EAAE,cAAqC;IAC5E,wBAAwB,GAAI,uBAAuB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,eAAyD;IACrH,mBAAmB,GAAI,kBAAkB,MAAM,EAAE,cAA+C;IAChG,uBAAuB,GAAI,sBAAsB,MAAM,EAAE,cAAuD;IAChH,+BAA+B,GAAI,aAAa,MAAM,EAAE,cAAsD;IAC9G,oBAAoB,GAAI,OAAO,gBAAgB,EAAE,wBAAqC;IACtF,oBAAoB,GAAI,OAAO,MAAM,EAAE,cAAqC;IAC5E,8BAA8B,GAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,eAA+C;CAClG;AAYD,wBAAgB,qBAAqB,uBAEpC"}