mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
	
	
		
			39 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
		
		
			
		
	
	
			39 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
|  | import { css } from '@emotion/css'; | ||
|  | import React from 'react'; | ||
|  | 
 | ||
|  | import { DataSourceInstanceSettings, DataSourceJsonData, GrafanaTheme2 } from '@grafana/data'; | ||
|  | import { Card, PluginSignatureBadge, Tag, useStyles2 } from '@grafana/ui'; | ||
|  | 
 | ||
|  | export interface DataSourceCardProps { | ||
|  |   onChange: (uid: string) => void; | ||
|  |   selected?: boolean; | ||
|  |   ds: DataSourceInstanceSettings<DataSourceJsonData>; | ||
|  | } | ||
|  | 
 | ||
|  | export function DataSourceCard(props: DataSourceCardProps) { | ||
|  |   const { selected, ds, onChange } = props; | ||
|  |   const styles = useStyles2(getStyles); | ||
|  |   return ( | ||
|  |     <Card className={selected ? styles.selectedDataSource : undefined} key={ds.uid} onClick={() => onChange(ds.uid)}> | ||
|  |       <Card.Figure> | ||
|  |         <img alt={`${ds.meta.name} logo`} src={ds.meta.info.logos.large}></img> | ||
|  |       </Card.Figure> | ||
|  |       <Card.Meta> | ||
|  |         {[ds.meta.name, ds.url, ds.isDefault && <Tag key="default-tag" name={'default'} colorIndex={1} />]} | ||
|  |       </Card.Meta> | ||
|  |       <Card.Tags> | ||
|  |         <PluginSignatureBadge status={ds.meta.signature} /> | ||
|  |       </Card.Tags> | ||
|  |       <Card.Heading>{ds.name}</Card.Heading> | ||
|  |     </Card> | ||
|  |   ); | ||
|  | } | ||
|  | 
 | ||
|  | function getStyles(theme: GrafanaTheme2) { | ||
|  |   return { | ||
|  |     selectedDataSource: css`
 | ||
|  |       background-color: ${theme.colors.emphasize(theme.colors.background.secondary, 0.1)}; | ||
|  |     `,
 | ||
|  |   }; | ||
|  | } |