{
readonly state: State = {
isLoading: false,
allNodesExpanded: null,
testRuleResponse: {},
};
formattedJson: any;
clipboard: any;
componentDidMount() {
this.testRule();
}
async testRule() {
const { dashboard, panel } = this.props;
// dashboard save model
const model = dashboard.getSaveModelCloneOld();
// now replace panel to get current edits
model.panels = model.panels.map((dashPanel) => {
return dashPanel.id === panel.id ? panel.getSaveModel() : dashPanel;
});
const payload = { dashboard: model, panelId: panel.id };
this.setState({ isLoading: true });
const testRuleResponse = await getBackendSrv().post(`/api/alerts/test`, payload);
this.setState({ isLoading: false, testRuleResponse });
}
setFormattedJson = (formattedJson: any) => {
this.formattedJson = formattedJson;
};
getTextForClipboard = () => {
return JSON.stringify(this.formattedJson, null, 2);
};
onToggleExpand = () => {
this.setState((prevState) => ({
...prevState,
allNodesExpanded: !this.state.allNodesExpanded,
}));
};
getNrOfOpenNodes = () => {
if (this.state.allNodesExpanded === null) {
return 3; // 3 is default, ie when state is null
} else if (this.state.allNodesExpanded) {
return 20;
}
return 1;
};
renderExpandCollapse = () => {
const { allNodesExpanded } = this.state;
const collapse = (
<>
Collapse All
>
);
const expand = (
<>
Expand All
>
);
return allNodesExpanded ? collapse : expand;
};
render() {
const { testRuleResponse, isLoading } = this.state;
const clearButton = clearButtonStyles(this.props.theme);
if (isLoading === true) {
return ;
}
const openNodes = this.getNrOfOpenNodes();
return (
<>
Copy to Clipboard
>
);
}
}
export const TestRuleResult = withTheme2(UnThemedTestRuleResult);