mirror of
https://github.com/grafana/grafana.git
synced 2025-02-20 11:48:34 -06:00
* Hoovering over a legend label hightlighs that pie slice * Change to event bus * Adds EventBusWithSource to help identify the origin of the event * Add tests and fix bug with incorrect source * Clean up PieChart and EventBus a bit * Fix bug when payload.source is undefined * Add some documentation and adjust naming * useState instead of useSetState * Clean up some more documentation * Move eventbus to state * add event bus actions to the debug panel * add event bus actions to the debug panel * Try to make the naming a bit clearer * Try passing eventbus as context * Fix lint issues * Move event bus context to panel chrome * Fix event handler functions * switch to using useCallback for legend item callbacks * Remove unused parameters * Add id to panel fixture of PanelChrome test * Simplify event source * Place eventBus inside more generic context * Push handling of context up the tree to VizLegend only export usePanelContext and PanelContextProvider implement isOwnEvent on EventBus some cleanup Co-authored-by: Ryan McKinley <ryantxu@gmail.com> Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
52 lines
1.3 KiB
TypeScript
52 lines
1.3 KiB
TypeScript
import React, { Component } from 'react';
|
|
import { PanelProps } from '@grafana/data';
|
|
|
|
import { DebugPanelOptions, DebugMode, UpdateCounters } from './types';
|
|
import { EventBusLoggerPanel } from './EventBusLogger';
|
|
import { RenderInfoViewer } from './RenderInfoViewer';
|
|
|
|
type Props = PanelProps<DebugPanelOptions>;
|
|
|
|
export class DebugPanel extends Component<Props> {
|
|
// Intentionally not state to avoid overhead -- yes, things will be 1 tick behind
|
|
lastRender = Date.now();
|
|
counters: UpdateCounters = {
|
|
render: 0,
|
|
dataChanged: 0,
|
|
schemaChanged: 0,
|
|
};
|
|
|
|
shouldComponentUpdate(prevProps: Props) {
|
|
const { data, options } = this.props;
|
|
|
|
if (prevProps.data !== data) {
|
|
this.counters.dataChanged++;
|
|
|
|
if (options.counters?.schemaChanged) {
|
|
if (data.structureRev !== prevProps.data.structureRev) {
|
|
this.counters.schemaChanged++;
|
|
}
|
|
}
|
|
}
|
|
return true; // always render?
|
|
}
|
|
|
|
resetCounters = () => {
|
|
this.counters = {
|
|
render: 0,
|
|
dataChanged: 0,
|
|
schemaChanged: 0,
|
|
};
|
|
this.setState(this.state); // force update
|
|
};
|
|
|
|
render() {
|
|
const { options } = this.props;
|
|
if (options.mode === DebugMode.Events) {
|
|
return <EventBusLoggerPanel eventBus={this.props.eventBus} />;
|
|
}
|
|
|
|
return <RenderInfoViewer {...this.props} />;
|
|
}
|
|
}
|