@grafana/runtime
Version:
Grafana Runtime Library
1 lines • 10.6 kB
Source Map (JSON)
{"version":3,"file":"DataSourcePicker.mjs","sources":["../../../src/components/DataSourcePicker.tsx"],"sourcesContent":["// Libraries\nimport { PureComponent } from 'react';\n\n// Components\nimport {\n DataSourceInstanceSettings,\n DataSourceRef,\n getDataSourceUID,\n isUnsignedPluginSignature,\n SelectableValue,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { ActionMeta, PluginSignatureBadge, Select, Stack } from '@grafana/ui';\n\nimport { getDataSourceSrv } from '../services/dataSourceSrv';\n\nimport { ExpressionDatasourceRef } from './../utils/DataSourceWithBackend';\n\n/**\n * Component props description for the {@link DataSourcePicker}\n *\n * @internal\n */\nexport interface DataSourcePickerProps {\n onChange: (ds: DataSourceInstanceSettings) => void;\n current: DataSourceRef | string | null; // uid\n hideTextValue?: boolean;\n onBlur?: () => void;\n autoFocus?: boolean;\n openMenuOnFocus?: boolean;\n placeholder?: string;\n tracing?: boolean;\n mixed?: boolean;\n dashboard?: boolean;\n metrics?: boolean;\n type?: string | string[];\n annotations?: boolean;\n variables?: boolean;\n alerting?: boolean;\n pluginId?: string;\n /** If true,we show only DSs with logs; and if true, pluginId shouldnt be passed in */\n logs?: boolean;\n // If set to true and there is no value select will be empty, otherwise it will preselect default data source\n noDefault?: boolean;\n width?: number;\n inputId?: string;\n filter?: (dataSource: DataSourceInstanceSettings) => boolean;\n onClear?: () => void;\n invalid?: boolean;\n disabled?: boolean;\n isLoading?: boolean;\n}\n\n/**\n * Component state description for the {@link DataSourcePicker}\n *\n * @internal\n */\nexport interface DataSourcePickerState {\n error?: string;\n}\n\n/**\n * Component to be able to select a datasource from the list of installed and enabled\n * datasources in the current Grafana instance.\n *\n * @internal\n */\nexport class DataSourcePicker extends PureComponent<DataSourcePickerProps, DataSourcePickerState> {\n dataSourceSrv = getDataSourceSrv();\n\n static defaultProps: Partial<DataSourcePickerProps> = {\n autoFocus: false,\n openMenuOnFocus: false,\n placeholder: 'Select data source',\n };\n\n state: DataSourcePickerState = {};\n\n constructor(props: DataSourcePickerProps) {\n super(props);\n }\n\n componentDidMount() {\n const { current } = this.props;\n const dsSettings = this.dataSourceSrv.getInstanceSettings(current);\n if (!dsSettings) {\n this.setState({ error: 'Could not find data source ' + current });\n }\n }\n\n onChange = (item: SelectableValue<string>, actionMeta: ActionMeta) => {\n if (actionMeta.action === 'clear' && this.props.onClear) {\n this.props.onClear();\n return;\n }\n\n const dsSettings = this.dataSourceSrv.getInstanceSettings(item.value);\n\n if (dsSettings) {\n this.props.onChange(dsSettings);\n this.setState({ error: undefined });\n }\n };\n\n private getCurrentValue(): SelectableValue<string> | undefined {\n const { current, hideTextValue, noDefault } = this.props;\n if (!current && noDefault) {\n return;\n }\n\n const ds = this.dataSourceSrv.getInstanceSettings(current);\n\n if (ds) {\n return {\n label: ds.name.slice(0, 37),\n value: ds.uid,\n imgUrl: ds.meta.info.logos.small,\n hideText: hideTextValue,\n meta: ds.meta,\n };\n }\n\n const uid = getDataSourceUID(current);\n\n if (uid === ExpressionDatasourceRef.uid || uid === ExpressionDatasourceRef.name) {\n return { label: uid, value: uid, hideText: hideTextValue };\n }\n\n return {\n label: (uid ?? 'no name') + ' - not found',\n value: uid ?? undefined,\n imgUrl: '',\n hideText: hideTextValue,\n };\n }\n\n getDataSourceOptions() {\n const { alerting, tracing, metrics, mixed, dashboard, variables, annotations, pluginId, type, filter, logs } =\n this.props;\n\n const options = this.dataSourceSrv\n .getList({\n alerting,\n tracing,\n metrics,\n logs,\n dashboard,\n mixed,\n variables,\n annotations,\n pluginId,\n filter,\n type,\n })\n .map((ds) => ({\n value: ds.name,\n label: `${ds.name}${ds.isDefault ? ' (default)' : ''}`,\n imgUrl: ds.meta.info.logos.small,\n meta: ds.meta,\n }));\n\n return options;\n }\n\n render() {\n const {\n autoFocus,\n onBlur,\n onClear,\n openMenuOnFocus,\n placeholder,\n width,\n inputId,\n disabled = false,\n isLoading = false,\n } = this.props;\n const { error } = this.state;\n const options = this.getDataSourceOptions();\n const value = this.getCurrentValue();\n const isClearable = typeof onClear === 'function';\n\n return (\n <div\n aria-label=\"Data source picker select container\"\n data-testid={selectors.components.DataSourcePicker.container}\n >\n <Select\n isLoading={isLoading}\n disabled={disabled}\n aria-label={'Select a data source'}\n data-testid={selectors.components.DataSourcePicker.inputV2}\n inputId={inputId || 'data-source-picker'}\n className=\"ds-picker select-container\"\n isMulti={false}\n isClearable={isClearable}\n backspaceRemovesValue={false}\n onChange={this.onChange}\n options={options}\n autoFocus={autoFocus}\n onBlur={onBlur}\n width={width}\n openMenuOnFocus={openMenuOnFocus}\n maxMenuHeight={500}\n placeholder={placeholder}\n noOptionsMessage=\"No datasources found\"\n value={value ?? null}\n invalid={Boolean(error) || Boolean(this.props.invalid)}\n getOptionLabel={(o) => {\n if (o.meta && isUnsignedPluginSignature(o.meta.signature) && o !== value) {\n return (\n <Stack alignItems=\"center\" justifyContent=\"space-between\">\n <span>{o.label}</span> <PluginSignatureBadge status={o.meta.signature} />\n </Stack>\n );\n }\n return o.label || '';\n }}\n />\n </div>\n );\n }\n}\n"],"names":[],"mappings":"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"}