@grafana/scenes 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/dist/esm/components/SceneByFrameRepeater.js +38 -0
- package/dist/esm/components/SceneByFrameRepeater.js.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.js +195 -222
- package/dist/index.js.map +1 -1
- package/package.json +18 -13
- package/dist/esm/components/ScenePanelRepeater.js +0 -66
- package/dist/esm/components/ScenePanelRepeater.js.map +0 -1
package/README.md
CHANGED
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
|
|
16
16
|
## Development
|
|
17
17
|
|
|
18
|
+
### Working with Grafana
|
|
19
|
+
|
|
18
20
|
@grafana/scenes does not come with dedicated playground yet. It is currently possible to run Scene demos using Grafana. To do that, the following setup is required.
|
|
19
21
|
|
|
20
22
|
1. Clone @grafana/scenes repository.
|
|
@@ -24,3 +26,10 @@
|
|
|
24
26
|
1. From Grafana directory run `yarn install`.
|
|
25
27
|
1. Start Grafana with `scenes` [feature toggle enabled](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#feature_toggles)
|
|
26
28
|
1. Navigate to `http://localhost:3000/scenes` to explore demo scenes.
|
|
29
|
+
|
|
30
|
+
### Working with Grafana app plugin
|
|
31
|
+
|
|
32
|
+
1. Run `YARN_IGNORE_PATH=1 yarn link` from @grafana/scenes directory.
|
|
33
|
+
1. Run `yarn dev` from @grafana/scenes directory.
|
|
34
|
+
1. Run `yarn link @grafana/scenes` from app plugin directory.
|
|
35
|
+
1. Start app plugin development server.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { LoadingState } from '@grafana/data';
|
|
3
|
+
import { SceneObjectBase } from '../core/SceneObjectBase.js';
|
|
4
|
+
import { sceneGraph } from '../core/sceneGraph.js';
|
|
5
|
+
|
|
6
|
+
class SceneByFrameRepeater extends SceneObjectBase {
|
|
7
|
+
activate() {
|
|
8
|
+
super.activate();
|
|
9
|
+
this._subs.add(
|
|
10
|
+
sceneGraph.getData(this).subscribeToState({
|
|
11
|
+
next: (data) => {
|
|
12
|
+
var _a;
|
|
13
|
+
if (((_a = data.data) == null ? void 0 : _a.state) === LoadingState.Done) {
|
|
14
|
+
this.performRepeat(data.data);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
})
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
performRepeat(data) {
|
|
21
|
+
const newChildren = [];
|
|
22
|
+
for (let seriesIndex = 0; seriesIndex < data.series.length; seriesIndex++) {
|
|
23
|
+
const layoutChild = this.state.getLayoutChild(data, data.series[seriesIndex], seriesIndex);
|
|
24
|
+
newChildren.push(layoutChild);
|
|
25
|
+
}
|
|
26
|
+
this.state.body.setState({ children: newChildren });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
SceneByFrameRepeater.Component = ({ model, isEditing }) => {
|
|
30
|
+
const { body } = model.useState();
|
|
31
|
+
return /* @__PURE__ */ React.createElement(body.Component, {
|
|
32
|
+
model: body,
|
|
33
|
+
isEditing
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export { SceneByFrameRepeater };
|
|
38
|
+
//# sourceMappingURL=SceneByFrameRepeater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SceneByFrameRepeater.js","sources":["../../../src/components/SceneByFrameRepeater.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LoadingState, PanelData, DataFrame } from '@grafana/data';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport {\n SceneComponentProps,\n SceneObject,\n SceneObjectStatePlain,\n SceneLayoutState,\n SceneLayoutChild,\n} from '../core/types';\n\ninterface RepeatOptions extends SceneObjectStatePlain {\n body: SceneObject<SceneLayoutState>;\n getLayoutChild(data: PanelData, frame: DataFrame, frameIndex: number): SceneLayoutChild;\n}\n\nexport class SceneByFrameRepeater extends SceneObjectBase<RepeatOptions> {\n public activate(): void {\n super.activate();\n\n this._subs.add(\n sceneGraph.getData(this).subscribeToState({\n next: (data) => {\n if (data.data?.state === LoadingState.Done) {\n this.performRepeat(data.data);\n }\n },\n })\n );\n }\n\n private performRepeat(data: PanelData) {\n const newChildren: SceneLayoutChild[] = [];\n\n for (let seriesIndex = 0; seriesIndex < data.series.length; seriesIndex++) {\n const layoutChild = this.state.getLayoutChild(data, data.series[seriesIndex], seriesIndex);\n newChildren.push(layoutChild);\n }\n\n this.state.body.setState({ children: newChildren });\n }\n\n public static Component = ({ model, isEditing }: SceneComponentProps<SceneByFrameRepeater>) => {\n const { body } = model.useState();\n return <body.Component model={body} isEditing={isEditing} />;\n };\n}\n"],"names":[],"mappings":";;;;;AAmBO,MAAM,6BAA6B,eAA+B,CAAA;AAAA,EAChE,QAAiB,GAAA;AACtB,IAAA,KAAA,CAAM,QAAS,EAAA,CAAA;AAEf,IAAA,IAAA,CAAK,KAAM,CAAA,GAAA;AAAA,MACT,UAAW,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAE,gBAAiB,CAAA;AAAA,QACxC,IAAA,EAAM,CAAC,IAAS,KAAA;AAzBxB,UAAA,IAAA,EAAA,CAAA;AA0BU,UAAA,IAAA,CAAA,CAAI,EAAK,GAAA,IAAA,CAAA,IAAA,KAAL,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,MAAU,aAAa,IAAM,EAAA;AAC1C,YAAK,IAAA,CAAA,aAAA,CAAc,KAAK,IAAI,CAAA,CAAA;AAAA,WAC9B;AAAA,SACF;AAAA,OACD,CAAA;AAAA,KACH,CAAA;AAAA,GACF;AAAA,EAEQ,cAAc,IAAiB,EAAA;AACrC,IAAA,MAAM,cAAkC,EAAC,CAAA;AAEzC,IAAA,KAAA,IAAS,cAAc,CAAG,EAAA,WAAA,GAAc,IAAK,CAAA,MAAA,CAAO,QAAQ,WAAe,EAAA,EAAA;AACzE,MAAM,MAAA,WAAA,GAAc,KAAK,KAAM,CAAA,cAAA,CAAe,MAAM,IAAK,CAAA,MAAA,CAAO,cAAc,WAAW,CAAA,CAAA;AACzF,MAAA,WAAA,CAAY,KAAK,WAAW,CAAA,CAAA;AAAA,KAC9B;AAEA,IAAA,IAAA,CAAK,MAAM,IAAK,CAAA,QAAA,CAAS,EAAE,QAAA,EAAU,aAAa,CAAA,CAAA;AAAA,GACpD;AAMF,CAAA;AA9Ba,oBAAA,CA0BG,SAAY,GAAA,CAAC,EAAE,KAAA,EAAO,WAA2D,KAAA;AAC7F,EAAA,MAAM,EAAE,IAAA,EAAS,GAAA,KAAA,CAAM,QAAS,EAAA,CAAA;AAChC,EAAO,uBAAA,KAAA,CAAA,aAAA,CAAC,KAAK,SAAL,EAAA;AAAA,IAAe,KAAO,EAAA,IAAA;AAAA,IAAM,SAAA;AAAA,GAAsB,CAAA,CAAA;AAC5D,CAAA;;;;"}
|
package/dist/esm/index.js
CHANGED
|
@@ -25,7 +25,7 @@ export { NestedScene } from './components/NestedScene.js';
|
|
|
25
25
|
export { SceneCanvasText } from './components/SceneCanvasText.js';
|
|
26
26
|
export { SceneToolbarButton, SceneToolbarInput } from './components/SceneToolbarButton.js';
|
|
27
27
|
export { SceneTimePicker } from './components/SceneTimePicker.js';
|
|
28
|
-
export {
|
|
28
|
+
export { SceneByFrameRepeater } from './components/SceneByFrameRepeater.js';
|
|
29
29
|
export { SceneSubMenu } from './components/SceneSubMenu.js';
|
|
30
30
|
export { SceneFlexLayout } from './components/layout/SceneFlexLayout.js';
|
|
31
31
|
export { SceneGridLayout } from './components/layout/SceneGridLayout.js';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { Observable, Observer, Subscription, Unsubscribable } from 'rxjs';
|
|
4
|
-
import { BusEventWithPayload, PanelData, BusEvent, BusEventType, BusEventHandler, TimeZone, TimeRange, ScopedVars, DataTransformerConfig, DataSourceRef, DataQuery, Registry, RegistryItem, VariableRefresh, VariableSort, FieldConfigSource, PanelPlugin, AbsoluteTimeRange } from '@grafana/data';
|
|
4
|
+
import { BusEventWithPayload, PanelData, BusEvent, BusEventType, BusEventHandler, TimeZone, TimeRange, ScopedVars, DataTransformerConfig, DataSourceRef, DataQuery, Registry, RegistryItem, VariableRefresh, VariableSort, FieldConfigSource, PanelPlugin, AbsoluteTimeRange, DataFrame } from '@grafana/data';
|
|
5
5
|
import { VariableType, VariableHide, VariableModel } from '@grafana/schema';
|
|
6
6
|
import { IconName } from '@grafana/ui';
|
|
7
7
|
import ReactGridLayout from 'react-grid-layout';
|
|
@@ -719,12 +719,13 @@ declare class SceneTimePicker extends SceneObjectBase<SceneTimePickerState> {
|
|
|
719
719
|
declare function SceneTimePickerRenderer({ model }: SceneComponentProps<SceneTimePicker>): JSX.Element | null;
|
|
720
720
|
|
|
721
721
|
interface RepeatOptions extends SceneObjectStatePlain {
|
|
722
|
-
|
|
722
|
+
body: SceneObject<SceneLayoutState>;
|
|
723
|
+
getLayoutChild(data: PanelData, frame: DataFrame, frameIndex: number): SceneLayoutChild;
|
|
723
724
|
}
|
|
724
|
-
declare class
|
|
725
|
+
declare class SceneByFrameRepeater extends SceneObjectBase<RepeatOptions> {
|
|
725
726
|
activate(): void;
|
|
726
727
|
private performRepeat;
|
|
727
|
-
static Component: ({ model, isEditing }: SceneComponentProps<
|
|
728
|
+
static Component: ({ model, isEditing }: SceneComponentProps<SceneByFrameRepeater>) => JSX.Element;
|
|
728
729
|
}
|
|
729
730
|
|
|
730
731
|
interface SceneSubMenuState extends SceneLayoutState {
|
|
@@ -793,4 +794,4 @@ declare class SceneGridLayout extends SceneObjectBase<SceneGridLayoutState> {
|
|
|
793
794
|
}
|
|
794
795
|
declare function SceneGridLayoutRenderer({ model }: SceneComponentProps<SceneGridLayout>): JSX.Element;
|
|
795
796
|
|
|
796
|
-
export { ConstantVariable, CustomFormatterFn, CustomVariable, DataSourceVariable, DeepPartial, EmbeddedScene, FormatRegistryID, FormatVariable, NestedScene, QueryRunnerState, QueryVariable, SceneCanvasText, SceneComponent, SceneComponentProps, SceneDataNode, SceneDataState, SceneDataTransformer, SceneEditor, SceneEditorState, SceneFlexLayout, SceneGridLayout, SceneGridRow, SceneLayout, SceneLayoutChild, SceneLayoutChildOptions, SceneLayoutChildState, SceneLayoutState, SceneObject, SceneObjectBase, SceneObjectRef, SceneObjectState, SceneObjectStateChangedEvent, SceneObjectStateChangedPayload, SceneObjectStatePlain, SceneObjectUrlSyncConfig, SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues, SceneObjectWithUrlSync,
|
|
797
|
+
export { ConstantVariable, CustomFormatterFn, CustomVariable, DataSourceVariable, DeepPartial, EmbeddedScene, FormatRegistryID, FormatVariable, NestedScene, QueryRunnerState, QueryVariable, SceneByFrameRepeater, SceneCanvasText, SceneComponent, SceneComponentProps, SceneDataNode, SceneDataState, SceneDataTransformer, SceneEditor, SceneEditorState, SceneFlexLayout, SceneGridLayout, SceneGridRow, SceneLayout, SceneLayoutChild, SceneLayoutChildOptions, SceneLayoutChildState, SceneLayoutState, SceneObject, SceneObjectBase, SceneObjectRef, SceneObjectState, SceneObjectStateChangedEvent, SceneObjectStateChangedPayload, SceneObjectStatePlain, SceneObjectUrlSyncConfig, SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues, SceneObjectWithUrlSync, SceneQueryRunner, SceneState, SceneSubMenu, SceneTimePicker, SceneTimeRange, SceneTimeRangeLike, SceneTimeRangeState, SceneToolbarButton, SceneToolbarInput, SceneVariable, SceneVariableDependencyConfigLike, SceneVariableSet, SceneVariableSetState, SceneVariableState, SceneVariableValueChangedEvent, SceneVariables, TestVariable, UrlSyncManager, ValidateAndUpdateResult, VariableValue, VariableValueCustom, VariableValueOption, VariableValueSelectors, VariableValueSingle, VizPanel, VizPanelState, formatRegistry, isSceneObject, sceneGraph };
|