fogbender-react
Version:
Fogbender library for React—embedded team messaging on your website
1 lines • 12.2 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.tsx","../src/FogbenderProvider.tsx","../src/FogbenderIsConfigured.tsx","../src/utils.tsx"],"sourcesContent":["import React from \"react\";\nimport { type Badge, type Env, type Token, createNewFogbender, type Fogbender } from \"fogbender\";\nimport { FogbenderProvider, useFogbender, type FogbenderProviderProps } from \"./FogbenderProvider\";\nimport { FogbenderIsConfigured } from \"./FogbenderIsConfigured\";\nimport { noopCleanup, useRenderComponent } from \"./utils\";\n\nexport {\n type Badge,\n type Env,\n type Token,\n createNewFogbender,\n type Fogbender,\n FogbenderProvider,\n useFogbender,\n type FogbenderProviderProps,\n FogbenderIsConfigured,\n};\n\ntype RoomyWidgetProps = {\n clientUrl?: string;\n env?: Env;\n token: Token;\n};\n\n// old name; new name is FogbenderSimpleRoomyWidget\nexport const FogbenderSimpleWidget = ({ clientUrl, env, token }: RoomyWidgetProps) => {\n const [fogbender, setFogbender] = React.useState(undefined as Fogbender | undefined);\n React.useEffect(() => {\n const fb = createNewFogbender();\n fb.setClientUrl(clientUrl);\n fb.setEnv(env);\n fb.setToken(addVersion(token));\n setFogbender(fb);\n }, []);\n if (!fogbender) {\n return null;\n }\n return (\n <FogbenderProvider fogbender={fogbender}>\n <FogbenderWidget />\n </FogbenderProvider>\n );\n};\n\n// old name; new name is FogbenderRoomyWidget\nexport const FogbenderWidget = () => {\n const divRef = React.useRef<HTMLDivElement>(null);\n useRenderIframe(divRef, false);\n return <div ref={divRef} />;\n};\n\nexport const FogbenderHeadlessWidget = () => {\n const divRef = React.useRef<HTMLDivElement>(null);\n useRenderIframe(divRef, true);\n return <div ref={divRef} />;\n};\n\nconst useRenderIframe = (divRef: React.RefObject<HTMLDivElement | null>, headless: boolean) => {\n const fogbender = useFogbender();\n useRenderComponent(\n React.useCallback(() => {\n if (divRef.current) {\n return fogbender.renderIframe({ headless, rootEl: divRef.current });\n } else {\n return noopCleanup();\n }\n }, [fogbender, headless])\n );\n};\n\ntype FloatyWidgetProps = {\n verbose?: boolean;\n openInNewTab?: boolean;\n closeable?: boolean;\n defaultOpen?: boolean;\n};\n\n// old name; new name is FogbenderFloatyWidget\nexport const FogbenderFloatingWidget = (props: FloatyWidgetProps) => {\n useCreateFloatingWidget(props);\n\n return null;\n};\n\nconst useCreateFloatingWidget = ({\n verbose,\n openInNewTab,\n closeable,\n defaultOpen,\n}: FloatyWidgetProps) => {\n const fogbender = useFogbender();\n useRenderComponent(\n React.useCallback(() => {\n return fogbender.createFloatingWidget({ verbose, openInNewTab, closeable, defaultOpen });\n }, [fogbender, verbose, openInNewTab, closeable])\n );\n};\n\nexport const FogbenderUnreadBadge = React.memo(() => {\n const divRef = React.useRef<HTMLDivElement>(null);\n useRenderUnreadBadge(divRef);\n return <div ref={divRef} />;\n});\n\nconst useRenderUnreadBadge = (divRef: React.RefObject<HTMLDivElement | null>) => {\n const fogbender = useFogbender();\n useRenderComponent(\n React.useCallback(() => {\n if (divRef.current) {\n return fogbender.renderUnreadBadge({ el: divRef.current });\n } else {\n return noopCleanup();\n }\n }, [fogbender])\n );\n};\n\nexport const FogbenderConfig: React.FC<{\n clientUrl?: string;\n env?: Env;\n token: Token | undefined;\n mode?: \"light\" | \"dark\";\n}> = ({ clientUrl, env, token, mode = \"light\" }) => {\n const fogbender = useFogbender();\n React.useEffect(() => {\n fogbender.setClientUrl(clientUrl);\n return () => {\n fogbender.setClientUrl(undefined);\n };\n }, [clientUrl]);\n React.useEffect(() => {\n fogbender.setEnv(env);\n return () => {\n fogbender.setEnv(undefined);\n };\n }, [clientUrl]);\n React.useEffect(() => {\n fogbender.setToken(addVersion(token));\n return () => {\n fogbender.setToken(undefined);\n };\n }, [token]);\n React.useEffect(() => {\n fogbender.setMode(mode);\n }, [mode]);\n return null;\n};\n\nfunction addVersion(token: Token | undefined) {\n if (token) {\n token.versions = token.versions || {};\n token.versions[\"fogbender-react\"] = \"0.6.2\";\n }\n return token;\n}\n\ntype SimpleFloatyWidgetProps = {\n token: Token;\n clientUrl?: string | undefined;\n verbose?: boolean;\n openInNewTab?: boolean;\n closeable?: boolean;\n};\n\n// old name; new name is FogbenderSimpleFloatyWidget\nexport const FogbenderSimpleFloatie = ({\n token,\n clientUrl,\n openInNewTab,\n verbose,\n closeable,\n}: SimpleFloatyWidgetProps) => {\n const fogbender = React.useMemo(createNewFogbender, []);\n return (\n <FogbenderProvider fogbender={fogbender}>\n <FogbenderConfig clientUrl={clientUrl} token={token} />\n <FogbenderIsConfigured>\n <FogbenderFloatingWidget\n key={\"\" + verbose + \":\" + openInNewTab + \":\" + closeable}\n verbose={verbose}\n openInNewTab={openInNewTab}\n closeable={closeable}\n />\n </FogbenderIsConfigured>\n </FogbenderProvider>\n );\n};\n\nexport const FogbenderRoomyWidget = FogbenderWidget;\nexport const FogbenderSimpleRoomyWidget = FogbenderSimpleWidget;\nexport const FogbenderFloatyWidget = FogbenderFloatingWidget;\nexport const FogbenderSimpleFloatyWidget = FogbenderSimpleFloatie;\n","import { createNewFogbender } from \"fogbender\";\nimport React from \"react\";\nimport type { Fogbender } from \".\";\n\nexport interface FogbenderProviderProps {\n fogbender?: Fogbender;\n children?: React.ReactNode;\n}\n\nconst context = React.createContext<Fogbender | undefined>(undefined);\n\ncontext.displayName = \"FogbenderProvider\";\n\nexport const useFogbender = () => {\n const fogbender = React.useContext(context);\n\n if (!fogbender) {\n throw new Error(\"No fogbender set, use FogbenderProvider to set one\");\n }\n\n return fogbender;\n};\n\nexport const FogbenderProvider: React.FC<FogbenderProviderProps> = ({ fogbender, children }) => {\n const defaultFogbender = React.useRef<Fogbender | undefined>();\n const value =\n fogbender || defaultFogbender.current || (defaultFogbender.current = createNewFogbender());\n return <context.Provider value={value}>{children}</context.Provider>;\n};\n","import React from \"react\";\nimport type { Snapshot } from \"fogbender\";\nimport { useFogbender } from \"./FogbenderProvider\";\n\nexport const FogbenderIsConfigured: React.FC<{\n children?: React.ReactNode;\n}> = ({ children }) => {\n const isConfigured = useIsConfigured();\n if (isConfigured) {\n return <>{children}</>;\n } else {\n return null;\n }\n};\n\nexport function useIsConfigured() {\n const fogbender = useFogbender();\n return useFromSnapshot(async () => {\n return fogbender.isClientConfigured();\n }, false);\n}\n\nexport function useFromSnapshot<T>(snapshotGen: () => Promise<Snapshot<T>>, initialValue: T) {\n const [value, setValue] = React.useState(initialValue);\n const fogbender = useFogbender();\n React.useEffect(() => {\n const unsub = [] as (() => void)[];\n const run = async () => {\n const snapshot = await snapshotGen();\n unsub.push(snapshot.subscribe(setValue));\n };\n run();\n return () => {\n unsub.forEach(u => u());\n };\n }, [fogbender]);\n return value;\n}\n","import React from \"react\";\n\nexport const noopCleanup = () => {\n return new Promise<() => void>(resolve => resolve(() => {}));\n};\n\nexport function useRenderComponent(componentRenderer: () => Promise<() => void>) {\n React.useEffect(() => {\n const promise = componentRenderer();\n return () => {\n promise.then(cleanup => cleanup());\n };\n }, [componentRenderer]);\n}\n"],"mappings":"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","names":["import_react","import_fogbender","React","import_react","React","import_react","React","React"]}