@grafana/scenes 4.11.2--canary.690.8734061653.0 → 4.11.2--canary.648.8738574184.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 +3 -1
- package/dist/esm/components/VizPanel/VizPanelMenu.js.map +1 -1
- package/dist/esm/components/layout/grid/SceneGridRow.js +3 -1
- package/dist/esm/components/layout/grid/SceneGridRow.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFilterRenderer.js +20 -12
- package/dist/esm/variables/adhoc/AdHocFilterRenderer.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +5 -8
- package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +12 -36
- package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js.map +1 -1
- package/dist/esm/variables/components/VariableValueSelect.js +3 -0
- package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
- package/dist/esm/variables/components/VariableValueSelectors.js +5 -2
- package/dist/esm/variables/components/VariableValueSelectors.js.map +1 -1
- package/dist/index.d.ts +8 -12
- package/dist/index.js +44 -59
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -612,17 +612,13 @@ declare class AdHocFiltersVariableUrlSyncHandler implements SceneObjectUrlSyncHa
|
|
|
612
612
|
updateFromUrl(values: SceneObjectUrlValues): void;
|
|
613
613
|
}
|
|
614
614
|
|
|
615
|
-
interface AdHocFilterWithLabels extends AdHocVariableFilter {
|
|
616
|
-
keyLabel?: string;
|
|
617
|
-
valueLabel?: string;
|
|
618
|
-
}
|
|
619
615
|
interface AdHocFiltersVariableState extends SceneVariableState {
|
|
620
616
|
/** Optional text to display on the 'add filter' button */
|
|
621
617
|
addFilterButtonText?: string;
|
|
622
618
|
/** The visible filters */
|
|
623
|
-
filters:
|
|
619
|
+
filters: AdHocVariableFilter[];
|
|
624
620
|
/** Base filters to always apply when looking up keys*/
|
|
625
|
-
baseFilters?:
|
|
621
|
+
baseFilters?: AdHocVariableFilter[];
|
|
626
622
|
/** Datasource to use for getTagKeys and getTagValues and also controls which scene queries the filters should apply to */
|
|
627
623
|
datasource: DataSourceRef | null;
|
|
628
624
|
/** Controls if the filters can be changed */
|
|
@@ -671,14 +667,14 @@ interface AdHocFiltersVariableState extends SceneVariableState {
|
|
|
671
667
|
/**
|
|
672
668
|
* @internal state of the new filter being added
|
|
673
669
|
*/
|
|
674
|
-
_wip?:
|
|
670
|
+
_wip?: AdHocVariableFilter;
|
|
675
671
|
}
|
|
676
|
-
type AdHocVariableExpressionBuilderFn = (filters:
|
|
672
|
+
type AdHocVariableExpressionBuilderFn = (filters: AdHocVariableFilter[]) => string;
|
|
677
673
|
type getTagKeysProvider$1 = (variable: AdHocFiltersVariable, currentKey: string | null) => Promise<{
|
|
678
674
|
replace?: boolean;
|
|
679
675
|
values: MetricFindValue[];
|
|
680
676
|
}>;
|
|
681
|
-
type getTagValuesProvider = (variable: AdHocFiltersVariable, filter:
|
|
677
|
+
type getTagValuesProvider = (variable: AdHocFiltersVariable, filter: AdHocVariableFilter) => Promise<{
|
|
682
678
|
replace?: boolean;
|
|
683
679
|
values: MetricFindValue[];
|
|
684
680
|
}>;
|
|
@@ -690,8 +686,8 @@ declare class AdHocFiltersVariable extends SceneObjectBase<AdHocFiltersVariableS
|
|
|
690
686
|
constructor(state: Partial<AdHocFiltersVariableState>);
|
|
691
687
|
setState(update: Partial<AdHocFiltersVariableState>): void;
|
|
692
688
|
getValue(): VariableValue | undefined;
|
|
693
|
-
_updateFilter(filter:
|
|
694
|
-
_removeFilter(filter:
|
|
689
|
+
_updateFilter(filter: AdHocVariableFilter, prop: keyof AdHocVariableFilter, value: string | undefined | null): void;
|
|
690
|
+
_removeFilter(filter: AdHocVariableFilter): void;
|
|
695
691
|
/**
|
|
696
692
|
* Get possible keys given current filters. Do not call from plugins directly
|
|
697
693
|
*/
|
|
@@ -699,7 +695,7 @@ declare class AdHocFiltersVariable extends SceneObjectBase<AdHocFiltersVariableS
|
|
|
699
695
|
/**
|
|
700
696
|
* Get possible key values for a specific key given current filters. Do not call from plugins directly
|
|
701
697
|
*/
|
|
702
|
-
_getValuesFor(filter:
|
|
698
|
+
_getValuesFor(filter: AdHocVariableFilter): Promise<Array<SelectableValue<string>>>;
|
|
703
699
|
_addWip(): void;
|
|
704
700
|
_getOperators(): SelectableValue<string>[];
|
|
705
701
|
}
|
package/dist/index.js
CHANGED
|
@@ -2857,6 +2857,7 @@ function VariableValueSelect({ model }) {
|
|
|
2857
2857
|
tabSelectsValue: false,
|
|
2858
2858
|
onInputChange,
|
|
2859
2859
|
options: model.getOptionsForSelect(),
|
|
2860
|
+
"data-testid": e2eSelectors.selectors.pages.Dashboard.SubMenu.submenuItemValueDropDownValueLinkTexts(`${value}`),
|
|
2860
2861
|
onChange: (newValue) => {
|
|
2861
2862
|
model.changeValueTo(newValue.value, newValue.label);
|
|
2862
2863
|
}
|
|
@@ -2893,6 +2894,7 @@ function VariableValueSelectMulti({ model }) {
|
|
|
2893
2894
|
onBlur: () => {
|
|
2894
2895
|
model.changeValueTo(uncommittedValue);
|
|
2895
2896
|
},
|
|
2897
|
+
"data-testid": e2eSelectors.selectors.pages.Dashboard.SubMenu.submenuItemValueDropDownValueLinkTexts(`${uncommittedValue}`),
|
|
2896
2898
|
onChange: (newValue, action) => {
|
|
2897
2899
|
if (action.action === "clear" && noValueOnClear) {
|
|
2898
2900
|
model.changeValueTo([]);
|
|
@@ -3168,18 +3170,24 @@ var __spreadValues$y = (a, b) => {
|
|
|
3168
3170
|
return a;
|
|
3169
3171
|
};
|
|
3170
3172
|
var __spreadProps$m = (a, b) => __defProps$m(a, __getOwnPropDescs$m(b));
|
|
3171
|
-
function keyLabelToOption(key, label) {
|
|
3172
|
-
return key !== "" ? {
|
|
3173
|
-
value: key,
|
|
3174
|
-
label: label || key
|
|
3175
|
-
} : null;
|
|
3176
|
-
}
|
|
3177
3173
|
function AdHocFilterRenderer({ filter, model }) {
|
|
3178
3174
|
var _a, _b;
|
|
3179
3175
|
const styles = ui.useStyles2(getStyles$7);
|
|
3180
3176
|
const [state, setState] = React.useState({});
|
|
3181
|
-
const keyValue =
|
|
3182
|
-
|
|
3177
|
+
const keyValue = React.useMemo(() => {
|
|
3178
|
+
if (filter.key !== "") {
|
|
3179
|
+
if (model.state.defaultKeys) {
|
|
3180
|
+
const matchingDefaultKey = model.state.defaultKeys.find((option) => option.value === filter.key);
|
|
3181
|
+
if (matchingDefaultKey) {
|
|
3182
|
+
return toSelectableValue(matchingDefaultKey);
|
|
3183
|
+
}
|
|
3184
|
+
} else {
|
|
3185
|
+
return data.toOption(filter.key);
|
|
3186
|
+
}
|
|
3187
|
+
}
|
|
3188
|
+
return null;
|
|
3189
|
+
}, [filter.key, model.state.defaultKeys]);
|
|
3190
|
+
const valueValue = filter.value !== "" ? data.toOption(filter.value) : null;
|
|
3183
3191
|
const valueSelect = /* @__PURE__ */ React__default["default"].createElement(ui.Select, {
|
|
3184
3192
|
allowCustomValue: true,
|
|
3185
3193
|
formatCreateLabel: (inputValue) => `Use custom value: ${inputValue}`,
|
|
@@ -3189,7 +3197,7 @@ function AdHocFilterRenderer({ filter, model }) {
|
|
|
3189
3197
|
value: valueValue,
|
|
3190
3198
|
placeholder: "Select value",
|
|
3191
3199
|
options: state.values,
|
|
3192
|
-
onChange: (v) => model._updateFilter(filter, "value", v),
|
|
3200
|
+
onChange: (v) => model._updateFilter(filter, "value", v.value),
|
|
3193
3201
|
isOpen: state.isValuesOpen,
|
|
3194
3202
|
isLoading: state.isValuesLoading,
|
|
3195
3203
|
autoFocus: filter.key !== "" && filter.value === "",
|
|
@@ -3211,7 +3219,7 @@ function AdHocFilterRenderer({ filter, model }) {
|
|
|
3211
3219
|
value: keyValue,
|
|
3212
3220
|
placeholder: "Select label",
|
|
3213
3221
|
options: state.keys,
|
|
3214
|
-
onChange: (v) => model._updateFilter(filter, "key", v),
|
|
3222
|
+
onChange: (v) => model._updateFilter(filter, "key", v.value),
|
|
3215
3223
|
autoFocus: filter.key === "",
|
|
3216
3224
|
isOpen: state.isKeysOpen,
|
|
3217
3225
|
isLoading: state.isKeysLoading,
|
|
@@ -3258,7 +3266,7 @@ function AdHocFilterRenderer({ filter, model }) {
|
|
|
3258
3266
|
disabled: model.state.readOnly,
|
|
3259
3267
|
options: model._getOperators(),
|
|
3260
3268
|
width: "auto",
|
|
3261
|
-
onChange: (v) => model._updateFilter(filter, "operator", v)
|
|
3269
|
+
onChange: (v) => model._updateFilter(filter, "operator", v.value)
|
|
3262
3270
|
}), valueSelect, /* @__PURE__ */ React__default["default"].createElement(ui.Button, {
|
|
3263
3271
|
variant: "secondary",
|
|
3264
3272
|
"aria-label": "Remove filter",
|
|
@@ -3345,7 +3353,7 @@ class AdHocFiltersVariableUrlSyncHandler {
|
|
|
3345
3353
|
if (filters.length === 0) {
|
|
3346
3354
|
return { [this.getKey()]: [""] };
|
|
3347
3355
|
}
|
|
3348
|
-
const value = filters.map((filter) => toArray(filter).map(
|
|
3356
|
+
const value = filters.map((filter) => toArray(filter).map(escapeDelimiter).join("|"));
|
|
3349
3357
|
return { [this.getKey()]: value };
|
|
3350
3358
|
}
|
|
3351
3359
|
updateFromUrl(values) {
|
|
@@ -3365,54 +3373,30 @@ function deserializeUrlToFilters(value) {
|
|
|
3365
3373
|
const filter = toFilter(value);
|
|
3366
3374
|
return filter === null ? [] : [filter];
|
|
3367
3375
|
}
|
|
3368
|
-
function
|
|
3376
|
+
function escapeDelimiter(value) {
|
|
3369
3377
|
if (value === null || value === void 0) {
|
|
3370
3378
|
return "";
|
|
3371
3379
|
}
|
|
3372
|
-
return
|
|
3380
|
+
return /\|/g[Symbol.replace](value, "__gfp__");
|
|
3373
3381
|
}
|
|
3374
|
-
function
|
|
3382
|
+
function unescapeDelimiter(value) {
|
|
3375
3383
|
if (value === null || value === void 0) {
|
|
3376
3384
|
return "";
|
|
3377
3385
|
}
|
|
3378
|
-
return
|
|
3379
|
-
}
|
|
3380
|
-
function unescapeDelimiters(value) {
|
|
3381
|
-
if (value === null || value === void 0) {
|
|
3382
|
-
return "";
|
|
3383
|
-
}
|
|
3384
|
-
value = /__gfp__/g[Symbol.replace](value, "|");
|
|
3385
|
-
value = /__gfc__/g[Symbol.replace](value, ",");
|
|
3386
|
-
return value;
|
|
3386
|
+
return /__gfp__/g[Symbol.replace](value, "|");
|
|
3387
3387
|
}
|
|
3388
3388
|
function toArray(filter) {
|
|
3389
|
-
return [
|
|
3390
|
-
toCommaDelimitedString(filter.key, filter.keyLabel),
|
|
3391
|
-
filter.operator,
|
|
3392
|
-
toCommaDelimitedString(filter.value, filter.valueLabel)
|
|
3393
|
-
];
|
|
3394
|
-
}
|
|
3395
|
-
function toCommaDelimitedString(key, label) {
|
|
3396
|
-
if (!label || key === label) {
|
|
3397
|
-
return escapeCommaDelimiters(key);
|
|
3398
|
-
}
|
|
3399
|
-
return [key, label].map(escapeCommaDelimiters).join(",");
|
|
3389
|
+
return [filter.key, filter.operator, filter.value];
|
|
3400
3390
|
}
|
|
3401
|
-
function toFilter(
|
|
3402
|
-
if (typeof
|
|
3391
|
+
function toFilter(value) {
|
|
3392
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
3403
3393
|
return null;
|
|
3404
3394
|
}
|
|
3405
|
-
const
|
|
3406
|
-
const [key2, label] = v.split(",");
|
|
3407
|
-
acc.push(key2, label != null ? label : key2);
|
|
3408
|
-
return acc;
|
|
3409
|
-
}, []).map(unescapeDelimiters);
|
|
3395
|
+
const parts = value.split("|").map(unescapeDelimiter);
|
|
3410
3396
|
return {
|
|
3411
|
-
key,
|
|
3412
|
-
|
|
3413
|
-
|
|
3414
|
-
value,
|
|
3415
|
-
valueLabel,
|
|
3397
|
+
key: parts[0],
|
|
3398
|
+
operator: parts[1],
|
|
3399
|
+
value: parts[2],
|
|
3416
3400
|
condition: ""
|
|
3417
3401
|
};
|
|
3418
3402
|
}
|
|
@@ -3471,23 +3455,22 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
3471
3455
|
getValue() {
|
|
3472
3456
|
return this.state.filterExpression;
|
|
3473
3457
|
}
|
|
3474
|
-
_updateFilter(filter, prop,
|
|
3458
|
+
_updateFilter(filter, prop, value) {
|
|
3475
3459
|
if (value == null) {
|
|
3476
3460
|
return;
|
|
3477
3461
|
}
|
|
3478
3462
|
const { filters, _wip } = this.state;
|
|
3479
|
-
const propLabelKey = `${prop}Label`;
|
|
3480
3463
|
if (filter === _wip) {
|
|
3481
3464
|
if (prop === "value") {
|
|
3482
|
-
this.setState({ filters: [...filters, __spreadProps$l(__spreadValues$x({}, _wip), { [prop]: value
|
|
3465
|
+
this.setState({ filters: [...filters, __spreadProps$l(__spreadValues$x({}, _wip), { [prop]: value })], _wip: void 0 });
|
|
3483
3466
|
} else {
|
|
3484
|
-
this.setState({ _wip: __spreadProps$l(__spreadValues$x({}, filter), { [prop]: value
|
|
3467
|
+
this.setState({ _wip: __spreadProps$l(__spreadValues$x({}, filter), { [prop]: value }) });
|
|
3485
3468
|
}
|
|
3486
3469
|
return;
|
|
3487
3470
|
}
|
|
3488
3471
|
const updatedFilters = this.state.filters.map((f) => {
|
|
3489
3472
|
if (f === filter) {
|
|
3490
|
-
return __spreadProps$l(__spreadValues$x({}, f), { [prop]: value
|
|
3473
|
+
return __spreadProps$l(__spreadValues$x({}, f), { [prop]: value });
|
|
3491
3474
|
}
|
|
3492
3475
|
return f;
|
|
3493
3476
|
});
|
|
@@ -3546,9 +3529,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
3546
3529
|
return values.map(toSelectableValue);
|
|
3547
3530
|
}
|
|
3548
3531
|
_addWip() {
|
|
3549
|
-
this.setState({
|
|
3550
|
-
_wip: { key: "", keyLabel: "", value: "", valueLabel: "", operator: "=", condition: "" }
|
|
3551
|
-
});
|
|
3532
|
+
this.setState({ _wip: { key: "", value: "", operator: "=", condition: "" } });
|
|
3552
3533
|
}
|
|
3553
3534
|
_getOperators() {
|
|
3554
3535
|
return ["=", "!=", "<", ">", "=~", "!~"].map((value) => ({
|
|
@@ -6009,7 +5990,8 @@ function VariableValueSelectWrapper({ variable, layout, showAlways }) {
|
|
|
6009
5990
|
}
|
|
6010
5991
|
if (layout === "vertical") {
|
|
6011
5992
|
return /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
6012
|
-
className: verticalContainer
|
|
5993
|
+
className: verticalContainer,
|
|
5994
|
+
"data-testid": e2eSelectors.selectors.pages.Dashboard.SubMenu.submenuItem
|
|
6013
5995
|
}, /* @__PURE__ */ React__default["default"].createElement(VariableLabel, {
|
|
6014
5996
|
variable,
|
|
6015
5997
|
layout
|
|
@@ -6018,7 +6000,8 @@ function VariableValueSelectWrapper({ variable, layout, showAlways }) {
|
|
|
6018
6000
|
}));
|
|
6019
6001
|
}
|
|
6020
6002
|
return /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
6021
|
-
className: containerStyle
|
|
6003
|
+
className: containerStyle,
|
|
6004
|
+
"data-testid": e2eSelectors.selectors.pages.Dashboard.SubMenu.submenuItem
|
|
6022
6005
|
}, /* @__PURE__ */ React__default["default"].createElement(VariableLabel, {
|
|
6023
6006
|
variable
|
|
6024
6007
|
}), /* @__PURE__ */ React__default["default"].createElement(variable.Component, {
|
|
@@ -7518,7 +7501,8 @@ function VizPanelMenuRenderer({ model }) {
|
|
|
7518
7501
|
childItems: item.subMenu ? renderItems(item.subMenu) : void 0,
|
|
7519
7502
|
url: item.href,
|
|
7520
7503
|
onClick: item.onClick,
|
|
7521
|
-
shortcut: item.shortcut
|
|
7504
|
+
shortcut: item.shortcut,
|
|
7505
|
+
testId: e2eSelectors.selectors.components.Panels.Panel.menuItems(item.text)
|
|
7522
7506
|
})
|
|
7523
7507
|
);
|
|
7524
7508
|
};
|
|
@@ -8144,7 +8128,8 @@ function SceneGridRowRenderer({ model }) {
|
|
|
8144
8128
|
}, /* @__PURE__ */ React__default["default"].createElement("button", {
|
|
8145
8129
|
onClick: model.onCollapseToggle,
|
|
8146
8130
|
className: styles.rowTitleButton,
|
|
8147
|
-
"aria-label": isCollapsed ? "Expand row" : "Collapse row"
|
|
8131
|
+
"aria-label": isCollapsed ? "Expand row" : "Collapse row",
|
|
8132
|
+
"data-testid": e2eSelectors.selectors.components.DashboardRow.title(sceneGraph.interpolate(model, title, void 0, "text"))
|
|
8148
8133
|
}, isCollapsible && /* @__PURE__ */ React__default["default"].createElement(ui.Icon, {
|
|
8149
8134
|
name: isCollapsed ? "angle-right" : "angle-down"
|
|
8150
8135
|
}), /* @__PURE__ */ React__default["default"].createElement("span", {
|