mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Component that can cache and extract variable dependencies * Component that can cache and extract variable dependencies * Updates * Refactoring * Lots of refactoring and iterations of supporting both re-rendering and query re-execution * Updated SceneCanvasText * Updated name of file * Updated * Refactoring a bit * Added back getName * Added comment * minor fix * Minor fix * Merge fixes * Scene variable interpolation progress * Merge fixes * Added all format registeries * Progress on multi value support * Progress on multi value support * Updates * Progress on scoped vars * Fixed circular dependency * Updates * Some review fixes * Updated comment * Added forceRender function * Add back fail on console log * Update public/app/features/scenes/variables/interpolation/sceneInterpolator.test.ts * Moving functions from SceneObjectBase * fixing tests * Fixed e2e Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
100 lines
3.0 KiB
TypeScript
100 lines
3.0 KiB
TypeScript
import React from 'react';
|
|
import AutoSizer from 'react-virtualized-auto-sizer';
|
|
|
|
import { AbsoluteTimeRange, FieldConfigSource, toUtc } from '@grafana/data';
|
|
import { PanelRenderer } from '@grafana/runtime';
|
|
import { Field, PanelChrome, Input } from '@grafana/ui';
|
|
|
|
import { SceneObjectBase } from '../core/SceneObjectBase';
|
|
import { sceneGraph } from '../core/sceneGraph';
|
|
import { SceneComponentProps, SceneLayoutChildState } from '../core/types';
|
|
import { VariableDependencyConfig } from '../variables/VariableDependencyConfig';
|
|
|
|
import { SceneDragHandle } from './SceneDragHandle';
|
|
|
|
export interface VizPanelState extends SceneLayoutChildState {
|
|
title?: string;
|
|
pluginId: string;
|
|
options?: object;
|
|
fieldConfig?: FieldConfigSource;
|
|
}
|
|
|
|
export class VizPanel extends SceneObjectBase<VizPanelState> {
|
|
public static Component = ScenePanelRenderer;
|
|
public static Editor = VizPanelEditor;
|
|
|
|
protected _variableDependency = new VariableDependencyConfig(this, {
|
|
statePaths: ['title'],
|
|
});
|
|
|
|
public onSetTimeRange = (timeRange: AbsoluteTimeRange) => {
|
|
const sceneTimeRange = sceneGraph.getTimeRange(this);
|
|
sceneTimeRange.setState({
|
|
raw: {
|
|
from: toUtc(timeRange.from),
|
|
to: toUtc(timeRange.to),
|
|
},
|
|
from: toUtc(timeRange.from),
|
|
to: toUtc(timeRange.to),
|
|
});
|
|
};
|
|
}
|
|
|
|
function ScenePanelRenderer({ model }: SceneComponentProps<VizPanel>) {
|
|
const { title, pluginId, options, fieldConfig, ...state } = model.useState();
|
|
const { data } = sceneGraph.getData(model).useState();
|
|
|
|
const layout = sceneGraph.getLayout(model);
|
|
const isDraggable = layout.state.isDraggable ? state.isDraggable : false;
|
|
const dragHandle = <SceneDragHandle layoutKey={layout.state.key!} />;
|
|
|
|
const titleInterpolated = sceneGraph.interpolate(model, title);
|
|
|
|
return (
|
|
<AutoSizer>
|
|
{({ width, height }) => {
|
|
if (width < 3 || height < 3) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<PanelChrome
|
|
title={titleInterpolated}
|
|
width={width}
|
|
height={height}
|
|
leftItems={isDraggable ? [dragHandle] : undefined}
|
|
>
|
|
{(innerWidth, innerHeight) => (
|
|
<>
|
|
<PanelRenderer
|
|
title="Raw data"
|
|
pluginId={pluginId}
|
|
width={innerWidth}
|
|
height={innerHeight}
|
|
data={data}
|
|
options={options}
|
|
fieldConfig={fieldConfig}
|
|
onOptionsChange={() => {}}
|
|
onChangeTimeRange={model.onSetTimeRange}
|
|
/>
|
|
</>
|
|
)}
|
|
</PanelChrome>
|
|
);
|
|
}}
|
|
</AutoSizer>
|
|
);
|
|
}
|
|
|
|
ScenePanelRenderer.displayName = 'ScenePanelRenderer';
|
|
|
|
function VizPanelEditor({ model }: SceneComponentProps<VizPanel>) {
|
|
const { title } = model.useState();
|
|
|
|
return (
|
|
<Field label="Title">
|
|
<Input defaultValue={title} onBlur={(evt) => model.setState({ title: evt.currentTarget.value })} />
|
|
</Field>
|
|
);
|
|
}
|