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

import {setGlobal, useGlobal} from "reactn";
import {useEffect} from "react";
import {fetchDelete, fetchGet, fetchPatch, fetchPost} from "../Helpers/fetcher";
import useLights from "./lights";
setGlobal({
bridges: null,
});
function useBridges() {
const [bridges, setBridges] = useGlobal("bridges");
const {reloadLights} = useLights();
function reloadBridges() {
setBridges(null);
fetchGet("/bridge/").then(({error, data}) => {
if (error !== null) {
console.error(error);
return;
}
setBridges(data);
});
}
useEffect(() => {
if (bridges === null) {
reloadBridges();
}
}, []);
function bridge(id) {
if (bridges === null) {
return null;
}
return bridges.find(b => b.id === id);
}
function forgetBridge(id) {
fetchDelete(`/bridge/${id}`).then(({data, error}) => {
if (error !== null) {
console.error(error);
}
reloadBridges();
});
}
function forgetLight(bridgeId, lightId) {
fetchDelete(`/bridge/${bridgeId}/light/${lightId}`).then(({data, error}) => {
if (error !== null) {
console.error(error);
}
reloadBridges();
});
}
function addBridge(name, driver, addr, callback = null) {
fetchPost("/bridge/", {name, driver, addr}).then(({error}) => {
if (error !== null) {
console.error(error);
}
if (callback !== null) {
callback(error === null);
}
reloadBridges();
});
}
function editBridge(id, name) {
fetchPatch(`/bridge/${id}`, {name}).then(({error}) => {
if (error !== null) {
console.error(error);
}
reloadBridges();
});
}
function discoverLights(id) {
fetchPost(`/bridge/${id}/discover`).then(({error}) => {
if (error !== null) {
console.error(error);
}
reloadLights();
reloadBridges();
});
}
return {bridges, bridge, forgetBridge, addBridge, editBridge, forgetLight, discoverLights};
}
export default useBridges;