UNPKG

@techolution-ai/computer-vision

Version:

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

1 lines 4.46 kB
{"version":3,"sources":["../../../src/messages/use-messages.tsx"],"sourcesContent":["import { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { MessagesContext } from './messages-provider'\n\ninterface IUseMessagesProps<TTopic extends string> {\n topics: TTopic[]\n onConnect?: () => void\n onError?: (error: Error) => void\n onMessage: (topic: TTopic, message: string) => void\n onClose?: () => void\n}\n\nconst useMessages = <TTopic extends string>({\n topics,\n onConnect = () => {},\n onError = () => {},\n onMessage,\n onClose = () => {},\n}: IUseMessagesProps<TTopic>) => {\n const context = useContext(MessagesContext)\n\n if (!context) {\n throw new Error('MessagesProvider not found in the context')\n }\n\n const [map, setMap] = useState<\n Record<string, { messages: string[]; removeListener: () => void }>\n >({})\n\n const onMessageRef = useRef(onMessage)\n useEffect(() => {\n onMessageRef.current = onMessage\n }, [onMessage])\n\n const handleOnMessageReceiveFromContext = useCallback(\n (topic: TTopic, message: string) => {\n setMap((prev) => {\n const newMap = { ...prev }\n if (!newMap[topic]) {\n newMap[topic] = { messages: [], removeListener: () => {} }\n }\n newMap[topic].messages.push(message)\n return newMap\n })\n\n if (onMessageRef.current) onMessageRef.current(topic, message)\n },\n [],\n )\n\n const registerListener = useCallback(\n (topic: string) => {\n setMap((prev) => {\n if (prev[topic]) return prev;\n const removeFn = context?.registerListener(\n topic,\n handleOnMessageReceiveFromContext,\n )\n if (!removeFn) return prev\n return { ...prev, [topic]: { messages: [], removeListener: removeFn } }\n })\n },\n [context, handleOnMessageReceiveFromContext],\n )\n\n const removeListener = useCallback((topic: string) => {\n setMap((prev) => {\n if (!prev[topic]) return prev\n\n prev[topic].removeListener()\n const newMap = { ...prev }\n delete newMap[topic]\n return newMap\n })\n }, [])\n useEffect(() => {\n topics.forEach((topic) => {\n if (!map[topic]) {\n registerListener(topic)\n }\n })\n\n return () => {\n Object.keys(map).forEach((topic) => {\n if (!topics.includes(topic as TTopic)) {\n removeListener(topic)\n }\n })\n }\n }, [topics, registerListener, removeListener])\n\n return useMemo(\n () => ({ messages: map, removeListener, registerListener }),\n [map, removeListener, registerListener],\n )\n}\n\nexport default useMessages\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA8E;AAE9E,+BAAgC;AAUhC,IAAM,cAAc,CAAwB;AAAA,EAC1C;AAAA,EACA,YAAY,MAAM;AAAA,EAAC;AAAA,EACnB,UAAU,MAAM;AAAA,EAAC;AAAA,EACjB;AAAA,EACA,UAAU,MAAM;AAAA,EAAC;AACnB,MAAiC;AAC/B,QAAM,cAAU,yBAAW,wCAAe;AAE1C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEA,QAAM,CAAC,KAAK,MAAM,QAAI,uBAEpB,CAAC,CAAC;AAEJ,QAAM,mBAAe,qBAAO,SAAS;AACrC,8BAAU,MAAM;AACd,iBAAa,UAAU;AAAA,EACzB,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,wCAAoC;AAAA,IACxC,CAAC,OAAe,YAAoB;AAClC,aAAO,CAAC,SAAS;AACf,cAAM,SAAS,EAAE,GAAG,KAAK;AACzB,YAAI,CAAC,OAAO,KAAK,GAAG;AAClB,iBAAO,KAAK,IAAI,EAAE,UAAU,CAAC,GAAG,gBAAgB,MAAM;AAAA,UAAC,EAAE;AAAA,QAC3D;AACA,eAAO,KAAK,EAAE,SAAS,KAAK,OAAO;AACnC,eAAO;AAAA,MACT,CAAC;AAED,UAAI,aAAa,QAAS,cAAa,QAAQ,OAAO,OAAO;AAAA,IAC/D;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,uBAAmB;AAAA,IACvB,CAAC,UAAkB;AACjB,aAAO,CAAC,SAAS;AACf,YAAI,KAAK,KAAK,EAAG,QAAO;AACxB,cAAM,WAAW,SAAS;AAAA,UACxB;AAAA,UACA;AAAA,QACF;AACA,YAAI,CAAC,SAAU,QAAO;AACtB,eAAO,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,EAAE,UAAU,CAAC,GAAG,gBAAgB,SAAS,EAAE;AAAA,MACxE,CAAC;AAAA,IACH;AAAA,IACA,CAAC,SAAS,iCAAiC;AAAA,EAC7C;AAEA,QAAM,qBAAiB,0BAAY,CAAC,UAAkB;AACpD,WAAO,CAAC,SAAS;AACf,UAAI,CAAC,KAAK,KAAK,EAAG,QAAO;AAEzB,WAAK,KAAK,EAAE,eAAe;AAC3B,YAAM,SAAS,EAAE,GAAG,KAAK;AACzB,aAAO,OAAO,KAAK;AACnB,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AACL,8BAAU,MAAM;AACd,WAAO,QAAQ,CAAC,UAAU;AACxB,UAAI,CAAC,IAAI,KAAK,GAAG;AACf,yBAAiB,KAAK;AAAA,MACxB;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,aAAO,KAAK,GAAG,EAAE,QAAQ,CAAC,UAAU;AAClC,YAAI,CAAC,OAAO,SAAS,KAAe,GAAG;AACrC,yBAAe,KAAK;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,QAAQ,kBAAkB,cAAc,CAAC;AAE7C,aAAO;AAAA,IACL,OAAO,EAAE,UAAU,KAAK,gBAAgB,iBAAiB;AAAA,IACzD,CAAC,KAAK,gBAAgB,gBAAgB;AAAA,EACxC;AACF;AAEA,IAAO,uBAAQ;","names":[]}