import { css } from '@emotion/css'; import { MouseEvent } from 'react'; import { GrafanaTheme2 } from '@grafana/data'; import { useTranslate } from '@grafana/i18n'; import { reportInteraction } from '@grafana/runtime'; import { useStyles2 } from '@grafana/ui'; import store from 'app/core/store'; import { TutorialCardType } from '../types'; import { cardContent, cardStyle } from './sharedStyles'; interface Props { card: TutorialCardType; } export const TutorialCard = ({ card }: Props) => { const { t } = useTranslate(); const styles = useStyles2(getStyles, card.done); return ( ) => handleTutorialClick(event, card)} >
{card.type}
{card.done ? t('gettingstarted.tutorial-card.complete', 'complete') : card.heading}

{card.title}

{card.info}
); }; const handleTutorialClick = (event: MouseEvent, card: TutorialCardType) => { const isSet = store.get(card.key); if (!isSet) { store.set(card.key, true); } reportInteraction('grafana_getting_started_tutorial', { title: card.title }); }; const getStyles = (theme: GrafanaTheme2, complete: boolean) => { return { card: css({ ...cardStyle(theme, complete), width: '460px', minWidth: '460px', [theme.breakpoints.down('xl')]: { minWidth: '368px', }, [theme.breakpoints.down('lg')]: { minWidth: '272px', }, }), type: css({ color: theme.colors.primary.text, textTransform: 'uppercase', }), heading: css({ textTransform: 'uppercase', color: theme.colors.primary.text, marginBottom: theme.spacing(1), }), cardTitle: css({ marginBottom: theme.spacing(2), }), info: css({ marginBottom: theme.spacing(2), }), status: css({ display: 'flex', justifyContent: 'flex-end', }), }; };