{"version":3,"file":"hooks.cjs","sources":["../../../../src/services/dataSource/hooks.ts"],"sourcesContent":["import { useAsync } from 'react-use';\n\nimport {\n  type DataSourceApi,\n  type DataSourceInstanceListItem,\n  type DataSourceInstanceSettings,\n  type DataSourceRef,\n} from '@grafana/data';\n\nimport { type GetDataSourceListFilters } from '../dataSourceSrv';\n\nimport { getDataSourceInstance } from './dataSource';\nimport {\n  type GetDataSourceInstanceListFilters,\n  getDataSourceInstanceSettings,\n  getDataSourceInstanceList,\n  getDefaultDataSourceInstance,\n  hasDataSourceInstance,\n} from './settings';\n\n/**\n * @public\n */\nexport interface UseDataSourceInstanceSettingsResult {\n  isLoading: boolean;\n  error?: Error;\n  settings?: DataSourceInstanceSettings;\n}\n\n/**\n * @public\n */\nexport interface UseDataSourceInstanceListResult {\n  isLoading: boolean;\n  error?: Error;\n  items: DataSourceInstanceListItem[];\n}\n\n/**\n * @public\n */\nexport interface UseDataSourceInstanceResult {\n  isLoading: boolean;\n  error?: Error;\n  dataSource?: DataSourceApi;\n}\n\n/**\n * @public\n */\nexport interface UseDefaultDataSourceInstanceResult {\n  isLoading: boolean;\n  error?: Error;\n  item?: DataSourceInstanceListItem;\n}\n\n/**\n * @public\n */\nexport interface UseHasDataSourceInstanceResult {\n  isLoading: boolean;\n  error?: Error;\n  hasInstance: boolean;\n}\n\nfunction stableKey(value: unknown): string {\n  return JSON.stringify(value ?? null);\n}\n\nfunction filtersKey(filters: GetDataSourceInstanceListFilters | GetDataSourceListFilters | undefined): string {\n  if (!filters) {\n    return stableKey(null);\n  }\n  const { filter: _, ...rest } = filters;\n  return stableKey(rest);\n}\n\n/**\n * React hook wrapping {@link getDataSourceInstanceSettings}. Re-fetches when `ref`\n * changes (compared by value, so inline objects are safe).\n *\n * Template variable strings (e.g. `$ds` or `${ds}`) are not supported — interpolate\n * them before passing the resolved uid or name to this hook.\n *\n * @public\n */\nexport function useDataSourceInstanceSettings(\n  ref?: DataSourceRef | string | null\n): UseDataSourceInstanceSettingsResult {\n  const refKey = stableKey(ref);\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const { loading, error, value } = useAsync(() => getDataSourceInstanceSettings(ref), [refKey]);\n  return { isLoading: loading, error, settings: value };\n}\n\n/**\n * React hook wrapping {@link getDataSourceInstanceList}. Re-fetches when\n * `filters` changes (compared by value, so inline objects are safe).\n * When `filters.filter` (a callback) is set, the hook re-fetches when the\n * function reference changes. Wrap inline filter callbacks in `useCallback`\n * to avoid unnecessary re-fetches.\n *\n * @public\n */\nexport function useDataSourceInstanceList(filters?: GetDataSourceInstanceListFilters): UseDataSourceInstanceListResult {\n  const filterValuesKey = filtersKey(filters);\n  const filterFunc = filters?.filter;\n\n  const { loading, error, value } = useAsync(\n    () => getDataSourceInstanceList(filters),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [filterValuesKey, filterFunc]\n  );\n\n  return { isLoading: loading, error, items: value ?? [] };\n}\n\n/**\n * React hook wrapping {@link getDataSourceInstance}. Re-fetches when `ref`\n * changes (compared by value, so inline objects are safe).\n *\n * Template variable strings (e.g. `$ds` or `${ds}`) are not supported — interpolate\n * them before passing the resolved uid or name to this hook.\n *\n * @public\n */\nexport function useDataSourceInstance(ref?: DataSourceRef | string | null): UseDataSourceInstanceResult {\n  const refKey = stableKey(ref);\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const { loading, error, value } = useAsync(() => getDataSourceInstance(ref), [refKey]);\n  return { isLoading: loading, error, dataSource: value };\n}\n\n/**\n * React hook wrapping {@link getDefaultDataSourceInstance}. Re-fetches when\n * `type` changes.\n *\n * @public\n */\nexport function useDefaultDataSourceInstance(type: string): UseDefaultDataSourceInstanceResult {\n  const { loading, error, value } = useAsync(() => getDefaultDataSourceInstance(type), [type]);\n  return { isLoading: loading, error, item: value };\n}\n\n/**\n * React hook wrapping {@link hasDataSourceInstance}. Re-fetches when `type` changes.\n *\n * @public\n */\nexport function useHasDataSourceInstance(type: string): UseHasDataSourceInstanceResult {\n  const { loading, error, value } = useAsync(() => hasDataSourceInstance(type), [type]);\n  return { isLoading: loading, error, hasInstance: value ?? false };\n}\n"],"names":["useAsync","getDataSourceInstanceSettings","getDataSourceInstanceList","getDataSourceInstance","getDefaultDataSourceInstance","hasDataSourceInstance"],"mappings":";;;;;;;;;AAiEA,SAAS,UAAU,KAAA,EAAwB;AACzC,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,IAAI,CAAA;AACrC;AAEA,SAAS,WAAW,OAAA,EAA0F;AAC5G,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,UAAU,IAAI,CAAA;AAAA,EACvB;AACA,EAAA,MAAM,EAAE,MAAA,EAAQ,CAAA,EAAG,GAAG,MAAK,GAAI,OAAA;AAC/B,EAAA,OAAO,UAAU,IAAI,CAAA;AACvB;AAWO,SAAS,8BACd,GAAA,EACqC;AACrC,EAAA,MAAM,MAAA,GAAS,UAAU,GAAG,CAAA;AAE5B,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAM,GAAIA,iBAAA,CAAS,MAAMC,sCAAA,CAA8B,GAAG,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAC7F,EAAA,OAAO,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,UAAU,KAAA,EAAM;AACtD;AAWO,SAAS,0BAA0B,OAAA,EAA6E;AACrH,EAAA,MAAM,eAAA,GAAkB,WAAW,OAAO,CAAA;AAC1C,EAAA,MAAM,aAAa,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,MAAA;AAE5B,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAM,GAAID,iBAAA;AAAA,IAChC,MAAME,mCAA0B,OAAO,CAAA;AAAA;AAAA,IAEvC,CAAC,iBAAiB,UAAU;AAAA,GAC9B;AAEA,EAAA,OAAO,EAAE,SAAA,EAAW,OAAA,EAAS,OAAO,KAAA,EAAO,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,EAAC,EAAE;AACzD;AAWO,SAAS,sBAAsB,GAAA,EAAkE;AACtG,EAAA,MAAM,MAAA,GAAS,UAAU,GAAG,CAAA;AAE5B,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAM,GAAIF,iBAAA,CAAS,MAAMG,gCAAA,CAAsB,GAAG,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACrF,EAAA,OAAO,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,YAAY,KAAA,EAAM;AACxD;AAQO,SAAS,6BAA6B,IAAA,EAAkD;AAC7F,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAM,GAAIH,iBAAA,CAAS,MAAMI,qCAAA,CAA6B,IAAI,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAC3F,EAAA,OAAO,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,MAAM,KAAA,EAAM;AAClD;AAOO,SAAS,yBAAyB,IAAA,EAA8C;AACrF,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAM,GAAIJ,iBAAA,CAAS,MAAMK,8BAAA,CAAsB,IAAI,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AACpF,EAAA,OAAO,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,WAAA,EAAa,wBAAS,KAAA,EAAM;AAClE;;;;;;;;"}