The main server, and probably only repository in this org.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
2.0 KiB

5 years ago
  1. import {setGlobal, useGlobal} from "reactn";
  2. import {useEffect} from "react";
  3. import {fetchDelete, fetchGet, fetchPatch, fetchPost} from "../Helpers/fetcher";
  4. import useLights from "./lights";
  5. setGlobal({
  6. bridges: null,
  7. });
  8. function useBridges() {
  9. const [bridges, setBridges] = useGlobal("bridges");
  10. const {reloadLights} = useLights();
  11. function reloadBridges() {
  12. setBridges(null);
  13. fetchGet("/bridge/").then(({error, data}) => {
  14. if (error !== null) {
  15. console.error(error);
  16. return;
  17. }
  18. setBridges(data);
  19. });
  20. }
  21. useEffect(() => {
  22. if (bridges === null) {
  23. reloadBridges();
  24. }
  25. }, []);
  26. function bridge(id) {
  27. if (bridges === null) {
  28. return null;
  29. }
  30. return bridges.find(b => b.id === id);
  31. }
  32. function forgetBridge(id) {
  33. fetchDelete(`/bridge/${id}`).then(({data, error}) => {
  34. if (error !== null) {
  35. console.error(error);
  36. }
  37. reloadBridges();
  38. });
  39. }
  40. function forgetLight(bridgeId, lightId) {
  41. fetchDelete(`/bridge/${bridgeId}/light/${lightId}`).then(({data, error}) => {
  42. if (error !== null) {
  43. console.error(error);
  44. }
  45. reloadBridges();
  46. });
  47. }
  48. function addBridge(name, driver, addr, callback = null) {
  49. fetchPost("/bridge/", {name, driver, addr}).then(({error}) => {
  50. if (error !== null) {
  51. console.error(error);
  52. }
  53. if (callback !== null) {
  54. callback(error === null);
  55. }
  56. reloadBridges();
  57. });
  58. }
  59. function editBridge(id, name) {
  60. fetchPatch(`/bridge/${id}`, {name}).then(({error}) => {
  61. if (error !== null) {
  62. console.error(error);
  63. }
  64. reloadBridges();
  65. });
  66. }
  67. function discoverLights(id) {
  68. fetchPost(`/bridge/${id}/discover`).then(({error}) => {
  69. if (error !== null) {
  70. console.error(error);
  71. }
  72. reloadLights();
  73. reloadBridges();
  74. });
  75. }
  76. return {bridges, bridge, forgetBridge, addBridge, editBridge, forgetLight, discoverLights};
  77. }
  78. export default useBridges;