mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Scenes: Enforce explicit accessibility modifiers (ESLint) (#58331)
* Public test * Update * Update * revert * Added some public accessability modifiers * Force public acessability only for scenes/* folder * Fixes
This commit is contained in:
parent
eb3ee35e1c
commit
1fb37b54b3
@ -44,6 +44,12 @@
|
||||
"@typescript-eslint/no-redeclare": ["error"]
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["public/app/features/scenes/**/*.{ts,tsx}"],
|
||||
"rules": {
|
||||
"@typescript-eslint/explicit-member-accessibility": ["error", { "accessibility": "explicit" }]
|
||||
}
|
||||
},
|
||||
{
|
||||
"files": ["packages/grafana-ui/src/components/uPlot/**/*.{ts,tsx}"],
|
||||
"rules": {
|
||||
|
@ -18,9 +18,9 @@ interface NestedSceneState extends SceneLayoutChildState {
|
||||
}
|
||||
|
||||
export class NestedScene extends SceneObjectBase<NestedSceneState> {
|
||||
static Component = NestedSceneRenderer;
|
||||
public static Component = NestedSceneRenderer;
|
||||
|
||||
onToggle = () => {
|
||||
public onToggle = () => {
|
||||
this.setState({
|
||||
isCollapsed: !this.state.isCollapsed,
|
||||
size: {
|
||||
@ -31,7 +31,7 @@ export class NestedScene extends SceneObjectBase<NestedSceneState> {
|
||||
};
|
||||
|
||||
/** Removes itself from its parent's children array */
|
||||
onRemove = () => {
|
||||
public onRemove = () => {
|
||||
const parent = this.parent!;
|
||||
if ('children' in parent.state) {
|
||||
parent.setState({
|
||||
|
@ -18,15 +18,15 @@ interface SceneState extends SceneObjectStatePlain {
|
||||
}
|
||||
|
||||
export class Scene extends SceneObjectBase<SceneState> {
|
||||
static Component = SceneRenderer;
|
||||
urlSyncManager?: UrlSyncManager;
|
||||
public static Component = SceneRenderer;
|
||||
private urlSyncManager?: UrlSyncManager;
|
||||
|
||||
activate() {
|
||||
public activate() {
|
||||
super.activate();
|
||||
this.urlSyncManager = new UrlSyncManager(this);
|
||||
}
|
||||
|
||||
deactivate() {
|
||||
public deactivate() {
|
||||
super.deactivate();
|
||||
this.urlSyncManager!.cleanUp();
|
||||
}
|
||||
|
@ -12,8 +12,8 @@ export interface SceneCanvasTextState extends SceneLayoutChildState {
|
||||
}
|
||||
|
||||
export class SceneCanvasText extends SceneObjectBase<SceneCanvasTextState> {
|
||||
static Editor = Editor;
|
||||
static Component = ({ model }: SceneComponentProps<SceneCanvasText>) => {
|
||||
public static Editor = Editor;
|
||||
public static Component = ({ model }: SceneComponentProps<SceneCanvasText>) => {
|
||||
const { text, fontSize = 20, align = 'left' } = model.useState();
|
||||
|
||||
const style: CSSProperties = {
|
||||
|
@ -12,10 +12,10 @@ interface SceneFlexLayoutState extends SceneLayoutState {
|
||||
}
|
||||
|
||||
export class SceneFlexLayout extends SceneObjectBase<SceneFlexLayoutState> {
|
||||
static Component = FlexLayoutRenderer;
|
||||
static Editor = FlexLayoutEditor;
|
||||
public static Component = FlexLayoutRenderer;
|
||||
public static Editor = FlexLayoutEditor;
|
||||
|
||||
toggleDirection() {
|
||||
public toggleDirection() {
|
||||
this.setState({
|
||||
direction: this.state.direction === 'row' ? 'column' : 'row',
|
||||
});
|
||||
|
@ -17,10 +17,10 @@ interface RepeatOptions extends SceneObjectStatePlain {
|
||||
}
|
||||
|
||||
export class ScenePanelRepeater extends SceneObjectBase<RepeatOptions> {
|
||||
activate(): void {
|
||||
public activate(): void {
|
||||
super.activate();
|
||||
|
||||
this.subs.add(
|
||||
this._subs.add(
|
||||
this.getData().subscribeToState({
|
||||
next: (data) => {
|
||||
if (data.data?.state === LoadingState.Done) {
|
||||
@ -31,7 +31,7 @@ export class ScenePanelRepeater extends SceneObjectBase<RepeatOptions> {
|
||||
);
|
||||
}
|
||||
|
||||
performRepeat(data: PanelData) {
|
||||
private performRepeat(data: PanelData) {
|
||||
// assume parent is a layout
|
||||
const firstChild = this.state.layout.state.children[0]!;
|
||||
const newChildren: SceneLayoutChild[] = [];
|
||||
@ -53,7 +53,7 @@ export class ScenePanelRepeater extends SceneObjectBase<RepeatOptions> {
|
||||
this.state.layout.setState({ children: newChildren });
|
||||
}
|
||||
|
||||
static Component = ({ model, isEditing }: SceneComponentProps<ScenePanelRepeater>) => {
|
||||
public static Component = ({ model, isEditing }: SceneComponentProps<ScenePanelRepeater>) => {
|
||||
const { layout } = model.useState();
|
||||
return <layout.Component model={layout} isEditing={isEditing} />;
|
||||
};
|
||||
|
@ -11,7 +11,7 @@ export interface SceneTimePickerState extends SceneObjectStatePlain {
|
||||
}
|
||||
|
||||
export class SceneTimePicker extends SceneObjectBase<SceneTimePickerState> {
|
||||
static Component = SceneTimePickerRenderer;
|
||||
public static Component = SceneTimePickerRenderer;
|
||||
}
|
||||
|
||||
function SceneTimePickerRenderer({ model }: SceneComponentProps<SceneTimePicker>) {
|
||||
|
@ -11,7 +11,7 @@ export interface ToolbarButtonState extends SceneObjectStatePlain {
|
||||
}
|
||||
|
||||
export class SceneToolbarButton extends SceneObjectBase<ToolbarButtonState> {
|
||||
static Component = ({ model }: SceneComponentProps<SceneToolbarButton>) => {
|
||||
public static Component = ({ model }: SceneComponentProps<SceneToolbarButton>) => {
|
||||
const state = model.useState();
|
||||
|
||||
return <ToolbarButton onClick={state.onClick} icon={state.icon} />;
|
||||
@ -24,7 +24,7 @@ export interface SceneToolbarInputState extends SceneObjectStatePlain {
|
||||
}
|
||||
|
||||
export class SceneToolbarInput extends SceneObjectBase<SceneToolbarInputState> {
|
||||
static Component = ({ model }: SceneComponentProps<SceneToolbarInput>) => {
|
||||
public static Component = ({ model }: SceneComponentProps<SceneToolbarInput>) => {
|
||||
const state = model.useState();
|
||||
|
||||
return (
|
||||
|
@ -16,10 +16,10 @@ export interface VizPanelState extends SceneLayoutChildState {
|
||||
}
|
||||
|
||||
export class VizPanel extends SceneObjectBase<VizPanelState> {
|
||||
static Component = ScenePanelRenderer;
|
||||
static Editor = VizPanelEditor;
|
||||
public static Component = ScenePanelRenderer;
|
||||
public static Editor = VizPanelEditor;
|
||||
|
||||
onSetTimeRange = (timeRange: AbsoluteTimeRange) => {
|
||||
public onSetTimeRange = (timeRange: AbsoluteTimeRange) => {
|
||||
const sceneTimeRange = this.getTimeRange();
|
||||
sceneTimeRange.setState({
|
||||
raw: {
|
||||
|
@ -16,9 +16,9 @@ export abstract class SceneObjectBase<TState extends SceneObjectState = {}> impl
|
||||
private _events = new EventBusSrv();
|
||||
|
||||
protected _parent?: SceneObject;
|
||||
protected subs = new Subscription();
|
||||
protected _subs = new Subscription();
|
||||
|
||||
constructor(state: TState) {
|
||||
public constructor(state: TState) {
|
||||
if (!state.key) {
|
||||
state.key = uuidv4();
|
||||
}
|
||||
@ -29,17 +29,17 @@ export abstract class SceneObjectBase<TState extends SceneObjectState = {}> impl
|
||||
}
|
||||
|
||||
/** Current state */
|
||||
get state(): TState {
|
||||
public get state(): TState {
|
||||
return this._state;
|
||||
}
|
||||
|
||||
/** True if currently being active (ie displayed for visual objects) */
|
||||
get isActive(): boolean {
|
||||
public get isActive(): boolean {
|
||||
return this._isActive;
|
||||
}
|
||||
|
||||
/** Returns the parent, undefined for root object */
|
||||
get parent(): SceneObject | undefined {
|
||||
public get parent(): SceneObject | undefined {
|
||||
return this._parent;
|
||||
}
|
||||
|
||||
@ -47,14 +47,14 @@ export abstract class SceneObjectBase<TState extends SceneObjectState = {}> impl
|
||||
* Used in render functions when rendering a SceneObject.
|
||||
* Wraps the component in an EditWrapper that handles edit mode
|
||||
*/
|
||||
get Component(): SceneComponent<this> {
|
||||
public get Component(): SceneComponent<this> {
|
||||
return SceneComponentWrapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* Temporary solution, should be replaced by declarative options
|
||||
*/
|
||||
get Editor(): SceneComponent<this> {
|
||||
public get Editor(): SceneComponent<this> {
|
||||
return ((this as any).constructor['Editor'] ?? (() => null)) as SceneComponent<this>;
|
||||
}
|
||||
|
||||
@ -77,18 +77,18 @@ export abstract class SceneObjectBase<TState extends SceneObjectState = {}> impl
|
||||
/**
|
||||
* Subscribe to the scene state subject
|
||||
**/
|
||||
subscribeToState(observerOrNext?: Partial<Observer<TState>>): Subscription {
|
||||
public subscribeToState(observerOrNext?: Partial<Observer<TState>>): Subscription {
|
||||
return this._subject.subscribe(observerOrNext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribe to the scene event
|
||||
**/
|
||||
subscribeToEvent<T extends BusEvent>(eventType: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable {
|
||||
public subscribeToEvent<T extends BusEvent>(eventType: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable {
|
||||
return this._events.subscribe(eventType, handler);
|
||||
}
|
||||
|
||||
setState(update: Partial<TState>) {
|
||||
public setState(update: Partial<TState>) {
|
||||
const prevState = this._state;
|
||||
this._state = {
|
||||
...this._state,
|
||||
@ -112,7 +112,7 @@ export abstract class SceneObjectBase<TState extends SceneObjectState = {}> impl
|
||||
/*
|
||||
* Publish an event and optionally bubble it up the scene
|
||||
**/
|
||||
publishEvent(event: BusEvent, bubble?: boolean) {
|
||||
public publishEvent(event: BusEvent, bubble?: boolean) {
|
||||
this._events.publish(event);
|
||||
|
||||
if (bubble && this.parent) {
|
||||
@ -120,11 +120,14 @@ export abstract class SceneObjectBase<TState extends SceneObjectState = {}> impl
|
||||
}
|
||||
}
|
||||
|
||||
getRoot(): SceneObject {
|
||||
public getRoot(): SceneObject {
|
||||
return !this._parent ? this : this._parent.getRoot();
|
||||
}
|
||||
|
||||
activate() {
|
||||
/**
|
||||
* Called by the SceneComponentWrapper when the react component is mounted
|
||||
*/
|
||||
public activate() {
|
||||
this._isActive = true;
|
||||
|
||||
const { $data, $variables } = this.state;
|
||||
@ -138,7 +141,10 @@ export abstract class SceneObjectBase<TState extends SceneObjectState = {}> impl
|
||||
}
|
||||
}
|
||||
|
||||
deactivate(): void {
|
||||
/**
|
||||
* Called by the SceneComponentWrapper when the react component is unmounted
|
||||
*/
|
||||
public deactivate(): void {
|
||||
this._isActive = false;
|
||||
|
||||
const { $data, $variables } = this.state;
|
||||
@ -153,14 +159,17 @@ export abstract class SceneObjectBase<TState extends SceneObjectState = {}> impl
|
||||
|
||||
// Clear subscriptions and listeners
|
||||
this._events.removeAllListeners();
|
||||
this.subs.unsubscribe();
|
||||
this.subs = new Subscription();
|
||||
this._subs.unsubscribe();
|
||||
this._subs = new Subscription();
|
||||
|
||||
this._subject.complete();
|
||||
this._subject = new Subject<TState>();
|
||||
}
|
||||
|
||||
useState() {
|
||||
/**
|
||||
* Utility hook to get and subscribe to state
|
||||
*/
|
||||
public useState() {
|
||||
// eslint-disable-next-line react-hooks/rules-of-hooks
|
||||
return useSceneObjectState(this);
|
||||
}
|
||||
@ -168,7 +177,7 @@ export abstract class SceneObjectBase<TState extends SceneObjectState = {}> impl
|
||||
/**
|
||||
* Will walk up the scene object graph to the closest $timeRange scene object
|
||||
*/
|
||||
getTimeRange(): SceneTimeRange {
|
||||
public getTimeRange(): SceneTimeRange {
|
||||
const { $timeRange } = this.state;
|
||||
if ($timeRange) {
|
||||
return $timeRange;
|
||||
@ -184,7 +193,7 @@ export abstract class SceneObjectBase<TState extends SceneObjectState = {}> impl
|
||||
/**
|
||||
* Will walk up the scene object graph to the closest $data scene object
|
||||
*/
|
||||
getData(): SceneObject<SceneDataState> {
|
||||
public getData(): SceneObject<SceneDataState> {
|
||||
const { $data } = this.state;
|
||||
if ($data) {
|
||||
return $data;
|
||||
@ -200,7 +209,7 @@ export abstract class SceneObjectBase<TState extends SceneObjectState = {}> impl
|
||||
/**
|
||||
* Will walk up the scene object graph to the closest $editor scene object
|
||||
*/
|
||||
getSceneEditor(): SceneEditor {
|
||||
public getSceneEditor(): SceneEditor {
|
||||
const { $editor } = this.state;
|
||||
if ($editor) {
|
||||
return $editor;
|
||||
@ -216,7 +225,7 @@ export abstract class SceneObjectBase<TState extends SceneObjectState = {}> impl
|
||||
/**
|
||||
* Will create new SceneItem with shalled cloned state, but all states items of type SceneObject are deep cloned
|
||||
*/
|
||||
clone(withState?: Partial<TState>): this {
|
||||
public clone(withState?: Partial<TState>): this {
|
||||
const clonedState = { ...this.state };
|
||||
|
||||
// Clone any SceneItems in state
|
||||
|
@ -4,26 +4,26 @@ import { SceneObjectBase } from './SceneObjectBase';
|
||||
import { SceneObjectWithUrlSync, SceneTimeRangeState } from './types';
|
||||
|
||||
export class SceneTimeRange extends SceneObjectBase<SceneTimeRangeState> implements SceneObjectWithUrlSync {
|
||||
onTimeRangeChange = (timeRange: TimeRange) => {
|
||||
public onTimeRangeChange = (timeRange: TimeRange) => {
|
||||
this.setState(timeRange);
|
||||
};
|
||||
|
||||
onRefresh = () => {
|
||||
public onRefresh = () => {
|
||||
// TODO re-eval time range
|
||||
this.setState({ ...this.state });
|
||||
};
|
||||
|
||||
onIntervalChanged = (_: string) => {};
|
||||
public onIntervalChanged = (_: string) => {};
|
||||
|
||||
/** These url sync functions are only placeholders for something more sophisticated */
|
||||
getUrlState() {
|
||||
public getUrlState() {
|
||||
return {
|
||||
from: this.state.raw.from,
|
||||
to: this.state.raw.to,
|
||||
} as any;
|
||||
}
|
||||
|
||||
updateFromUrl(values: UrlQueryMap) {
|
||||
public updateFromUrl(values: UrlQueryMap) {
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
@ -10,12 +10,5 @@ export interface SceneObjectStateChangedPayload {
|
||||
}
|
||||
|
||||
export class SceneObjectStateChangedEvent extends BusEventWithPayload<SceneObjectStateChangedPayload> {
|
||||
static type = 'scene-object-state-change';
|
||||
}
|
||||
|
||||
export class SceneObjectActivedEvent extends BusEventWithPayload<SceneObject> {
|
||||
static type = 'scene-object-activated';
|
||||
}
|
||||
export class SceneObjectDeactivatedEvent extends BusEventWithPayload<SceneObject> {
|
||||
static type = 'scene-object-deactivated';
|
||||
public static readonly type = 'scene-object-state-change';
|
||||
}
|
||||
|
@ -11,17 +11,17 @@ import { SceneObjectEditor } from './SceneObjectEditor';
|
||||
import { SceneObjectTree } from './SceneObjectTree';
|
||||
|
||||
export class SceneEditManager extends SceneObjectBase<SceneEditorState> implements SceneEditor {
|
||||
static Component = SceneEditorRenderer;
|
||||
public static Component = SceneEditorRenderer;
|
||||
|
||||
get Component(): SceneComponent<this> {
|
||||
public get Component(): SceneComponent<this> {
|
||||
return SceneEditorRenderer;
|
||||
}
|
||||
|
||||
onMouseEnterObject(model: SceneObject) {
|
||||
public onMouseEnterObject(model: SceneObject) {
|
||||
this.setState({ hoverObject: { ref: model } });
|
||||
}
|
||||
|
||||
onMouseLeaveObject(model: SceneObject) {
|
||||
public onMouseLeaveObject(model: SceneObject) {
|
||||
if (model.parent) {
|
||||
this.setState({ hoverObject: { ref: model.parent } });
|
||||
} else {
|
||||
@ -29,7 +29,7 @@ export class SceneEditManager extends SceneObjectBase<SceneEditorState> implemen
|
||||
}
|
||||
}
|
||||
|
||||
onSelectObject(model: SceneObject) {
|
||||
public onSelectObject(model: SceneObject) {
|
||||
this.setState({ selectedObject: { ref: model } });
|
||||
}
|
||||
}
|
||||
|
@ -31,12 +31,12 @@ export interface DataQueryExtended extends DataQuery {
|
||||
export class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> {
|
||||
private querySub?: Unsubscribable;
|
||||
|
||||
activate() {
|
||||
public activate() {
|
||||
super.activate();
|
||||
|
||||
const timeRange = this.getTimeRange();
|
||||
|
||||
this.subs.add(
|
||||
this._subs.add(
|
||||
timeRange.subscribeToState({
|
||||
next: (timeRange) => {
|
||||
this.runWithTimeRange(timeRange);
|
||||
@ -49,7 +49,7 @@ export class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> {
|
||||
}
|
||||
}
|
||||
|
||||
deactivate(): void {
|
||||
public deactivate(): void {
|
||||
super.deactivate();
|
||||
|
||||
if (this.querySub) {
|
||||
@ -58,7 +58,7 @@ export class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> {
|
||||
}
|
||||
}
|
||||
|
||||
runQueries() {
|
||||
public runQueries() {
|
||||
const timeRange = this.getTimeRange();
|
||||
this.runWithTimeRange(timeRange.state);
|
||||
}
|
||||
|
@ -10,16 +10,16 @@ export class UrlSyncManager {
|
||||
private locationListenerUnsub: () => void;
|
||||
private stateChangeSub: Unsubscribable;
|
||||
|
||||
constructor(sceneRoot: SceneObject) {
|
||||
public constructor(sceneRoot: SceneObject) {
|
||||
this.stateChangeSub = sceneRoot.subscribeToEvent(SceneObjectStateChangedEvent, this.onStateChanged);
|
||||
this.locationListenerUnsub = locationService.getHistory().listen(this.onLocationUpdate);
|
||||
}
|
||||
|
||||
onLocationUpdate = (location: Location) => {
|
||||
private onLocationUpdate = (location: Location) => {
|
||||
// TODO: find any scene object whose state we need to update
|
||||
};
|
||||
|
||||
onStateChanged = ({ payload }: SceneObjectStateChangedEvent) => {
|
||||
private onStateChanged = ({ payload }: SceneObjectStateChangedEvent) => {
|
||||
const changedObject = payload.changedObject;
|
||||
|
||||
if ('getUrlState' in changedObject) {
|
||||
@ -28,7 +28,7 @@ export class UrlSyncManager {
|
||||
}
|
||||
};
|
||||
|
||||
cleanUp() {
|
||||
public cleanUp() {
|
||||
this.stateChangeSub.unsubscribe();
|
||||
this.locationListenerUnsub();
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import { SceneVariable, SceneVariables, SceneVariableSetState, SceneVariableStat
|
||||
export class TextBoxSceneVariable extends SceneObjectBase<SceneVariableState> implements SceneVariable {}
|
||||
|
||||
export class SceneVariableSet extends SceneObjectBase<SceneVariableSetState> implements SceneVariables {
|
||||
getVariableByName(name: string): SceneVariable | undefined {
|
||||
public getVariableByName(name: string): SceneVariable | undefined {
|
||||
// TODO: Replace with index
|
||||
return this.state.variables.find((x) => x.state.name === name);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user