UNPKG

mqtt-react-hooks

Version:

ReactJS library for Pub/Sub communication with an MQTT broker using Hooks

3 lines (2 loc) 1.83 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("mqtt-pattern"),n=require("mqtt");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=o(e),r=e.createContext({});exports.Connector=function({children:t,brokerUrl:o,options:s={keepalive:0},parserMethod:u}){const l=e.useRef(!1),[i,a]=e.useState("Offline"),[f,d]=e.useState(null);e.useEffect((()=>{if(!f&&!l.current){l.current=!0,a("Connecting"),console.log(`attempting to connect to ${o}`);const e=n.connect(o,s);e.on("connect",(()=>{console.debug("on connect"),a("Connected"),d(e)})),e.on("reconnect",(()=>{console.debug("on reconnect"),a("Reconnecting")})),e.on("error",(e=>{console.log(`Connection error: ${e}`),a(e.message)})),e.on("offline",(()=>{console.debug("on offline"),a("Offline")})),e.on("end",(()=>{console.debug("on end"),a("Offline")}))}}),[f,l,o,s]),e.useEffect((()=>()=>{f&&(console.log("closing mqtt client"),f.end(!0),d(null),l.current=!1)}),[f,l]);const p=e.useMemo((()=>({connectionStatus:i,client:f,parserMethod:u})),[i,f,u]);return c.default.createElement(r.Provider,{value:p},t)},exports.MqttContext=r,exports.useMqttState=function(){const{connectionStatus:t,client:n,parserMethod:o}=e.useContext(r);return{connectionStatus:t,client:n,parserMethod:o}},exports.useSubscription=function(n,o={}){const{client:c,connectionStatus:s,parserMethod:u}=e.useContext(r),[l,i]=e.useState(void 0),a=e.useCallback((async()=>{null==c||c.subscribe(n,o)}),[c,o,n]),f=e.useCallback(((e,o)=>{[n].flat().some((n=>t.matches(n,e)))&&i({topic:e,message:(null==u?void 0:u(o))||o.toString()})}),[u,n]);return e.useEffect((()=>((null==c?void 0:c.connected)&&(a(),c.on("message",f)),()=>{null==c||c.off("message",f)})),[f,c,a]),{client:c,topic:n,message:l,connectionStatus:s}}; //# sourceMappingURL=index.js.map