{"version":3,"file":"MetricsBrowserContext.cjs","sources":["../../../../src/components/metrics-browser/MetricsBrowserContext.tsx"],"sourcesContent":["import { createContext, type PropsWithChildren, useCallback, useContext, useMemo } from 'react';\n\nimport { type TimeRange } from '@grafana/data';\n\nimport { type PrometheusLanguageProviderInterface } from '../../language_provider';\n\nimport { buildSelector } from './selectorBuilder';\nimport { useMetricsLabelsValues } from './useMetricsLabelsValues';\n\nexport interface Metric {\n  name: string;\n  details?: string;\n}\n\n/**\n * Context for the Metrics Browser component\n * Provides state and handlers for browsing and selecting Prometheus metrics and labels\n */\ninterface MetricsBrowserContextType {\n  // Error and status state\n  err: string;\n  setErr: (err: string) => void;\n  status: string;\n  setStatus: (status: string) => void;\n\n  // Series limit settings\n  seriesLimit: number;\n  setSeriesLimit: (limit: number) => void;\n\n  // Callback when selector changes\n  onChange: (selector: string) => void;\n\n  // Data and selection state\n  metrics: Metric[];\n  labelKeys: string[];\n  isLoadingLabelKeys: boolean;\n  isLoadingLabelValues: boolean;\n  labelValues: Record<string, string[]>;\n  selectedMetric: string;\n  selectedLabelKeys: string[];\n  selectedLabelValues: Record<string, string[]>;\n\n  // Event handlers\n  onMetricClick: (name: string) => void;\n  onLabelKeyClick: (name: string) => void;\n  onLabelValueClick: (labelKey: string, labelValue: string, isSelected: boolean) => void;\n  getSelector: () => string;\n  onClearClick: () => void;\n\n  // Validation\n  validationStatus: string;\n  onValidationClick: () => void;\n}\n\nconst MetricsBrowserContext = createContext<MetricsBrowserContextType | undefined>(undefined);\n\ntype MetricsBrowserProviderProps = {\n  timeRange: TimeRange;\n  languageProvider: PrometheusLanguageProviderInterface;\n  onChange: (selector: string) => void;\n};\n\n/**\n * Provider component for the Metrics Browser context\n * Manages state and data fetching for metrics, labels, and values\n */\nexport function MetricsBrowserProvider({\n  children,\n  timeRange,\n  languageProvider,\n  onChange,\n}: PropsWithChildren<MetricsBrowserProviderProps>) {\n  const {\n    err,\n    setErr,\n    status,\n    setStatus,\n    seriesLimit,\n    setSeriesLimit,\n    validationStatus,\n    metrics,\n    labelKeys,\n    isLoadingLabelKeys,\n    isLoadingLabelValues,\n    labelValues,\n    selectedMetric,\n    selectedLabelKeys,\n    selectedLabelValues,\n    handleSelectedMetricChange,\n    handleSelectedLabelKeyChange,\n    handleSelectedLabelValueChange,\n    handleValidation,\n    handleClear,\n  } = useMetricsLabelsValues(timeRange, languageProvider);\n\n  // Build a Prometheus selector string from the current selections\n  const getSelector = useCallback(\n    () => buildSelector(selectedMetric, selectedLabelValues),\n    [selectedLabelValues, selectedMetric]\n  );\n\n  // Memoize the context value to prevent unnecessary re-renders\n  const value = useMemo(\n    () => ({\n      err,\n      setErr,\n      status,\n      setStatus,\n      seriesLimit,\n      setSeriesLimit,\n      validationStatus,\n      onChange,\n      getSelector,\n      metrics,\n      labelKeys,\n      isLoadingLabelKeys,\n      isLoadingLabelValues,\n      labelValues,\n      selectedMetric,\n      selectedLabelKeys,\n      selectedLabelValues,\n      onMetricClick: handleSelectedMetricChange,\n      onLabelKeyClick: handleSelectedLabelKeyChange,\n      onLabelValueClick: handleSelectedLabelValueChange,\n      onValidationClick: handleValidation,\n      onClearClick: handleClear,\n    }),\n    [\n      err,\n      setErr,\n      status,\n      setStatus,\n      seriesLimit,\n      setSeriesLimit,\n      validationStatus,\n      onChange,\n      getSelector,\n      metrics,\n      labelKeys,\n      isLoadingLabelKeys,\n      isLoadingLabelValues,\n      labelValues,\n      selectedMetric,\n      selectedLabelKeys,\n      selectedLabelValues,\n      handleSelectedMetricChange,\n      handleSelectedLabelKeyChange,\n      handleSelectedLabelValueChange,\n      handleValidation,\n      handleClear,\n    ]\n  );\n\n  return <MetricsBrowserContext.Provider value={value}>{children}</MetricsBrowserContext.Provider>;\n}\n\n/**\n * Hook to access the MetricsBrowser context\n * Must be used within a MetricsBrowserProvider\n */\nexport function useMetricsBrowser() {\n  const context = useContext(MetricsBrowserContext);\n  if (context === undefined) {\n    throw new Error('useMetricsBrowser must be used within a MetricsBrowserProvider');\n  }\n  return context;\n}\n"],"names":["createContext","useMetricsLabelsValues","useCallback","buildSelector","useMemo","jsx","useContext"],"mappings":";;;;;;;;;;AAsDA,MAAM,qBAAA,GAAwBA,oBAAqD,KAAA,CAAS,CAAA;AAYrF,SAAS,sBAAA,CAAuB;AAAA,EACrC,QAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAAmD;AACjD,EAAA,MAAM;AAAA,IACJ,GAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,kBAAA;AAAA,IACA,oBAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,0BAAA;AAAA,IACA,4BAAA;AAAA,IACA,8BAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF,GAAIC,6CAAA,CAAuB,SAAA,EAAW,gBAAgB,CAAA;AAGtD,EAAA,MAAM,WAAA,GAAcC,iBAAA;AAAA,IAClB,MAAMC,6BAAA,CAAc,cAAA,EAAgB,mBAAmB,CAAA;AAAA,IACvD,CAAC,qBAAqB,cAAc;AAAA,GACtC;AAGA,EAAA,MAAM,KAAA,GAAQC,aAAA;AAAA,IACZ,OAAO;AAAA,MACL,GAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,kBAAA;AAAA,MACA,oBAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA,aAAA,EAAe,0BAAA;AAAA,MACf,eAAA,EAAiB,4BAAA;AAAA,MACjB,iBAAA,EAAmB,8BAAA;AAAA,MACnB,iBAAA,EAAmB,gBAAA;AAAA,MACnB,YAAA,EAAc;AAAA,KAChB,CAAA;AAAA,IACA;AAAA,MACE,GAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,kBAAA;AAAA,MACA,oBAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA,0BAAA;AAAA,MACA,4BAAA;AAAA,MACA,8BAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,uBAAOC,cAAA,CAAC,qBAAA,CAAsB,QAAA,EAAtB,EAA+B,OAAe,QAAA,EAAS,CAAA;AACjE;AAMO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,OAAA,GAAUC,iBAAW,qBAAqB,CAAA;AAChD,EAAA,IAAI,YAAY,KAAA,CAAA,EAAW;AACzB,IAAA,MAAM,IAAI,MAAM,gEAAgE,CAAA;AAAA,EAClF;AACA,EAAA,OAAO,OAAA;AACT;;;;;"}