@grafana/scenes 6.6.0--canary.1081.13995169903.0 → 6.6.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/CHANGELOG.md +24 -0
- package/dist/esm/core/SceneScopesBridge.js +1 -30
- package/dist/esm/core/SceneScopesBridge.js.map +1 -1
- package/dist/index.d.ts +16 -20
- package/dist/index.js +1 -29
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
# v6.6.0 (Mon Mar 24 2025)
|
|
2
|
+
|
|
3
|
+
#### 🚀 Enhancement
|
|
4
|
+
|
|
5
|
+
- Combobox: Support individual read-only filters [#1081](https://github.com/grafana/scenes/pull/1081) ([@adrapereira](https://github.com/adrapereira))
|
|
6
|
+
|
|
7
|
+
#### Authors: 1
|
|
8
|
+
|
|
9
|
+
- Andre Pereira ([@adrapereira](https://github.com/adrapereira))
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# v6.5.3 (Fri Mar 21 2025)
|
|
14
|
+
|
|
15
|
+
#### 🐛 Bug Fix
|
|
16
|
+
|
|
17
|
+
- Remove url sync from ScopesBridge [#1080](https://github.com/grafana/scenes/pull/1080) ([@aocenas](https://github.com/aocenas))
|
|
18
|
+
|
|
19
|
+
#### Authors: 1
|
|
20
|
+
|
|
21
|
+
- Andrej Ocenas ([@aocenas](https://github.com/aocenas))
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
1
25
|
# v6.5.2 (Thu Mar 20 2025)
|
|
2
26
|
|
|
3
27
|
#### 🐛 Bug Fix
|
|
@@ -3,31 +3,12 @@ import { useEffect } from 'react';
|
|
|
3
3
|
import { BehaviorSubject, map, pairwise, filter } from 'rxjs';
|
|
4
4
|
import { useScopes } from '@grafana/runtime';
|
|
5
5
|
import { SceneObjectBase } from './SceneObjectBase.js';
|
|
6
|
-
import { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig.js';
|
|
7
6
|
|
|
8
7
|
class SceneScopesBridge extends SceneObjectBase {
|
|
9
8
|
constructor() {
|
|
10
9
|
super(...arguments);
|
|
11
|
-
this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: ["scopes"] });
|
|
12
10
|
this._renderBeforeActivation = true;
|
|
13
11
|
this._contextSubject = new BehaviorSubject(void 0);
|
|
14
|
-
this._pendingScopes = null;
|
|
15
|
-
}
|
|
16
|
-
getUrlState() {
|
|
17
|
-
var _a, _b, _c;
|
|
18
|
-
return {
|
|
19
|
-
scopes: (_c = this._pendingScopes) != null ? _c : ((_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : []).map((scope) => scope.metadata.name)
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
updateFromUrl(values) {
|
|
23
|
-
var _a, _b;
|
|
24
|
-
let scopes = (_a = values["scopes"]) != null ? _a : [];
|
|
25
|
-
scopes = (Array.isArray(scopes) ? scopes : [scopes]).map(String);
|
|
26
|
-
if (!this.context) {
|
|
27
|
-
this._pendingScopes = scopes;
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
(_b = this.context) == null ? void 0 : _b.changeScopes(scopes);
|
|
31
12
|
}
|
|
32
13
|
getValue() {
|
|
33
14
|
var _a, _b;
|
|
@@ -73,19 +54,9 @@ class SceneScopesBridge extends SceneObjectBase {
|
|
|
73
54
|
(_a = this.context) == null ? void 0 : _a.setReadOnly(readOnly);
|
|
74
55
|
}
|
|
75
56
|
updateContext(newContext) {
|
|
76
|
-
var _a
|
|
77
|
-
if (this._pendingScopes && newContext) {
|
|
78
|
-
setTimeout(() => {
|
|
79
|
-
newContext == null ? void 0 : newContext.changeScopes(this._pendingScopes);
|
|
80
|
-
this._pendingScopes = null;
|
|
81
|
-
});
|
|
82
|
-
}
|
|
57
|
+
var _a;
|
|
83
58
|
if (this.context !== newContext || ((_a = this.context) == null ? void 0 : _a.state) !== (newContext == null ? void 0 : newContext.state)) {
|
|
84
|
-
const shouldUpdate = ((_b = this.context) == null ? void 0 : _b.state.value) !== (newContext == null ? void 0 : newContext.state.value);
|
|
85
59
|
this._contextSubject.next(newContext);
|
|
86
|
-
if (shouldUpdate) {
|
|
87
|
-
this.forceRender();
|
|
88
|
-
}
|
|
89
60
|
}
|
|
90
61
|
}
|
|
91
62
|
get context() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SceneScopesBridge.js","sources":["../../../src/core/SceneScopesBridge.ts"],"sourcesContent":["import { isEqual } from 'lodash';\nimport { useEffect } from 'react';\nimport { BehaviorSubject, filter, map, Observable, pairwise, Unsubscribable } from 'rxjs';\n\nimport { Scope } from '@grafana/data';\nimport { ScopesContextValue, useScopes } from '@grafana/runtime';\n\nimport { SceneObjectBase } from './SceneObjectBase';\nimport { SceneComponentProps, SceneObjectUrlValues, SceneObjectWithUrlSync } from './types';\nimport { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig';\n\nexport class SceneScopesBridge extends SceneObjectBase implements SceneObjectWithUrlSync {\n static Component = SceneScopesBridgeRenderer;\n\n protected _urlSync = new SceneObjectUrlSyncConfig(this, { keys: ['scopes'] });\n\n protected _renderBeforeActivation = true;\n\n private _contextSubject = new BehaviorSubject<ScopesContextValue | undefined>(undefined);\n\n // Needed to maintain scopes values received from URL until the context is available\n private _pendingScopes: string[] | null = null;\n\n public getUrlState(): SceneObjectUrlValues {\n return {\n scopes: this._pendingScopes ?? (this.context?.state.value ?? []).map((scope: Scope) => scope.metadata.name),\n };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n let scopes = values['scopes'] ?? [];\n scopes = (Array.isArray(scopes) ? scopes : [scopes]).map(String);\n\n if (!this.context) {\n this._pendingScopes = scopes;\n return;\n }\n\n this.context?.changeScopes(scopes);\n }\n\n public getValue(): Scope[] {\n return this.context?.state.value ?? [];\n }\n\n /**\n * Emits values of the selected scopes array. It emits the current value and the previous value if there is a change.\n * @param cb\n */\n public subscribeToValue(cb: (newScopes: Scope[], prevScopes: Scope[]) => void): Unsubscribable {\n return this.contextObservable\n .pipe(\n map((context) => context?.state.value ?? []),\n pairwise(),\n filter(([prevScopes, newScopes]) => !isEqual(prevScopes, newScopes))\n )\n .subscribe(([prevScopes, newScopes]) => {\n cb(newScopes, prevScopes);\n });\n }\n\n public isLoading(): boolean {\n return this.context?.state.loading ?? false;\n }\n\n public subscribeToLoading(cb: (loading: boolean) => void): Unsubscribable {\n return this.contextObservable\n .pipe(\n filter((context) => !!context),\n pairwise(),\n map(\n ([prevContext, newContext]) =>\n [prevContext?.state.loading ?? false, newContext?.state.loading ?? false] as [boolean, boolean]\n ),\n filter(([prevLoading, newLoading]) => prevLoading !== newLoading)\n )\n .subscribe(([_prevLoading, newLoading]) => {\n cb(newLoading);\n });\n }\n\n public setEnabled(enabled: boolean) {\n this.context?.setEnabled(enabled);\n }\n\n public setReadOnly(readOnly: boolean) {\n this.context?.setReadOnly(readOnly);\n }\n\n /**\n * This method is used to keep the context up to date with the scopes context received from React\n *\n * Its rationale is:\n * - When a new context is available, check if we have pending scopes passed from the URL\n * - If we have pending scopes, ask the new context to load them\n * - The loading should happen in a setTimeout to allow the existing context to pass its values to the URL sync handler\n * - If a new context is received, propagate it as a new value in the behavior subject\n * - If a new value is received, force a re-render to trigger the URL sync handler\n */\n public updateContext(newContext: ScopesContextValue | undefined) {\n if (this._pendingScopes && newContext) {\n /**\n * The setTimeout here is needed to avoid a potential race condition in the URL sync handler\n * One way to test this is:\n * - navigate to a dashboard and select some scopes\n * - navigate to a suggested dashboard and change the selected scopes\n * - observe the URL not containing any scopes\n */\n setTimeout(() => {\n newContext?.changeScopes(this._pendingScopes!);\n this._pendingScopes = null;\n });\n\n /**\n * If we return here and don't allow the context to be propagated, scopes will never get activated when\n * navigating from a page without scopes to a page that has scopes.\n *\n * This is happening because the app will try to call `enable` on the context, but the context would not be available yet\n */\n }\n\n if (this.context !== newContext || this.context?.state !== newContext?.state) {\n // Checking if we should trigger a re-render before pushing new value for the context\n // Doing it here because otherwise the check would not be valid (this.context would be newContext due to the value push)\n const shouldUpdate = this.context?.state.value !== newContext?.state.value;\n\n this._contextSubject.next(newContext);\n\n /**\n * Whenever we got a new set of scopes, we force a re-render in order to trigger the URL sync handler\n * Without this, the URL would never be updated when the scopes change\n * TODO: This is a workaround and should be removed once we have a better way to handle this (aka trigger URL sync handler on demand)\n */\n if (shouldUpdate) {\n this.forceRender();\n }\n }\n }\n\n private get context(): ScopesContextValue | undefined {\n return this._contextSubject.getValue();\n }\n\n private get contextObservable(): Observable<ScopesContextValue | undefined> {\n return this._contextSubject.asObservable();\n }\n}\n\nfunction SceneScopesBridgeRenderer({ model }: SceneComponentProps<SceneScopesBridge>) {\n const context = useScopes();\n\n useEffect(() => {\n model.updateContext(context);\n }, [context, model]);\n\n return null;\n}\n"],"names":[],"mappings":";;;;;;;AAWO,MAAM,0BAA0B,eAAkD,CAAA;AAAA,EAAlF,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA,CAAA;AAGL,IAAU,IAAA,CAAA,QAAA,GAAW,IAAI,wBAAyB,CAAA,IAAA,EAAM,EAAE,IAAM,EAAA,CAAC,QAAQ,CAAA,EAAG,CAAA,CAAA;AAE5E,IAAA,IAAA,CAAU,uBAA0B,GAAA,IAAA,CAAA;AAEpC,IAAQ,IAAA,CAAA,eAAA,GAAkB,IAAI,eAAA,CAAgD,KAAS,CAAA,CAAA,CAAA;AAGvF,IAAA,IAAA,CAAQ,cAAkC,GAAA,IAAA,CAAA;AAAA,GAAA;AAAA,EAEnC,WAAoC,GAAA;AAvB7C,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAwBI,IAAO,OAAA;AAAA,MACL,SAAQ,EAAK,GAAA,IAAA,CAAA,cAAA,KAAL,IAAwB,GAAA,EAAA,GAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,YAAL,IAAc,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,CAAM,KAApB,KAAA,IAAA,GAAA,EAAA,GAA6B,EAAI,EAAA,GAAA,CAAI,CAAC,KAAiB,KAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AAAA,KAC5G,CAAA;AAAA,GACF;AAAA,EAEO,cAAc,MAA8B,EAAA;AA7BrD,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA8BI,IAAA,IAAI,MAAS,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,QAAP,CAAA,KAAA,IAAA,GAAA,EAAA,GAAoB,EAAC,CAAA;AAClC,IAAU,MAAA,GAAA,CAAA,KAAA,CAAM,QAAQ,MAAM,CAAA,GAAI,SAAS,CAAC,MAAM,CAAG,EAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AAE/D,IAAI,IAAA,CAAC,KAAK,OAAS,EAAA;AACjB,MAAA,IAAA,CAAK,cAAiB,GAAA,MAAA,CAAA;AACtB,MAAA,OAAA;AAAA,KACF;AAEA,IAAK,CAAA,EAAA,GAAA,IAAA,CAAA,OAAA,KAAL,mBAAc,YAAa,CAAA,MAAA,CAAA,CAAA;AAAA,GAC7B;AAAA,EAEO,QAAoB,GAAA;AAzC7B,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA0CI,IAAA,OAAA,CAAO,gBAAK,OAAL,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,KAAM,CAAA,KAAA,KAApB,YAA6B,EAAC,CAAA;AAAA,GACvC;AAAA,EAMO,iBAAiB,EAAuE,EAAA;AAC7F,IAAA,OAAO,KAAK,iBACT,CAAA,IAAA;AAAA,MACC,GAAA,CAAI,CAAC,OAAS,KAAA;AApDtB,QAAA,IAAA,EAAA,CAAA;AAoDyB,QAAS,OAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,KAAA,CAAM,KAAf,KAAA,IAAA,GAAA,EAAA,GAAwB,EAAC,CAAA;AAAA,OAAC,CAAA;AAAA,MAC3C,QAAS,EAAA;AAAA,MACT,MAAA,CAAO,CAAC,CAAC,UAAY,EAAA,SAAS,MAAM,CAAC,OAAA,CAAQ,UAAY,EAAA,SAAS,CAAC,CAAA;AAAA,MAEpE,SAAU,CAAA,CAAC,CAAC,UAAA,EAAY,SAAS,CAAM,KAAA;AACtC,MAAA,EAAA,CAAG,WAAW,UAAU,CAAA,CAAA;AAAA,KACzB,CAAA,CAAA;AAAA,GACL;AAAA,EAEO,SAAqB,GAAA;AA7D9B,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA8DI,IAAA,OAAA,CAAO,EAAK,GAAA,CAAA,EAAA,GAAA,IAAA,CAAA,OAAA,KAAL,IAAc,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,CAAM,YAApB,IAA+B,GAAA,EAAA,GAAA,KAAA,CAAA;AAAA,GACxC;AAAA,EAEO,mBAAmB,EAAgD,EAAA;AACxE,IAAA,OAAO,KAAK,iBACT,CAAA,IAAA;AAAA,MACC,MAAO,CAAA,CAAC,OAAY,KAAA,CAAC,CAAC,OAAO,CAAA;AAAA,MAC7B,QAAS,EAAA;AAAA,MACT,GAAA;AAAA,QACE,CAAC,CAAC,WAAa,EAAA,UAAU,CAAG,KAAA;AAvEtC,UAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAwEY,UAAC,OAAA,CAAA,CAAA,EAAA,GAAA,WAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAa,MAAM,OAAnB,KAAA,IAAA,GAAA,EAAA,GAA8B,QAAO,EAAY,GAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,KAAA,CAAM,OAAlB,KAAA,IAAA,GAAA,EAAA,GAA6B,KAAK,CAAA,CAAA;AAAA,SAAA;AAAA,OAC5E;AAAA,MACA,OAAO,CAAC,CAAC,aAAa,UAAU,CAAA,KAAM,gBAAgB,UAAU,CAAA;AAAA,MAEjE,SAAU,CAAA,CAAC,CAAC,YAAA,EAAc,UAAU,CAAM,KAAA;AACzC,MAAA,EAAA,CAAG,UAAU,CAAA,CAAA;AAAA,KACd,CAAA,CAAA;AAAA,GACL;AAAA,EAEO,WAAW,OAAkB,EAAA;AAjFtC,IAAA,IAAA,EAAA,CAAA;AAkFI,IAAK,CAAA,EAAA,GAAA,IAAA,CAAA,OAAA,KAAL,mBAAc,UAAW,CAAA,OAAA,CAAA,CAAA;AAAA,GAC3B;AAAA,EAEO,YAAY,QAAmB,EAAA;AArFxC,IAAA,IAAA,EAAA,CAAA;AAsFI,IAAK,CAAA,EAAA,GAAA,IAAA,CAAA,OAAA,KAAL,mBAAc,WAAY,CAAA,QAAA,CAAA,CAAA;AAAA,GAC5B;AAAA,EAYO,cAAc,UAA4C,EAAA;AAnGnE,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAoGI,IAAI,IAAA,IAAA,CAAK,kBAAkB,UAAY,EAAA;AAQrC,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,aAAa,IAAK,CAAA,cAAA,CAAA,CAAA;AAC9B,QAAA,IAAA,CAAK,cAAiB,GAAA,IAAA,CAAA;AAAA,OACvB,CAAA,CAAA;AAAA,KAQH;AAEA,IAAI,IAAA,IAAA,CAAK,YAAY,UAAc,IAAA,CAAA,CAAA,EAAA,GAAA,IAAA,CAAK,YAAL,IAAc,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,OAAU,yCAAY,KAAO,CAAA,EAAA;AAG5E,MAAA,MAAM,iBAAe,EAAK,GAAA,IAAA,CAAA,OAAA,KAAL,mBAAc,KAAM,CAAA,KAAA,OAAU,yCAAY,KAAM,CAAA,KAAA,CAAA,CAAA;AAErE,MAAK,IAAA,CAAA,eAAA,CAAgB,KAAK,UAAU,CAAA,CAAA;AAOpC,MAAA,IAAI,YAAc,EAAA;AAChB,QAAA,IAAA,CAAK,WAAY,EAAA,CAAA;AAAA,OACnB;AAAA,KACF;AAAA,GACF;AAAA,EAEA,IAAY,OAA0C,GAAA;AACpD,IAAO,OAAA,IAAA,CAAK,gBAAgB,QAAS,EAAA,CAAA;AAAA,GACvC;AAAA,EAEA,IAAY,iBAAgE,GAAA;AAC1E,IAAO,OAAA,IAAA,CAAK,gBAAgB,YAAa,EAAA,CAAA;AAAA,GAC3C;AACF,CAAA;AAvIa,iBAAA,CACJ,SAAY,GAAA,yBAAA,CAAA;AAwIrB,SAAS,yBAAA,CAA0B,EAAE,KAAA,EAAiD,EAAA;AACpF,EAAA,MAAM,UAAU,SAAU,EAAA,CAAA;AAE1B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,KAAA,CAAM,cAAc,OAAO,CAAA,CAAA;AAAA,GAC1B,EAAA,CAAC,OAAS,EAAA,KAAK,CAAC,CAAA,CAAA;AAEnB,EAAO,OAAA,IAAA,CAAA;AACT;;;;"}
|
|
1
|
+
{"version":3,"file":"SceneScopesBridge.js","sources":["../../../src/core/SceneScopesBridge.ts"],"sourcesContent":["import { isEqual } from 'lodash';\nimport { useEffect } from 'react';\nimport { BehaviorSubject, filter, map, Observable, pairwise, Unsubscribable } from 'rxjs';\n\nimport { Scope } from '@grafana/data';\nimport { ScopesContextValue, useScopes } from '@grafana/runtime';\n\nimport { SceneObjectBase } from './SceneObjectBase';\nimport { SceneComponentProps } from './types';\n\nexport class SceneScopesBridge extends SceneObjectBase {\n static Component = SceneScopesBridgeRenderer;\n\n protected _renderBeforeActivation = true;\n\n private _contextSubject = new BehaviorSubject<ScopesContextValue | undefined>(undefined);\n\n public getValue(): Scope[] {\n return this.context?.state.value ?? [];\n }\n\n /**\n * Emits values of the selected scopes array. It emits the current value and the previous value if there is a change.\n * @param cb\n */\n public subscribeToValue(cb: (newScopes: Scope[], prevScopes: Scope[]) => void): Unsubscribable {\n return this.contextObservable\n .pipe(\n map((context) => context?.state.value ?? []),\n pairwise(),\n filter(([prevScopes, newScopes]) => !isEqual(prevScopes, newScopes))\n )\n .subscribe(([prevScopes, newScopes]) => {\n cb(newScopes, prevScopes);\n });\n }\n\n public isLoading(): boolean {\n return this.context?.state.loading ?? false;\n }\n\n public subscribeToLoading(cb: (loading: boolean) => void): Unsubscribable {\n return this.contextObservable\n .pipe(\n filter((context) => !!context),\n pairwise(),\n map(\n ([prevContext, newContext]) =>\n [prevContext?.state.loading ?? false, newContext?.state.loading ?? false] as [boolean, boolean]\n ),\n filter(([prevLoading, newLoading]) => prevLoading !== newLoading)\n )\n .subscribe(([_prevLoading, newLoading]) => {\n cb(newLoading);\n });\n }\n\n public setEnabled(enabled: boolean) {\n this.context?.setEnabled(enabled);\n }\n\n public setReadOnly(readOnly: boolean) {\n this.context?.setReadOnly(readOnly);\n }\n\n /**\n * This method is used to keep the context up to date with the scopes context received from React\n *\n * Its rationale is:\n * - When a new context is available, check if we have pending scopes passed from the URL\n * - If we have pending scopes, ask the new context to load them\n * - The loading should happen in a setTimeout to allow the existing context to pass its values to the URL sync handler\n * - If a new context is received, propagate it as a new value in the behavior subject\n * - If a new value is received, force a re-render to trigger the URL sync handler\n */\n public updateContext(newContext: ScopesContextValue | undefined) {\n if (this.context !== newContext || this.context?.state !== newContext?.state) {\n this._contextSubject.next(newContext);\n }\n }\n\n private get context(): ScopesContextValue | undefined {\n return this._contextSubject.getValue();\n }\n\n private get contextObservable(): Observable<ScopesContextValue | undefined> {\n return this._contextSubject.asObservable();\n }\n}\n\nfunction SceneScopesBridgeRenderer({ model }: SceneComponentProps<SceneScopesBridge>) {\n const context = useScopes();\n\n useEffect(() => {\n model.updateContext(context);\n }, [context, model]);\n\n return null;\n}\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -650,29 +650,10 @@ declare class EmbeddedScene extends SceneObjectBase<EmbeddedSceneState> {
|
|
|
650
650
|
}
|
|
651
651
|
declare function EmbeddedSceneRenderer({ model }: SceneComponentProps<EmbeddedScene>): React__default.JSX.Element;
|
|
652
652
|
|
|
653
|
-
|
|
654
|
-
keys: string[] | (() => string[]);
|
|
655
|
-
}
|
|
656
|
-
declare class SceneObjectUrlSyncConfig implements SceneObjectUrlSyncHandler {
|
|
657
|
-
private _sceneObject;
|
|
658
|
-
private _keys;
|
|
659
|
-
private _nextChangeShouldAddHistoryStep;
|
|
660
|
-
constructor(_sceneObject: SceneObjectWithUrlSync, _options: SceneObjectUrlSyncConfigOptions);
|
|
661
|
-
getKeys(): string[];
|
|
662
|
-
getUrlState(): SceneObjectUrlValues;
|
|
663
|
-
updateFromUrl(values: SceneObjectUrlValues): void;
|
|
664
|
-
shouldCreateHistoryStep(values: SceneObjectUrlValues): boolean;
|
|
665
|
-
performBrowserHistoryAction(callback: () => void): void;
|
|
666
|
-
}
|
|
667
|
-
|
|
668
|
-
declare class SceneScopesBridge extends SceneObjectBase implements SceneObjectWithUrlSync {
|
|
653
|
+
declare class SceneScopesBridge extends SceneObjectBase {
|
|
669
654
|
static Component: typeof SceneScopesBridgeRenderer;
|
|
670
|
-
protected _urlSync: SceneObjectUrlSyncConfig;
|
|
671
655
|
protected _renderBeforeActivation: boolean;
|
|
672
656
|
private _contextSubject;
|
|
673
|
-
private _pendingScopes;
|
|
674
|
-
getUrlState(): SceneObjectUrlValues;
|
|
675
|
-
updateFromUrl(values: SceneObjectUrlValues): void;
|
|
676
657
|
getValue(): Scope[];
|
|
677
658
|
/**
|
|
678
659
|
* Emits values of the selected scopes array. It emits the current value and the previous value if there is a change.
|
|
@@ -1628,6 +1609,21 @@ declare class SceneDataNode extends SceneObjectBase<SceneDataNodeState> implemen
|
|
|
1628
1609
|
getResultsStream(): rxjs.Observable<SceneDataProviderResult>;
|
|
1629
1610
|
}
|
|
1630
1611
|
|
|
1612
|
+
interface SceneObjectUrlSyncConfigOptions {
|
|
1613
|
+
keys: string[] | (() => string[]);
|
|
1614
|
+
}
|
|
1615
|
+
declare class SceneObjectUrlSyncConfig implements SceneObjectUrlSyncHandler {
|
|
1616
|
+
private _sceneObject;
|
|
1617
|
+
private _keys;
|
|
1618
|
+
private _nextChangeShouldAddHistoryStep;
|
|
1619
|
+
constructor(_sceneObject: SceneObjectWithUrlSync, _options: SceneObjectUrlSyncConfigOptions);
|
|
1620
|
+
getKeys(): string[];
|
|
1621
|
+
getUrlState(): SceneObjectUrlValues;
|
|
1622
|
+
updateFromUrl(values: SceneObjectUrlValues): void;
|
|
1623
|
+
shouldCreateHistoryStep(values: SceneObjectUrlValues): boolean;
|
|
1624
|
+
performBrowserHistoryAction(callback: () => void): void;
|
|
1625
|
+
}
|
|
1626
|
+
|
|
1631
1627
|
declare class SceneTimeRange extends SceneObjectBase<SceneTimeRangeState> implements SceneTimeRangeLike {
|
|
1632
1628
|
protected _urlSync: SceneObjectUrlSyncConfig;
|
|
1633
1629
|
constructor(state?: Partial<SceneTimeRangeState>);
|
package/dist/index.js
CHANGED
|
@@ -7273,26 +7273,8 @@ function containsSearchFilter(query) {
|
|
|
7273
7273
|
class SceneScopesBridge extends SceneObjectBase {
|
|
7274
7274
|
constructor() {
|
|
7275
7275
|
super(...arguments);
|
|
7276
|
-
this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: ["scopes"] });
|
|
7277
7276
|
this._renderBeforeActivation = true;
|
|
7278
7277
|
this._contextSubject = new rxjs.BehaviorSubject(void 0);
|
|
7279
|
-
this._pendingScopes = null;
|
|
7280
|
-
}
|
|
7281
|
-
getUrlState() {
|
|
7282
|
-
var _a, _b, _c;
|
|
7283
|
-
return {
|
|
7284
|
-
scopes: (_c = this._pendingScopes) != null ? _c : ((_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : []).map((scope) => scope.metadata.name)
|
|
7285
|
-
};
|
|
7286
|
-
}
|
|
7287
|
-
updateFromUrl(values) {
|
|
7288
|
-
var _a, _b;
|
|
7289
|
-
let scopes = (_a = values["scopes"]) != null ? _a : [];
|
|
7290
|
-
scopes = (Array.isArray(scopes) ? scopes : [scopes]).map(String);
|
|
7291
|
-
if (!this.context) {
|
|
7292
|
-
this._pendingScopes = scopes;
|
|
7293
|
-
return;
|
|
7294
|
-
}
|
|
7295
|
-
(_b = this.context) == null ? void 0 : _b.changeScopes(scopes);
|
|
7296
7278
|
}
|
|
7297
7279
|
getValue() {
|
|
7298
7280
|
var _a, _b;
|
|
@@ -7338,19 +7320,9 @@ class SceneScopesBridge extends SceneObjectBase {
|
|
|
7338
7320
|
(_a = this.context) == null ? void 0 : _a.setReadOnly(readOnly);
|
|
7339
7321
|
}
|
|
7340
7322
|
updateContext(newContext) {
|
|
7341
|
-
var _a
|
|
7342
|
-
if (this._pendingScopes && newContext) {
|
|
7343
|
-
setTimeout(() => {
|
|
7344
|
-
newContext == null ? void 0 : newContext.changeScopes(this._pendingScopes);
|
|
7345
|
-
this._pendingScopes = null;
|
|
7346
|
-
});
|
|
7347
|
-
}
|
|
7323
|
+
var _a;
|
|
7348
7324
|
if (this.context !== newContext || ((_a = this.context) == null ? void 0 : _a.state) !== (newContext == null ? void 0 : newContext.state)) {
|
|
7349
|
-
const shouldUpdate = ((_b = this.context) == null ? void 0 : _b.state.value) !== (newContext == null ? void 0 : newContext.state.value);
|
|
7350
7325
|
this._contextSubject.next(newContext);
|
|
7351
|
-
if (shouldUpdate) {
|
|
7352
|
-
this.forceRender();
|
|
7353
|
-
}
|
|
7354
7326
|
}
|
|
7355
7327
|
}
|
|
7356
7328
|
get context() {
|