@lisn.js/react
Version: 
LISN.js for React.
1 lines • 3.2 kB
Source Map (JSON)
{"version":3,"file":"useWidget.cjs","names":["Object","defineProperty","exports","value","useWidget","_react","require","_useDeepMemo","newWidget","config","widgetRef","configs","Array","elementRef","useRef","widgetRefsInternal","configsMemo","useDeepMemo","useEffect","current","Element","thisConfig","widget","push","widgets","destroy","useImperativeHandle","getWidget","_widgetRefsInternal$c","getWidgets"],"sources":["../../src/useWidget.ts"],"sourcesContent":["\"use client\";\nimport {\n  useRef,\n  useEffect,\n  useImperativeHandle,\n  RefObject,\n  ComponentRef,\n  ElementType,\n} from \"react\";\n\nimport type { Widget } from \"lisn.js\";\nimport { WidgetComponentRef } from \"./types\";\nimport { useDeepMemo } from \"./useDeepMemo\";\n\nexport const useWidget = <\n  T extends ElementType,\n  W extends Widget,\n  C extends object,\n>(\n  newWidget: (element: Element, config?: C) => W | null,\n  config?: C | C[],\n  widgetRef?: RefObject<WidgetComponentRef<W> | null>,\n) => {\n  const configs = config instanceof Array ? config : [config];\n\n  const elementRef = useRef<ComponentRef<T>>(null);\n  const widgetRefsInternal = useRef<W[]>([]);\n  const configsMemo = useDeepMemo(configs);\n\n  useEffect(() => {\n    if (elementRef.current instanceof Element) {\n      for (const thisConfig of configsMemo) {\n        const widget = newWidget(elementRef.current, thisConfig);\n\n        if (widget) {\n          widgetRefsInternal.current.push(widget);\n        }\n      }\n    }\n    const widgets = widgetRefsInternal.current;\n\n    return () => {\n      for (const widget of widgets) {\n        widget.destroy();\n      }\n      widgetRefsInternal.current = [];\n    };\n  }, [configsMemo, newWidget]);\n\n  useImperativeHandle(widgetRef, () => {\n    return {\n      getWidget: () => widgetRefsInternal.current[0] ?? null,\n      getWidgets: () => widgetRefsInternal.current,\n    };\n  });\n\n  return elementRef;\n};\n"],"mappings":";AAAA,YAAY;;AAACA,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,SAAA;AACb,IAAAC,MAAA,GAAAC,OAAA;AAWA,IAAAC,YAAA,GAAAD,OAAA;AAEO,MAAMF,SAAS,GAAGA,CAKvBI,SAAqD,EACrDC,MAAgB,EAChBC,SAAmD,KAChD;EACH,MAAMC,OAAO,GAAGF,MAAM,YAAYG,KAAK,GAAGH,MAAM,GAAG,CAACA,MAAM,CAAC;EAE3D,MAAMI,UAAU,GAAG,IAAAC,aAAM,EAAkB,IAAI,CAAC;EAChD,MAAMC,kBAAkB,GAAG,IAAAD,aAAM,EAAM,EAAE,CAAC;EAC1C,MAAME,WAAW,GAAG,IAAAC,wBAAW,EAACN,OAAO,CAAC;EAExC,IAAAO,gBAAS,EAAC,MAAM;IACd,IAAIL,UAAU,CAACM,OAAO,YAAYC,OAAO,EAAE;MACzC,KAAK,MAAMC,UAAU,IAAIL,WAAW,EAAE;QACpC,MAAMM,MAAM,GAAGd,SAAS,CAACK,UAAU,CAACM,OAAO,EAAEE,UAAU,CAAC;QAExD,IAAIC,MAAM,EAAE;UACVP,kBAAkB,CAACI,OAAO,CAACI,IAAI,CAACD,MAAM,CAAC;QACzC;MACF;IACF;IACA,MAAME,OAAO,GAAGT,kBAAkB,CAACI,OAAO;IAE1C,OAAO,MAAM;MACX,KAAK,MAAMG,MAAM,IAAIE,OAAO,EAAE;QAC5BF,MAAM,CAACG,OAAO,CAAC,CAAC;MAClB;MACAV,kBAAkB,CAACI,OAAO,GAAG,EAAE;IACjC,CAAC;EACH,CAAC,EAAE,CAACH,WAAW,EAAER,SAAS,CAAC,CAAC;EAE5B,IAAAkB,0BAAmB,EAAChB,SAAS,EAAE,MAAM;IACnC,OAAO;MACLiB,SAAS,EAAEA,CAAA;QAAA,IAAAC,qBAAA;QAAA,QAAAA,qBAAA,GAAMb,kBAAkB,CAACI,OAAO,CAAC,CAAC,CAAC,cAAAS,qBAAA,cAAAA,qBAAA,GAAI,IAAI;MAAA;MACtDC,UAAU,EAAEA,CAAA,KAAMd,kBAAkB,CAACI;IACvC,CAAC;EACH,CAAC,CAAC;EAEF,OAAON,UAAU;AACnB,CAAC;AAACX,OAAA,CAAAE,SAAA,GAAAA,SAAA","ignoreList":[]}