import { css } from '@emotion/css'; import { GrafanaTheme2 } from '@grafana/data'; import { Button, Drawer, Dropdown, Icon, LinkButton, Menu, Stack, Text, Tooltip, useStyles2 } from '@grafana/ui'; import { RelativeUrl, createRelativeUrl } from 'app/features/alerting/unified/utils/url'; import { SectionDto, SectionDtoStep, SectionsDto, StepButtonDto } from '../irmHooks'; import { ProgressBar, StepsStatus } from './ProgressBar'; export interface EssentialsProps { onClose: () => void; essentialsConfig: SectionsDto; stepsDone: number; totalStepsToDo: number; } export function Essentials({ onClose, essentialsConfig, stepsDone, totalStepsToDo }: EssentialsProps) { return ( ); } export function EssentialContent({ essentialContent, stepsDone, totalStepsToDo, }: { essentialContent: SectionsDto; stepsDone: number; totalStepsToDo: number; }) { return ( {essentialContent.sections.map((section: SectionDto) => (
))} ); } interface SectionProps { section: SectionDto; } function Section({ section }: SectionProps) { const styles = useStyles2(getStyles); return (
{section.title} {section.description} {section.steps.map((step, index) => ( ))}
); } function DoneIcon({ done }: { done: boolean }) { return done ? ( ) : ( ); } interface StepProps { step: SectionDtoStep; } function Step({ step }: StepProps) { return ( {step.done !== undefined && } {step.title} ); } interface LinkButtonProps { urlLink?: { url: RelativeUrl; queryParams?: Record }; label: string; urlLinkOnDone?: { url: RelativeUrl; queryParams?: Record }; labelOnDone?: string; done?: boolean; } function OpenLinkButton(props: LinkButtonProps) { const { urlLink, label, urlLinkOnDone, labelOnDone, done } = props; const urlToGoWhenNotDone = urlLink?.url ? createRelativeUrl(urlLink.url, { returnTo: location.pathname + location.search, ...urlLink.queryParams, }) : ''; const urlToGoWhenDone = urlLinkOnDone?.url ? createRelativeUrl(urlLinkOnDone.url, { returnTo: location.pathname + location.search, ...urlLinkOnDone.queryParams, }) : ''; const urlToGo = done ? urlToGoWhenDone : urlToGoWhenNotDone; return ( {done ? (labelOnDone ?? label) : label} ); } interface StepButtonProps extends StepButtonDto { done?: boolean; } function StepButton({ type, urlLink, urlLinkOnDone, label, labelOnDone, options, onClickOption, done, stepNotAvailableText, }: StepButtonProps) { switch (type) { case 'openLink': return ( ); case 'dropDown': if (Boolean(options?.length)) { return ( {options?.map((option) => ( { onClickOption?.(option.value); }} /> ))} } > ); } else { return {stepNotAvailableText ?? 'No options available'} ; } } } function ProgressStatus({ stepsDone, totalStepsToDo }: { stepsDone: number; totalStepsToDo: number }) { return ( Your progress ); } const getStyles = (theme: GrafanaTheme2) => { return { wrapper: css({ margin: theme.spacing(2, 0), padding: theme.spacing(2), border: `1px solid ${theme.colors.border.medium}`, borderRadius: theme.shape.radius.default, display: 'flex', flexDirection: 'column', gap: theme.spacing(2), }), }; };