The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/public/app/features/explore/correlationEditLogic.ts

74 lines
2.4 KiB

import { template } from 'lodash';
import { CORRELATION_EDITOR_POST_CONFIRM_ACTION } from 'app/types';
enum CONSEQUENCES {
SOURCE_TARGET_CHANGE = 'cause the query in the right pane to be re-ran and links added to that data',
FULL_QUERY_LOSS = 'lose the changed query',
FULL_CORR_LOSS = 'cause the correlation in progress to be lost',
INVALID_VAR = 'remove the variables, and your changed query may no longer be valid',
}
// returns a string if the modal should show, with what the message string should be
// returns undefined if the modal shouldn't show
export const showModalMessage = (
action: CORRELATION_EDITOR_POST_CONFIRM_ACTION,
isActionLeft: boolean,
dirtyCorrelation: boolean,
dirtyQueryEditor: boolean
) => {
const messageTemplate = template(
'<%= actionStr %> will <%= consequenceStr %>. Would you like to save before continuing?'
);
let actionStr = '';
let consequenceStr = '';
// dirty correlation message always takes priority over dirty query
if (action === CORRELATION_EDITOR_POST_CONFIRM_ACTION.CLOSE_PANE) {
actionStr = 'Closing the pane';
if (isActionLeft) {
if (dirtyCorrelation) {
consequenceStr = CONSEQUENCES.FULL_CORR_LOSS;
} else if (dirtyQueryEditor) {
consequenceStr = CONSEQUENCES.SOURCE_TARGET_CHANGE;
} else {
return undefined;
}
} else {
// right pane close
if (dirtyCorrelation) {
consequenceStr = CONSEQUENCES.FULL_CORR_LOSS;
} else if (dirtyQueryEditor) {
consequenceStr = CONSEQUENCES.FULL_QUERY_LOSS;
} else {
return undefined;
}
}
} else if (action === CORRELATION_EDITOR_POST_CONFIRM_ACTION.CHANGE_DATASOURCE) {
actionStr = 'Changing the datasource';
if (isActionLeft) {
if (dirtyCorrelation) {
consequenceStr = CONSEQUENCES.FULL_CORR_LOSS;
} else {
return undefined;
}
} else {
// right datasource change
if (dirtyQueryEditor) {
consequenceStr = CONSEQUENCES.FULL_QUERY_LOSS;
} else {
return undefined;
}
}
} else if (action === CORRELATION_EDITOR_POST_CONFIRM_ACTION.CLOSE_EDITOR) {
actionStr = 'Closing the editor';
if (dirtyCorrelation) {
consequenceStr = CONSEQUENCES.FULL_CORR_LOSS;
} else if (dirtyQueryEditor) {
consequenceStr = CONSEQUENCES.INVALID_VAR;
} else {
return undefined;
}
}
return messageTemplate({ actionStr, consequenceStr });
};