{"version":3,"file":"hooks.mjs","sources":["../../../../src/services/dataSource/hooks.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { type DataSourceApi, type DataSourceInstanceSettings, type DataSourceRef } from '@grafana/data';\n\nimport { type GetDataSourceListFilters } from '../dataSourceSrv';\n\nimport { getDataSourceInstance } from './dataSource';\nimport { getDataSourceInstanceSettings, getDataSourceInstanceSettingsList } 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 UseDataSourceInstanceSettingsListResult {\n  isLoading: boolean;\n  error?: Error;\n  items: DataSourceInstanceSettings[];\n}\n\n/**\n * @public\n */\nexport interface UseDataSourceInstanceResult {\n  isLoading: boolean;\n  error?: Error;\n  dataSource?: DataSourceApi;\n}\n\nfunction stableKey(value: unknown): string {\n  return JSON.stringify(value ?? null);\n}\n\nfunction filtersKey(filters: 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 getDataSourceInstanceSettingsList}. 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 * @internal\n */\nexport function useDataSourceInstanceSettingsList(\n  filters?: GetDataSourceListFilters\n): UseDataSourceInstanceSettingsListResult {\n  const filterValuesKey = filtersKey(filters);\n\n  const filterFunc = filters?.filter;\n  const filterFuncKey = useMemo(() => {\n    if (filterFunc) {\n      return Date.now();\n    }\n    return null;\n  }, [filterFunc]);\n\n  const { loading, error, value } = useAsync(\n    () => getDataSourceInstanceSettingsList(filters),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [filterValuesKey, filterFuncKey]\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"],"names":[],"mappings":";;;;;;AAqCA,SAAS,UAAU,KAAA,EAAwB;AACzC,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,IAAI,CAAA;AACrC;AAEA,SAAS,WAAW,OAAA,EAAuD;AACzE,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,GAAI,QAAA,CAAS,MAAM,6BAAA,CAA8B,GAAG,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAC7F,EAAA,OAAO,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,UAAU,KAAA,EAAM;AACtD;AAWO,SAAS,kCACd,OAAA,EACyC;AACzC,EAAA,MAAM,eAAA,GAAkB,WAAW,OAAO,CAAA;AAE1C,EAAA,MAAM,aAAa,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,MAAA;AAC5B,EAAA,MAAM,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAO,KAAK,GAAA,EAAI;AAAA,IAClB;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAM,GAAI,QAAA;AAAA,IAChC,MAAM,kCAAkC,OAAO,CAAA;AAAA;AAAA,IAE/C,CAAC,iBAAiB,aAAa;AAAA,GACjC;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,GAAI,QAAA,CAAS,MAAM,qBAAA,CAAsB,GAAG,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACrF,EAAA,OAAO,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,YAAY,KAAA,EAAM;AACxD;;;;"}