@grafana/scenes 3.13.4--canary.648.8346644660.0 → 4.0.0--canary.640.8344205533.0
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/dist/esm/components/VizPanel/VizPanelMenu.js +1 -3
- package/dist/esm/components/VizPanel/VizPanelMenu.js.map +1 -1
- package/dist/esm/components/layout/grid/SceneGridRow.js +1 -3
- package/dist/esm/components/layout/grid/SceneGridRow.js.map +1 -1
- package/dist/esm/core/sceneGraph/sceneGraph.js +16 -16
- package/dist/esm/core/sceneGraph/sceneGraph.js.map +1 -1
- package/dist/esm/core/types.js +4 -1
- package/dist/esm/core/types.js.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/querying/SceneDataLayerSet.js +99 -0
- package/dist/esm/querying/SceneDataLayerSet.js.map +1 -0
- package/dist/esm/querying/SceneDataTransformer.js +3 -3
- package/dist/esm/querying/SceneDataTransformer.js.map +1 -1
- package/dist/esm/querying/SceneQueryRunner.js +15 -30
- package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
- package/dist/esm/querying/layers/SceneDataLayerBase.js +7 -18
- package/dist/esm/querying/layers/SceneDataLayerBase.js.map +1 -1
- package/dist/esm/querying/layers/SceneDataLayerControls.js +9 -46
- package/dist/esm/querying/layers/SceneDataLayerControls.js.map +1 -1
- package/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +23 -15
- package/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js.map +1 -1
- package/dist/esm/querying/mergeMultipleDataLayers.js +23 -0
- package/dist/esm/querying/mergeMultipleDataLayers.js.map +1 -0
- package/dist/esm/variables/components/VariableValueSelect.js +0 -3
- package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
- package/dist/index.d.ts +41 -29
- package/dist/index.js +305 -270
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/esm/querying/SceneDataLayers.js +0 -21
- package/dist/esm/querying/SceneDataLayers.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -13,8 +13,8 @@ var schema = require('@grafana/schema');
|
|
|
13
13
|
var reactUse = require('react-use');
|
|
14
14
|
var ui = require('@grafana/ui');
|
|
15
15
|
var css = require('@emotion/css');
|
|
16
|
-
var operators = require('rxjs/operators');
|
|
17
16
|
var e2eSelectors = require('@grafana/e2e-selectors');
|
|
17
|
+
var operators = require('rxjs/operators');
|
|
18
18
|
var ReactGridLayout = require('react-grid-layout');
|
|
19
19
|
var AutoSizer = require('react-virtualized-auto-sizer');
|
|
20
20
|
var BarChartPanelCfg_types_gen = require('@grafana/schema/dist/esm/raw/composable/barchart/panelcfg/x/BarChartPanelCfg_types.gen');
|
|
@@ -1357,21 +1357,14 @@ function formatValue(variable, value, formatNameOrFn) {
|
|
|
1357
1357
|
return formatter.formatter(value, args, variable);
|
|
1358
1358
|
}
|
|
1359
1359
|
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
for (const layer of layers) {
|
|
1369
|
-
deactivationHandlers.push(layer.activate());
|
|
1370
|
-
}
|
|
1371
|
-
return () => {
|
|
1372
|
-
deactivationHandlers.forEach((handler) => handler());
|
|
1373
|
-
};
|
|
1374
|
-
}
|
|
1360
|
+
function isSceneObject(obj) {
|
|
1361
|
+
return obj.useState !== void 0;
|
|
1362
|
+
}
|
|
1363
|
+
function isDataRequestEnricher(obj) {
|
|
1364
|
+
return "enrichDataRequest" in obj;
|
|
1365
|
+
}
|
|
1366
|
+
function isDataLayer(obj) {
|
|
1367
|
+
return "isDataLayer" in obj;
|
|
1375
1368
|
}
|
|
1376
1369
|
|
|
1377
1370
|
var __accessCheck = (obj, member, msg) => {
|
|
@@ -1506,25 +1499,25 @@ function findAllObjects(scene, check) {
|
|
|
1506
1499
|
return found;
|
|
1507
1500
|
}
|
|
1508
1501
|
function getDataLayers(sceneObject, localOnly = false) {
|
|
1509
|
-
let
|
|
1502
|
+
let currentLevel = sceneObject;
|
|
1510
1503
|
let collected = [];
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
if (
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
}
|
|
1517
|
-
}
|
|
1518
|
-
if (parent.state.$data && parent.state.$data instanceof SceneDataLayers) {
|
|
1519
|
-
source = parent.state.$data;
|
|
1504
|
+
while (currentLevel) {
|
|
1505
|
+
const dataProvider = currentLevel.state.$data;
|
|
1506
|
+
if (!dataProvider) {
|
|
1507
|
+
currentLevel = currentLevel.parent;
|
|
1508
|
+
continue;
|
|
1520
1509
|
}
|
|
1521
|
-
if (
|
|
1522
|
-
collected = collected.concat(
|
|
1523
|
-
|
|
1524
|
-
|
|
1510
|
+
if (isDataLayer(dataProvider)) {
|
|
1511
|
+
collected = collected.concat(dataProvider);
|
|
1512
|
+
} else {
|
|
1513
|
+
if (dataProvider.state.$data && isDataLayer(dataProvider.state.$data)) {
|
|
1514
|
+
collected = collected.concat(dataProvider.state.$data);
|
|
1525
1515
|
}
|
|
1526
1516
|
}
|
|
1527
|
-
|
|
1517
|
+
if (localOnly && collected.length > 0) {
|
|
1518
|
+
break;
|
|
1519
|
+
}
|
|
1520
|
+
currentLevel = currentLevel.parent;
|
|
1528
1521
|
}
|
|
1529
1522
|
return collected;
|
|
1530
1523
|
}
|
|
@@ -2047,13 +2040,6 @@ function isGroupByVariable(variable) {
|
|
|
2047
2040
|
return variable.state.type === "groupby";
|
|
2048
2041
|
}
|
|
2049
2042
|
|
|
2050
|
-
function isSceneObject(obj) {
|
|
2051
|
-
return obj.useState !== void 0;
|
|
2052
|
-
}
|
|
2053
|
-
function isDataRequestEnricher(obj) {
|
|
2054
|
-
return "enrichDataRequest" in obj;
|
|
2055
|
-
}
|
|
2056
|
-
|
|
2057
2043
|
const sceneGraph = {
|
|
2058
2044
|
getVariables,
|
|
2059
2045
|
getData,
|
|
@@ -3242,6 +3228,7 @@ class SceneDataLayerBase extends SceneObjectBase {
|
|
|
3242
3228
|
isEnabled: true
|
|
3243
3229
|
}, initialState));
|
|
3244
3230
|
this._results = new rxjs.ReplaySubject();
|
|
3231
|
+
this.isDataLayer = true;
|
|
3245
3232
|
this._variableValueRecorder = new VariableValueRecorder();
|
|
3246
3233
|
this._variableDependency = new VariableDependencyConfig(this, {
|
|
3247
3234
|
onVariableUpdateCompleted: this.onVariableUpdateCompleted.bind(this)
|
|
@@ -3261,14 +3248,8 @@ class SceneDataLayerBase extends SceneObjectBase {
|
|
|
3261
3248
|
this.querySub.unsubscribe();
|
|
3262
3249
|
this.querySub = void 0;
|
|
3263
3250
|
this.onDisable();
|
|
3264
|
-
this._results.next({
|
|
3265
|
-
|
|
3266
|
-
data: emptyPanelData,
|
|
3267
|
-
topic: this.topic
|
|
3268
|
-
});
|
|
3269
|
-
this.setStateHelper({
|
|
3270
|
-
data: emptyPanelData
|
|
3271
|
-
});
|
|
3251
|
+
this._results.next({ origin: this, data: emptyPanelData });
|
|
3252
|
+
this.setStateHelper({ data: emptyPanelData });
|
|
3272
3253
|
}
|
|
3273
3254
|
if (n.isEnabled && !p.isEnabled) {
|
|
3274
3255
|
this.onEnable();
|
|
@@ -3294,19 +3275,13 @@ class SceneDataLayerBase extends SceneObjectBase {
|
|
|
3294
3275
|
if (this.querySub) {
|
|
3295
3276
|
this.querySub.unsubscribe();
|
|
3296
3277
|
this.querySub = void 0;
|
|
3297
|
-
this.publishResults(emptyPanelData
|
|
3278
|
+
this.publishResults(emptyPanelData);
|
|
3298
3279
|
}
|
|
3299
3280
|
}
|
|
3300
|
-
publishResults(data
|
|
3281
|
+
publishResults(data) {
|
|
3301
3282
|
if (this.state.isEnabled) {
|
|
3302
|
-
this._results.next({
|
|
3303
|
-
|
|
3304
|
-
data,
|
|
3305
|
-
topic
|
|
3306
|
-
});
|
|
3307
|
-
this.setStateHelper({
|
|
3308
|
-
data
|
|
3309
|
-
});
|
|
3283
|
+
this._results.next({ origin: this, data });
|
|
3284
|
+
this.setStateHelper({ data });
|
|
3310
3285
|
}
|
|
3311
3286
|
}
|
|
3312
3287
|
getResultsStream() {
|
|
@@ -3333,6 +3308,156 @@ class SceneDataLayerBase extends SceneObjectBase {
|
|
|
3333
3308
|
}
|
|
3334
3309
|
}
|
|
3335
3310
|
|
|
3311
|
+
function LoadingIndicator(props) {
|
|
3312
|
+
return /* @__PURE__ */ React__default["default"].createElement(ui.Tooltip, {
|
|
3313
|
+
content: "Cancel query"
|
|
3314
|
+
}, /* @__PURE__ */ React__default["default"].createElement(ui.Icon, {
|
|
3315
|
+
className: "spin-clockwise",
|
|
3316
|
+
name: "sync",
|
|
3317
|
+
size: "xs",
|
|
3318
|
+
role: "button",
|
|
3319
|
+
onMouseDown: (e) => {
|
|
3320
|
+
props.onCancel(e);
|
|
3321
|
+
}
|
|
3322
|
+
}));
|
|
3323
|
+
}
|
|
3324
|
+
|
|
3325
|
+
function ControlsLabel(props) {
|
|
3326
|
+
const styles = ui.useStyles2(getStyles$9);
|
|
3327
|
+
const theme = ui.useTheme2();
|
|
3328
|
+
const isVertical = props.layout === "vertical";
|
|
3329
|
+
const loadingIndicator = Boolean(props.isLoading) ? /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
3330
|
+
style: { marginLeft: theme.spacing(1), marginTop: "-1px" },
|
|
3331
|
+
"aria-label": e2eSelectors.selectors.components.LoadingIndicator.icon
|
|
3332
|
+
}, /* @__PURE__ */ React__default["default"].createElement(LoadingIndicator, {
|
|
3333
|
+
onCancel: (e) => {
|
|
3334
|
+
var _a;
|
|
3335
|
+
e.preventDefault();
|
|
3336
|
+
e.stopPropagation();
|
|
3337
|
+
(_a = props.onCancel) == null ? void 0 : _a.call(props);
|
|
3338
|
+
}
|
|
3339
|
+
})) : null;
|
|
3340
|
+
let errorIndicator = null;
|
|
3341
|
+
if (props.error) {
|
|
3342
|
+
errorIndicator = /* @__PURE__ */ React__default["default"].createElement(ui.Tooltip, {
|
|
3343
|
+
content: props.error,
|
|
3344
|
+
placement: "bottom"
|
|
3345
|
+
}, /* @__PURE__ */ React__default["default"].createElement(ui.Icon, {
|
|
3346
|
+
className: styles.errorIcon,
|
|
3347
|
+
name: "exclamation-triangle"
|
|
3348
|
+
}));
|
|
3349
|
+
}
|
|
3350
|
+
const testId = typeof props.label === "string" ? e2eSelectors.selectors.pages.Dashboard.SubMenu.submenuItemLabels(props.label) : "";
|
|
3351
|
+
let labelElement;
|
|
3352
|
+
if (isVertical) {
|
|
3353
|
+
labelElement = /* @__PURE__ */ React__default["default"].createElement("label", {
|
|
3354
|
+
className: styles.verticalLabel,
|
|
3355
|
+
"data-testid": testId,
|
|
3356
|
+
htmlFor: props.htmlFor
|
|
3357
|
+
}, props.label, errorIndicator, props.icon && /* @__PURE__ */ React__default["default"].createElement(ui.Icon, {
|
|
3358
|
+
name: props.icon,
|
|
3359
|
+
className: styles.normalIcon
|
|
3360
|
+
}), loadingIndicator, props.onRemove && /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
|
|
3361
|
+
variant: "secondary",
|
|
3362
|
+
size: "xs",
|
|
3363
|
+
name: "times",
|
|
3364
|
+
onClick: props.onRemove,
|
|
3365
|
+
tooltip: "Remove"
|
|
3366
|
+
}));
|
|
3367
|
+
} else {
|
|
3368
|
+
labelElement = /* @__PURE__ */ React__default["default"].createElement("label", {
|
|
3369
|
+
className: styles.horizontalLabel,
|
|
3370
|
+
"data-testid": testId,
|
|
3371
|
+
htmlFor: props.htmlFor
|
|
3372
|
+
}, errorIndicator, props.icon && /* @__PURE__ */ React__default["default"].createElement(ui.Icon, {
|
|
3373
|
+
name: props.icon,
|
|
3374
|
+
className: styles.normalIcon
|
|
3375
|
+
}), props.label, loadingIndicator);
|
|
3376
|
+
}
|
|
3377
|
+
if (props.description) {
|
|
3378
|
+
return /* @__PURE__ */ React__default["default"].createElement(ui.Tooltip, {
|
|
3379
|
+
content: props.description,
|
|
3380
|
+
placement: isVertical ? "top" : "bottom"
|
|
3381
|
+
}, labelElement);
|
|
3382
|
+
}
|
|
3383
|
+
return labelElement;
|
|
3384
|
+
}
|
|
3385
|
+
const getStyles$9 = (theme) => ({
|
|
3386
|
+
horizontalLabel: css.css({
|
|
3387
|
+
background: theme.isDark ? theme.colors.background.primary : theme.colors.background.secondary,
|
|
3388
|
+
display: `flex`,
|
|
3389
|
+
alignItems: "center",
|
|
3390
|
+
padding: theme.spacing(0, 1),
|
|
3391
|
+
fontWeight: theme.typography.fontWeightMedium,
|
|
3392
|
+
fontSize: theme.typography.bodySmall.fontSize,
|
|
3393
|
+
height: theme.spacing(theme.components.height.md),
|
|
3394
|
+
lineHeight: theme.spacing(theme.components.height.md),
|
|
3395
|
+
borderRadius: theme.shape.borderRadius(1),
|
|
3396
|
+
border: `1px solid ${theme.components.input.borderColor}`,
|
|
3397
|
+
position: "relative",
|
|
3398
|
+
right: -1,
|
|
3399
|
+
whiteSpace: "nowrap",
|
|
3400
|
+
gap: theme.spacing(0.5)
|
|
3401
|
+
}),
|
|
3402
|
+
verticalLabel: css.css({
|
|
3403
|
+
display: `flex`,
|
|
3404
|
+
alignItems: "center",
|
|
3405
|
+
fontWeight: theme.typography.fontWeightMedium,
|
|
3406
|
+
fontSize: theme.typography.bodySmall.fontSize,
|
|
3407
|
+
lineHeight: theme.typography.bodySmall.lineHeight,
|
|
3408
|
+
whiteSpace: "nowrap",
|
|
3409
|
+
marginBottom: theme.spacing(0.5),
|
|
3410
|
+
gap: theme.spacing(1)
|
|
3411
|
+
}),
|
|
3412
|
+
errorIcon: css.css({
|
|
3413
|
+
color: theme.colors.error.text
|
|
3414
|
+
}),
|
|
3415
|
+
normalIcon: css.css({
|
|
3416
|
+
color: theme.colors.text.secondary
|
|
3417
|
+
})
|
|
3418
|
+
});
|
|
3419
|
+
|
|
3420
|
+
class SceneDataLayerControls extends SceneObjectBase {
|
|
3421
|
+
constructor() {
|
|
3422
|
+
super({});
|
|
3423
|
+
}
|
|
3424
|
+
}
|
|
3425
|
+
SceneDataLayerControls.Component = SceneDataLayerControlsRenderer;
|
|
3426
|
+
function SceneDataLayerControlsRenderer({ model }) {
|
|
3427
|
+
const layers = sceneGraph.getDataLayers(model, true);
|
|
3428
|
+
if (layers.length === 0) {
|
|
3429
|
+
return null;
|
|
3430
|
+
}
|
|
3431
|
+
return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, layers.map((layer) => /* @__PURE__ */ React__default["default"].createElement(layer.Component, {
|
|
3432
|
+
model: layer,
|
|
3433
|
+
key: layer.state.key
|
|
3434
|
+
})));
|
|
3435
|
+
}
|
|
3436
|
+
function DataLayerControlSwitch({ layer }) {
|
|
3437
|
+
var _a, _b;
|
|
3438
|
+
const elementId = `data-layer-${layer.state.key}`;
|
|
3439
|
+
const { data, isEnabled } = layer.useState();
|
|
3440
|
+
const showLoading = Boolean(data && data.state === schema.LoadingState.Loading);
|
|
3441
|
+
return /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
3442
|
+
className: containerStyle$1
|
|
3443
|
+
}, /* @__PURE__ */ React__default["default"].createElement(ControlsLabel, {
|
|
3444
|
+
htmlFor: elementId,
|
|
3445
|
+
isLoading: showLoading,
|
|
3446
|
+
onCancel: () => {
|
|
3447
|
+
var _a2;
|
|
3448
|
+
return (_a2 = layer.cancelQuery) == null ? void 0 : _a2.call(layer);
|
|
3449
|
+
},
|
|
3450
|
+
label: layer.state.name,
|
|
3451
|
+
description: layer.state.description,
|
|
3452
|
+
error: (_b = (_a = layer.state.data) == null ? void 0 : _a.errors) == null ? void 0 : _b[0].message
|
|
3453
|
+
}), /* @__PURE__ */ React__default["default"].createElement(ui.InlineSwitch, {
|
|
3454
|
+
id: elementId,
|
|
3455
|
+
value: isEnabled,
|
|
3456
|
+
onChange: () => layer.setState({ isEnabled: !isEnabled })
|
|
3457
|
+
}));
|
|
3458
|
+
}
|
|
3459
|
+
const containerStyle$1 = css.css({ display: "flex" });
|
|
3460
|
+
|
|
3336
3461
|
var __defProp$w = Object.defineProperty;
|
|
3337
3462
|
var __defProps$k = Object.defineProperties;
|
|
3338
3463
|
var __getOwnPropDescs$k = Object.getOwnPropertyDescriptors;
|
|
@@ -3752,7 +3877,6 @@ class AnnotationsDataLayer extends SceneDataLayerBase {
|
|
|
3752
3877
|
["query"]
|
|
3753
3878
|
);
|
|
3754
3879
|
this._scopedVars = { __sceneObject: { value: this, text: "__sceneObject" } };
|
|
3755
|
-
this.topic = data.DataTopic.Annotations;
|
|
3756
3880
|
}
|
|
3757
3881
|
onEnable() {
|
|
3758
3882
|
const timeRange = sceneGraph.getTimeRange(this);
|
|
@@ -3792,20 +3916,17 @@ class AnnotationsDataLayer extends SceneDataLayerBase {
|
|
|
3792
3916
|
})
|
|
3793
3917
|
);
|
|
3794
3918
|
this.querySub = stream.subscribe((stateUpdate) => {
|
|
3795
|
-
this.publishResults(stateUpdate
|
|
3919
|
+
this.publishResults(stateUpdate);
|
|
3796
3920
|
});
|
|
3797
3921
|
} catch (e) {
|
|
3798
|
-
this.publishResults(
|
|
3799
|
-
|
|
3800
|
-
|
|
3801
|
-
|
|
3802
|
-
|
|
3803
|
-
|
|
3804
|
-
|
|
3805
|
-
|
|
3806
|
-
}),
|
|
3807
|
-
data.DataTopic.Annotations
|
|
3808
|
-
);
|
|
3922
|
+
this.publishResults(__spreadProps$i(__spreadValues$t({}, emptyPanelData), {
|
|
3923
|
+
state: schema.LoadingState.Error,
|
|
3924
|
+
errors: [
|
|
3925
|
+
{
|
|
3926
|
+
message: getMessageFromError(e)
|
|
3927
|
+
}
|
|
3928
|
+
]
|
|
3929
|
+
}));
|
|
3809
3930
|
console.error("AnnotationsDataLayer error", e);
|
|
3810
3931
|
}
|
|
3811
3932
|
}
|
|
@@ -3820,10 +3941,20 @@ class AnnotationsDataLayer extends SceneDataLayerBase {
|
|
|
3820
3941
|
df.meta = __spreadProps$i(__spreadValues$t({}, df.meta), {
|
|
3821
3942
|
dataTopic: data.DataTopic.Annotations
|
|
3822
3943
|
});
|
|
3823
|
-
stateUpdate.
|
|
3944
|
+
stateUpdate.series = [df];
|
|
3824
3945
|
return stateUpdate;
|
|
3825
3946
|
}
|
|
3826
3947
|
}
|
|
3948
|
+
AnnotationsDataLayer.Component = AnnotationsDataLayerRenderer;
|
|
3949
|
+
function AnnotationsDataLayerRenderer({ model }) {
|
|
3950
|
+
const { isHidden } = model.useState();
|
|
3951
|
+
if (isHidden) {
|
|
3952
|
+
return null;
|
|
3953
|
+
}
|
|
3954
|
+
return /* @__PURE__ */ React__default["default"].createElement(DataLayerControlSwitch, {
|
|
3955
|
+
layer: model
|
|
3956
|
+
});
|
|
3957
|
+
}
|
|
3827
3958
|
|
|
3828
3959
|
var index = /*#__PURE__*/Object.freeze({
|
|
3829
3960
|
__proto__: null,
|
|
@@ -4040,7 +4171,7 @@ class SceneTimeRangeCompare extends SceneObjectBase {
|
|
|
4040
4171
|
SceneTimeRangeCompare.Component = SceneTimeRangeCompareRenderer;
|
|
4041
4172
|
function SceneTimeRangeCompareRenderer({ model }) {
|
|
4042
4173
|
var _a;
|
|
4043
|
-
const styles = ui.useStyles2(getStyles$
|
|
4174
|
+
const styles = ui.useStyles2(getStyles$8);
|
|
4044
4175
|
const { compareWith, compareOptions } = model.useState();
|
|
4045
4176
|
const [previousCompare, setPreviousCompare] = React__default["default"].useState(compareWith);
|
|
4046
4177
|
const previousValue = (_a = compareOptions.find(({ value: value2 }) => value2 === previousCompare)) != null ? _a : PREVIOUS_PERIOD_COMPARE_OPTION;
|
|
@@ -4080,7 +4211,7 @@ function SceneTimeRangeCompareRenderer({ model }) {
|
|
|
4080
4211
|
isOpen: false
|
|
4081
4212
|
}, previousValue.label));
|
|
4082
4213
|
}
|
|
4083
|
-
function getStyles$
|
|
4214
|
+
function getStyles$8(theme) {
|
|
4084
4215
|
return {
|
|
4085
4216
|
previewButton: css.css({
|
|
4086
4217
|
"&:disabled": {
|
|
@@ -4539,7 +4670,6 @@ function VariableValueSelect({ model }) {
|
|
|
4539
4670
|
tabSelectsValue: false,
|
|
4540
4671
|
onInputChange,
|
|
4541
4672
|
options: model.getOptionsForSelect(),
|
|
4542
|
-
"data-testid": e2eSelectors.selectors.pages.Dashboard.SubMenu.submenuItemValueDropDownValueLinkTexts(`${value}`),
|
|
4543
4673
|
onChange: (newValue) => {
|
|
4544
4674
|
model.changeValueTo(newValue.value, newValue.label);
|
|
4545
4675
|
}
|
|
@@ -4576,7 +4706,6 @@ function VariableValueSelectMulti({ model }) {
|
|
|
4576
4706
|
onBlur: () => {
|
|
4577
4707
|
model.changeValueTo(uncommittedValue);
|
|
4578
4708
|
},
|
|
4579
|
-
"data-testid": e2eSelectors.selectors.pages.Dashboard.SubMenu.submenuItemValueDropDownValueLinkTexts(`${uncommittedValue}`),
|
|
4580
4709
|
onChange: (newValue, action) => {
|
|
4581
4710
|
if (action.action === "clear" && noValueOnClear) {
|
|
4582
4711
|
model.changeValueTo([]);
|
|
@@ -4737,115 +4866,6 @@ function GroupByVariableRenderer({ model }) {
|
|
|
4737
4866
|
return renderSelectForVariable(model);
|
|
4738
4867
|
}
|
|
4739
4868
|
|
|
4740
|
-
function LoadingIndicator(props) {
|
|
4741
|
-
return /* @__PURE__ */ React__default["default"].createElement(ui.Tooltip, {
|
|
4742
|
-
content: "Cancel query"
|
|
4743
|
-
}, /* @__PURE__ */ React__default["default"].createElement(ui.Icon, {
|
|
4744
|
-
className: "spin-clockwise",
|
|
4745
|
-
name: "sync",
|
|
4746
|
-
size: "xs",
|
|
4747
|
-
role: "button",
|
|
4748
|
-
onMouseDown: (e) => {
|
|
4749
|
-
props.onCancel(e);
|
|
4750
|
-
}
|
|
4751
|
-
}));
|
|
4752
|
-
}
|
|
4753
|
-
|
|
4754
|
-
function ControlsLabel(props) {
|
|
4755
|
-
const styles = ui.useStyles2(getStyles$8);
|
|
4756
|
-
const theme = ui.useTheme2();
|
|
4757
|
-
const isVertical = props.layout === "vertical";
|
|
4758
|
-
const loadingIndicator = Boolean(props.isLoading) ? /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
4759
|
-
style: { marginLeft: theme.spacing(1), marginTop: "-1px" },
|
|
4760
|
-
"aria-label": e2eSelectors.selectors.components.LoadingIndicator.icon
|
|
4761
|
-
}, /* @__PURE__ */ React__default["default"].createElement(LoadingIndicator, {
|
|
4762
|
-
onCancel: (e) => {
|
|
4763
|
-
var _a;
|
|
4764
|
-
e.preventDefault();
|
|
4765
|
-
e.stopPropagation();
|
|
4766
|
-
(_a = props.onCancel) == null ? void 0 : _a.call(props);
|
|
4767
|
-
}
|
|
4768
|
-
})) : null;
|
|
4769
|
-
let errorIndicator = null;
|
|
4770
|
-
if (props.error) {
|
|
4771
|
-
errorIndicator = /* @__PURE__ */ React__default["default"].createElement(ui.Tooltip, {
|
|
4772
|
-
content: props.error,
|
|
4773
|
-
placement: "bottom"
|
|
4774
|
-
}, /* @__PURE__ */ React__default["default"].createElement(ui.Icon, {
|
|
4775
|
-
className: styles.errorIcon,
|
|
4776
|
-
name: "exclamation-triangle"
|
|
4777
|
-
}));
|
|
4778
|
-
}
|
|
4779
|
-
const testId = typeof props.label === "string" ? e2eSelectors.selectors.pages.Dashboard.SubMenu.submenuItemLabels(props.label) : "";
|
|
4780
|
-
let labelElement;
|
|
4781
|
-
if (isVertical) {
|
|
4782
|
-
labelElement = /* @__PURE__ */ React__default["default"].createElement("label", {
|
|
4783
|
-
className: styles.verticalLabel,
|
|
4784
|
-
"data-testid": testId,
|
|
4785
|
-
htmlFor: props.htmlFor
|
|
4786
|
-
}, props.label, errorIndicator, props.icon && /* @__PURE__ */ React__default["default"].createElement(ui.Icon, {
|
|
4787
|
-
name: props.icon,
|
|
4788
|
-
className: styles.normalIcon
|
|
4789
|
-
}), loadingIndicator, props.onRemove && /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
|
|
4790
|
-
variant: "secondary",
|
|
4791
|
-
size: "xs",
|
|
4792
|
-
name: "times",
|
|
4793
|
-
onClick: props.onRemove,
|
|
4794
|
-
tooltip: "Remove"
|
|
4795
|
-
}));
|
|
4796
|
-
} else {
|
|
4797
|
-
labelElement = /* @__PURE__ */ React__default["default"].createElement("label", {
|
|
4798
|
-
className: styles.horizontalLabel,
|
|
4799
|
-
"data-testid": testId,
|
|
4800
|
-
htmlFor: props.htmlFor
|
|
4801
|
-
}, errorIndicator, props.icon && /* @__PURE__ */ React__default["default"].createElement(ui.Icon, {
|
|
4802
|
-
name: props.icon,
|
|
4803
|
-
className: styles.normalIcon
|
|
4804
|
-
}), props.label, loadingIndicator);
|
|
4805
|
-
}
|
|
4806
|
-
if (props.description) {
|
|
4807
|
-
return /* @__PURE__ */ React__default["default"].createElement(ui.Tooltip, {
|
|
4808
|
-
content: props.description,
|
|
4809
|
-
placement: isVertical ? "top" : "bottom"
|
|
4810
|
-
}, labelElement);
|
|
4811
|
-
}
|
|
4812
|
-
return labelElement;
|
|
4813
|
-
}
|
|
4814
|
-
const getStyles$8 = (theme) => ({
|
|
4815
|
-
horizontalLabel: css.css({
|
|
4816
|
-
background: theme.isDark ? theme.colors.background.primary : theme.colors.background.secondary,
|
|
4817
|
-
display: `flex`,
|
|
4818
|
-
alignItems: "center",
|
|
4819
|
-
padding: theme.spacing(0, 1),
|
|
4820
|
-
fontWeight: theme.typography.fontWeightMedium,
|
|
4821
|
-
fontSize: theme.typography.bodySmall.fontSize,
|
|
4822
|
-
height: theme.spacing(theme.components.height.md),
|
|
4823
|
-
lineHeight: theme.spacing(theme.components.height.md),
|
|
4824
|
-
borderRadius: theme.shape.borderRadius(1),
|
|
4825
|
-
border: `1px solid ${theme.components.input.borderColor}`,
|
|
4826
|
-
position: "relative",
|
|
4827
|
-
right: -1,
|
|
4828
|
-
whiteSpace: "nowrap",
|
|
4829
|
-
gap: theme.spacing(0.5)
|
|
4830
|
-
}),
|
|
4831
|
-
verticalLabel: css.css({
|
|
4832
|
-
display: `flex`,
|
|
4833
|
-
alignItems: "center",
|
|
4834
|
-
fontWeight: theme.typography.fontWeightMedium,
|
|
4835
|
-
fontSize: theme.typography.bodySmall.fontSize,
|
|
4836
|
-
lineHeight: theme.typography.bodySmall.lineHeight,
|
|
4837
|
-
whiteSpace: "nowrap",
|
|
4838
|
-
marginBottom: theme.spacing(0.5),
|
|
4839
|
-
gap: theme.spacing(1)
|
|
4840
|
-
}),
|
|
4841
|
-
errorIcon: css.css({
|
|
4842
|
-
color: theme.colors.error.text
|
|
4843
|
-
}),
|
|
4844
|
-
normalIcon: css.css({
|
|
4845
|
-
color: theme.colors.text.secondary
|
|
4846
|
-
})
|
|
4847
|
-
});
|
|
4848
|
-
|
|
4849
4869
|
var __defProp$n = Object.defineProperty;
|
|
4850
4870
|
var __defProps$d = Object.defineProperties;
|
|
4851
4871
|
var __getOwnPropDescs$d = Object.getOwnPropertyDescriptors;
|
|
@@ -5295,6 +5315,25 @@ function toSelectableValue({ text, value }) {
|
|
|
5295
5315
|
};
|
|
5296
5316
|
}
|
|
5297
5317
|
|
|
5318
|
+
function mergeMultipleDataLayers(layers) {
|
|
5319
|
+
const resultStreams = layers.map((l) => l.getResultsStream());
|
|
5320
|
+
const resultsMap = /* @__PURE__ */ new Map();
|
|
5321
|
+
const deactivationHandlers = [];
|
|
5322
|
+
for (const layer of layers) {
|
|
5323
|
+
deactivationHandlers.push(layer.activate());
|
|
5324
|
+
}
|
|
5325
|
+
return rxjs.merge(resultStreams).pipe(
|
|
5326
|
+
rxjs.mergeAll(),
|
|
5327
|
+
rxjs.map((v) => {
|
|
5328
|
+
resultsMap.set(v.origin.state.key, v);
|
|
5329
|
+
return resultsMap.values();
|
|
5330
|
+
}),
|
|
5331
|
+
rxjs.finalize(() => {
|
|
5332
|
+
deactivationHandlers.forEach((handler) => handler());
|
|
5333
|
+
})
|
|
5334
|
+
);
|
|
5335
|
+
}
|
|
5336
|
+
|
|
5298
5337
|
var __defProp$l = Object.defineProperty;
|
|
5299
5338
|
var __defProps$b = Object.defineProperties;
|
|
5300
5339
|
var __getOwnPropDescs$b = Object.getOwnPropertyDescriptors;
|
|
@@ -5431,44 +5470,28 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
5431
5470
|
}
|
|
5432
5471
|
_handleDataLayers() {
|
|
5433
5472
|
const dataLayers = sceneGraph.getDataLayers(this);
|
|
5434
|
-
|
|
5435
|
-
|
|
5436
|
-
if (dataLayers.length > 0) {
|
|
5437
|
-
dataLayers.forEach((layer) => {
|
|
5438
|
-
observables.push(layer.getResultsStream());
|
|
5439
|
-
});
|
|
5440
|
-
this._dataLayersSub = rxjs.merge(observables).pipe(
|
|
5441
|
-
rxjs.mergeAll(),
|
|
5442
|
-
rxjs.map((v) => {
|
|
5443
|
-
resultsMap.set(v.origin.state.key, v.data);
|
|
5444
|
-
return resultsMap;
|
|
5445
|
-
})
|
|
5446
|
-
).subscribe((result) => {
|
|
5447
|
-
this._onLayersReceived(result);
|
|
5448
|
-
});
|
|
5473
|
+
if (dataLayers.length === 0) {
|
|
5474
|
+
return;
|
|
5449
5475
|
}
|
|
5476
|
+
this._dataLayersSub = mergeMultipleDataLayers(dataLayers).subscribe(this._onLayersReceived.bind(this));
|
|
5450
5477
|
}
|
|
5451
5478
|
_onLayersReceived(results) {
|
|
5452
|
-
var _a, _b;
|
|
5479
|
+
var _a, _b, _c, _d;
|
|
5453
5480
|
const timeRange = sceneGraph.getTimeRange(this);
|
|
5454
|
-
const dataLayers = sceneGraph.getDataLayers(this);
|
|
5455
5481
|
const { dataLayerFilter } = this.state;
|
|
5456
5482
|
let annotations = [];
|
|
5457
5483
|
let alertStates = [];
|
|
5458
5484
|
let alertState;
|
|
5459
|
-
const
|
|
5460
|
-
|
|
5461
|
-
|
|
5462
|
-
|
|
5463
|
-
if (layer) {
|
|
5464
|
-
if (layer.topic === data.DataTopic.Annotations && result[data.DataTopic.Annotations]) {
|
|
5465
|
-
annotations = annotations.concat(result[data.DataTopic.Annotations]);
|
|
5485
|
+
for (const result of results) {
|
|
5486
|
+
for (let frame of result.data.series) {
|
|
5487
|
+
if (((_a = frame.meta) == null ? void 0 : _a.dataTopic) === data.DataTopic.Annotations) {
|
|
5488
|
+
annotations = annotations.concat(frame);
|
|
5466
5489
|
}
|
|
5467
|
-
if (
|
|
5468
|
-
alertStates = alertStates.concat(
|
|
5490
|
+
if (((_b = frame.meta) == null ? void 0 : _b.dataTopic) === data.DataTopic.AlertStates) {
|
|
5491
|
+
alertStates = alertStates.concat(frame);
|
|
5469
5492
|
}
|
|
5470
5493
|
}
|
|
5471
|
-
}
|
|
5494
|
+
}
|
|
5472
5495
|
if (dataLayerFilter == null ? void 0 : dataLayerFilter.panelId) {
|
|
5473
5496
|
if (annotations.length > 0) {
|
|
5474
5497
|
annotations = filterAnnotations(annotations, dataLayerFilter);
|
|
@@ -5489,8 +5512,8 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
5489
5512
|
this._layerAnnotations = annotations;
|
|
5490
5513
|
this.setState({
|
|
5491
5514
|
data: __spreadProps$b(__spreadValues$l({}, baseStateUpdate), {
|
|
5492
|
-
annotations: [...(
|
|
5493
|
-
alertState: alertState != null ? alertState : (
|
|
5515
|
+
annotations: [...(_c = this._resultAnnotations) != null ? _c : [], ...annotations],
|
|
5516
|
+
alertState: alertState != null ? alertState : (_d = this.state.data) == null ? void 0 : _d.alertState
|
|
5494
5517
|
})
|
|
5495
5518
|
});
|
|
5496
5519
|
}
|
|
@@ -5718,64 +5741,76 @@ var __spreadValues$k = (a, b) => {
|
|
|
5718
5741
|
return a;
|
|
5719
5742
|
};
|
|
5720
5743
|
var __spreadProps$a = (a, b) => __defProps$a(a, __getOwnPropDescs$a(b));
|
|
5721
|
-
class
|
|
5744
|
+
class SceneDataLayerSetBase extends SceneObjectBase {
|
|
5722
5745
|
constructor() {
|
|
5723
|
-
super(
|
|
5724
|
-
this.
|
|
5746
|
+
super(...arguments);
|
|
5747
|
+
this.isDataLayer = true;
|
|
5748
|
+
this._results = new rxjs.ReplaySubject();
|
|
5725
5749
|
}
|
|
5726
|
-
|
|
5727
|
-
|
|
5728
|
-
|
|
5750
|
+
subscribeToAllLayers(layers) {
|
|
5751
|
+
if (layers.length > 0) {
|
|
5752
|
+
this.querySub = mergeMultipleDataLayers(layers).subscribe(this._onLayerUpdateReceived.bind(this));
|
|
5753
|
+
} else {
|
|
5754
|
+
this._results.next({ origin: this, data: emptyPanelData });
|
|
5755
|
+
this.setStateHelper({ data: emptyPanelData });
|
|
5756
|
+
}
|
|
5729
5757
|
}
|
|
5730
|
-
|
|
5731
|
-
|
|
5732
|
-
|
|
5758
|
+
_onLayerUpdateReceived(results) {
|
|
5759
|
+
var _a;
|
|
5760
|
+
let series = [];
|
|
5761
|
+
for (const result of results) {
|
|
5762
|
+
if ((_a = result.data) == null ? void 0 : _a.series) {
|
|
5763
|
+
series = series.concat(result.data.series);
|
|
5764
|
+
}
|
|
5765
|
+
}
|
|
5766
|
+
const combinedData = __spreadProps$a(__spreadValues$k({}, emptyPanelData), { series });
|
|
5767
|
+
this._results.next({ origin: this, data: combinedData });
|
|
5768
|
+
this.setStateHelper({ data: combinedData });
|
|
5733
5769
|
}
|
|
5734
|
-
|
|
5735
|
-
|
|
5736
|
-
|
|
5737
|
-
|
|
5738
|
-
|
|
5739
|
-
|
|
5740
|
-
|
|
5770
|
+
getResultsStream() {
|
|
5771
|
+
return this._results;
|
|
5772
|
+
}
|
|
5773
|
+
cancelQuery() {
|
|
5774
|
+
var _a;
|
|
5775
|
+
(_a = this.querySub) == null ? void 0 : _a.unsubscribe();
|
|
5776
|
+
}
|
|
5777
|
+
setStateHelper(state) {
|
|
5778
|
+
setBaseClassState(this, state);
|
|
5741
5779
|
}
|
|
5742
|
-
return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, layers.map((l) => {
|
|
5743
|
-
const elementId = `data-layer-${l.state.key}`;
|
|
5744
|
-
if (l.state.isHidden) {
|
|
5745
|
-
return null;
|
|
5746
|
-
}
|
|
5747
|
-
return /* @__PURE__ */ React__default["default"].createElement(SceneDataLayerControl, {
|
|
5748
|
-
key: elementId,
|
|
5749
|
-
layer: l,
|
|
5750
|
-
onToggleLayer: () => model.toggleLayer(l),
|
|
5751
|
-
isEnabled: layersMap[l.state.key]
|
|
5752
|
-
});
|
|
5753
|
-
}));
|
|
5754
5780
|
}
|
|
5755
|
-
|
|
5756
|
-
|
|
5757
|
-
|
|
5758
|
-
|
|
5759
|
-
|
|
5760
|
-
|
|
5761
|
-
|
|
5762
|
-
|
|
5763
|
-
|
|
5764
|
-
|
|
5765
|
-
|
|
5766
|
-
|
|
5767
|
-
|
|
5768
|
-
|
|
5769
|
-
|
|
5770
|
-
|
|
5771
|
-
|
|
5772
|
-
|
|
5773
|
-
|
|
5774
|
-
|
|
5775
|
-
|
|
5776
|
-
|
|
5781
|
+
class SceneDataLayerSet extends SceneDataLayerSetBase {
|
|
5782
|
+
constructor(state) {
|
|
5783
|
+
var _a, _b;
|
|
5784
|
+
super({
|
|
5785
|
+
name: (_a = state.name) != null ? _a : "Data layers",
|
|
5786
|
+
layers: (_b = state.layers) != null ? _b : []
|
|
5787
|
+
});
|
|
5788
|
+
this.addActivationHandler(() => this._onActivate());
|
|
5789
|
+
}
|
|
5790
|
+
_onActivate() {
|
|
5791
|
+
this._subs.add(
|
|
5792
|
+
this.subscribeToState((newState, oldState) => {
|
|
5793
|
+
var _a;
|
|
5794
|
+
if (newState.layers !== oldState.layers) {
|
|
5795
|
+
(_a = this.querySub) == null ? void 0 : _a.unsubscribe();
|
|
5796
|
+
this.subscribeToAllLayers(newState.layers);
|
|
5797
|
+
}
|
|
5798
|
+
})
|
|
5799
|
+
);
|
|
5800
|
+
this.subscribeToAllLayers(this.state.layers);
|
|
5801
|
+
return () => {
|
|
5802
|
+
var _a;
|
|
5803
|
+
(_a = this.querySub) == null ? void 0 : _a.unsubscribe();
|
|
5804
|
+
};
|
|
5805
|
+
}
|
|
5777
5806
|
}
|
|
5778
|
-
|
|
5807
|
+
SceneDataLayerSet.Component = ({ model }) => {
|
|
5808
|
+
const { layers } = model.useState();
|
|
5809
|
+
return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, layers.map((layer) => /* @__PURE__ */ React__default["default"].createElement(layer.Component, {
|
|
5810
|
+
model: layer,
|
|
5811
|
+
key: layer.state.key
|
|
5812
|
+
})));
|
|
5813
|
+
};
|
|
5779
5814
|
|
|
5780
5815
|
var __defProp$j = Object.defineProperty;
|
|
5781
5816
|
var __defProps$9 = Object.defineProperties;
|
|
@@ -5823,8 +5858,8 @@ class SceneDataTransformer extends SceneObjectBase {
|
|
|
5823
5858
|
}
|
|
5824
5859
|
getSourceData() {
|
|
5825
5860
|
if (this.state.$data) {
|
|
5826
|
-
if (this.state.$data instanceof
|
|
5827
|
-
throw new Error("
|
|
5861
|
+
if (this.state.$data instanceof SceneDataLayerSet) {
|
|
5862
|
+
throw new Error("SceneDataLayerSet can not be used as data provider for SceneDataTransformer.");
|
|
5828
5863
|
}
|
|
5829
5864
|
return this.state.$data;
|
|
5830
5865
|
}
|
|
@@ -7420,8 +7455,7 @@ function VizPanelMenuRenderer({ model }) {
|
|
|
7420
7455
|
childItems: item.subMenu ? renderItems(item.subMenu) : void 0,
|
|
7421
7456
|
url: item.href,
|
|
7422
7457
|
onClick: item.onClick,
|
|
7423
|
-
shortcut: item.shortcut
|
|
7424
|
-
testId: e2eSelectors.selectors.components.Panels.Panel.menuItems(item.text)
|
|
7458
|
+
shortcut: item.shortcut
|
|
7425
7459
|
})
|
|
7426
7460
|
);
|
|
7427
7461
|
};
|
|
@@ -8011,8 +8045,7 @@ function SceneGridRowRenderer({ model }) {
|
|
|
8011
8045
|
}, /* @__PURE__ */ React__default["default"].createElement("button", {
|
|
8012
8046
|
onClick: model.onCollapseToggle,
|
|
8013
8047
|
className: styles.rowTitleButton,
|
|
8014
|
-
"aria-label": isCollapsed ? "Expand row" : "Collapse row"
|
|
8015
|
-
"data-testid": e2eSelectors.selectors.components.DashboardRow.title(sceneGraph.interpolate(model, title, void 0, "text"))
|
|
8048
|
+
"aria-label": isCollapsed ? "Expand row" : "Collapse row"
|
|
8016
8049
|
}, isCollapsible && /* @__PURE__ */ React__default["default"].createElement(ui.Icon, {
|
|
8017
8050
|
name: isCollapsed ? "angle-right" : "angle-down"
|
|
8018
8051
|
}), /* @__PURE__ */ React__default["default"].createElement("span", {
|
|
@@ -10351,7 +10384,8 @@ exports.SceneCanvasText = SceneCanvasText;
|
|
|
10351
10384
|
exports.SceneControlsSpacer = SceneControlsSpacer;
|
|
10352
10385
|
exports.SceneDataLayerBase = SceneDataLayerBase;
|
|
10353
10386
|
exports.SceneDataLayerControls = SceneDataLayerControls;
|
|
10354
|
-
exports.
|
|
10387
|
+
exports.SceneDataLayerSet = SceneDataLayerSet;
|
|
10388
|
+
exports.SceneDataLayerSetBase = SceneDataLayerSetBase;
|
|
10355
10389
|
exports.SceneDataNode = SceneDataNode;
|
|
10356
10390
|
exports.SceneDataTransformer = SceneDataTransformer;
|
|
10357
10391
|
exports.SceneDebugger = SceneDebugger;
|
|
@@ -10392,6 +10426,7 @@ exports.dataLayers = index;
|
|
|
10392
10426
|
exports.formatRegistry = formatRegistry;
|
|
10393
10427
|
exports.getUrlSyncManager = getUrlSyncManager;
|
|
10394
10428
|
exports.isCustomVariableValue = isCustomVariableValue;
|
|
10429
|
+
exports.isDataLayer = isDataLayer;
|
|
10395
10430
|
exports.isDataRequestEnricher = isDataRequestEnricher;
|
|
10396
10431
|
exports.isSceneObject = isSceneObject;
|
|
10397
10432
|
exports.registerQueryWithController = registerQueryWithController;
|