@whop/embedded-components-react-js
Version:
React components for Whop.js
1 lines • 1.88 kB
Source Map (JSON)
{"version":3,"sources":["../../src/lib/use-element-snapshot.ts"],"sourcesContent":["\"use client\";\n\nimport type { WhopElement } from \"@whop/embedded-components-vanilla-js/types\";\n\nimport { useEffect, useMemo, useSyncExternalStore } from \"react\";\n\nexport function useElementSnapshot<E extends WhopElement<any, any, any>>(\n\tsource: E | undefined | null,\n): ReturnType<E[\"getSnapshot\"]> | null {\n\tconst callbacks = useMemo(() => {\n\t\treturn new Set<() => void>();\n\t}, []);\n\n\tconst state = useSyncExternalStore(\n\t\t(listener) => {\n\t\t\tconst onSnapshot = () => {\n\t\t\t\tlistener();\n\t\t\t};\n\t\t\tcallbacks.add(onSnapshot);\n\t\t\treturn () => {\n\t\t\t\tcallbacks.delete(onSnapshot);\n\t\t\t};\n\t\t},\n\t\t() => {\n\t\t\tconst snap = source?.getSnapshot();\n\t\t\treturn snap;\n\t\t},\n\t\t() => {\n\t\t\treturn null;\n\t\t},\n\t);\n\n\tuseEffect(() => {\n\t\tif (!source) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst onSnapshot = () => {\n\t\t\tfor (const callback of callbacks) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t};\n\t\tsource.on(\"snapshot\", onSnapshot);\n\t\treturn () => {\n\t\t\tsource.off(\"snapshot\", onSnapshot);\n\t\t};\n\t}, [source, callbacks]);\n\n\treturn state;\n}\n"],"mappings":";;AAIA,SAAS,WAAW,SAAS,4BAA4B;AAElD,SAAS,mBACf,QACsC;AACtC,QAAM,YAAY,QAAQ,MAAM;AAC/B,WAAO,oBAAI,IAAgB;AAAA,EAC5B,GAAG,CAAC,CAAC;AAEL,QAAM,QAAQ;AAAA,IACb,CAAC,aAAa;AACb,YAAM,aAAa,MAAM;AACxB,iBAAS;AAAA,MACV;AACA,gBAAU,IAAI,UAAU;AACxB,aAAO,MAAM;AACZ,kBAAU,OAAO,UAAU;AAAA,MAC5B;AAAA,IACD;AAAA,IACA,MAAM;AACL,YAAM,OAAO,QAAQ,YAAY;AACjC,aAAO;AAAA,IACR;AAAA,IACA,MAAM;AACL,aAAO;AAAA,IACR;AAAA,EACD;AAEA,YAAU,MAAM;AACf,QAAI,CAAC,QAAQ;AACZ;AAAA,IACD;AAEA,UAAM,aAAa,MAAM;AACxB,iBAAW,YAAY,WAAW;AACjC,iBAAS;AAAA,MACV;AAAA,IACD;AACA,WAAO,GAAG,YAAY,UAAU;AAChC,WAAO,MAAM;AACZ,aAAO,IAAI,YAAY,UAAU;AAAA,IAClC;AAAA,EACD,GAAG,CAAC,QAAQ,SAAS,CAAC;AAEtB,SAAO;AACR;","names":[]}