@tanstack/angular-query-experimental
Version:
Signals for managing, caching and syncing asynchronous and remote data in Angular
1 lines • 4.71 kB
Source Map (JSON)
{"version":3,"file":"inject-devtools-panel.mjs","sources":["../../src/devtools-panel/inject-devtools-panel.ts"],"sourcesContent":["import {\n DestroyRef,\n Injector,\n PLATFORM_ID,\n assertInInjectionContext,\n computed,\n effect,\n inject,\n runInInjectionContext,\n untracked,\n} from '@angular/core'\nimport { QueryClient, onlineManager } from '@tanstack/query-core'\nimport { isPlatformBrowser } from '@angular/common'\nimport type { TanstackQueryDevtoolsPanel } from '@tanstack/query-devtools'\nimport type {\n DevtoolsPanelOptions,\n InjectDevtoolsPanel,\n InjectDevtoolsPanelOptions,\n} from './types'\n\n/**\n * Inject a TanStack Query devtools panel and render it in the DOM.\n *\n * Devtools panel allows programmatic control over the devtools, for example if you want to render\n * the devtools as part of your own devtools.\n *\n * Consider `withDevtools` instead if you don't need this.\n * @param injectDevtoolsPanelFn - A function that returns devtools panel options.\n * @param options - Additional configuration\n * @returns DevtoolsPanelRef\n * @see https://tanstack.com/query/v5/docs/framework/angular/devtools\n */\nexport const injectDevtoolsPanel: InjectDevtoolsPanel = (\n injectDevtoolsPanelFn: () => DevtoolsPanelOptions,\n options?: InjectDevtoolsPanelOptions,\n) => {\n !options?.injector && assertInInjectionContext(injectDevtoolsPanel)\n const currentInjector = options?.injector ?? inject(Injector)\n\n return runInInjectionContext(currentInjector, () => {\n const destroyRef = inject(DestroyRef)\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID))\n const injectedClient = inject(QueryClient, { optional: true })\n\n const queryOptions = computed(injectDevtoolsPanelFn)\n let devtools: TanstackQueryDevtoolsPanel | null = null\n\n const destroy = () => {\n devtools?.unmount()\n devtools = null\n }\n\n if (!isBrowser)\n return {\n destroy,\n }\n\n effect(() => {\n const {\n client = injectedClient,\n errorTypes = [],\n styleNonce,\n shadowDOMTarget,\n onClose,\n hostElement,\n } = queryOptions()\n\n untracked(() => {\n if (!client) throw new Error('No QueryClient found')\n if (!devtools && hostElement) {\n import('@tanstack/query-devtools')\n .then((queryDevtools) => {\n devtools = new queryDevtools.TanstackQueryDevtoolsPanel({\n client,\n queryFlavor: 'Angular Query',\n version: '5',\n buttonPosition: 'bottom-left',\n position: 'bottom',\n initialIsOpen: true,\n errorTypes,\n styleNonce,\n shadowDOMTarget,\n onClose,\n onlineManager,\n })\n devtools.mount(hostElement.nativeElement)\n })\n .catch((error) => {\n console.error(\n 'Install @tanstack/query-devtools or reinstall without --omit=optional.',\n error,\n )\n })\n } else if (devtools && hostElement) {\n devtools.setClient(client)\n devtools.setErrorTypes(errorTypes)\n onClose && devtools.setOnClose(onClose)\n } else if (devtools && !hostElement) {\n destroy()\n }\n })\n })\n\n destroyRef.onDestroy(destroy)\n\n return {\n destroy,\n }\n })\n}\n"],"names":[],"mappings":";;;AAgCa,MAAA,sBAA2C,CACtD,uBACA,YACG;AACF,IAAA,mCAAS,aAAY,yBAAyB,mBAAmB;AAClE,QAAM,mBAAkB,mCAAS,aAAY,OAAO,QAAQ;AAErD,SAAA,sBAAsB,iBAAiB,MAAM;AAC5C,UAAA,aAAa,OAAO,UAAU;AACpC,UAAM,YAAY,kBAAkB,OAAO,WAAW,CAAC;AACvD,UAAM,iBAAiB,OAAO,aAAa,EAAE,UAAU,MAAM;AAEvD,UAAA,eAAe,SAAS,qBAAqB;AACnD,QAAI,WAA8C;AAElD,UAAM,UAAU,MAAM;AACpB,2CAAU;AACC,iBAAA;AAAA,IACb;AAEA,QAAI,CAAC;AACI,aAAA;AAAA,QACL;AAAA,MACF;AAEF,WAAO,MAAM;AACL,YAAA;AAAA,QACJ,SAAS;AAAA,QACT,aAAa,CAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,UACE,aAAa;AAEjB,gBAAU,MAAM;AACd,YAAI,CAAC,OAAc,OAAA,IAAI,MAAM,sBAAsB;AAC/C,YAAA,CAAC,YAAY,aAAa;AAC5B,iBAAO,0BAA0B,EAC9B,KAAK,CAAC,kBAAkB;AACZ,uBAAA,IAAI,cAAc,2BAA2B;AAAA,cACtD;AAAA,cACA,aAAa;AAAA,cACb,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,UAAU;AAAA,cACV,eAAe;AAAA,cACf;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAA,CACD;AACQ,qBAAA,MAAM,YAAY,aAAa;AAAA,UAAA,CACzC,EACA,MAAM,CAAC,UAAU;AACR,oBAAA;AAAA,cACN;AAAA,cACA;AAAA,YACF;AAAA,UAAA,CACD;AAAA,QAAA,WACM,YAAY,aAAa;AAClC,mBAAS,UAAU,MAAM;AACzB,mBAAS,cAAc,UAAU;AACtB,qBAAA,SAAS,WAAW,OAAO;AAAA,QAAA,WAC7B,YAAY,CAAC,aAAa;AAC3B,kBAAA;AAAA,QAAA;AAAA,MACV,CACD;AAAA,IAAA,CACF;AAED,eAAW,UAAU,OAAO;AAErB,WAAA;AAAA,MACL;AAAA,IACF;AAAA,EAAA,CACD;AACH;"}