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
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;
|