page.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. "use client";
  2. import { debounce } from "lodash";
  3. import { useEffect, useState } from "react";
  4. import { Collapse, Loader } from "tiny-ui";
  5. import { WLEDClient } from "wled-client";
  6. import { Layout, Management } from "components";
  7. const CLIENTS = process.env.CLIENTS || [];
  8. const NAMES = process.env.NAMES || [];
  9. export default function Home() {
  10. const [names, setNames] = useState(null);
  11. const [clients, setClients] = useState(null);
  12. const [connections, setConnections] = useState(null);
  13. useEffect(() => {
  14. let t = [];
  15. let c = [];
  16. let n = [];
  17. for (let client of CLIENTS) {
  18. c.push(client);
  19. t.push(new WLEDClient(client));
  20. }
  21. for (let name of NAMES) {
  22. n.push(name);
  23. }
  24. setClients(c);
  25. setConnections(t);
  26. setNames(n);
  27. }, []);
  28. const handleCopy = async (payload) => {
  29. if (payload?.clients && payload?.value) {
  30. for (let client of payload.clients) {
  31. let indx = clients.findIndex((o) => o === client);
  32. if (connections[indx]) {
  33. let wled = connections[indx];
  34. for (let n of Object.keys(payload?.value)) {
  35. if (n && payload?.value?.[n]) {
  36. console.log("handleCopy", n, payload?.value[n]);
  37. await wled.savePreset(n, payload?.value[n]);
  38. }
  39. }
  40. await wled.reinit();
  41. }
  42. }
  43. }
  44. };
  45. const handleDelete = async (payload) => {
  46. if (payload?.clients && payload?.value) {
  47. for (let client of payload?.clients) {
  48. let indx = clients.findIndex((o) => o === client);
  49. if (connections[indx]) {
  50. let wled = connections[indx];
  51. for (let n of payload?.value) {
  52. await wled.deletePreset(n);
  53. }
  54. await wled.reinit();
  55. }
  56. }
  57. }
  58. };
  59. const handleSync = async (payload) => {
  60. if (payload?.clients) {
  61. for (let client of payload?.clients) {
  62. let indx = clients.findIndex((o) => o === client);
  63. if (connections[indx]) {
  64. let wled = connections[indx];
  65. switch (payload?.value) {
  66. case "enable":
  67. await wled.enableUDPSync({ send: true, receive: false });
  68. break;
  69. case "disable":
  70. await wled.disableUDPSync();
  71. break;
  72. }
  73. await wled.reinit();
  74. }
  75. }
  76. }
  77. };
  78. const handlePower = async (payload) => {
  79. if (payload?.clients && payload?.value) {
  80. for (let client of payload?.clients) {
  81. let indx = clients.findIndex((o) => o === client);
  82. if (connections[indx]) {
  83. let wled = connections[indx];
  84. switch (payload?.value) {
  85. case "on":
  86. await wled.turnOn();
  87. await wled.reinit();
  88. break;
  89. case "off":
  90. await wled.turnOff();
  91. await wled.reinit();
  92. break;
  93. case "toggle":
  94. await wled.toggle();
  95. await wled.reinit();
  96. break;
  97. case "reboot":
  98. await wled.reboot();
  99. setTimeout(async () => {
  100. await wled.reinit(true);
  101. }, 3000);
  102. break;
  103. }
  104. }
  105. }
  106. }
  107. };
  108. const handleBrightness = async (payload) => {
  109. if (payload?.clients && payload?.value) {
  110. for (let client of payload?.clients) {
  111. let indx = clients.findIndex((o) => o === client);
  112. if (connections[indx]) {
  113. let wled = connections[indx];
  114. await wled.setBrightness(payload?.value);
  115. await wled.reinit();
  116. }
  117. }
  118. }
  119. };
  120. const debounceHandleBrightness = debounce(handleBrightness, 500);
  121. const handlePreset = async (payload) => {
  122. if (payload?.clients && payload?.value) {
  123. for (let client of payload?.clients) {
  124. let indx = clients.findIndex((o) => o === client);
  125. if (connections[indx]) {
  126. let wled = connections[indx];
  127. await wled.setPreset(payload?.value);
  128. await wled.reinit();
  129. }
  130. }
  131. }
  132. };
  133. return (
  134. <Layout page="home">
  135. {(connections && clients && (
  136. <Collapse bordered={false}>
  137. {clients?.map((o, i) => (
  138. <Management
  139. key={i + 1}
  140. itemKey={`${i + 1}`}
  141. clients={clients}
  142. client={o}
  143. clientName={names[i]}
  144. connection={connections[i]}
  145. onCopy={handleCopy}
  146. onDelete={handleDelete}
  147. onSync={handleSync}
  148. onPower={handlePower}
  149. onBrightness={debounceHandleBrightness}
  150. onPreset={handlePreset}
  151. />
  152. ))}
  153. </Collapse>
  154. )) || <Loader size="lg" />}
  155. </Layout>
  156. );
  157. return;
  158. }