UNPKG

@grafana/runtime

Version:
1 lines 10.5 kB
{"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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"}