WLED.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { omit } from "lodash";
  2. import { useEffect, useState } from "react";
  3. export default function WLED(Component) {
  4. return function WithWLED(props) {
  5. const { connection } = props;
  6. const [wled, setWled] = useState(null);
  7. const [presets, setPresets] = useState(null);
  8. const [current, setCurrent] = useState(null);
  9. const init = async () => {
  10. try {
  11. await wled.init();
  12. setCurrent(wled?.state || {});
  13. setPresets(omit(wled?.presets, [0]) || []);
  14. } catch (err) {
  15. console.log("Init error", err.message || err);
  16. }
  17. };
  18. useEffect(() => {
  19. if (wled) {
  20. wled.reinit = async (force = false) => {
  21. try {
  22. if (force) await wled.init();
  23. //await wled.refreshConfig();
  24. await wled.refreshState();
  25. await wled.refreshPresets();
  26. setCurrent(wled?.state || {});
  27. setPresets(omit(wled?.presets, [0]) || []);
  28. } catch (err) {
  29. // do nothing
  30. console.log("reinit error", err.message || err);
  31. }
  32. };
  33. init();
  34. }
  35. }, [wled]);
  36. useEffect(() => {
  37. if (connection) setWled(connection);
  38. }, [connection]);
  39. return (
  40. <Component wled={wled} presets={presets} current={current} {...props} />
  41. );
  42. };
  43. }