grafana/public/app/features/scenes/variables/variants/ObjectVariable.ts
Torkel Ödegaard b5651803e0
Scene: ObjectVariable for supporting the built in system variables and object scoped variables (__data for example) (#58291)
* Scene: Adds ObjectVariable to support the built-in/system variables

* fixed lint issue
2022-11-09 10:27:20 +01:00

33 lines
931 B
TypeScript

import { property } from 'lodash';
import { SceneObjectBase } from '../../core/SceneObjectBase';
import { SceneVariable, SceneVariableState, VariableValue } from '../types';
export interface ObjectVariableState<T extends object> extends SceneVariableState {
value: T;
}
export class ObjectVariable<T extends object>
extends SceneObjectBase<ObjectVariableState<T>>
implements SceneVariable<ObjectVariableState<T>>
{
private static fieldAccessorCache: FieldAccessorCache = {};
public getValue(fieldPath: string): VariableValue {
return this.getFieldAccessor(fieldPath)(this.state.value);
}
private getFieldAccessor(fieldPath: string) {
const accessor = ObjectVariable.fieldAccessorCache[fieldPath];
if (accessor) {
return accessor;
}
return (ObjectVariable.fieldAccessorCache[fieldPath] = property(fieldPath));
}
}
interface FieldAccessorCache {
[key: string]: (obj: any) => any;
}