@grafana/scenes 4.17.2--canary.714.9000579577.0 → 4.18.0--canary.724.9001989710.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.
@@ -1 +1 @@
1
- {"version":3,"file":"AdHocFiltersVariableUrlSyncHandler.js","sources":["../../../../src/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.ts"],"sourcesContent":["import { SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues } from '../../core/types';\nimport { AdHocFiltersVariable, AdHocFilterWithLabels, isFilterComplete } from './AdHocFiltersVariable';\n\nexport class AdHocFiltersVariableUrlSyncHandler implements SceneObjectUrlSyncHandler {\n public constructor(private _variable: AdHocFiltersVariable) {}\n\n private getKey(): string {\n return `var-${this._variable.state.name}`;\n }\n\n public getKeys(): string[] {\n return [this.getKey()];\n }\n\n public getUrlState(): SceneObjectUrlValues {\n const filters = this._variable.state.filters;\n\n if (filters.length === 0) {\n return { [this.getKey()]: [''] };\n }\n\n const value = filters.filter(isFilterComplete).map((filter) => toArray(filter).map(escapePipeDelimiters).join('|'));\n return { [this.getKey()]: value };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues): void {\n const urlValue = values[this.getKey()];\n\n if (urlValue == null) {\n return;\n }\n\n const filters = deserializeUrlToFilters(urlValue);\n this._variable.setState({ filters });\n }\n}\n\nfunction deserializeUrlToFilters(value: SceneObjectUrlValue): AdHocFilterWithLabels[] {\n if (Array.isArray(value)) {\n const values = value;\n return values.map(toFilter).filter(isFilter);\n }\n\n const filter = toFilter(value);\n return filter === null ? [] : [filter];\n}\n\nfunction escapePipeDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Replace the pipe due to using it as a filter separator\n return (value = /\\|/g[Symbol.replace](value, '__gfp__'));\n}\n\nfunction escapeCommaDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Replace the comma due to using it as a value/label separator\n return /,/g[Symbol.replace](value, '__gfc__');\n}\n\nfunction unescapeDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n value = /__gfp__/g[Symbol.replace](value, '|');\n value = /__gfc__/g[Symbol.replace](value, ',');\n\n return value;\n}\n\nfunction toArray(filter: AdHocFilterWithLabels): string[] {\n return [\n toCommaDelimitedString(filter.key, filter.keyLabel),\n filter.operator,\n toCommaDelimitedString(filter.value, filter.valueLabel),\n ];\n}\n\nfunction toCommaDelimitedString(key: string, label?: string): string {\n // Omit for identical key/label or when label is not set at all\n if (!label || key === label) {\n return escapeCommaDelimiters(key);\n }\n\n return [key, label].map(escapeCommaDelimiters).join(',');\n}\n\nfunction toFilter(urlValue: string | number | boolean | undefined | null): AdHocFilterWithLabels | null {\n if (typeof urlValue !== 'string' || urlValue.length === 0) {\n return null;\n }\n\n const [key, keyLabel, operator, _operatorLabel, value, valueLabel] = urlValue\n .split('|')\n .reduce<string[]>((acc, v) => {\n const [key, label] = v.split(',');\n\n acc.push(key, label ?? key);\n\n return acc;\n }, [])\n .map(unescapeDelimiters);\n\n return {\n key,\n keyLabel,\n operator,\n value,\n valueLabel,\n condition: '',\n };\n}\n\nfunction isFilter(filter: AdHocFilterWithLabels | null): filter is AdHocFilterWithLabels {\n return filter !== null && typeof filter.key === 'string' && typeof filter.value === 'string';\n}\n"],"names":["key"],"mappings":"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"}
1
+ {"version":3,"file":"AdHocFiltersVariableUrlSyncHandler.js","sources":["../../../../src/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.ts"],"sourcesContent":["import { SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues } from '../../core/types';\nimport { AdHocFiltersVariable, AdHocFilterWithLabels } from './AdHocFiltersVariable';\n\nexport class AdHocFiltersVariableUrlSyncHandler implements SceneObjectUrlSyncHandler {\n public constructor(private _variable: AdHocFiltersVariable) {}\n\n private getKey(): string {\n return `var-${this._variable.state.name}`;\n }\n\n public getKeys(): string[] {\n return [this.getKey()];\n }\n\n public getUrlState(): SceneObjectUrlValues {\n const filters = this._variable.state.filters;\n\n if (filters.length === 0) {\n return { [this.getKey()]: [''] };\n }\n\n const value = filters.map((filter) => toArray(filter).map(escapePipeDelimiters).join('|'));\n return { [this.getKey()]: value };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues): void {\n const urlValue = values[this.getKey()];\n\n if (urlValue == null) {\n return;\n }\n\n const filters = deserializeUrlToFilters(urlValue);\n this._variable.setState({ filters });\n }\n}\n\nfunction deserializeUrlToFilters(value: SceneObjectUrlValue): AdHocFilterWithLabels[] {\n if (Array.isArray(value)) {\n const values = value;\n return values.map(toFilter).filter(isFilter);\n }\n\n const filter = toFilter(value);\n return filter === null ? [] : [filter];\n}\n\nfunction escapePipeDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Replace the pipe due to using it as a filter separator\n return (value = /\\|/g[Symbol.replace](value, '__gfp__'));\n}\n\nfunction escapeCommaDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Replace the comma due to using it as a value/label separator\n return /,/g[Symbol.replace](value, '__gfc__');\n}\n\nfunction unescapeDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n value = /__gfp__/g[Symbol.replace](value, '|');\n value = /__gfc__/g[Symbol.replace](value, ',');\n\n return value;\n}\n\nfunction toArray(filter: AdHocFilterWithLabels): string[] {\n return [\n toCommaDelimitedString(filter.key, filter.keyLabel),\n filter.operator,\n toCommaDelimitedString(filter.value, filter.valueLabel),\n ];\n}\n\nfunction toCommaDelimitedString(key: string, label?: string): string {\n // Omit for identical key/label or when label is not set at all\n if (!label || key === label) {\n return escapeCommaDelimiters(key);\n }\n\n return [key, label].map(escapeCommaDelimiters).join(',');\n}\n\nfunction toFilter(urlValue: string | number | boolean | undefined | null): AdHocFilterWithLabels | null {\n if (typeof urlValue !== 'string' || urlValue.length === 0) {\n return null;\n }\n\n const [key, keyLabel, operator, _operatorLabel, value, valueLabel] = urlValue\n .split('|')\n .reduce<string[]>((acc, v) => {\n const [key, label] = v.split(',');\n\n acc.push(key, label ?? key);\n\n return acc;\n }, [])\n .map(unescapeDelimiters);\n\n return {\n key,\n keyLabel,\n operator,\n value,\n valueLabel,\n condition: '',\n };\n}\n\nfunction isFilter(filter: AdHocFilterWithLabels | null): filter is AdHocFilterWithLabels {\n return filter !== null && typeof filter.key === 'string' && typeof filter.value === 'string';\n}\n"],"names":["key"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -549,6 +549,7 @@ interface DataQueryExtended extends DataQuery$1 {
549
549
  declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> implements SceneDataProvider {
550
550
  private _querySub?;
551
551
  private _dataLayersSub?;
552
+ private _dataLayersMerger;
552
553
  private _timeSub?;
553
554
  private _timeSubRange?;
554
555
  private _containerWidth?;
@@ -1220,19 +1221,7 @@ declare class AnnotationsDataLayer extends SceneDataLayerBase<AnnotationsDataLay
1220
1221
  runLayer(): void;
1221
1222
  private runWithTimeRange;
1222
1223
  protected resolveDataSource(query: AnnotationQuery): Promise<_grafana_data.DataSourceApi<_grafana_data.DataQuery, _grafana_data.DataSourceJsonData, {}>>;
1223
- protected processEvents(query: AnnotationQuery, events: AnnotationQueryResults): {
1224
- state: LoadingState;
1225
- series: _grafana_data.DataFrame[];
1226
- structureRev?: number;
1227
- annotations?: _grafana_data.DataFrame[];
1228
- alertState?: _grafana_data.AlertStateInfo;
1229
- request?: _grafana_data.DataQueryRequest<_grafana_data.DataQuery>;
1230
- timings?: _grafana_data.DataQueryTimings;
1231
- errors?: _grafana_data.DataQueryError[];
1232
- error?: _grafana_data.DataQueryError;
1233
- timeRange: _grafana_data.TimeRange;
1234
- traceIds?: string[];
1235
- };
1224
+ protected processEvents(query: AnnotationQuery, events: AnnotationQueryResults): PanelData;
1236
1225
  }
1237
1226
  declare function AnnotationsDataLayerRenderer({ model }: SceneComponentProps<AnnotationsDataLayer>): React__default.JSX.Element;
1238
1227
 
@@ -1317,6 +1306,7 @@ declare abstract class SceneDataLayerSetBase<T extends SceneDataLayerProviderSta
1317
1306
  * Subject to emit results to.
1318
1307
  */
1319
1308
  private _results;
1309
+ private _dataLayersMerger;
1320
1310
  protected subscribeToAllLayers(layers: SceneDataLayerProvider[]): void;
1321
1311
  private _onLayerUpdateReceived;
1322
1312
  getResultsStream(): Observable<SceneDataProviderResult>;
package/dist/index.js CHANGED
@@ -3493,7 +3493,7 @@ class AdHocFiltersVariableUrlSyncHandler {
3493
3493
  if (filters.length === 0) {
3494
3494
  return { [this.getKey()]: [""] };
3495
3495
  }
3496
- const value = filters.filter(isFilterComplete).map((filter) => toArray(filter).map(escapePipeDelimiters).join("|"));
3496
+ const value = filters.map((filter) => toArray(filter).map(escapePipeDelimiters).join("|"));
3497
3497
  return { [this.getKey()]: value };
3498
3498
  }
3499
3499
  updateFromUrl(values) {
@@ -3635,12 +3635,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
3635
3635
  }
3636
3636
  const updatedFilters = this.state.filters.map((f) => {
3637
3637
  if (f === filter) {
3638
- const updatedFilter = __spreadProps$l(__spreadValues$x({}, f), { [prop]: value, [propLabelKey]: label });
3639
- if (prop === "key" && filter[prop] !== value) {
3640
- updatedFilter.value = "";
3641
- updatedFilter.valueLabel = "";
3642
- }
3643
- return updatedFilter;
3638
+ return __spreadProps$l(__spreadValues$x({}, f), { [prop]: value, [propLabelKey]: label });
3644
3639
  }
3645
3640
  return f;
3646
3641
  });
@@ -3749,27 +3744,47 @@ function toSelectableValue({ text, value }) {
3749
3744
  value: String(value != null ? value : text)
3750
3745
  };
3751
3746
  }
3752
- function isFilterComplete(filter) {
3753
- return filter.key !== "" && filter.operator !== "" && filter.value !== "";
3754
- }
3755
3747
 
3756
- function mergeMultipleDataLayers(layers) {
3757
- const resultStreams = layers.map((l) => l.getResultsStream());
3758
- const resultsMap = /* @__PURE__ */ new Map();
3759
- const deactivationHandlers = [];
3760
- for (const layer of layers) {
3761
- deactivationHandlers.push(layer.activate());
3748
+ class DataLayersMerger {
3749
+ constructor() {
3750
+ this._resultsMap = /* @__PURE__ */ new Map();
3751
+ this._prevLayers = [];
3752
+ }
3753
+ getMergedStream(layers) {
3754
+ if (areDifferentLayers(layers, this._prevLayers)) {
3755
+ this._resultsMap = /* @__PURE__ */ new Map();
3756
+ this._prevLayers = layers;
3757
+ }
3758
+ const resultStreams = layers.map((l) => l.getResultsStream());
3759
+ const deactivationHandlers = [];
3760
+ for (const layer of layers) {
3761
+ deactivationHandlers.push(layer.activate());
3762
+ }
3763
+ return rxjs.merge(resultStreams).pipe(
3764
+ rxjs.mergeAll(),
3765
+ rxjs.filter((v) => {
3766
+ return this._resultsMap.get(v.origin.state.key) !== v;
3767
+ }),
3768
+ rxjs.map((v) => {
3769
+ this._resultsMap.set(v.origin.state.key, v);
3770
+ return this._resultsMap.values();
3771
+ }),
3772
+ rxjs.finalize(() => {
3773
+ deactivationHandlers.forEach((handler) => handler());
3774
+ })
3775
+ );
3762
3776
  }
3763
- return rxjs.merge(resultStreams).pipe(
3764
- rxjs.mergeAll(),
3765
- rxjs.map((v) => {
3766
- resultsMap.set(v.origin.state.key, v);
3767
- return resultsMap.values();
3768
- }),
3769
- rxjs.finalize(() => {
3770
- deactivationHandlers.forEach((handler) => handler());
3771
- })
3772
- );
3777
+ }
3778
+ function areDifferentLayers(a, b) {
3779
+ if (a.length !== b.length) {
3780
+ return true;
3781
+ }
3782
+ for (let i = 0; i < a.length; i++) {
3783
+ if (a[i] !== b[i]) {
3784
+ return true;
3785
+ }
3786
+ }
3787
+ return false;
3773
3788
  }
3774
3789
 
3775
3790
  var __defProp$w = Object.defineProperty;
@@ -3798,6 +3813,7 @@ function getNextRequestId$1() {
3798
3813
  class SceneQueryRunner extends SceneObjectBase {
3799
3814
  constructor(initialState) {
3800
3815
  super(initialState);
3816
+ this._dataLayersMerger = new DataLayersMerger();
3801
3817
  this._variableValueRecorder = new VariableValueRecorder();
3802
3818
  this._results = new rxjs.ReplaySubject(1);
3803
3819
  this._scopedVars = { __sceneObject: { value: this, text: "__sceneObject" } };
@@ -3831,7 +3847,7 @@ class SceneQueryRunner extends SceneObjectBase {
3831
3847
  queryCachingTTL: this.state.queryCachingTTL
3832
3848
  }, getEnrichedDataRequest(this));
3833
3849
  if (this._adhocFiltersVar) {
3834
- request.filters = this._adhocFiltersVar.state.filters.filter(isFilterComplete);
3850
+ request.filters = this._adhocFiltersVar.state.filters;
3835
3851
  }
3836
3852
  if (this._groupByVar) {
3837
3853
  request.groupByKeys = this._groupByVar.state.value;
@@ -3912,10 +3928,10 @@ class SceneQueryRunner extends SceneObjectBase {
3912
3928
  if (dataLayers.length === 0) {
3913
3929
  return;
3914
3930
  }
3915
- this._dataLayersSub = mergeMultipleDataLayers(dataLayers).subscribe(this._onLayersReceived.bind(this));
3931
+ this._dataLayersSub = this._dataLayersMerger.getMergedStream(dataLayers).subscribe(this._onLayersReceived.bind(this));
3916
3932
  }
3917
3933
  _onLayersReceived(results) {
3918
- var _a, _b, _c, _d;
3934
+ var _a, _b, _c, _d, _e;
3919
3935
  const timeRange = sceneGraph.getTimeRange(this);
3920
3936
  const { dataLayerFilter } = this.state;
3921
3937
  let annotations = [];
@@ -3947,12 +3963,15 @@ class SceneQueryRunner extends SceneObjectBase {
3947
3963
  }
3948
3964
  }
3949
3965
  }
3950
- const baseStateUpdate = this.state.data ? this.state.data : __spreadProps$k(__spreadValues$w({}, emptyPanelData), { timeRange: timeRange.state.value });
3966
+ if (alertState === ((_c = this.state.data) == null ? void 0 : _c.alertState) && allFramesEmpty(annotations) && allFramesEmpty(this._layerAnnotations)) {
3967
+ return;
3968
+ }
3951
3969
  this._layerAnnotations = annotations;
3970
+ const baseStateUpdate = this.state.data ? this.state.data : __spreadProps$k(__spreadValues$w({}, emptyPanelData), { timeRange: timeRange.state.value });
3952
3971
  this.setState({
3953
3972
  data: __spreadProps$k(__spreadValues$w({}, baseStateUpdate), {
3954
- annotations: [...(_c = this._resultAnnotations) != null ? _c : [], ...annotations],
3955
- alertState: alertState != null ? alertState : (_d = this.state.data) == null ? void 0 : _d.alertState
3973
+ annotations: [...(_d = this._resultAnnotations) != null ? _d : [], ...annotations],
3974
+ alertState: alertState != null ? alertState : (_e = this.state.data) == null ? void 0 : _e.alertState
3956
3975
  })
3957
3976
  });
3958
3977
  }
@@ -4188,6 +4207,17 @@ function findFirstDatasource(targets) {
4188
4207
  var _a, _b;
4189
4208
  return (_b = (_a = targets.find((t) => t.datasource !== null)) == null ? void 0 : _a.datasource) != null ? _b : void 0;
4190
4209
  }
4210
+ function allFramesEmpty(frames) {
4211
+ if (!frames) {
4212
+ return true;
4213
+ }
4214
+ for (let i = 0; i < frames.length; i++) {
4215
+ if (frames[i].length > 0) {
4216
+ return false;
4217
+ }
4218
+ }
4219
+ return true;
4220
+ }
4191
4221
 
4192
4222
  function isVariableValueEqual(a, b) {
4193
4223
  if (a === b) {
@@ -5256,7 +5286,7 @@ class SceneDataLayerBase extends SceneObjectBase {
5256
5286
  super(__spreadValues$r({
5257
5287
  isEnabled: true
5258
5288
  }, initialState));
5259
- this._results = new rxjs.ReplaySubject();
5289
+ this._results = new rxjs.ReplaySubject(1);
5260
5290
  this.isDataLayer = true;
5261
5291
  this._variableValueRecorder = new VariableValueRecorder();
5262
5292
  this._variableDependency = new VariableDependencyConfig(this, {
@@ -5980,11 +6010,12 @@ class SceneDataLayerSetBase extends SceneObjectBase {
5980
6010
  constructor() {
5981
6011
  super(...arguments);
5982
6012
  this.isDataLayer = true;
5983
- this._results = new rxjs.ReplaySubject();
6013
+ this._results = new rxjs.ReplaySubject(1);
6014
+ this._dataLayersMerger = new DataLayersMerger();
5984
6015
  }
5985
6016
  subscribeToAllLayers(layers) {
5986
6017
  if (layers.length > 0) {
5987
- this.querySub = mergeMultipleDataLayers(layers).subscribe(this._onLayerUpdateReceived.bind(this));
6018
+ this.querySub = this._dataLayersMerger.getMergedStream(layers).subscribe(this._onLayerUpdateReceived.bind(this));
5988
6019
  } else {
5989
6020
  this._results.next({ origin: this, data: emptyPanelData });
5990
6021
  this.setStateHelper({ data: emptyPanelData });