@victronenergy/mfd-modules 10.4.2 → 11.1.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 (234) 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 +28 -9
  114. package/dist/src/Modules/SwitchingPane/SwitchableOutput.provider.d.ts.map +1 -0
  115. package/dist/src/Modules/SwitchingPane/SwitchableOutput.provider.js +59 -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 +274 -0
  126. package/dist/src/Modules/SwitchingPane/SwitchingPane.provider.js.map +1 -0
  127. package/dist/src/Modules/SwitchingPane/SwitchingPane.store.d.ts +53 -0
  128. package/dist/src/Modules/SwitchingPane/SwitchingPane.store.d.ts.map +1 -0
  129. package/dist/src/Modules/SwitchingPane/SwitchingPane.store.js +178 -0
  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 +57 -3
  187. package/dist/src/utils/constants.d.ts.map +1 -1
  188. package/dist/src/utils/constants.js +86 -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 +0 -116
  223. package/dist/src/Modules/SwitchableOutputs/SwitchableOutputs.store.js.map +0 -1
  224. package/dist/src/Modules/SwitchableOutputs/SwitchingDevice.provider.d.ts.map +0 -1
  225. package/dist/src/Modules/SwitchableOutputs/SwitchingDevice.provider.js +0 -50
  226. package/dist/src/Modules/SwitchableOutputs/SwitchingDevice.provider.js.map +0 -1
  227. package/dist/src/Modules/SwitchableOutputs/SwitchingDevices.store.d.ts.map +0 -1
  228. package/dist/src/Modules/SwitchableOutputs/SwitchingDevices.store.js.map +0 -1
  229. package/dist/src/Modules/SwitchableOutputs/index.d.ts +0 -6
  230. package/dist/src/Modules/SwitchableOutputs/index.d.ts.map +0 -1
  231. package/dist/src/Modules/SwitchableOutputs/index.js +0 -6
  232. package/dist/src/Modules/SwitchableOutputs/index.js.map +0 -1
  233. /package/dist/src/Modules/{SwitchableOutputs → SwitchingPane}/SwitchingDevice.provider.d.ts +0 -0
  234. /package/dist/src/Modules/{SwitchableOutputs → SwitchingPane}/SwitchingDevices.store.d.ts +0 -0
@@ -1,168 +0,0 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- import { autorun } from "mobx";
13
- import Logger from "../../utils/logger";
14
- import { useMqtt } from "../Mqtt";
15
- import { useMemo, useEffect } from "react";
16
- import { useSwitchableOutputsStore } from "./SwitchableOutputs.store";
17
- import { getSwitchingDeviceStateTopics } from "./SwitchingDevice.provider";
18
- import { getSwitchableOutputNameForDisplay, getSwitchableOutputStateTopics, SWITCHABLE_OUTPUT_TREES, } from "./SwitchableOutput.provider";
19
- import { SWITCHABLE_OUTPUT_VISIBILITY } from "../../utils/constants";
20
- export var useSwitchableOutputs = function (gxDeviceRelaysGroupName) {
21
- var switchableOutputsStore = useSwitchableOutputsStore();
22
- var getTopics = function (portalId) { return ({
23
- switchableOutputs: "N/".concat(portalId, "/(").concat(SWITCHABLE_OUTPUT_TREES.join("|"), ")/+/SwitchableOutput/+/Settings/+"),
24
- switchingDevices: "N/".concat(portalId, "/switch/+"),
25
- }); };
26
- var mqtt = useMqtt();
27
- var topics = useMemo(function () { return getTopics(mqtt.portalId); }, [mqtt.portalId]);
28
- var messagesForSwitchableOutputs = mqtt.messagesByWildcard(topics.switchableOutputs);
29
- var messagesForSwitchingDevices = mqtt.messagesByWildcard(topics.switchingDevices);
30
- // Examine MQTT to find all available switchable outputs and their group assignments
31
- useEffect(function () {
32
- if (!messagesForSwitchableOutputs || Object.entries(messagesForSwitchableOutputs).length === 0) {
33
- Logger.log("Waiting for switchable outputs...");
34
- }
35
- else {
36
- // All switchable outputs in array sorted by topic
37
- var availableSwitchableOutputs_1 = Object.keys(messagesForSwitchableOutputs)
38
- .filter(function (key) { return key.endsWith("/Settings/Group"); })
39
- .sort();
40
- // All switchable outputs group assignments in array sorted by topic
41
- var customGroupAssigments_1 = availableSwitchableOutputs_1.map(function (topic) {
42
- return messagesForSwitchableOutputs[topic];
43
- });
44
- // All switchable outputs types in array sorted by topic
45
- var availableSwitchableOutputTypes_1 = availableSwitchableOutputs_1.map(function (topic) {
46
- return messagesForSwitchableOutputs["".concat(topic.slice(0, -"/Group".length), "/Type")];
47
- });
48
- // All switchable outputs names in array sorted by topic
49
- var availableSwitchableOutputNames_1 = availableSwitchableOutputs_1.map(function (topic) {
50
- return messagesForSwitchableOutputs["".concat(topic.slice(0, -"/Group".length), "/CustomName")];
51
- });
52
- // All switchable outputs visibility in array sorted by topic
53
- var availableSwitchableOutputVisibilityFlags_1 = availableSwitchableOutputs_1.map(function (topic) {
54
- return messagesForSwitchableOutputs["".concat(topic.slice(0, -"/Group".length), "/ShowUIControl")];
55
- });
56
- // All switching devices in array sorted by instance number
57
- var availableSwitchingDevices_1 = Object.keys(messagesForSwitchingDevices)
58
- .filter(function (key) { return key.endsWith("/DeviceInstance"); })
59
- .sort();
60
- // All switching device names in array sorted by instance number
61
- var availableSwitchingDeviceNames_1 = availableSwitchingDevices_1.map(function (topic) {
62
- var topicPrefix = topic.slice(0, -"/DeviceInstance".length);
63
- return (messagesForSwitchingDevices["".concat(topicPrefix, "/CustomName")] ||
64
- messagesForSwitchingDevices["".concat(topicPrefix, "/ProductName")]);
65
- });
66
- var dispose_1 = autorun(function () {
67
- var oldAssignments = switchableOutputsStore.customGroupAssignments;
68
- var newAssignments = customGroupAssigments_1;
69
- var groupAssignmentsChanged = !arraysEqual(oldAssignments, newAssignments);
70
- if (groupAssignmentsChanged) {
71
- switchableOutputsStore.setCustomGroupAssignments(newAssignments);
72
- Logger.log("Switchable outputs group assignments changed, recomputing...");
73
- }
74
- var oldOutputTypes = switchableOutputsStore.outputTypes;
75
- var newOutputTypes = availableSwitchableOutputTypes_1;
76
- var outputTypesChanged = !arraysEqual(oldOutputTypes, newOutputTypes);
77
- if (outputTypesChanged) {
78
- switchableOutputsStore.setOutputTypes(newOutputTypes);
79
- Logger.log("Switchable outputs types changed, recomputing...");
80
- }
81
- var oldOutputNames = switchableOutputsStore.outputNames;
82
- var newOutputNames = availableSwitchableOutputNames_1;
83
- var outputNamesChanged = !arraysEqual(oldOutputNames, newOutputNames);
84
- if (outputNamesChanged) {
85
- switchableOutputsStore.setOutputNames(newOutputNames);
86
- Logger.log("Switchable outputs names changed, recomputing...");
87
- }
88
- var oldOutputVisibilityFlags = switchableOutputsStore.outputVisibilityFlags;
89
- var newOutputVisibilityFlags = availableSwitchableOutputVisibilityFlags_1;
90
- var outputVisibilityFlagsChanged = !arraysEqual(oldOutputVisibilityFlags, newOutputVisibilityFlags);
91
- if (outputVisibilityFlagsChanged) {
92
- switchableOutputsStore.setOutputVisibilityFlags(newOutputVisibilityFlags);
93
- Logger.log("Switchable outputs visibility flags changed, recomputing...");
94
- }
95
- var oldSwitchingDevices = switchableOutputsStore.switchingDevices;
96
- var newSwitchingDevices = availableSwitchingDevices_1;
97
- var switchingDevicesChanged = !arraysEqual(oldSwitchingDevices, newSwitchingDevices);
98
- if (switchingDevicesChanged) {
99
- switchableOutputsStore.setSwitchingDevices(newSwitchingDevices);
100
- Logger.log("Switching devices changed, recomputing...");
101
- }
102
- var oldSwitchingDeviceNames = switchableOutputsStore.switchingDeviceNames;
103
- var newSwitchingDeviceNames = availableSwitchingDeviceNames_1;
104
- var switchingDeviceNamesChanged = !arraysEqual(oldSwitchingDeviceNames, newSwitchingDeviceNames);
105
- if (switchingDeviceNamesChanged) {
106
- switchableOutputsStore.setSwitchingDeviceNames(newSwitchingDeviceNames);
107
- Logger.log("Switching device names changed, recomputing...");
108
- }
109
- if (groupAssignmentsChanged ||
110
- outputTypesChanged ||
111
- outputNamesChanged ||
112
- outputVisibilityFlagsChanged ||
113
- switchingDevicesChanged ||
114
- switchingDeviceNamesChanged) {
115
- // New groups mapping array of switches to group name key
116
- var newGroups_1 = {};
117
- // Walk the array of all switchable outputs, determine to which group it belongs
118
- // and populate its initial state
119
- availableSwitchableOutputs_1.forEach(function (output, index) {
120
- var swo = extractSwitchableOutputInfo(output);
121
- var switchingDevice = mqtt.messagesByTopics(getSwitchingDeviceStateTopics(mqtt.portalId, swo.tree, swo.deviceId));
122
- var customGroupAssignment = customGroupAssigments_1[index].trim();
123
- var deviceName = switchingDevice.customName || switchingDevice.productName || gxDeviceRelaysGroupName;
124
- var groupName = customGroupAssignment === "" ? deviceName : customGroupAssignment;
125
- var switchableOutput = mqtt.messagesByTopics(getSwitchableOutputStateTopics(mqtt.portalId, swo.tree, swo.deviceId, swo.outputId));
126
- // Only show controls visible everywhere or locally
127
- if (!(switchableOutput.showUIControl & SWITCHABLE_OUTPUT_VISIBILITY.VISIBLE ||
128
- switchableOutput.showUIControl & SWITCHABLE_OUTPUT_VISIBILITY.VISIBLE_LOCAL_UI)) {
129
- return;
130
- }
131
- newGroups_1[groupName] || (newGroups_1[groupName] = []);
132
- newGroups_1[groupName].push(__assign(__assign({}, switchableOutput), { tree: swo.tree, deviceId: swo.deviceId, outputId: swo.outputId, parentDeviceName: deviceName }));
133
- });
134
- Logger.log("New switchable output groups: ".concat(JSON.stringify(Object.keys(newGroups_1))));
135
- // Sort switches in a group by name
136
- Object.values(newGroups_1).forEach(function (array) {
137
- array.sort(function (a, b) {
138
- var aName = getSwitchableOutputNameForDisplay(a, a.parentDeviceName);
139
- var bName = getSwitchableOutputNameForDisplay(b, b.parentDeviceName);
140
- return aName.localeCompare(bName);
141
- });
142
- });
143
- switchableOutputsStore.setGroups(newGroups_1);
144
- }
145
- });
146
- return function () { return dispose_1(); };
147
- }
148
- }, [messagesForSwitchableOutputs, messagesForSwitchingDevices]);
149
- return switchableOutputsStore;
150
- };
151
- function extractSwitchableOutputInfo(topic) {
152
- var _a;
153
- var pattern = new RegExp("/(".concat(SWITCHABLE_OUTPUT_TREES.join("|"), ")/"));
154
- var match = topic.match(pattern);
155
- var switchStart = match ? match.index + match[0].length : -1; // length of `/system/`, or `/switch/`, or ...
156
- var outputStart = topic.indexOf("/SwitchableOutput/") + 18; // length of `/SwitchableOutput/`
157
- return {
158
- tree: (_a = match === null || match === void 0 ? void 0 : match[1]) !== null && _a !== void 0 ? _a : null, // "switch", "system", ...
159
- deviceId: topic.substring(switchStart, topic.indexOf("/", switchStart)),
160
- outputId: topic.substring(outputStart, topic.indexOf("/", outputStart)),
161
- };
162
- }
163
- function arraysEqual(a, b) {
164
- if (a.length !== b.length)
165
- return false;
166
- return a.every(function (element, index) { return b[index] === element; });
167
- }
168
- //# sourceMappingURL=SwitchableOutputs.provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SwitchableOutputs.provider.js","sourceRoot":"/","sources":["src/Modules/SwitchableOutputs/SwitchableOutputs.provider.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAY,OAAO,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAE,6BAA6B,EAA6B,MAAM,4BAA4B,CAAA;AACrG,OAAO,EACL,iCAAiC,EACjC,8BAA8B,EAC9B,uBAAuB,GAIxB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AAEpE,MAAM,CAAC,IAAM,oBAAoB,GAAG,UAAC,uBAA+B;IAClE,IAAM,sBAAsB,GAAG,yBAAyB,EAAE,CAAA;IAE1D,IAAM,SAAS,GAAG,UAAC,QAAkB,IAAK,OAAA,CAAC;QACzC,iBAAiB,EAAE,YAAK,QAAQ,eAAK,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,sCAAmC;QACzG,gBAAgB,EAAE,YAAK,QAAQ,cAAW;KAC3C,CAAC,EAHwC,CAGxC,CAAA;IAEF,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAxB,CAAwB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEvE,IAAM,4BAA4B,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;IACtF,IAAM,2BAA2B,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAEpF,oFAAoF;IACpF,SAAS,CAAC;QACR,IAAI,CAAC,4BAA4B,IAAI,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/F,MAAM,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;QACjD,CAAC;aAAM,CAAC;YACN,kDAAkD;YAClD,IAAM,4BAA0B,GAAG,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC;iBACzE,MAAM,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAA/B,CAA+B,CAAC;iBAChD,IAAI,EAAc,CAAA;YAErB,oEAAoE;YACpE,IAAM,uBAAqB,GAAG,4BAA0B,CAAC,GAAG,CAAC,UAAC,KAAK;gBACjE,OAAO,4BAA4B,CAAC,KAAK,CAAC,CAAA;YAC5C,CAAC,CAAC,CAAA;YACF,wDAAwD;YACxD,IAAM,gCAA8B,GAAG,4BAA0B,CAAC,GAAG,CAAC,UAAC,KAAK;gBAC1E,OAAO,4BAA4B,CAAC,UAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAO,CAAC,CAAA;YACjF,CAAC,CAAC,CAAA;YACF,wDAAwD;YACxD,IAAM,gCAA8B,GAAG,4BAA0B,CAAC,GAAG,CAAC,UAAC,KAAK;gBAC1E,OAAO,4BAA4B,CAAC,UAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAa,CAAC,CAAA;YACvF,CAAC,CAAC,CAAA;YACF,6DAA6D;YAC7D,IAAM,0CAAwC,GAAG,4BAA0B,CAAC,GAAG,CAAC,UAAC,KAAK;gBACpF,OAAO,4BAA4B,CAAC,UAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAgB,CAAC,CAAA;YAC1F,CAAC,CAAC,CAAA;YAEF,2DAA2D;YAC3D,IAAM,2BAAyB,GAAG,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC;iBACvE,MAAM,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAA/B,CAA+B,CAAC;iBAChD,IAAI,EAAc,CAAA;YAErB,gEAAgE;YAChE,IAAM,+BAA6B,GAAG,2BAAyB,CAAC,GAAG,CAAC,UAAC,KAAK;gBACxE,IAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;gBAC7D,OAAO,CACL,2BAA2B,CAAC,UAAG,WAAW,gBAAa,CAAC;oBACxD,2BAA2B,CAAC,UAAG,WAAW,iBAAc,CAAC,CAC1D,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,IAAM,SAAO,GAAG,OAAO,CAAC;gBACtB,IAAM,cAAc,GAAG,sBAAsB,CAAC,sBAAsB,CAAA;gBACpE,IAAM,cAAc,GAAG,uBAAqB,CAAA;gBAC5C,IAAM,uBAAuB,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;gBAC5E,IAAI,uBAAuB,EAAE,CAAC;oBAC5B,sBAAsB,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAA;oBAChE,MAAM,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;gBAC5E,CAAC;gBAED,IAAM,cAAc,GAAG,sBAAsB,CAAC,WAAW,CAAA;gBACzD,IAAM,cAAc,GAAG,gCAA8B,CAAA;gBACrD,IAAM,kBAAkB,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;gBACvE,IAAI,kBAAkB,EAAE,CAAC;oBACvB,sBAAsB,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;oBACrD,MAAM,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;gBAChE,CAAC;gBAED,IAAM,cAAc,GAAG,sBAAsB,CAAC,WAAW,CAAA;gBACzD,IAAM,cAAc,GAAG,gCAA8B,CAAA;gBACrD,IAAM,kBAAkB,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;gBACvE,IAAI,kBAAkB,EAAE,CAAC;oBACvB,sBAAsB,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;oBACrD,MAAM,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;gBAChE,CAAC;gBAED,IAAM,wBAAwB,GAAG,sBAAsB,CAAC,qBAAqB,CAAA;gBAC7E,IAAM,wBAAwB,GAAG,0CAAwC,CAAA;gBACzE,IAAM,4BAA4B,GAAG,CAAC,WAAW,CAAC,wBAAwB,EAAE,wBAAwB,CAAC,CAAA;gBACrG,IAAI,4BAA4B,EAAE,CAAC;oBACjC,sBAAsB,CAAC,wBAAwB,CAAC,wBAAwB,CAAC,CAAA;oBACzE,MAAM,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAA;gBAC3E,CAAC;gBAED,IAAM,mBAAmB,GAAG,sBAAsB,CAAC,gBAAgB,CAAA;gBACnE,IAAM,mBAAmB,GAAG,2BAAyB,CAAA;gBACrD,IAAM,uBAAuB,GAAG,CAAC,WAAW,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAA;gBACtF,IAAI,uBAAuB,EAAE,CAAC;oBAC5B,sBAAsB,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAA;oBAC/D,MAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;gBACzD,CAAC;gBAED,IAAM,uBAAuB,GAAG,sBAAsB,CAAC,oBAAoB,CAAA;gBAC3E,IAAM,uBAAuB,GAAG,+BAA6B,CAAA;gBAC7D,IAAM,2BAA2B,GAAG,CAAC,WAAW,CAAC,uBAAuB,EAAE,uBAAuB,CAAC,CAAA;gBAClG,IAAI,2BAA2B,EAAE,CAAC;oBAChC,sBAAsB,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,CAAA;oBACvE,MAAM,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAA;gBAC9D,CAAC;gBAED,IACE,uBAAuB;oBACvB,kBAAkB;oBAClB,kBAAkB;oBAClB,4BAA4B;oBAC5B,uBAAuB;oBACvB,2BAA2B,EAC3B,CAAC;oBACD,yDAAyD;oBACzD,IAAM,WAAS,GAA+C,EAAE,CAAA;oBAEhE,gFAAgF;oBAChF,iCAAiC;oBACjC,4BAA0B,CAAC,OAAO,CAAC,UAAC,MAAM,EAAE,KAAK;wBAC/C,IAAM,GAAG,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAA;wBAC/C,IAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAC3C,6BAA6B,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CACrE,CAAA;wBACD,IAAM,qBAAqB,GAAG,uBAAqB,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;wBACjE,IAAM,UAAU,GAAG,eAAe,CAAC,UAAU,IAAI,eAAe,CAAC,WAAW,IAAI,uBAAuB,CAAA;wBACvG,IAAM,SAAS,GAAG,qBAAqB,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAA;wBACnF,IAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAC5C,8BAA8B,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAChD,CAAA;wBAErC,mDAAmD;wBACnD,IACE,CAAC,CACC,gBAAgB,CAAC,aAAa,GAAG,4BAA4B,CAAC,OAAO;4BACrE,gBAAgB,CAAC,aAAa,GAAG,4BAA4B,CAAC,gBAAgB,CAC/E,EACD,CAAC;4BACD,OAAM;wBACR,CAAC;wBAED,WAAS,CAAC,SAAS,MAAnB,WAAS,CAAC,SAAS,IAAM,EAAE,EAAA;wBAC3B,WAAS,CAAC,SAAS,CAAC,CAAC,IAAI,uBACpB,gBAAgB,KACnB,IAAI,EAAE,GAAG,CAAC,IAAI,EACd,QAAQ,EAAE,GAAG,CAAC,QAAQ,EACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ,EACtB,gBAAgB,EAAE,UAA+B,IACjD,CAAA;oBACJ,CAAC,CAAC,CAAA;oBAEF,MAAM,CAAC,GAAG,CAAC,wCAAiC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,WAAS,CAAC,CAAC,CAAE,CAAC,CAAA;oBACrF,mCAAmC;oBACnC,MAAM,CAAC,MAAM,CAAC,WAAS,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK;wBACrC,KAAK,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;4BACd,IAAM,KAAK,GAAG,iCAAiC,CAAC,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAA;4BACtE,IAAM,KAAK,GAAG,iCAAiC,CAAC,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAA;4BACtE,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;wBACnC,CAAC,CAAC,CAAA;oBACJ,CAAC,CAAC,CAAA;oBACF,sBAAsB,CAAC,SAAS,CAAC,WAAS,CAAC,CAAA;gBAC7C,CAAC;YACH,CAAC,CAAC,CAAA;YACF,OAAO,cAAM,OAAA,SAAO,EAAE,EAAT,CAAS,CAAA;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,4BAA4B,EAAE,2BAA2B,CAAC,CAAC,CAAA;IAE/D,OAAO,sBAAsB,CAAA;AAC/B,CAAC,CAAA;AAED,SAAS,2BAA2B,CAAC,KAAa;;IAChD,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,YAAK,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAI,CAAC,CAAA;IACtE,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAClC,IAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,8CAA8C;IAC9G,IAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAA,CAAC,iCAAiC;IAE9F,OAAO;QACL,IAAI,EAAE,MAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAA0B,mCAAI,IAAI,EAAE,0BAA0B;QAC9E,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAyC;QAC/G,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAkC;KACzG,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAI,CAAM,EAAE,CAAM;IACpC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACvC,OAAO,CAAC,CAAC,KAAK,CAAC,UAAC,OAAO,EAAE,KAAK,IAAK,OAAA,CAAC,CAAC,KAAK,CAAC,KAAK,OAAO,EAApB,CAAoB,CAAC,CAAA;AAC1D,CAAC","sourcesContent":["import { autorun } from \"mobx\"\nimport Logger from \"../../utils/logger\"\nimport { PortalId, useMqtt } from \"../Mqtt\"\nimport { useMemo, useEffect } from \"react\"\nimport { useSwitchableOutputsStore } from \"./SwitchableOutputs.store\"\nimport { getSwitchingDeviceStateTopics, SwitchingDeviceInstanceId } from \"./SwitchingDevice.provider\"\nimport {\n getSwitchableOutputNameForDisplay,\n getSwitchableOutputStateTopics,\n SWITCHABLE_OUTPUT_TREES,\n SwitchableOutputId,\n SwitchableOutputState,\n SwitchableOutputTree,\n} from \"./SwitchableOutput.provider\"\nimport { SWITCHABLE_OUTPUT_VISIBILITY } from \"../../utils/constants\"\n\nexport const useSwitchableOutputs = (gxDeviceRelaysGroupName: string) => {\n const switchableOutputsStore = useSwitchableOutputsStore()\n\n const getTopics = (portalId: PortalId) => ({\n switchableOutputs: `N/${portalId}/(${SWITCHABLE_OUTPUT_TREES.join(\"|\")})/+/SwitchableOutput/+/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 messagesForSwitchingDevices = mqtt.messagesByWildcard(topics.switchingDevices)\n\n // Examine MQTT to find all available switchable outputs and their group assignments\n useEffect(() => {\n if (!messagesForSwitchableOutputs || Object.entries(messagesForSwitchableOutputs).length === 0) {\n Logger.log(\"Waiting for switchable outputs...\")\n } else {\n // All switchable outputs in array sorted by topic\n const availableSwitchableOutputs = Object.keys(messagesForSwitchableOutputs)\n .filter((key) => key.endsWith(\"/Settings/Group\"))\n .sort() as string[]\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 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 = switchableOutputsStore.customGroupAssignments\n const newAssignments = customGroupAssigments\n const groupAssignmentsChanged = !arraysEqual(oldAssignments, newAssignments)\n if (groupAssignmentsChanged) {\n switchableOutputsStore.setCustomGroupAssignments(newAssignments)\n Logger.log(`Switchable outputs group assignments changed, recomputing...`)\n }\n\n const oldOutputTypes = switchableOutputsStore.outputTypes\n const newOutputTypes = availableSwitchableOutputTypes\n const outputTypesChanged = !arraysEqual(oldOutputTypes, newOutputTypes)\n if (outputTypesChanged) {\n switchableOutputsStore.setOutputTypes(newOutputTypes)\n Logger.log(`Switchable outputs types changed, recomputing...`)\n }\n\n const oldOutputNames = switchableOutputsStore.outputNames\n const newOutputNames = availableSwitchableOutputNames\n const outputNamesChanged = !arraysEqual(oldOutputNames, newOutputNames)\n if (outputNamesChanged) {\n switchableOutputsStore.setOutputNames(newOutputNames)\n Logger.log(`Switchable outputs names changed, recomputing...`)\n }\n\n const oldOutputVisibilityFlags = switchableOutputsStore.outputVisibilityFlags\n const newOutputVisibilityFlags = availableSwitchableOutputVisibilityFlags\n const outputVisibilityFlagsChanged = !arraysEqual(oldOutputVisibilityFlags, newOutputVisibilityFlags)\n if (outputVisibilityFlagsChanged) {\n switchableOutputsStore.setOutputVisibilityFlags(newOutputVisibilityFlags)\n Logger.log(`Switchable outputs visibility flags changed, recomputing...`)\n }\n\n const oldSwitchingDevices = switchableOutputsStore.switchingDevices\n const newSwitchingDevices = availableSwitchingDevices\n const switchingDevicesChanged = !arraysEqual(oldSwitchingDevices, newSwitchingDevices)\n if (switchingDevicesChanged) {\n switchableOutputsStore.setSwitchingDevices(newSwitchingDevices)\n Logger.log(`Switching devices changed, recomputing...`)\n }\n\n const oldSwitchingDeviceNames = switchableOutputsStore.switchingDeviceNames\n const newSwitchingDeviceNames = availableSwitchingDeviceNames\n const switchingDeviceNamesChanged = !arraysEqual(oldSwitchingDeviceNames, newSwitchingDeviceNames)\n if (switchingDeviceNamesChanged) {\n switchableOutputsStore.setSwitchingDeviceNames(newSwitchingDeviceNames)\n Logger.log(`Switching device names changed, recomputing...`)\n }\n\n if (\n groupAssignmentsChanged ||\n outputTypesChanged ||\n outputNamesChanged ||\n outputVisibilityFlagsChanged ||\n switchingDevicesChanged ||\n switchingDeviceNamesChanged\n ) {\n // New groups mapping array of switches to group name key\n const newGroups: { [key: string]: SwitchableOutputState[] } = {}\n\n // Walk the array of all switchable outputs, determine to which group it belongs\n // and populate its initial state\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 // Only show controls visible everywhere or locally\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 newGroups[groupName] ||= []\n newGroups[groupName].push({\n ...switchableOutput,\n tree: swo.tree,\n deviceId: swo.deviceId,\n outputId: swo.outputId,\n parentDeviceName: deviceName as unknown as string,\n })\n })\n\n Logger.log(`New switchable output groups: ${JSON.stringify(Object.keys(newGroups))}`)\n // Sort switches in a group by name\n Object.values(newGroups).forEach((array) => {\n array.sort((a, b) => {\n const aName = getSwitchableOutputNameForDisplay(a, a.parentDeviceName)\n const bName = getSwitchableOutputNameForDisplay(b, b.parentDeviceName)\n return aName.localeCompare(bName)\n })\n })\n switchableOutputsStore.setGroups(newGroups)\n }\n })\n return () => dispose()\n }\n }, [messagesForSwitchableOutputs, messagesForSwitchingDevices])\n\n return switchableOutputsStore\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: topic.substring(switchStart, topic.indexOf(\"/\", switchStart)) as unknown as SwitchingDeviceInstanceId,\n outputId: topic.substring(outputStart, topic.indexOf(\"/\", outputStart)) as unknown as SwitchableOutputId,\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"]}
@@ -1,38 +0,0 @@
1
- import { SwitchableOutputState } from "./SwitchableOutput.provider";
2
- import { SwitchableOutputType } from "utils/constants";
3
- export interface SwitchableOutputsState {
4
- groups: {
5
- [key: string]: SwitchableOutputState[];
6
- };
7
- customGroupAssignments: string[];
8
- outputTypes: SwitchableOutputType[];
9
- outputNames: string[];
10
- outputVisibilityFlags: (0 | 1)[];
11
- switchingDevices: string[];
12
- switchingDeviceNames: string[];
13
- }
14
- export declare class SwitchableOutputsStore {
15
- groups: {
16
- [key: string]: SwitchableOutputState[];
17
- };
18
- customGroupAssignments: string[];
19
- outputTypes: SwitchableOutputType[];
20
- outputNames: string[];
21
- outputVisibilityFlags: (0 | 1)[];
22
- switchingDevices: string[];
23
- switchingDeviceNames: string[];
24
- constructor();
25
- setGroups: (groups: {
26
- [key: string]: SwitchableOutputState[];
27
- }) => {
28
- [key: string]: SwitchableOutputState[];
29
- };
30
- setCustomGroupAssignments: (assignments: string[]) => string[];
31
- setOutputTypes: (outputTypes: SwitchableOutputType[]) => SwitchableOutputType[];
32
- setOutputNames: (outputNames: string[]) => string[];
33
- setOutputVisibilityFlags: (outputVisibilityFlags: (0 | 1)[]) => (0 | 1)[];
34
- setSwitchingDevices: (switchingDevices: string[]) => string[];
35
- setSwitchingDeviceNames: (switchingDeviceNames: string[]) => string[];
36
- }
37
- export declare function useSwitchableOutputsStore(): SwitchableOutputsStore;
38
- //# sourceMappingURL=SwitchableOutputs.store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SwitchableOutputs.store.d.ts","sourceRoot":"/","sources":["src/Modules/SwitchableOutputs/SwitchableOutputs.store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAItD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAAA;KAAE,CAAA;IAElD,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;CAC/B;AAED,qBAAa,sBAAsB;IACjC,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAAA;KAAE,CAAK;IACvD,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;;IAanC,SAAS,GAAI,QAAQ;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAAA;KAAE;;MAA2B;IAC1F,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;CACjH;AAYD,wBAAgB,yBAAyB,2BAExC"}
@@ -1,116 +0,0 @@
1
- import { action, makeAutoObservable } from "mobx";
2
- import { useMemo } from "react";
3
- var store;
4
- var SwitchableOutputsStore = /** @class */ (function () {
5
- function SwitchableOutputsStore() {
6
- var _this = this;
7
- Object.defineProperty(this, "groups", {
8
- enumerable: true,
9
- configurable: true,
10
- writable: true,
11
- value: {}
12
- });
13
- Object.defineProperty(this, "customGroupAssignments", {
14
- enumerable: true,
15
- configurable: true,
16
- writable: true,
17
- value: []
18
- });
19
- Object.defineProperty(this, "outputTypes", {
20
- enumerable: true,
21
- configurable: true,
22
- writable: true,
23
- value: []
24
- });
25
- Object.defineProperty(this, "outputNames", {
26
- enumerable: true,
27
- configurable: true,
28
- writable: true,
29
- value: []
30
- });
31
- Object.defineProperty(this, "outputVisibilityFlags", {
32
- enumerable: true,
33
- configurable: true,
34
- writable: true,
35
- value: []
36
- });
37
- Object.defineProperty(this, "switchingDevices", {
38
- enumerable: true,
39
- configurable: true,
40
- writable: true,
41
- value: []
42
- });
43
- Object.defineProperty(this, "switchingDeviceNames", {
44
- enumerable: true,
45
- configurable: true,
46
- writable: true,
47
- value: []
48
- });
49
- Object.defineProperty(this, "setGroups", {
50
- enumerable: true,
51
- configurable: true,
52
- writable: true,
53
- value: function (groups) { return (_this.groups = groups); }
54
- });
55
- Object.defineProperty(this, "setCustomGroupAssignments", {
56
- enumerable: true,
57
- configurable: true,
58
- writable: true,
59
- value: function (assignments) { return (_this.customGroupAssignments = assignments); }
60
- });
61
- Object.defineProperty(this, "setOutputTypes", {
62
- enumerable: true,
63
- configurable: true,
64
- writable: true,
65
- value: function (outputTypes) { return (_this.outputTypes = outputTypes); }
66
- });
67
- Object.defineProperty(this, "setOutputNames", {
68
- enumerable: true,
69
- configurable: true,
70
- writable: true,
71
- value: function (outputNames) { return (_this.outputNames = outputNames); }
72
- });
73
- Object.defineProperty(this, "setOutputVisibilityFlags", {
74
- enumerable: true,
75
- configurable: true,
76
- writable: true,
77
- value: function (outputVisibilityFlags) { return (_this.outputVisibilityFlags = outputVisibilityFlags); }
78
- });
79
- Object.defineProperty(this, "setSwitchingDevices", {
80
- enumerable: true,
81
- configurable: true,
82
- writable: true,
83
- value: function (switchingDevices) { return (_this.switchingDevices = switchingDevices); }
84
- });
85
- Object.defineProperty(this, "setSwitchingDeviceNames", {
86
- enumerable: true,
87
- configurable: true,
88
- writable: true,
89
- value: function (switchingDeviceNames) { return (_this.switchingDeviceNames = switchingDeviceNames); }
90
- });
91
- makeAutoObservable(this, {
92
- setGroups: action,
93
- setCustomGroupAssignments: action,
94
- setOutputTypes: action,
95
- setOutputVisibilityFlags: action,
96
- setSwitchingDevices: action,
97
- setSwitchingDeviceNames: action,
98
- });
99
- }
100
- return SwitchableOutputsStore;
101
- }());
102
- export { SwitchableOutputsStore };
103
- function initializeStore() {
104
- var _store = store !== null && store !== void 0 ? store : new SwitchableOutputsStore();
105
- // For SSG and SSR always create a new store
106
- if (typeof window === "undefined")
107
- return _store;
108
- // Create the store once in the client
109
- if (!store)
110
- store = _store;
111
- return _store;
112
- }
113
- export function useSwitchableOutputsStore() {
114
- return useMemo(function () { return initializeStore(); }, []);
115
- }
116
- //# sourceMappingURL=SwitchableOutputs.store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SwitchableOutputs.store.js","sourceRoot":"/","sources":["src/Modules/SwitchableOutputs/SwitchableOutputs.store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAI/B,IAAI,KAA6B,CAAA;AAkBjC;IASE;QAAA,iBASC;QAjBD;;;;mBAAqD,EAAE;WAAA;QACvD;;;;mBAAmC,EAAE;WAAA;QACrC;;;;mBAAsC,EAAE;WAAA;QACxC;;;;mBAAwB,EAAE;WAAA;QAC1B;;;;mBAAmC,EAAE;WAAA;QACrC;;;;mBAA6B,EAAE;WAAA;QAC/B;;;;mBAAiC,EAAE;WAAA;QAanC;;;;mBAAY,UAAC,MAAkD,IAAK,OAAA,CAAC,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC,EAAtB,CAAsB;WAAA;QAC1F;;;;mBAA4B,UAAC,WAAqB,IAAK,OAAA,CAAC,KAAI,CAAC,sBAAsB,GAAG,WAAW,CAAC,EAA3C,CAA2C;WAAA;QAClG;;;;mBAAiB,UAAC,WAAmC,IAAK,OAAA,CAAC,KAAI,CAAC,WAAW,GAAG,WAAW,CAAC,EAAhC,CAAgC;WAAA;QAC1F;;;;mBAAiB,UAAC,WAAqB,IAAK,OAAA,CAAC,KAAI,CAAC,WAAW,GAAG,WAAW,CAAC,EAAhC,CAAgC;WAAA;QAC5E;;;;mBAA2B,UAAC,qBAAgC,IAAK,OAAA,CAAC,KAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC,EAApD,CAAoD;WAAA;QACrH;;;;mBAAsB,UAAC,gBAA0B,IAAK,OAAA,CAAC,KAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,EAA1C,CAA0C;WAAA;QAChG;;;;mBAA0B,UAAC,oBAA8B,IAAK,OAAA,CAAC,KAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC,EAAlD,CAAkD;WAAA;QAhB9G,kBAAkB,CAAC,IAAI,EAAE;YACvB,SAAS,EAAE,MAAM;YACjB,yBAAyB,EAAE,MAAM;YACjC,cAAc,EAAE,MAAM;YACtB,wBAAwB,EAAE,MAAM;YAChC,mBAAmB,EAAE,MAAM;YAC3B,uBAAuB,EAAE,MAAM;SAChC,CAAC,CAAA;IACJ,CAAC;IASH,6BAAC;AAAD,CAAC,AA3BD,IA2BC;;AAED,SAAS,eAAe;IACtB,IAAM,MAAM,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,IAAI,sBAAsB,EAAE,CAAA;IACpD,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,yBAAyB;IACvC,OAAO,OAAO,CAAC,cAAM,OAAA,eAAe,EAAE,EAAjB,CAAiB,EAAE,EAAE,CAAC,CAAA;AAC7C,CAAC","sourcesContent":["import { action, makeAutoObservable } from \"mobx\"\nimport { useMemo } from \"react\"\nimport { SwitchableOutputState } from \"./SwitchableOutput.provider\"\nimport { SwitchableOutputType } from \"utils/constants\"\n\nlet store: SwitchableOutputsStore\n\nexport interface SwitchableOutputsState {\n groups: { [key: string]: SwitchableOutputState[] }\n // custom group assignments for available switchable outputs sorted by their topic path\n customGroupAssignments: string[]\n // types of switchable outputs sorted by their topic path\n outputTypes: SwitchableOutputType[]\n // custom names of switchable outputs sorted by their topic path\n outputNames: string[]\n // visibility status of switchable outputs sorted by their topic path\n outputVisibilityFlags: (0 | 1)[]\n // switching devices\n switchingDevices: string[]\n // switching devices custom names\n switchingDeviceNames: string[]\n}\n\nexport class SwitchableOutputsStore {\n groups: { [key: string]: SwitchableOutputState[] } = {}\n customGroupAssignments: string[] = []\n outputTypes: SwitchableOutputType[] = []\n outputNames: string[] = []\n outputVisibilityFlags: (0 | 1)[] = []\n switchingDevices: string[] = []\n switchingDeviceNames: string[] = []\n\n constructor() {\n makeAutoObservable(this, {\n setGroups: action,\n setCustomGroupAssignments: action,\n setOutputTypes: action,\n setOutputVisibilityFlags: action,\n setSwitchingDevices: action,\n setSwitchingDeviceNames: action,\n })\n }\n\n setGroups = (groups: { [key: string]: SwitchableOutputState[] }) => (this.groups = groups)\n setCustomGroupAssignments = (assignments: string[]) => (this.customGroupAssignments = assignments)\n setOutputTypes = (outputTypes: SwitchableOutputType[]) => (this.outputTypes = outputTypes)\n setOutputNames = (outputNames: string[]) => (this.outputNames = outputNames)\n setOutputVisibilityFlags = (outputVisibilityFlags: (0 | 1)[]) => (this.outputVisibilityFlags = outputVisibilityFlags)\n setSwitchingDevices = (switchingDevices: string[]) => (this.switchingDevices = switchingDevices)\n setSwitchingDeviceNames = (switchingDeviceNames: string[]) => (this.switchingDeviceNames = switchingDeviceNames)\n}\n\nfunction initializeStore() {\n const _store = store ?? new SwitchableOutputsStore()\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 useSwitchableOutputsStore() {\n return useMemo(() => initializeStore(), [])\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SwitchingDevice.provider.d.ts","sourceRoot":"/","sources":["src/Modules/SwitchableOutputs/SwitchingDevice.provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAA2B,MAAM,SAAS,CAAA;AAEnE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIzF,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAAA;AAE9C,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,qBAAqB,EAAE,CAAA;CAC3C;AAED,MAAM,WAAW,qBAAsB,SAAQ,MAAM;IACnD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,6BAA6B,GACxC,UAAU,QAAQ,EAClB,MAAM,oBAAoB,EAC1B,YAAY,yBAAyB;;;;CAKrC,CAAA;AAEF,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,yBAAyB,GAAG,oBAAoB,CAK9F;AAED,wBAAgB,mBAAmB,6DAuClC"}
@@ -1,50 +0,0 @@
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 var getSwitchingDeviceStateTopics = function (portalId, tree, instanceId) { return ({
7
- productName: "N/".concat(portalId, "/").concat(tree, "/").concat(instanceId, "/ProductName"),
8
- customName: "N/".concat(portalId, "/").concat(tree, "/").concat(instanceId, "/CustomName"),
9
- instance: "N/".concat(portalId, "/").concat(tree, "/").concat(instanceId, "/DeviceInstance"),
10
- }); };
11
- export function useSwitchingDevice(instanceId) {
12
- var portalId = useMqtt().portalId;
13
- var topics = useMemo(function () { return getSwitchingDeviceStateTopics(portalId, "switch", instanceId); }, [portalId, instanceId]);
14
- return useTopicsState(topics);
15
- }
16
- export function useSwitchingDevices() {
17
- var switchingDevicesStore = useSwitchingDevicesStore();
18
- var getTopics = function (portalId) { return ({
19
- devices: "N/".concat(portalId, "/switch/+/DeviceInstance"),
20
- }); };
21
- var mqtt = useMqtt();
22
- var topics = useMemo(function () { return getTopics(mqtt.portalId); }, [mqtt.portalId]);
23
- var messagesForSwitchingDevices = mqtt.messagesByWildcard(topics.devices);
24
- // Examine MQTT to find all available switching devices
25
- useEffect(function () {
26
- if (!messagesForSwitchingDevices || Object.entries(messagesForSwitchingDevices).length === 0) {
27
- Logger.log("Waiting for switching devices...");
28
- }
29
- else {
30
- var deviceInstances_1 = Object.values(messagesForSwitchingDevices);
31
- var dispose_1 = autorun(function () {
32
- var oldDevices = switchingDevicesStore.devices;
33
- var newDevices = deviceInstances_1.map(function (deviceId) {
34
- return mqtt.messagesByTopics(getSwitchingDeviceStateTopics(mqtt.portalId, "switch", deviceId));
35
- });
36
- // TODO: check unordered structural identify of old and new state
37
- // TODO: to avoid unnecessary re-rendering: O(n^2) baby
38
- if (oldDevices.length === 0 ||
39
- oldDevices.length != newDevices.length ||
40
- !newDevices.every(function (id) { return deviceInstances_1.includes(id); })) {
41
- Logger.log("New switching devices instances: ".concat(JSON.stringify(deviceInstances_1)));
42
- switchingDevicesStore.setDevices(newDevices);
43
- }
44
- });
45
- return function () { return dispose_1(); };
46
- }
47
- }, [messagesForSwitchingDevices]);
48
- return switchingDevicesStore;
49
- }
50
- //# sourceMappingURL=SwitchingDevice.provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SwitchingDevice.provider.js","sourceRoot":"/","sources":["src/Modules/SwitchableOutputs/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])\n\n return switchingDevicesStore\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SwitchingDevices.store.d.ts","sourceRoot":"/","sources":["src/Modules/SwitchableOutputs/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 +0,0 @@
1
- {"version":3,"file":"SwitchingDevices.store.js","sourceRoot":"/","sources":["src/Modules/SwitchableOutputs/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;IAGE;QAAA,iBAEC;QAJD;;;;mBAAuC,EAAE;WAAA;QAMzC;;;;mBAAa,UAAC,OAAoC,IAAK,OAAA,CAAC,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC,EAAxB,CAAwB;WAAA;QAH7E,kBAAkB,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;IAClD,CAAC;IAGH,4BAAC;AAAD,CAAC,AARD,IAQC;;AAED,SAAS,eAAe;IACtB,IAAM,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,cAAM,OAAA,eAAe,EAAE,EAAjB,CAAiB,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"]}
@@ -1,6 +0,0 @@
1
- export * from "./SwitchingDevice.provider";
2
- export * from "./SwitchingDevices.store";
3
- export * from "./SwitchableOutput.provider";
4
- export * from "./SwitchableOutputs.provider";
5
- export * from "./SwitchableOutputs.store";
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["src/Modules/SwitchableOutputs/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AACxC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA"}
@@ -1,6 +0,0 @@
1
- export * from "./SwitchingDevice.provider";
2
- export * from "./SwitchingDevices.store";
3
- export * from "./SwitchableOutput.provider";
4
- export * from "./SwitchableOutputs.provider";
5
- export * from "./SwitchableOutputs.store";
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["src/Modules/SwitchableOutputs/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AACxC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA","sourcesContent":["export * from \"./SwitchingDevice.provider\"\nexport * from \"./SwitchingDevices.store\"\nexport * from \"./SwitchableOutput.provider\"\nexport * from \"./SwitchableOutputs.provider\"\nexport * from \"./SwitchableOutputs.store\"\n"]}