@grafana/scenes 6.41.0--canary.1265.18907056171.0 → 6.41.1--canary.1289.18910649091.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 +19 -0
- package/dist/esm/core/types.js.map +1 -1
- package/dist/esm/querying/layers/SceneDataLayerControls.js +10 -20
- package/dist/esm/querying/layers/SceneDataLayerControls.js.map +1 -1
- package/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +17 -3
- package/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +53 -49
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
# v6.41.0 (Wed Oct 29 2025)
|
|
2
|
+
|
|
3
|
+
#### 🚀 Enhancement
|
|
4
|
+
|
|
5
|
+
- Panel-level performance attribution system [#1265](https://github.com/grafana/scenes/pull/1265) ([@dprokop](https://github.com/dprokop) [@mdvictor](https://github.com/mdvictor))
|
|
6
|
+
|
|
7
|
+
#### 🐛 Bug Fix
|
|
8
|
+
|
|
9
|
+
- I18n: Download translations from Crowdin [#1291](https://github.com/grafana/scenes/pull/1291) ([@github-actions[bot]](https://github.com/github-actions[bot]) [@grafana-pr-automation[bot]](https://github.com/grafana-pr-automation[bot]))
|
|
10
|
+
|
|
11
|
+
#### Authors: 4
|
|
12
|
+
|
|
13
|
+
- [@github-actions[bot]](https://github.com/github-actions[bot])
|
|
14
|
+
- [@grafana-pr-automation[bot]](https://github.com/grafana-pr-automation[bot])
|
|
15
|
+
- Dominik Prokop ([@dprokop](https://github.com/dprokop))
|
|
16
|
+
- Victor Marin ([@mdvictor](https://github.com/mdvictor))
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
1
20
|
# v6.40.1 (Thu Oct 23 2025)
|
|
2
21
|
|
|
3
22
|
#### 🐛 Bug Fix
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../src/core/types.ts"],"sourcesContent":["import React from 'react';\nimport { MonoTypeOperatorFunction, Observable, Unsubscribable } from 'rxjs';\n\nimport {\n BusEvent,\n BusEventHandler,\n BusEventType,\n DataFrame,\n DataQueryRequest,\n DataSourceGetTagKeysOptions,\n DataSourceGetTagValuesOptions,\n DataTransformContext,\n PanelData,\n TimeRange,\n} from '@grafana/data';\nimport { DataQuery, DataTopic, TimeZone } from '@grafana/schema';\n\nimport { SceneVariableDependencyConfigLike, SceneVariables } from '../variables/types';\nimport { SceneObjectRef } from './SceneObjectRef';\nimport { VizPanel } from '../components/VizPanel/VizPanel';\nimport { WeekStart } from '@grafana/ui';\n\nexport interface SceneObjectState {\n key?: string;\n $timeRange?: SceneTimeRangeLike;\n $data?: SceneDataProvider;\n $variables?: SceneVariables;\n /**\n * @experimental\n * Can be used to add extra behaviors to a scene object.\n * These are activated when the their parent scene object is activated.\n */\n $behaviors?: Array<SceneObject | SceneStatelessBehavior>;\n}\n\nexport interface SceneLayoutChildOptions {\n width?: number | string;\n height?: number | string;\n xSizing?: 'fill' | 'content';\n ySizing?: 'fill' | 'content';\n x?: number;\n y?: number;\n minWidth?: number | string;\n minHeight?: number | string;\n isDraggable?: boolean;\n isResizable?: boolean;\n}\n\nexport interface SceneComponentProps<T> {\n model: T;\n}\n\nexport type SceneComponent<TModel> = (props: SceneComponentProps<TModel>) => React.ReactElement | null;\n\nexport interface SceneDataState extends SceneObjectState {\n data?: PanelData;\n}\n\nexport interface SceneObject<TState extends SceneObjectState = SceneObjectState> {\n /** The current state */\n readonly state: TState;\n\n /** True when there is a React component mounted for this Object */\n readonly isActive: boolean;\n\n /** Controls if activation blocks rendering */\n readonly renderBeforeActivation: boolean;\n\n /** SceneObject parent */\n readonly parent?: SceneObject;\n\n /** This abtractions declares what variables the scene object depends on and how to handle when they change value. **/\n readonly variableDependency?: SceneVariableDependencyConfigLike;\n\n /** This abstraction declares URL sync dependencies of a scene object. **/\n readonly urlSync?: SceneObjectUrlSyncHandler;\n\n /** Subscribe to state changes */\n subscribeToState(handler: SceneStateChangedHandler<TState>): Unsubscribable;\n\n /** Subscribe to a scene event */\n subscribeToEvent<T extends BusEvent>(typeFilter: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable;\n\n /** Publish an event and optionally bubble it up the scene */\n publishEvent(event: BusEvent, bubble?: boolean): void;\n\n /** Utility hook that wraps useObservable. Used by React components to subscribes to state changes */\n useState(): TState;\n\n /** How to modify state */\n setState(state: Partial<TState>): void;\n\n /**\n * Called when the Component is mounted. This will also activate any $data, $variables or $timeRange scene object on this level.\n * Don't override this in your custom SceneObjects, instead use addActivationHandler from the constructor.\n **/\n activate(): CancelActivationHandler;\n\n /** Get the scene root */\n getRoot(): SceneObject;\n\n /** Returns a deep clone this object and all its children */\n clone(state?: Partial<TState>): this;\n\n /** A React component to use for rendering the object */\n Component(props: SceneComponentProps<SceneObject<TState>>): React.ReactElement | null;\n\n /** Force a re-render, should only be needed when variable values change */\n forceRender(): void;\n\n /** Returns a SceneObjectRef that will resolve to this object */\n getRef(): SceneObjectRef<this>;\n\n /**\n * Allows external code to register code that is executed on activate and deactivate. This allow you\n * to wire up scene objects that need to respond to state changes in other objects from the outside.\n **/\n addActivationHandler(handler: SceneActivationHandler): void;\n\n /**\n * Loop through state and call callback for each direct child scene object.\n * Checks 1 level deep properties and arrays. So a scene object hidden in a nested plain object will not be detected.\n * Return false to exit loop early.\n */\n forEachChild(callback: (child: SceneObject) => void): void | false;\n\n /**\n * Useful for edge cases when you want to move a scene object to another parent.\n */\n clearParent(): void;\n}\n\nexport type SceneActivationHandler = () => SceneDeactivationHandler | void;\nexport type SceneDeactivationHandler = () => void;\n\n/**\n * Function returned by activate() that when called will deactivate the object if it's the last activator\n **/\nexport type CancelActivationHandler = () => void;\n\nexport interface SceneLayoutState extends SceneObjectState {\n children: SceneObject[];\n}\n\nexport interface SceneLayout<T extends SceneLayoutState = SceneLayoutState> extends SceneObject<T> {\n isDraggable(): boolean;\n getDragClass?(): string;\n getDragClassCancel?(): string;\n getDragHooks?(): { onDragStart?: (e: React.PointerEvent, panel: VizPanel) => void };\n}\n\nexport interface SceneTimeRangeState extends SceneObjectState {\n from: string;\n to: string;\n fiscalYearStartMonth?: number;\n value: TimeRange;\n timeZone?: TimeZone;\n /** weekStart will change the global date locale so having multiple different weekStart values is not supported */\n weekStart?: WeekStart;\n /**\n * @internal\n * To enable feature parity with the old time range picker, not sure if it will be kept.\n * Override the now time by entering a time delay. Use this option to accommodate known delays in data aggregation to avoid null values.\n * */\n UNSAFE_nowDelay?: string;\n\n refreshOnActivate?: {\n /**\n * When set, the time range will invalidate relative ranges after the specified interval has elapsed\n */\n afterMs?: number;\n /**\n * When set, the time range will invalidate relative ranges after the specified percentage of the current interval has elapsed.\n * If both invalidate values are set, the smaller value will be used for the given interval.\n */\n percent?: number;\n };\n}\n\nexport interface SceneTimeRangeLike extends SceneObject<SceneTimeRangeState> {\n onTimeZoneChange(timeZone: TimeZone): void;\n onTimeRangeChange(timeRange: TimeRange): void;\n onRefresh(): void;\n getTimeZone(): TimeZone;\n}\n\nexport function isSceneObject(obj: any): obj is SceneObject {\n return obj.useState !== undefined;\n}\n\nexport interface SceneObjectWithUrlSync extends SceneObject {\n getUrlState(): SceneObjectUrlValues;\n updateFromUrl(values: SceneObjectUrlValues): void;\n}\n\nexport interface SceneObjectUrlSyncHandler {\n getKeys(): string[];\n getUrlState(): SceneObjectUrlValues;\n updateFromUrl(values: SceneObjectUrlValues): void;\n shouldCreateHistoryStep?(values: SceneObjectUrlValues): boolean;\n performBrowserHistoryAction?(callback: () => void): void;\n}\n\nexport interface DataRequestEnricher {\n // Return partial data query request that will be merged with the original request provided by SceneQueryRunner\n enrichDataRequest(source: SceneObject): Partial<DataQueryRequest> | null;\n}\n\nexport interface FiltersRequestEnricher {\n // Return partial getTagKeys or getTagValues query request that will be merged with the original request provided by ad hoc or group by variable\n enrichFiltersRequest(\n source: SceneObject\n ): Partial<DataSourceGetTagKeysOptions | DataSourceGetTagValuesOptions> | null;\n}\n\nexport function isDataRequestEnricher(obj: any): obj is DataRequestEnricher {\n return 'enrichDataRequest' in obj;\n}\n\nexport function isFiltersRequestEnricher(obj: any): obj is FiltersRequestEnricher {\n return 'enrichFiltersRequest' in obj;\n}\n\nexport type SceneObjectUrlValue = string | string[] | undefined | null;\nexport type SceneObjectUrlValues = Record<string, SceneObjectUrlValue>;\n\nexport type CustomTransformOperator = (context: DataTransformContext) => MonoTypeOperatorFunction<DataFrame[]>;\nexport type CustomTransformerDefinition =\n | { operator: CustomTransformOperator; topic: DataTopic }\n | CustomTransformOperator;\nexport type SceneStateChangedHandler<TState> = (newState: TState, prevState: TState) => void;\n\nexport type DeepPartial<T> = {\n [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];\n};\n\nexport interface SceneDataProviderResult {\n data: PanelData;\n origin: SceneDataProvider;\n}\n\nexport interface SceneDataProvider<T extends SceneObjectState = SceneDataState> extends SceneObject<T> {\n setContainerWidth?: (width: number) => void;\n isDataReadyToDisplay?: () => boolean;\n cancelQuery?: () => void;\n getResultsStream(): Observable<SceneDataProviderResult>;\n /**\n * Can be used to disable query execution for scene elements that are out of view\n */\n isInViewChanged?(isInView: boolean): void;\n\n /**\n * Allow activating or deactivating the isInView behavior\n * This is useful for external consumers of a data provider (i.e., the Dashboard datasource)\n */\n bypassIsInViewChanged?(bypassIsInView: boolean): void;\n}\n\nexport interface SceneDataLayerProviderState extends SceneDataState {\n name: string;\n description?: string;\n isEnabled?: boolean;\n isHidden?: boolean;\n}\n\nexport interface SceneDataLayerProvider extends SceneDataProvider<SceneDataLayerProviderState> {\n isDataLayer: true;\n}\n\nexport function isDataLayer(obj: SceneObject): obj is SceneDataLayerProvider {\n return 'isDataLayer' in obj;\n}\n\nexport interface DataLayerFilter {\n panelId: number;\n}\n\nexport interface SceneStatelessBehavior<T extends SceneObject = any> {\n (sceneObject: T): CancelActivationHandler | void;\n}\n\nexport type ControlsLayout = 'horizontal' | 'vertical';\n\nexport interface UseStateHookOptions {\n /**\n * For some edge cases other scene objects want to subscribe to scene object state for objects\n * that are not active, or whose main React Component can be un-mounted. Set this to true\n * to keep the scene object active even if the React component is unmounted.\n *\n * Normally you would not need this but this can be useful in some edge cases.\n *\n * @experimental\n */\n shouldActivateOrKeepAlive?: boolean;\n}\n\nexport interface SceneDataQuery extends DataQuery {\n [key: string]: any;\n\n // Opt this query out of time window comparison\n timeRangeCompare?: boolean;\n}\n\nexport interface SceneUrlSyncOptions {\n /**\n * This will update the url to contain all scene url state\n * when the scene is initialized. Important for browser history \"back\" actions.\n */\n updateUrlOnInit?: boolean;\n /**\n * This is only supported by some objects if they implement\n * shouldCreateHistoryStep where they can control what changes\n * url changes should add a new browser history entry.\n */\n createBrowserHistorySteps?: boolean;\n /**\n * This will automatically prefix url search parameters when syncing.\n * Can be used to prevent collisions when multiple Scene apps are embedded in the page.\n */\n namespace?: string;\n /**\n * When `namespace` is provided, this prevents some url search parameters to be automatically prefixed.\n * Defaults to the timerange parameters ([\"from\", \"to\", \"timezone\"])\n */\n excludeFromNamespace?: string[];\n}\n"],"names":[],"mappings":"AA0LO,SAAS,cAAc,GAA8B,EAAA;AAC1D,EAAA,OAAO,IAAI,QAAa,KAAA,MAAA;AAC1B;AA2BO,SAAS,sBAAsB,GAAsC,EAAA;AAC1E,EAAA,OAAO,mBAAuB,IAAA,GAAA;AAChC;AAEO,SAAS,yBAAyB,GAAyC,EAAA;AAChF,EAAA,OAAO,sBAA0B,IAAA,GAAA;AACnC;AAgDO,SAAS,YAAY,GAAiD,EAAA;AAC3E,EAAA,OAAO,aAAiB,IAAA,GAAA;AAC1B;;;;"}
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../src/core/types.ts"],"sourcesContent":["import React from 'react';\nimport { MonoTypeOperatorFunction, Observable, Unsubscribable } from 'rxjs';\n\nimport {\n BusEvent,\n BusEventHandler,\n BusEventType,\n DataFrame,\n DataQueryRequest,\n DataSourceGetTagKeysOptions,\n DataSourceGetTagValuesOptions,\n DataTransformContext,\n PanelData,\n TimeRange,\n} from '@grafana/data';\nimport { DataQuery, DataTopic, TimeZone } from '@grafana/schema';\n\nimport { SceneVariableDependencyConfigLike, SceneVariables } from '../variables/types';\nimport { SceneObjectRef } from './SceneObjectRef';\nimport { VizPanel } from '../components/VizPanel/VizPanel';\nimport { WeekStart } from '@grafana/ui';\n\nexport interface SceneObjectState {\n key?: string;\n $timeRange?: SceneTimeRangeLike;\n $data?: SceneDataProvider;\n $variables?: SceneVariables;\n /**\n * @experimental\n * Can be used to add extra behaviors to a scene object.\n * These are activated when the their parent scene object is activated.\n */\n $behaviors?: Array<SceneObject | SceneStatelessBehavior>;\n}\n\nexport interface SceneLayoutChildOptions {\n width?: number | string;\n height?: number | string;\n xSizing?: 'fill' | 'content';\n ySizing?: 'fill' | 'content';\n x?: number;\n y?: number;\n minWidth?: number | string;\n minHeight?: number | string;\n isDraggable?: boolean;\n isResizable?: boolean;\n}\n\nexport interface SceneComponentProps<T> {\n model: T;\n}\n\nexport type SceneComponent<TModel> = (props: SceneComponentProps<TModel>) => React.ReactElement | null;\n\nexport interface SceneDataState extends SceneObjectState {\n data?: PanelData;\n}\n\nexport interface SceneObject<TState extends SceneObjectState = SceneObjectState> {\n /** The current state */\n readonly state: TState;\n\n /** True when there is a React component mounted for this Object */\n readonly isActive: boolean;\n\n /** Controls if activation blocks rendering */\n readonly renderBeforeActivation: boolean;\n\n /** SceneObject parent */\n readonly parent?: SceneObject;\n\n /** This abtractions declares what variables the scene object depends on and how to handle when they change value. **/\n readonly variableDependency?: SceneVariableDependencyConfigLike;\n\n /** This abstraction declares URL sync dependencies of a scene object. **/\n readonly urlSync?: SceneObjectUrlSyncHandler;\n\n /** Subscribe to state changes */\n subscribeToState(handler: SceneStateChangedHandler<TState>): Unsubscribable;\n\n /** Subscribe to a scene event */\n subscribeToEvent<T extends BusEvent>(typeFilter: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable;\n\n /** Publish an event and optionally bubble it up the scene */\n publishEvent(event: BusEvent, bubble?: boolean): void;\n\n /** Utility hook that wraps useObservable. Used by React components to subscribes to state changes */\n useState(): TState;\n\n /** How to modify state */\n setState(state: Partial<TState>): void;\n\n /**\n * Called when the Component is mounted. This will also activate any $data, $variables or $timeRange scene object on this level.\n * Don't override this in your custom SceneObjects, instead use addActivationHandler from the constructor.\n **/\n activate(): CancelActivationHandler;\n\n /** Get the scene root */\n getRoot(): SceneObject;\n\n /** Returns a deep clone this object and all its children */\n clone(state?: Partial<TState>): this;\n\n /** A React component to use for rendering the object */\n Component(props: SceneComponentProps<SceneObject<TState>>): React.ReactElement | null;\n\n /** Force a re-render, should only be needed when variable values change */\n forceRender(): void;\n\n /** Returns a SceneObjectRef that will resolve to this object */\n getRef(): SceneObjectRef<this>;\n\n /**\n * Allows external code to register code that is executed on activate and deactivate. This allow you\n * to wire up scene objects that need to respond to state changes in other objects from the outside.\n **/\n addActivationHandler(handler: SceneActivationHandler): void;\n\n /**\n * Loop through state and call callback for each direct child scene object.\n * Checks 1 level deep properties and arrays. So a scene object hidden in a nested plain object will not be detected.\n * Return false to exit loop early.\n */\n forEachChild(callback: (child: SceneObject) => void): void | false;\n\n /**\n * Useful for edge cases when you want to move a scene object to another parent.\n */\n clearParent(): void;\n}\n\nexport type SceneActivationHandler = () => SceneDeactivationHandler | void;\nexport type SceneDeactivationHandler = () => void;\n\n/**\n * Function returned by activate() that when called will deactivate the object if it's the last activator\n **/\nexport type CancelActivationHandler = () => void;\n\nexport interface SceneLayoutState extends SceneObjectState {\n children: SceneObject[];\n}\n\nexport interface SceneLayout<T extends SceneLayoutState = SceneLayoutState> extends SceneObject<T> {\n isDraggable(): boolean;\n getDragClass?(): string;\n getDragClassCancel?(): string;\n getDragHooks?(): { onDragStart?: (e: React.PointerEvent, panel: VizPanel) => void };\n}\n\nexport interface SceneTimeRangeState extends SceneObjectState {\n from: string;\n to: string;\n fiscalYearStartMonth?: number;\n value: TimeRange;\n timeZone?: TimeZone;\n /** weekStart will change the global date locale so having multiple different weekStart values is not supported */\n weekStart?: WeekStart;\n /**\n * @internal\n * To enable feature parity with the old time range picker, not sure if it will be kept.\n * Override the now time by entering a time delay. Use this option to accommodate known delays in data aggregation to avoid null values.\n * */\n UNSAFE_nowDelay?: string;\n\n refreshOnActivate?: {\n /**\n * When set, the time range will invalidate relative ranges after the specified interval has elapsed\n */\n afterMs?: number;\n /**\n * When set, the time range will invalidate relative ranges after the specified percentage of the current interval has elapsed.\n * If both invalidate values are set, the smaller value will be used for the given interval.\n */\n percent?: number;\n };\n}\n\nexport interface SceneTimeRangeLike extends SceneObject<SceneTimeRangeState> {\n onTimeZoneChange(timeZone: TimeZone): void;\n onTimeRangeChange(timeRange: TimeRange): void;\n onRefresh(): void;\n getTimeZone(): TimeZone;\n}\n\nexport function isSceneObject(obj: any): obj is SceneObject {\n return obj.useState !== undefined;\n}\n\nexport interface SceneObjectWithUrlSync extends SceneObject {\n getUrlState(): SceneObjectUrlValues;\n updateFromUrl(values: SceneObjectUrlValues): void;\n}\n\nexport interface SceneObjectUrlSyncHandler {\n getKeys(): string[];\n getUrlState(): SceneObjectUrlValues;\n updateFromUrl(values: SceneObjectUrlValues): void;\n shouldCreateHistoryStep?(values: SceneObjectUrlValues): boolean;\n performBrowserHistoryAction?(callback: () => void): void;\n}\n\nexport interface DataRequestEnricher {\n // Return partial data query request that will be merged with the original request provided by SceneQueryRunner\n enrichDataRequest(source: SceneObject): Partial<DataQueryRequest> | null;\n}\n\nexport interface FiltersRequestEnricher {\n // Return partial getTagKeys or getTagValues query request that will be merged with the original request provided by ad hoc or group by variable\n enrichFiltersRequest(\n source: SceneObject\n ): Partial<DataSourceGetTagKeysOptions | DataSourceGetTagValuesOptions> | null;\n}\n\nexport function isDataRequestEnricher(obj: any): obj is DataRequestEnricher {\n return 'enrichDataRequest' in obj;\n}\n\nexport function isFiltersRequestEnricher(obj: any): obj is FiltersRequestEnricher {\n return 'enrichFiltersRequest' in obj;\n}\n\nexport type SceneObjectUrlValue = string | string[] | undefined | null;\nexport type SceneObjectUrlValues = Record<string, SceneObjectUrlValue>;\n\nexport type CustomTransformOperator = (context: DataTransformContext) => MonoTypeOperatorFunction<DataFrame[]>;\nexport type CustomTransformerDefinition =\n | { operator: CustomTransformOperator; topic: DataTopic }\n | CustomTransformOperator;\nexport type SceneStateChangedHandler<TState> = (newState: TState, prevState: TState) => void;\n\nexport type DeepPartial<T> = {\n [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];\n};\n\nexport interface SceneDataProviderResult {\n data: PanelData;\n origin: SceneDataProvider;\n}\n\nexport interface SceneDataProvider<T extends SceneObjectState = SceneDataState> extends SceneObject<T> {\n setContainerWidth?: (width: number) => void;\n isDataReadyToDisplay?: () => boolean;\n cancelQuery?: () => void;\n getResultsStream(): Observable<SceneDataProviderResult>;\n /**\n * Can be used to disable query execution for scene elements that are out of view\n */\n isInViewChanged?(isInView: boolean): void;\n\n /**\n * Allow activating or deactivating the isInView behavior\n * This is useful for external consumers of a data provider (i.e., the Dashboard datasource)\n */\n bypassIsInViewChanged?(bypassIsInView: boolean): void;\n}\n\nexport interface SceneDataLayerProviderState extends SceneDataState {\n name: string;\n description?: string;\n isEnabled?: boolean;\n isHidden?: boolean;\n placement?: 'inControlsMenu';\n}\n\nexport interface SceneDataLayerProvider extends SceneDataProvider<SceneDataLayerProviderState> {\n isDataLayer: true;\n}\n\nexport function isDataLayer(obj: SceneObject): obj is SceneDataLayerProvider {\n return 'isDataLayer' in obj;\n}\n\nexport interface DataLayerFilter {\n panelId: number;\n}\n\nexport interface SceneStatelessBehavior<T extends SceneObject = any> {\n (sceneObject: T): CancelActivationHandler | void;\n}\n\nexport type ControlsLayout = 'horizontal' | 'vertical';\n\nexport interface UseStateHookOptions {\n /**\n * For some edge cases other scene objects want to subscribe to scene object state for objects\n * that are not active, or whose main React Component can be un-mounted. Set this to true\n * to keep the scene object active even if the React component is unmounted.\n *\n * Normally you would not need this but this can be useful in some edge cases.\n *\n * @experimental\n */\n shouldActivateOrKeepAlive?: boolean;\n}\n\nexport interface SceneDataQuery extends DataQuery {\n [key: string]: any;\n\n // Opt this query out of time window comparison\n timeRangeCompare?: boolean;\n}\n\nexport interface SceneUrlSyncOptions {\n /**\n * This will update the url to contain all scene url state\n * when the scene is initialized. Important for browser history \"back\" actions.\n */\n updateUrlOnInit?: boolean;\n /**\n * This is only supported by some objects if they implement\n * shouldCreateHistoryStep where they can control what changes\n * url changes should add a new browser history entry.\n */\n createBrowserHistorySteps?: boolean;\n /**\n * This will automatically prefix url search parameters when syncing.\n * Can be used to prevent collisions when multiple Scene apps are embedded in the page.\n */\n namespace?: string;\n /**\n * When `namespace` is provided, this prevents some url search parameters to be automatically prefixed.\n * Defaults to the timerange parameters ([\"from\", \"to\", \"timezone\"])\n */\n excludeFromNamespace?: string[];\n}\n"],"names":[],"mappings":"AA0LO,SAAS,cAAc,GAA8B,EAAA;AAC1D,EAAA,OAAO,IAAI,QAAa,KAAA,MAAA;AAC1B;AA2BO,SAAS,sBAAsB,GAAsC,EAAA;AAC1E,EAAA,OAAO,mBAAuB,IAAA,GAAA;AAChC;AAEO,SAAS,yBAAyB,GAAyC,EAAA;AAChF,EAAA,OAAO,sBAA0B,IAAA,GAAA;AACnC;AAiDO,SAAS,YAAY,GAAiD,EAAA;AAC3E,EAAA,OAAO,aAAiB,IAAA,GAAA;AAC1B;;;;"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { css } from '@emotion/css';
|
|
2
|
-
import { LoadingState } from '@grafana/schema';
|
|
3
|
-
import { InlineSwitch } from '@grafana/ui';
|
|
4
1
|
import React from 'react';
|
|
5
2
|
import { sceneGraph } from '../../core/sceneGraph/index.js';
|
|
6
3
|
import { SceneObjectBase } from '../../core/SceneObjectBase.js';
|
|
4
|
+
import { LoadingState } from '@grafana/schema';
|
|
5
|
+
import { css } from '@emotion/css';
|
|
7
6
|
import { ControlsLabel } from '../../utils/ControlsLabel.js';
|
|
8
7
|
|
|
9
8
|
class SceneDataLayerControls extends SceneObjectBase {
|
|
@@ -17,13 +16,16 @@ function SceneDataLayerControlsRenderer({ model }) {
|
|
|
17
16
|
if (layers.length === 0) {
|
|
18
17
|
return null;
|
|
19
18
|
}
|
|
20
|
-
return /* @__PURE__ */ React.createElement(React.Fragment, null, layers.map((layer) => /* @__PURE__ */ React.createElement(
|
|
19
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, layers.map((layer) => /* @__PURE__ */ React.createElement(SceneDataLayerControlRenderer, { layer, key: layer.state.key })));
|
|
21
20
|
}
|
|
22
|
-
function
|
|
21
|
+
function SceneDataLayerControlRenderer({ layer }) {
|
|
23
22
|
var _a, _b;
|
|
24
23
|
const elementId = `data-layer-${layer.state.key}`;
|
|
25
|
-
const { data,
|
|
24
|
+
const { data, isHidden } = layer.useState();
|
|
26
25
|
const showLoading = Boolean(data && data.state === LoadingState.Loading);
|
|
26
|
+
if (isHidden) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
27
29
|
return /* @__PURE__ */ React.createElement("div", { className: containerStyle }, /* @__PURE__ */ React.createElement(
|
|
28
30
|
ControlsLabel,
|
|
29
31
|
{
|
|
@@ -37,21 +39,9 @@ function DataLayerControlSwitch({ layer }) {
|
|
|
37
39
|
description: layer.state.description,
|
|
38
40
|
error: (_b = (_a = layer.state.data) == null ? void 0 : _a.errors) == null ? void 0 : _b[0].message
|
|
39
41
|
}
|
|
40
|
-
), /* @__PURE__ */ React.createElement(
|
|
41
|
-
InlineSwitch,
|
|
42
|
-
{
|
|
43
|
-
className: switchStyle,
|
|
44
|
-
id: elementId,
|
|
45
|
-
value: isEnabled,
|
|
46
|
-
onChange: () => layer.setState({ isEnabled: !isEnabled })
|
|
47
|
-
}
|
|
48
|
-
));
|
|
42
|
+
), /* @__PURE__ */ React.createElement(layer.Component, { model: layer }));
|
|
49
43
|
}
|
|
50
44
|
const containerStyle = css({ display: "flex" });
|
|
51
|
-
const switchStyle = css({
|
|
52
|
-
borderBottomLeftRadius: 0,
|
|
53
|
-
borderTopLeftRadius: 0
|
|
54
|
-
});
|
|
55
45
|
|
|
56
|
-
export {
|
|
46
|
+
export { SceneDataLayerControlRenderer, SceneDataLayerControls };
|
|
57
47
|
//# sourceMappingURL=SceneDataLayerControls.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SceneDataLayerControls.js","sources":["../../../../src/querying/layers/SceneDataLayerControls.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"SceneDataLayerControls.js","sources":["../../../../src/querying/layers/SceneDataLayerControls.tsx"],"sourcesContent":["import React from 'react';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneDataLayerProvider, SceneObjectState } from '../../core/types';\nimport { LoadingState } from '@grafana/schema';\nimport { css } from '@emotion/css';\nimport { ControlsLabel } from '../../utils/ControlsLabel';\n\ninterface SceneDataLayerControlsState extends SceneObjectState {}\n\nexport class SceneDataLayerControls extends SceneObjectBase<SceneDataLayerControlsState> {\n public static Component = SceneDataLayerControlsRenderer;\n\n public constructor() {\n super({});\n }\n}\n\nfunction SceneDataLayerControlsRenderer({ model }: SceneComponentProps<SceneDataLayerControls>) {\n const layers = sceneGraph.getDataLayers(model, true);\n\n if (layers.length === 0) {\n return null;\n }\n\n return (\n <>\n {layers.map((layer) => (\n <SceneDataLayerControlRenderer layer={layer} key={layer.state.key} />\n ))}\n </>\n );\n}\n\n// Renders controls for a single data layer\nexport function SceneDataLayerControlRenderer({ layer }: { layer: SceneDataLayerProvider }) {\n const elementId = `data-layer-${layer.state.key}`;\n const { data, isHidden } = layer.useState();\n const showLoading = Boolean(data && data.state === LoadingState.Loading);\n\n if (isHidden) {\n return null;\n }\n\n return (\n <div className={containerStyle}>\n <ControlsLabel\n htmlFor={elementId}\n isLoading={showLoading}\n onCancel={() => layer.cancelQuery?.()}\n label={layer.state.name}\n description={layer.state.description}\n error={layer.state.data?.errors?.[0].message}\n />\n <layer.Component model={layer} />\n </div>\n );\n}\n\nconst containerStyle = css({ display: 'flex' });\n"],"names":["_a"],"mappings":";;;;;;;AAUO,MAAM,+BAA+B,eAA6C,CAAA;AAAA,EAGhF,WAAc,GAAA;AACnB,IAAA,KAAA,CAAM,EAAE,CAAA;AAAA;AAEZ;AANa,sBAAA,CACG,SAAY,GAAA,8BAAA;AAO5B,SAAS,8BAAA,CAA+B,EAAE,KAAA,EAAsD,EAAA;AAC9F,EAAA,MAAM,MAAS,GAAA,UAAA,CAAW,aAAc,CAAA,KAAA,EAAO,IAAI,CAAA;AAEnD,EAAI,IAAA,MAAA,CAAO,WAAW,CAAG,EAAA;AACvB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,uBAEK,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,CAAO,GAAI,CAAA,CAAC,KACX,qBAAA,KAAA,CAAA,aAAA,CAAC,6BAA8B,EAAA,EAAA,KAAA,EAAc,GAAK,EAAA,KAAA,CAAM,KAAM,CAAA,GAAA,EAAK,CACpE,CACH,CAAA;AAEJ;AAGgB,SAAA,6BAAA,CAA8B,EAAE,KAAA,EAA4C,EAAA;AAnC5F,EAAA,IAAA,EAAA,EAAA,EAAA;AAoCE,EAAA,MAAM,SAAY,GAAA,CAAA,WAAA,EAAc,KAAM,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC/C,EAAA,MAAM,EAAE,IAAA,EAAM,QAAS,EAAA,GAAI,MAAM,QAAS,EAAA;AAC1C,EAAA,MAAM,cAAc,OAAQ,CAAA,IAAA,IAAQ,IAAK,CAAA,KAAA,KAAU,aAAa,OAAO,CAAA;AAEvE,EAAA,IAAI,QAAU,EAAA;AACZ,IAAO,OAAA,IAAA;AAAA;AAGT,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,cACd,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,WAAA;AAAA,MACX,UAAU,MAAG;AAjDrB,QAAAA,IAAAA,GAAAA;AAiDwB,QAAA,OAAA,CAAAA,GAAA,GAAA,KAAA,CAAM,WAAN,KAAA,IAAA,GAAA,MAAA,GAAAA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA;AAAA,OAAA;AAAA,MAChB,KAAA,EAAO,MAAM,KAAM,CAAA,IAAA;AAAA,MACnB,WAAA,EAAa,MAAM,KAAM,CAAA,WAAA;AAAA,MACzB,QAAO,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,KAAA,CAAM,SAAZ,IAAkB,GAAA,MAAA,GAAA,EAAA,CAAA,MAAA,KAAlB,mBAA2B,CAAG,CAAA,CAAA;AAAA;AAAA,qBAEtC,KAAA,CAAA,aAAA,CAAA,KAAA,CAAM,WAAN,EAAgB,KAAA,EAAO,OAAO,CACjC,CAAA;AAEJ;AAEA,MAAM,cAAiB,GAAA,GAAA,CAAI,EAAE,OAAA,EAAS,QAAQ,CAAA;;;;"}
|
|
@@ -9,12 +9,13 @@ import { getMessageFromError } from '../../../utils/getMessageFromError.js';
|
|
|
9
9
|
import { writeSceneLog } from '../../../utils/writeSceneLog.js';
|
|
10
10
|
import { registerQueryWithController } from '../../registerQueryWithController.js';
|
|
11
11
|
import { SceneDataLayerBase } from '../SceneDataLayerBase.js';
|
|
12
|
-
import { DataLayerControlSwitch } from '../SceneDataLayerControls.js';
|
|
13
12
|
import { executeAnnotationQuery } from './standardAnnotationQuery.js';
|
|
14
13
|
import { postProcessQueryResult, dedupAnnotations } from './utils.js';
|
|
15
14
|
import { wrapInSafeSerializableSceneObject } from '../../../utils/wrapInSafeSerializableSceneObject.js';
|
|
16
15
|
import { RefreshEvent } from '@grafana/runtime';
|
|
17
16
|
import { DrilldownDependenciesManager } from '../../../variables/DrilldownDependenciesManager.js';
|
|
17
|
+
import { InlineSwitch } from '@grafana/ui';
|
|
18
|
+
import { css } from '@emotion/css';
|
|
18
19
|
|
|
19
20
|
class AnnotationsDataLayer extends SceneDataLayerBase {
|
|
20
21
|
constructor(initialState) {
|
|
@@ -127,12 +128,25 @@ class AnnotationsDataLayer extends SceneDataLayerBase {
|
|
|
127
128
|
}
|
|
128
129
|
AnnotationsDataLayer.Component = AnnotationsDataLayerRenderer;
|
|
129
130
|
function AnnotationsDataLayerRenderer({ model }) {
|
|
130
|
-
const { isHidden } = model.useState();
|
|
131
|
+
const { isEnabled, isHidden } = model.useState();
|
|
132
|
+
const elementId = `data-layer-${model.state.key}`;
|
|
131
133
|
if (isHidden) {
|
|
132
134
|
return null;
|
|
133
135
|
}
|
|
134
|
-
return /* @__PURE__ */ React.createElement(
|
|
136
|
+
return /* @__PURE__ */ React.createElement(
|
|
137
|
+
InlineSwitch,
|
|
138
|
+
{
|
|
139
|
+
className: switchStyle,
|
|
140
|
+
id: elementId,
|
|
141
|
+
value: isEnabled,
|
|
142
|
+
onChange: () => model.setState({ isEnabled: !isEnabled })
|
|
143
|
+
}
|
|
144
|
+
);
|
|
135
145
|
}
|
|
146
|
+
const switchStyle = css({
|
|
147
|
+
borderBottomLeftRadius: 0,
|
|
148
|
+
borderTopLeftRadius: 0
|
|
149
|
+
});
|
|
136
150
|
|
|
137
151
|
export { AnnotationsDataLayer };
|
|
138
152
|
//# sourceMappingURL=AnnotationsDataLayer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnnotationsDataLayer.js","sources":["../../../../../src/querying/layers/annotations/AnnotationsDataLayer.tsx"],"sourcesContent":["import { arrayToDataFrame, DataTopic, AnnotationQuery, ScopedVars, PanelData } from '@grafana/data';\nimport { LoadingState } from '@grafana/schema';\nimport React from 'react';\nimport { map, Unsubscribable } from 'rxjs';\nimport { emptyPanelData } from '../../../core/SceneDataNode';\nimport { sceneGraph } from '../../../core/sceneGraph';\nimport {\n SceneComponentProps,\n SceneDataLayerProvider,\n SceneDataLayerProviderState,\n SceneTimeRangeLike,\n} from '../../../core/types';\nimport { getDataSource } from '../../../utils/getDataSource';\nimport { getMessageFromError } from '../../../utils/getMessageFromError';\nimport { writeSceneLog } from '../../../utils/writeSceneLog';\nimport { registerQueryWithController } from '../../registerQueryWithController';\nimport { SceneDataLayerBase } from '../SceneDataLayerBase';\nimport {
|
|
1
|
+
{"version":3,"file":"AnnotationsDataLayer.js","sources":["../../../../../src/querying/layers/annotations/AnnotationsDataLayer.tsx"],"sourcesContent":["import { arrayToDataFrame, DataTopic, AnnotationQuery, ScopedVars, PanelData } from '@grafana/data';\nimport { LoadingState } from '@grafana/schema';\nimport React from 'react';\nimport { map, Unsubscribable } from 'rxjs';\nimport { emptyPanelData } from '../../../core/SceneDataNode';\nimport { sceneGraph } from '../../../core/sceneGraph';\nimport {\n SceneComponentProps,\n SceneDataLayerProvider,\n SceneDataLayerProviderState,\n SceneTimeRangeLike,\n} from '../../../core/types';\nimport { getDataSource } from '../../../utils/getDataSource';\nimport { getMessageFromError } from '../../../utils/getMessageFromError';\nimport { writeSceneLog } from '../../../utils/writeSceneLog';\nimport { registerQueryWithController } from '../../registerQueryWithController';\nimport { SceneDataLayerBase } from '../SceneDataLayerBase';\nimport { AnnotationQueryResults, executeAnnotationQuery } from './standardAnnotationQuery';\nimport { dedupAnnotations, postProcessQueryResult } from './utils';\nimport { wrapInSafeSerializableSceneObject } from '../../../utils/wrapInSafeSerializableSceneObject';\nimport { RefreshEvent } from '@grafana/runtime';\nimport { DrilldownDependenciesManager } from '../../../variables/DrilldownDependenciesManager';\nimport { InlineSwitch } from '@grafana/ui';\nimport { css } from '@emotion/css';\n\ninterface AnnotationsDataLayerState extends SceneDataLayerProviderState {\n query: AnnotationQuery;\n}\n\nexport class AnnotationsDataLayer\n extends SceneDataLayerBase<AnnotationsDataLayerState>\n implements SceneDataLayerProvider\n{\n static Component = AnnotationsDataLayerRenderer;\n\n private _scopedVars: ScopedVars = {\n __sceneObject: wrapInSafeSerializableSceneObject(this),\n };\n private _timeRangeSub: Unsubscribable | undefined;\n\n private _drilldownDependenciesManager: DrilldownDependenciesManager<AnnotationsDataLayerState> =\n new DrilldownDependenciesManager(this._variableDependency);\n\n public constructor(initialState: AnnotationsDataLayerState) {\n super(\n {\n isEnabled: true,\n ...initialState,\n },\n ['query']\n );\n }\n\n public onEnable(): void {\n this.publishEvent(new RefreshEvent(), true);\n\n const timeRange = sceneGraph.getTimeRange(this);\n\n this.setState({\n query: {\n ...this.state.query,\n enable: true,\n },\n });\n\n this._timeRangeSub = timeRange.subscribeToState(() => {\n this.runWithTimeRange(timeRange);\n });\n }\n\n public onDisable(): void {\n this.publishEvent(new RefreshEvent(), true);\n\n this.setState({\n query: {\n ...this.state.query,\n enable: false,\n },\n });\n\n this._timeRangeSub?.unsubscribe();\n }\n\n public runLayer() {\n writeSceneLog('AnnotationsDataLayer', 'run layer');\n const timeRange = sceneGraph.getTimeRange(this);\n this.runWithTimeRange(timeRange);\n }\n\n private async runWithTimeRange(timeRange: SceneTimeRangeLike) {\n const { query } = this.state;\n\n if (!query.enable) {\n return;\n }\n\n this._drilldownDependenciesManager.findAndSubscribeToDrilldowns(query.datasource?.uid);\n\n if (this.querySub) {\n this.querySub.unsubscribe();\n }\n\n if (this._variableDependency.hasDependencyInLoadingState()) {\n writeSceneLog('AnnotationsDataLayer', 'Variable dependency is in loading state, skipping query execution');\n return;\n }\n\n try {\n const ds = await this.resolveDataSource(query);\n\n let stream = executeAnnotationQuery(\n ds,\n timeRange,\n query,\n this,\n this._drilldownDependenciesManager.getFilters(),\n this._drilldownDependenciesManager.getGroupByKeys()\n ).pipe(\n registerQueryWithController({\n type: 'AnnotationsDataLayer/annotationsLoading',\n origin: this,\n cancel: () => this.cancelQuery(),\n }),\n map((events) => {\n const stateUpdate = this.processEvents(query, events);\n return stateUpdate;\n })\n );\n\n this.querySub = stream.subscribe((stateUpdate) => {\n this.publishResults(stateUpdate);\n });\n } catch (e) {\n this.publishResults({\n ...emptyPanelData,\n state: LoadingState.Error,\n errors: [\n {\n message: getMessageFromError(e),\n },\n ],\n });\n console.error('AnnotationsDataLayer error', e);\n }\n }\n\n protected async resolveDataSource(query: AnnotationQuery) {\n return await getDataSource(query.datasource || undefined, this._scopedVars);\n }\n\n protected processEvents(query: AnnotationQuery, events: AnnotationQueryResults): PanelData {\n let processedEvents = postProcessQueryResult(query, events.events || []);\n processedEvents = dedupAnnotations(processedEvents);\n\n const stateUpdate = { ...emptyPanelData, state: events.state };\n const df = arrayToDataFrame(processedEvents);\n\n df.meta = {\n ...df.meta,\n dataTopic: DataTopic.Annotations,\n };\n\n stateUpdate.series = [df];\n\n return stateUpdate;\n }\n}\n\nfunction AnnotationsDataLayerRenderer({ model }: SceneComponentProps<AnnotationsDataLayer>) {\n const { isEnabled, isHidden } = model.useState();\n const elementId = `data-layer-${model.state.key}`;\n\n if (isHidden) {\n return null;\n }\n\n return (\n <InlineSwitch\n className={switchStyle}\n id={elementId}\n value={isEnabled}\n onChange={() => model.setState({ isEnabled: !isEnabled })}\n />\n );\n}\n\nconst switchStyle = css({\n borderBottomLeftRadius: 0,\n borderTopLeftRadius: 0,\n});\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -740,6 +740,7 @@ interface SceneDataLayerProviderState extends SceneDataState {
|
|
|
740
740
|
description?: string;
|
|
741
741
|
isEnabled?: boolean;
|
|
742
742
|
isHidden?: boolean;
|
|
743
|
+
placement?: 'inControlsMenu';
|
|
743
744
|
}
|
|
744
745
|
interface SceneDataLayerProvider extends SceneDataProvider<SceneDataLayerProviderState> {
|
|
745
746
|
isDataLayer: true;
|
package/dist/index.js
CHANGED
|
@@ -10705,53 +10705,6 @@ class SceneDataLayerBase extends SceneObjectBase {
|
|
|
10705
10705
|
}
|
|
10706
10706
|
}
|
|
10707
10707
|
|
|
10708
|
-
class SceneDataLayerControls extends SceneObjectBase {
|
|
10709
|
-
constructor() {
|
|
10710
|
-
super({});
|
|
10711
|
-
}
|
|
10712
|
-
}
|
|
10713
|
-
SceneDataLayerControls.Component = SceneDataLayerControlsRenderer;
|
|
10714
|
-
function SceneDataLayerControlsRenderer({ model }) {
|
|
10715
|
-
const layers = sceneGraph.getDataLayers(model, true);
|
|
10716
|
-
if (layers.length === 0) {
|
|
10717
|
-
return null;
|
|
10718
|
-
}
|
|
10719
|
-
return /* @__PURE__ */ React__default.default.createElement(React__default.default.Fragment, null, layers.map((layer) => /* @__PURE__ */ React__default.default.createElement(layer.Component, { model: layer, key: layer.state.key })));
|
|
10720
|
-
}
|
|
10721
|
-
function DataLayerControlSwitch({ layer }) {
|
|
10722
|
-
var _a, _b;
|
|
10723
|
-
const elementId = `data-layer-${layer.state.key}`;
|
|
10724
|
-
const { data, isEnabled } = layer.useState();
|
|
10725
|
-
const showLoading = Boolean(data && data.state === schema.LoadingState.Loading);
|
|
10726
|
-
return /* @__PURE__ */ React__default.default.createElement("div", { className: containerStyle$1 }, /* @__PURE__ */ React__default.default.createElement(
|
|
10727
|
-
ControlsLabel,
|
|
10728
|
-
{
|
|
10729
|
-
htmlFor: elementId,
|
|
10730
|
-
isLoading: showLoading,
|
|
10731
|
-
onCancel: () => {
|
|
10732
|
-
var _a2;
|
|
10733
|
-
return (_a2 = layer.cancelQuery) == null ? void 0 : _a2.call(layer);
|
|
10734
|
-
},
|
|
10735
|
-
label: layer.state.name,
|
|
10736
|
-
description: layer.state.description,
|
|
10737
|
-
error: (_b = (_a = layer.state.data) == null ? void 0 : _a.errors) == null ? void 0 : _b[0].message
|
|
10738
|
-
}
|
|
10739
|
-
), /* @__PURE__ */ React__default.default.createElement(
|
|
10740
|
-
ui.InlineSwitch,
|
|
10741
|
-
{
|
|
10742
|
-
className: switchStyle,
|
|
10743
|
-
id: elementId,
|
|
10744
|
-
value: isEnabled,
|
|
10745
|
-
onChange: () => layer.setState({ isEnabled: !isEnabled })
|
|
10746
|
-
}
|
|
10747
|
-
));
|
|
10748
|
-
}
|
|
10749
|
-
const containerStyle$1 = css.css({ display: "flex" });
|
|
10750
|
-
const switchStyle = css.css({
|
|
10751
|
-
borderBottomLeftRadius: 0,
|
|
10752
|
-
borderTopLeftRadius: 0
|
|
10753
|
-
});
|
|
10754
|
-
|
|
10755
10708
|
const standardAnnotationSupport = {
|
|
10756
10709
|
/**
|
|
10757
10710
|
* Assume the stored value is standard model.
|
|
@@ -11205,12 +11158,25 @@ class AnnotationsDataLayer extends SceneDataLayerBase {
|
|
|
11205
11158
|
}
|
|
11206
11159
|
AnnotationsDataLayer.Component = AnnotationsDataLayerRenderer;
|
|
11207
11160
|
function AnnotationsDataLayerRenderer({ model }) {
|
|
11208
|
-
const { isHidden } = model.useState();
|
|
11161
|
+
const { isEnabled, isHidden } = model.useState();
|
|
11162
|
+
const elementId = `data-layer-${model.state.key}`;
|
|
11209
11163
|
if (isHidden) {
|
|
11210
11164
|
return null;
|
|
11211
11165
|
}
|
|
11212
|
-
return /* @__PURE__ */ React__default.default.createElement(
|
|
11166
|
+
return /* @__PURE__ */ React__default.default.createElement(
|
|
11167
|
+
ui.InlineSwitch,
|
|
11168
|
+
{
|
|
11169
|
+
className: switchStyle,
|
|
11170
|
+
id: elementId,
|
|
11171
|
+
value: isEnabled,
|
|
11172
|
+
onChange: () => model.setState({ isEnabled: !isEnabled })
|
|
11173
|
+
}
|
|
11174
|
+
);
|
|
11213
11175
|
}
|
|
11176
|
+
const switchStyle = css.css({
|
|
11177
|
+
borderBottomLeftRadius: 0,
|
|
11178
|
+
borderTopLeftRadius: 0
|
|
11179
|
+
});
|
|
11214
11180
|
|
|
11215
11181
|
var index = /*#__PURE__*/Object.freeze({
|
|
11216
11182
|
__proto__: null,
|
|
@@ -11324,6 +11290,44 @@ class DataProviderProxy extends SceneObjectBase {
|
|
|
11324
11290
|
}
|
|
11325
11291
|
}
|
|
11326
11292
|
|
|
11293
|
+
class SceneDataLayerControls extends SceneObjectBase {
|
|
11294
|
+
constructor() {
|
|
11295
|
+
super({});
|
|
11296
|
+
}
|
|
11297
|
+
}
|
|
11298
|
+
SceneDataLayerControls.Component = SceneDataLayerControlsRenderer;
|
|
11299
|
+
function SceneDataLayerControlsRenderer({ model }) {
|
|
11300
|
+
const layers = sceneGraph.getDataLayers(model, true);
|
|
11301
|
+
if (layers.length === 0) {
|
|
11302
|
+
return null;
|
|
11303
|
+
}
|
|
11304
|
+
return /* @__PURE__ */ React__default.default.createElement(React__default.default.Fragment, null, layers.map((layer) => /* @__PURE__ */ React__default.default.createElement(SceneDataLayerControlRenderer, { layer, key: layer.state.key })));
|
|
11305
|
+
}
|
|
11306
|
+
function SceneDataLayerControlRenderer({ layer }) {
|
|
11307
|
+
var _a, _b;
|
|
11308
|
+
const elementId = `data-layer-${layer.state.key}`;
|
|
11309
|
+
const { data, isHidden } = layer.useState();
|
|
11310
|
+
const showLoading = Boolean(data && data.state === schema.LoadingState.Loading);
|
|
11311
|
+
if (isHidden) {
|
|
11312
|
+
return null;
|
|
11313
|
+
}
|
|
11314
|
+
return /* @__PURE__ */ React__default.default.createElement("div", { className: containerStyle$1 }, /* @__PURE__ */ React__default.default.createElement(
|
|
11315
|
+
ControlsLabel,
|
|
11316
|
+
{
|
|
11317
|
+
htmlFor: elementId,
|
|
11318
|
+
isLoading: showLoading,
|
|
11319
|
+
onCancel: () => {
|
|
11320
|
+
var _a2;
|
|
11321
|
+
return (_a2 = layer.cancelQuery) == null ? void 0 : _a2.call(layer);
|
|
11322
|
+
},
|
|
11323
|
+
label: layer.state.name,
|
|
11324
|
+
description: layer.state.description,
|
|
11325
|
+
error: (_b = (_a = layer.state.data) == null ? void 0 : _a.errors) == null ? void 0 : _b[0].message
|
|
11326
|
+
}
|
|
11327
|
+
), /* @__PURE__ */ React__default.default.createElement(layer.Component, { model: layer }));
|
|
11328
|
+
}
|
|
11329
|
+
const containerStyle$1 = css.css({ display: "flex" });
|
|
11330
|
+
|
|
11327
11331
|
class VariableValueSelectors extends SceneObjectBase {
|
|
11328
11332
|
}
|
|
11329
11333
|
VariableValueSelectors.Component = VariableValueSelectorsRenderer;
|