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;