import { css, keyframes } from '@emotion/css'; import React from 'react'; import { GrafanaTheme } from '@grafana/data'; import { locationService } from '@grafana/runtime'; import { Button, HorizontalGroup, Spinner, useStyles, VerticalGroup } from '@grafana/ui'; import { DashboardInitPhase } from 'app/types'; export interface Props { initPhase: DashboardInitPhase; } export const DashboardLoading = ({ initPhase }: Props) => { const styles = useStyles(getStyles); const cancelVariables = () => { locationService.push('/'); }; return (
{initPhase} {' '}
); }; export const getStyles = (theme: GrafanaTheme) => { // Amount of time we want to pass before we start showing loading spinner const slowStartThreshold = '0.5s'; const invisibleToVisible = keyframes` 0% { opacity: 0%; } 100% { opacity: 100%; } `; return { dashboardLoading: css` height: 60vh; display: flex; opacity: 0%; align-items: center; justify-content: center; animation: ${invisibleToVisible} 0s step-end ${slowStartThreshold} 1 normal forwards; `, dashboardLoadingText: css` font-size: ${theme.typography.size.lg}; `, }; };