UNPKG

@tanstack/react-devtools

Version:

TanStack Devtools is a set of tools for building advanced devtools for your React application.

82 lines (81 loc) 2.89 kB
import { jsxs, Fragment, jsx } from "react/jsx-runtime"; import { useRef, useState, useEffect } from "react"; import { TanStackDevtoolsCore } from "@tanstack/devtools"; import { createPortal } from "react-dom"; const convertRender = (Component, setComponents, e, theme) => { const element = typeof Component === "function" ? Component(e, theme) : Component; setComponents((prev) => ({ ...prev, [e.getAttribute("id")]: element })); }; const TanStackDevtools = ({ plugins, config, eventBusConfig }) => { const devToolRef = useRef(null); const [pluginContainers, setPluginContainers] = useState({}); const [titleContainers, setTitleContainers] = useState({}); const [PluginComponents, setPluginComponents] = useState({}); const [TitleComponents, setTitleComponents] = useState({}); const [devtools] = useState( () => new TanStackDevtoolsCore({ config, eventBusConfig, plugins: plugins?.map((plugin) => { return { ...plugin, name: typeof plugin.name === "string" ? plugin.name : (e, theme) => { const id = e.getAttribute("id"); const target = e.ownerDocument.getElementById(id); if (target) { setTitleContainers((prev) => ({ ...prev, [id]: e })); } convertRender( plugin.name, setTitleComponents, e, theme ); }, render: (e, theme) => { const id = e.getAttribute("id"); const target = e.ownerDocument.getElementById(id); if (target) { setPluginContainers((prev) => ({ ...prev, [id]: e })); } convertRender(plugin.render, setPluginComponents, e, theme); } }; }) }) ); useEffect(() => { if (devToolRef.current) { devtools.mount(devToolRef.current); } return () => devtools.unmount(); }, [devtools]); const hasPlugins = Object.values(pluginContainers).length > 0 && Object.values(PluginComponents).length > 0; const hasTitles = Object.values(titleContainers).length > 0 && Object.values(TitleComponents).length > 0; return /* @__PURE__ */ jsxs(Fragment, { children: [ /* @__PURE__ */ jsx("div", { style: { position: "absolute" }, ref: devToolRef }), hasPlugins ? Object.entries(pluginContainers).map( ([key, pluginContainer]) => createPortal(/* @__PURE__ */ jsx(Fragment, { children: PluginComponents[key] }), pluginContainer) ) : null, hasTitles ? Object.entries(titleContainers).map( ([key, titleContainer]) => createPortal(/* @__PURE__ */ jsx(Fragment, { children: TitleComponents[key] }), titleContainer) ) : null ] }); }; export { TanStackDevtools }; //# sourceMappingURL=devtools.js.map