mirror of
https://github.com/grafana/grafana.git
synced 2024-11-26 02:40:26 -06:00
PanelEdit: Fixed re-using query result after leaving panel edit (#24340)
This commit is contained in:
parent
8de6ef473f
commit
33123c7e7e
@ -58,10 +58,7 @@ export function panelEditorCleanUp(): ThunkResult<void> {
|
||||
// Resend last query result on source panel query runner
|
||||
// But do this after the panel edit editor exit process has completed
|
||||
setTimeout(() => {
|
||||
const lastResult = panel.getQueryRunner().getLastResult();
|
||||
if (lastResult) {
|
||||
sourcePanel.getQueryRunner().pipeDataToSubject(lastResult);
|
||||
}
|
||||
sourcePanel.getQueryRunner().useLastResultFrom(panel.getQueryRunner());
|
||||
}, 20);
|
||||
}
|
||||
|
||||
|
@ -235,10 +235,6 @@ export class PanelChrome extends PureComponent<Props, State> {
|
||||
return panel.snapshotData && panel.snapshotData.length;
|
||||
}
|
||||
|
||||
panelHasLastResult = () => {
|
||||
return !!this.props.panel.getQueryRunner().getLastResult();
|
||||
};
|
||||
|
||||
get wantsQueryExecution() {
|
||||
return !(this.props.plugin.meta.skipDataQuery || this.hasPanelSnapshot);
|
||||
}
|
||||
|
@ -6,8 +6,10 @@ import {
|
||||
PanelProps,
|
||||
standardEditorsRegistry,
|
||||
standardFieldConfigEditorRegistry,
|
||||
PanelData,
|
||||
} from '@grafana/data';
|
||||
import { ComponentClass } from 'react';
|
||||
import { PanelQueryRunner } from './PanelQueryRunner';
|
||||
|
||||
class TablePanelCtrl {}
|
||||
|
||||
@ -336,5 +338,16 @@ describe('PanelModel', () => {
|
||||
expect(model.thresholds).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe('destroy', () => {
|
||||
it('Should still preserve last query result', () => {
|
||||
model.getQueryRunner().useLastResultFrom({
|
||||
getLastResult: () => ({} as PanelData),
|
||||
} as PanelQueryRunner);
|
||||
|
||||
model.destroy();
|
||||
expect(model.getQueryRunner().getLastResult()).toBeDefined();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -422,11 +422,8 @@ export class PanelModel implements DataConfigSource {
|
||||
clone.isEditing = true;
|
||||
const sourceQueryRunner = this.getQueryRunner();
|
||||
|
||||
// pipe last result to new clone query runner
|
||||
const lastResult = sourceQueryRunner.getLastResult();
|
||||
if (lastResult) {
|
||||
clone.getQueryRunner().pipeDataToSubject(lastResult);
|
||||
}
|
||||
// Copy last query result
|
||||
clone.getQueryRunner().useLastResultFrom(sourceQueryRunner);
|
||||
|
||||
return clone;
|
||||
}
|
||||
@ -469,7 +466,6 @@ export class PanelModel implements DataConfigSource {
|
||||
|
||||
if (this.queryRunner) {
|
||||
this.queryRunner.destroy();
|
||||
this.queryRunner = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -190,11 +190,6 @@ export class PanelQueryRunner {
|
||||
});
|
||||
}
|
||||
|
||||
pipeDataToSubject = (data: PanelData) => {
|
||||
this.subject.next(data);
|
||||
this.lastResult = data;
|
||||
};
|
||||
|
||||
resendLastResult = () => {
|
||||
if (this.lastResult) {
|
||||
this.subject.next(this.lastResult);
|
||||
@ -215,6 +210,15 @@ export class PanelQueryRunner {
|
||||
}
|
||||
}
|
||||
|
||||
useLastResultFrom(runner: PanelQueryRunner) {
|
||||
this.lastResult = runner.getLastResult();
|
||||
|
||||
if (this.lastResult) {
|
||||
// The subject is a replay subject so anyone subscribing will get this last result
|
||||
this.subject.next(this.lastResult);
|
||||
}
|
||||
}
|
||||
|
||||
getLastResult(): PanelData {
|
||||
return this.lastResult;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user