UNPKG

@techolution-ai/computer-vision

Version:

A JavaScript/TypeScript library for computer vision applications, providing tools for image processing, scanning, and MQTT-based messaging.

104 lines (103 loc) 3.35 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/messages/use-messages.tsx var use_messages_exports = {}; __export(use_messages_exports, { default: () => use_messages_default }); module.exports = __toCommonJS(use_messages_exports); var import_react = require("react"); var import_messages_provider = require("./messages-provider.cjs"); var useMessages = ({ topics, onConnect = () => { }, onError = () => { }, onMessage, onClose = () => { } }) => { const context = (0, import_react.useContext)(import_messages_provider.MessagesContext); if (!context) { throw new Error("MessagesProvider not found in the context"); } const [map, setMap] = (0, import_react.useState)({}); const onMessageRef = (0, import_react.useRef)(onMessage); (0, import_react.useEffect)(() => { onMessageRef.current = onMessage; }, [onMessage]); const handleOnMessageReceiveFromContext = (0, import_react.useCallback)( (topic, message) => { setMap((prev) => { const newMap = { ...prev }; if (!newMap[topic]) { newMap[topic] = { messages: [], removeListener: () => { } }; } newMap[topic].messages.push(message); return newMap; }); if (onMessageRef.current) onMessageRef.current(topic, message); }, [] ); const registerListener = (0, import_react.useCallback)( (topic) => { setMap((prev) => { if (prev[topic]) return prev; const removeFn = context?.registerListener( topic, handleOnMessageReceiveFromContext ); if (!removeFn) return prev; return { ...prev, [topic]: { messages: [], removeListener: removeFn } }; }); }, [context, handleOnMessageReceiveFromContext] ); const removeListener = (0, import_react.useCallback)((topic) => { setMap((prev) => { if (!prev[topic]) return prev; prev[topic].removeListener(); const newMap = { ...prev }; delete newMap[topic]; return newMap; }); }, []); (0, import_react.useEffect)(() => { topics.forEach((topic) => { if (!map[topic]) { registerListener(topic); } }); return () => { Object.keys(map).forEach((topic) => { if (!topics.includes(topic)) { removeListener(topic); } }); }; }, [topics, registerListener, removeListener]); return (0, import_react.useMemo)( () => ({ messages: map, removeListener, registerListener }), [map, removeListener, registerListener] ); }; var use_messages_default = useMessages; //# sourceMappingURL=use-messages.cjs.map