This commit is contained in:
Matthew O'Connor 2020-09-24 22:03:03 +01:00
parent 8f0822c57e
commit 9e26f3d47c
6 changed files with 23 additions and 14 deletions

View File

@ -1,18 +1,22 @@
import { Emitter, Event } from '../events'; import { Emitter, Event } from '../events';
import { CompositeDisposable, IDisposable } from '../lifecycle'; import { CompositeDisposable, IDisposable } from '../lifecycle';
// anything that is serializable JSON should be valid here /**
type StateObject = * A valid JSON type
*/
export type StateObject =
| number | number
| string | string
| boolean | boolean
| undefined
| null | null
| object | object
| StateObject[] | StateObject[]
| { [key: string]: StateObject }; | { [key: string]: StateObject };
interface State { /**
* A JSON-serializable object
*/
export interface State {
[key: string]: StateObject; [key: string]: StateObject;
} }

View File

@ -25,14 +25,12 @@ export interface GroupPanelPartInitParameters
} }
export interface PanelHeaderPart extends IPanel { export interface PanelHeaderPart extends IPanel {
id: string;
element: HTMLElement; element: HTMLElement;
init?(parameters: GroupPanelPartInitParameters); init?(parameters: GroupPanelPartInitParameters);
setVisible(isPanelVisible: boolean, isGroupVisible: boolean): void; setVisible(isPanelVisible: boolean, isGroupVisible: boolean): void;
} }
export interface PanelContentPart extends IPanel { export interface PanelContentPart extends IPanel {
id: string;
element: HTMLElement; element: HTMLElement;
setVisible(isPanelVisible: boolean, isGroupVisible: boolean): void; setVisible(isPanelVisible: boolean, isGroupVisible: boolean): void;
init?(parameters: GroupPanelPartInitParameters); init?(parameters: GroupPanelPartInitParameters);
@ -49,7 +47,6 @@ export interface IGroupPanelInitParameters
} }
export interface IGroupPanel extends IDisposable, IPanel { export interface IGroupPanel extends IDisposable, IPanel {
id: string;
header: PanelHeaderPart; header: PanelHeaderPart;
content: PanelContentPart; content: PanelContentPart;
group: IGroupview; group: IGroupview;

View File

@ -1,15 +1,24 @@
import { State } from '../api/api';
import { IDisposable } from '../lifecycle'; import { IDisposable } from '../lifecycle';
/**
* A key-value object of anything that is a valid JavaScript Object.
*/
export interface Parameters {
[key: string]: any;
}
export interface PanelInitParameters { export interface PanelInitParameters {
params: { [index: string]: any }; params: Parameters;
state?: { [index: string]: any }; state?: State;
} }
export interface PanelUpdateEvent { export interface PanelUpdateEvent {
params: { [index: string]: any }; params: Parameters;
} }
export interface IPanel extends IDisposable { export interface IPanel extends IDisposable {
readonly id: string;
init?(params: PanelInitParameters): void; init?(params: PanelInitParameters): void;
layout?(width: number, height: number): void; layout?(width: number, height: number): void;
update?(event: PanelUpdateEvent): void; update?(event: PanelUpdateEvent): void;

View File

@ -11,7 +11,7 @@ export class BaseReactComponentGridView<T extends BaseViewApi>
implements IPanel { implements IPanel {
private _element: HTMLElement; private _element: HTMLElement;
private part: ReactPart; private part: ReactPart;
private params: { params: any }; private params: PanelInitParameters;
private _onDidChange: Emitter<number | undefined> = new Emitter< private _onDidChange: Emitter<number | undefined> = new Emitter<
number | undefined number | undefined
@ -66,7 +66,7 @@ export class BaseReactComponentGridView<T extends BaseViewApi>
} }
update(params: PanelUpdateEvent) { update(params: PanelUpdateEvent) {
this.params = { ...this.params.params, ...params }; this.params = { ...this.params, params: params.params };
this.part.update(params); this.part.update(params);
} }

View File

@ -1,5 +1,5 @@
import { ReactLayout } from '../dockview/dockview'; import { ReactLayout } from '../dockview/dockview';
import { PanelInitParameters, IPanel } from '../../panel/types'; import { PanelInitParameters } from '../../panel/types';
import { IGridPanelComponentView } from '../../gridview/componentGridview'; import { IGridPanelComponentView } from '../../gridview/componentGridview';
import { FunctionOrValue } from '../../types'; import { FunctionOrValue } from '../../types';
import { BaseReactComponentGridView } from '../baseReactComponentView'; import { BaseReactComponentGridView } from '../baseReactComponentView';

View File

@ -1,7 +1,6 @@
import { IView } from '../../splitview/splitview'; import { IView } from '../../splitview/splitview';
import { ReactLayout } from '../dockview/dockview'; import { ReactLayout } from '../dockview/dockview';
import { ISplitviewPanelProps } from './splitview'; import { ISplitviewPanelProps } from './splitview';
import { IPanel } from '../../panel/types';
import { BaseReactComponentGridView } from '../baseReactComponentView'; import { BaseReactComponentGridView } from '../baseReactComponentView';
import { PanelApi } from '../../api/panelApi'; import { PanelApi } from '../../api/panelApi';