mirror of
https://github.com/grafana/grafana.git
synced 2025-02-13 00:55:47 -06:00
* add navid and pagenav to edit/add/view alert rules * move ruleeditor smaller component to its own file * fix form alignments with new layout * fixed broken test * reuse AlertingPageWrapper
54 lines
1.9 KiB
TypeScript
54 lines
1.9 KiB
TypeScript
import React, { useEffect } from 'react';
|
|
|
|
import { Alert, LoadingPlaceholder } from '@grafana/ui';
|
|
import { useCleanup } from 'app/core/hooks/useCleanup';
|
|
import { useDispatch } from 'app/types';
|
|
import { RuleIdentifier } from 'app/types/unified-alerting';
|
|
|
|
import { AlertWarning } from './AlertWarning';
|
|
import { AlertRuleForm } from './components/rule-editor/AlertRuleForm';
|
|
import { useIsRuleEditable } from './hooks/useIsRuleEditable';
|
|
import { useUnifiedAlertingSelector } from './hooks/useUnifiedAlertingSelector';
|
|
import { fetchEditableRuleAction } from './state/actions';
|
|
import { initialAsyncRequestState } from './utils/redux';
|
|
import * as ruleId from './utils/rule-id';
|
|
|
|
interface ExistingRuleEditorProps {
|
|
identifier: RuleIdentifier;
|
|
}
|
|
|
|
export function ExistingRuleEditor({ identifier }: ExistingRuleEditorProps) {
|
|
useCleanup((state) => (state.unifiedAlerting.ruleForm.existingRule = initialAsyncRequestState));
|
|
const { loading, result, error, dispatched } = useUnifiedAlertingSelector((state) => state.ruleForm.existingRule);
|
|
const dispatch = useDispatch();
|
|
const { isEditable } = useIsRuleEditable(ruleId.ruleIdentifierToRuleSourceName(identifier), result?.rule);
|
|
|
|
useEffect(() => {
|
|
if (!dispatched) {
|
|
dispatch(fetchEditableRuleAction(identifier));
|
|
}
|
|
}, [dispatched, dispatch, identifier]);
|
|
|
|
if (loading || isEditable === undefined) {
|
|
return <LoadingPlaceholder text="Loading rule..." />;
|
|
}
|
|
|
|
if (error) {
|
|
return (
|
|
<Alert severity="error" title="Failed to load rule">
|
|
{error.message}
|
|
</Alert>
|
|
);
|
|
}
|
|
|
|
if (!result) {
|
|
return <AlertWarning title="Rule not found">Sorry! This rule does not exist.</AlertWarning>;
|
|
}
|
|
|
|
if (isEditable === false) {
|
|
return <AlertWarning title="Cannot edit rule">Sorry! You do not have permission to edit this rule.</AlertWarning>;
|
|
}
|
|
|
|
return <AlertRuleForm existing={result} />;
|
|
}
|