// ConfigCard.tsx import { css } from '@emotion/css'; import { GrafanaTheme2 } from '@grafana/data'; import { Button, Icon, LoadingPlaceholder, Stack, useStyles2 } from '@grafana/ui'; import { Trans } from 'app/core/internationalization'; import { IrmCardConfiguration } from './ConfigureIRM'; import { ProgressBar, StepsStatus } from './ProgressBar'; interface ConfigCardProps { config: IrmCardConfiguration; handleActionClick: (id: number, isDone: boolean | undefined) => void; isLoading: boolean; } export function ConfigCard({ config, handleActionClick, isLoading = false }: ConfigCardProps) { const styles = useStyles2(getStyles); return (
{config.title} {config.titleIcon && } {/* Only show check icon when not loading */} {config.isDone && !isLoading && }
{config.stepsDone && config.totalStepsToDo && !isLoading && (
complete
)}
{!isLoading ? config.description : } {/* Only show ProgressBar when not loading */} {!isLoading && config.stepsDone && config.totalStepsToDo && ( )}
); } const getStyles = (theme: GrafanaTheme2) => ({ cardTitle: css({ display: 'flex', flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', width: '100%', }), cardContent: css({ background: theme.colors.background.secondary, padding: theme.spacing(2), borderRadius: theme.shape.radius.default, height: '100%', gap: theme.spacing(1), display: 'flex', flexDirection: 'column', justifyContent: 'space-between', }), });