import { css } from '@emotion/css'; import { GrafanaTheme } from '@grafana/data'; import { LoadingPlaceholder, useStyles } from '@grafana/ui'; import React, { FC, useMemo } from 'react'; import { useUnifiedAlertingSelector } from '../../hooks/useUnifiedAlertingSelector'; import { RulesGroup } from './RulesGroup'; import { getRulesDataSources, getRulesSourceName } from '../../utils/datasource'; import { CombinedRuleNamespace } from 'app/types/unified-alerting'; import pluralize from 'pluralize'; interface Props { namespaces: CombinedRuleNamespace[]; } export const SystemOrApplicationRules: FC = ({ namespaces }) => { const styles = useStyles(getStyles); const rules = useUnifiedAlertingSelector((state) => state.promRules); const rulesDataSources = useMemo(getRulesDataSources, []); const dataSourcesLoading = useMemo(() => rulesDataSources.filter((ds) => rules[ds.name]?.loading), [ rules, rulesDataSources, ]); return (
System or application
{dataSourcesLoading.length ? ( ) : (
)}
{namespaces.map((namespace) => { const { groups, rulesSource } = namespace; return groups.map((group) => ( )); })} {namespaces?.length === 0 && !!rulesDataSources.length &&

No rules found.

} {!rulesDataSources.length &&

There are no Prometheus or Loki datas sources configured.

}
); }; const getStyles = (theme: GrafanaTheme) => ({ loader: css` margin-bottom: 0; `, sectionHeader: css` display: flex; justify-content: space-between; `, wrapper: css` margin-bottom: ${theme.spacing.xl}; `, });