Source: data/WatcherOqt.js

  1. import React, { useContext, useEffect } from "react";
  2. import { useReactorNavigation, booleanString, SignalRContext, useHooks } from "../..";
  3. import { useCallback } from "react";
  4. const signalR = require("@microsoft/signalr");
  5. /**
  6. * Componente que crea una subscripcion SignalR al renderizarse y la desubscripcion al desmontarse del DOM,
  7. * y llama a uno o varios hooks al producirse un cambio en el monitor que va a observar
  8. * @name Reactor.Components.Data.WatcherOqt
  9. * @param {string} monitor Nombre del monitor
  10. * @param {string} hooks Nombre de los hooks que se van a llamar al producirse un cambio
  11. * @param {string} [delay = null] Tiempo de espera antes de subscribirse en ms
  12. * @param {BooleanString} [silent = "true"] Establece modo silencioso (no usa spinner)
  13. * @param {BooleanString} [debug = "false"]
  14. * @class
  15. * @example
  16. <signalr url="http://www.orquesta.com.ar/signalr">
  17. <watcher monitor="mensajes" hooks="ActualizarMensajes"></watcher>
  18. <div>
  19. ...lista de mensajes
  20. </div>
  21. </signalr>
  22. */
  23. const WatcherOqt = ({monitor, hooks, silent = "true", delay = "", debug = "false", children}) => {
  24. const { subscribe, unsubscribe } = useContext(SignalRContext);
  25. const { procesarHooks } = useHooks({silent, hooks, debug});
  26. const callback = useCallback(() => {
  27. booleanString(debug) && console.log("Watcher", {event: "execute callback", delay, monitor, hooks})
  28. procesarHooks();
  29. }, [procesarHooks]);
  30. const reconnectCallback = useCallback(() => {
  31. booleanString(debug) && console.log("Watcher", {event: "execute reconnect callback", delay, monitor, hooks})
  32. subscribe({monitor, callback, reconnectCallback});
  33. }, [monitor, callback]);
  34. useEffect(()=>{
  35. booleanString(debug) && console.log("Watcher", {event: "subscribe", delay, monitor, hooks})
  36. let timer = 0;
  37. if (delay !== undefined && delay !== 0 && delay !== "0"){
  38. timer = setTimeout(
  39. () => subscribe({monitor, callback, reconnectCallback}),
  40. delay * 1
  41. );
  42. }else{
  43. subscribe({monitor, callback, reconnectCallback});
  44. }
  45. return () => {
  46. booleanString(debug) && console.log("Watcher", {event: "unsubscribe", delay, monitor, hooks})
  47. unsubscribe({monitor});
  48. clearTimeout(timer);
  49. }
  50. }, [debug, monitor, delay, reconnectCallback, callback]);
  51. return (
  52. <>
  53. {children}
  54. </>
  55. );
  56. }
  57. export default WatcherOqt;