refactor: rename panel api objects

This commit is contained in:
mathuo 2021-03-14 19:59:24 +00:00
parent 85f53ffae9
commit f341b01fea
28 changed files with 321 additions and 315 deletions

View File

@ -1,10 +1,10 @@
import { BaseViewApi, StateObject } from '../../api/api'; import { PanelApi, StateObject } from '../../api/panelApi';
describe('api', () => { describe('api', () => {
let api: BaseViewApi; let api: PanelApi;
beforeEach(() => { beforeEach(() => {
api = new BaseViewApi('dummy_id'); api = new PanelApi('dummy_id');
}); });
it('sets api state', () => { it('sets api state', () => {

View File

@ -1,4 +1,3 @@
import { IGroupPanelApi } from '../../api/groupPanelApi';
import { IDockviewComponent } from '../../dockview/dockviewComponent'; import { IDockviewComponent } from '../../dockview/dockviewComponent';
import { Emitter } from '../../events'; import { Emitter } from '../../events';
import { import {
@ -22,6 +21,7 @@ import {
IGroupPanelView, IGroupPanelView,
} from '../../react/dockview/v2/defaultGroupPanelView'; } from '../../react/dockview/v2/defaultGroupPanelView';
import { GroupOptions, GroupDropEvent } from '../../groupview/v2/component'; import { GroupOptions, GroupDropEvent } from '../../groupview/v2/component';
import { IDockviewPanelApi } from '../../api/groupPanelApi';
class Watermark implements WatermarkPart { class Watermark implements WatermarkPart {
public readonly element = document.createElement('div'); public readonly element = document.createElement('div');
@ -129,7 +129,7 @@ class TestPanel implements IGroupPanel {
return this._view; return this._view;
} }
constructor(public readonly id: string, public api: IGroupPanelApi) { constructor(public readonly id: string, public api: IDockviewPanelApi) {
this.init({ this.init({
view: new DefaultGroupPanelView({ view: new DefaultGroupPanelView({
tab: new TestHeaderPart(id), tab: new TestHeaderPart(id),

View File

@ -1,4 +1,4 @@
import { PanelDimensionChangeEvent } from '../../api/api'; import { PanelDimensionChangeEvent } from '../../api/panelApi';
import { CompositeDisposable } from '../../lifecycle'; import { CompositeDisposable } from '../../lifecycle';
import { PanelUpdateEvent } from '../../panel/types'; import { PanelUpdateEvent } from '../../panel/types';
import { PaneviewComponent } from '../../paneview/paneviewComponent'; import { PaneviewComponent } from '../../paneview/paneviewComponent';

View File

@ -1,4 +1,4 @@
import { PanelDimensionChangeEvent } from '../../api/api'; import { PanelDimensionChangeEvent } from '../../api/panelApi';
import { CompositeDisposable } from '../../lifecycle'; import { CompositeDisposable } from '../../lifecycle';
import { Orientation } from '../../splitview/core/splitview'; import { Orientation } from '../../splitview/core/splitview';
import { SplitviewComponent } from '../../splitview/splitviewComponent'; import { SplitviewComponent } from '../../splitview/splitviewComponent';

View File

@ -1,207 +0,0 @@
import { Emitter, Event } from '../events';
import { CompositeDisposable } from '../lifecycle';
/**
* A valid JSON type
*/
export type StateObject =
| number
| string
| boolean
| null
| object
| StateObject[]
| { [key: string]: StateObject };
/**
* A JSON-serializable object
*/
export interface State {
[key: string]: StateObject;
}
export interface FocusEvent {
isFocused: boolean;
}
export interface PanelDimensionChangeEvent {
width: number;
height: number;
}
export interface VisibilityEvent {
isVisible: boolean;
}
export interface ActiveEvent {
isActive: boolean;
}
export interface IBaseViewApi {
// events
onDidDimensionsChange: Event<PanelDimensionChangeEvent>;
onDidStateChange: Event<void>;
onDidFocusChange: Event<FocusEvent>;
onDidVisibilityChange: Event<VisibilityEvent>;
onDidActiveChange: Event<ActiveEvent>;
onFocusEvent: Event<void>;
//
setVisible(isVisible: boolean): void;
setActive(): void;
// state
setState(key: string, value: StateObject): void;
setState(state: State): void;
getState: () => State;
getStateKey: <T extends StateObject>(key: string) => T;
/**
* The id of the panel that would have been assigned when the panel was created
*/
readonly id: string;
/**
* Whether the panel holds the current focus
*/
readonly isFocused: boolean;
/**
* Whether the panel is the actively selected panel
*/
readonly isActive: boolean;
/**
* Whether the panel is visible
*/
readonly isVisible: boolean;
/**
* The panel width in pixels
*/
readonly width: number;
/**
* The panel height in pixels
*/
readonly height: number;
}
/**
* A core api implementation that should be used across all panel-like objects
*/
export class BaseViewApi extends CompositeDisposable implements IBaseViewApi {
private _state: State = {};
private _isFocused = false;
private _isActive = false;
private _isVisible = true;
private _width = 0;
private _height = 0;
readonly _onDidStateChange = new Emitter<void>();
readonly onDidStateChange: Event<void> = this._onDidStateChange.event;
//
readonly _onDidPanelDimensionChange = new Emitter<PanelDimensionChangeEvent>(
{
replay: true,
}
);
readonly onDidDimensionsChange = this._onDidPanelDimensionChange.event;
//
readonly _onDidChangeFocus = new Emitter<FocusEvent>({
replay: true,
});
readonly onDidFocusChange: Event<FocusEvent> = this._onDidChangeFocus.event;
//
readonly _onFocusEvent = new Emitter<void>();
readonly onFocusEvent: Event<void> = this._onFocusEvent.event;
//
readonly _onDidVisibilityChange = new Emitter<VisibilityEvent>({
replay: true,
});
readonly onDidVisibilityChange: Event<VisibilityEvent> = this
._onDidVisibilityChange.event;
//
readonly _onVisibilityChange = new Emitter<VisibilityEvent>();
readonly onVisibilityChange: Event<VisibilityEvent> = this
._onVisibilityChange.event;
//
readonly _onDidActiveChange = new Emitter<ActiveEvent>({
replay: true,
});
readonly onDidActiveChange: Event<ActiveEvent> = this._onDidActiveChange
.event;
//
readonly _onActiveChange = new Emitter<void>();
readonly onActiveChange: Event<void> = this._onActiveChange.event;
//
get isFocused() {
return this._isFocused;
}
get isActive() {
return this._isActive;
}
get isVisible() {
return this._isVisible;
}
get width() {
return this._width;
}
get height() {
return this._height;
}
constructor(readonly id: string) {
super();
this.addDisposables(
this._onDidStateChange,
this._onDidPanelDimensionChange,
this._onDidChangeFocus,
this._onDidVisibilityChange,
this._onDidActiveChange,
this._onFocusEvent,
this.onDidFocusChange((event) => {
this._isFocused = event.isFocused;
}),
this.onDidActiveChange((event) => {
this._isActive = event.isActive;
}),
this.onDidVisibilityChange((event) => {
this._isVisible = event.isVisible;
}),
this.onDidDimensionsChange((event) => {
this._width = event.width;
this._height = event.height;
})
);
}
setVisible(isVisible: boolean) {
this._onVisibilityChange.fire({ isVisible });
}
setActive(): void {
this._onActiveChange.fire();
}
setState(
key: string | { [key: string]: StateObject },
value?: StateObject
): void {
if (typeof key === 'object') {
this._state = key;
} else if (typeof value !== undefined) {
this._state[key] = value!;
}
this._onDidStateChange.fire(undefined);
}
getState(): State {
return this._state;
}
getStateKey<T extends StateObject>(key: string): T {
return this._state[key] as T;
}
dispose() {
super.dispose();
}
}

View File

@ -1,6 +1,6 @@
import { Emitter, Event } from '../events'; import { Emitter, Event } from '../events';
import { FunctionOrValue } from '../types'; import { FunctionOrValue } from '../types';
import { BaseViewApi, IBaseViewApi } from './api'; import { PanelApi, IPanelApi } from './panelApi';
export interface GridConstraintChangeEvent { export interface GridConstraintChangeEvent {
minimumWidth?: number; minimumWidth?: number;
@ -21,19 +21,16 @@ export interface SizeEvent {
height?: number; height?: number;
} }
export interface IGridPanelApi extends IBaseViewApi { export interface IGridviewPanelApi extends IPanelApi {
onDidConstraintsChange: Event<GridConstraintChangeEvent>; onDidConstraintsChange: Event<GridConstraintChangeEvent>;
setConstraints(value: GridConstraintChangeEvent2): void; setConstraints(value: GridConstraintChangeEvent2): void;
setSize(event: SizeEvent): void; setSize(event: SizeEvent): void;
} }
export class GridPanelApi extends BaseViewApi implements IGridPanelApi { export class GridviewPanelApi extends PanelApi implements IGridviewPanelApi {
readonly _onDidConstraintsChangeInternal = new Emitter< readonly _onDidConstraintsChangeInternal = new Emitter<GridConstraintChangeEvent2>();
GridConstraintChangeEvent2 readonly onDidConstraintsChangeInternal: Event<GridConstraintChangeEvent2> = this
>(); ._onDidConstraintsChangeInternal.event;
readonly onDidConstraintsChangeInternal: Event<
GridConstraintChangeEvent2
> = this._onDidConstraintsChangeInternal.event;
// //
readonly _onDidConstraintsChange = new Emitter<GridConstraintChangeEvent>({ readonly _onDidConstraintsChange = new Emitter<GridConstraintChangeEvent>({

View File

@ -1,5 +1,5 @@
import { Emitter, Event } from '../events'; import { Emitter, Event } from '../events';
import { GridPanelApi, IGridPanelApi } from './gridPanelApi'; import { GridviewPanelApi, IGridviewPanelApi } from './gridviewPanelApi';
import { IGroupPanel } from '../groupview/groupPanel'; import { IGroupPanel } from '../groupview/groupPanel';
import { GroupviewPanel } from '../groupview/v2/groupviewPanel'; import { GroupviewPanel } from '../groupview/v2/groupviewPanel';
@ -11,8 +11,8 @@ export interface TitleEvent {
* omit visibility modifiers since the visibility of a single group doesn't make sense * omit visibility modifiers since the visibility of a single group doesn't make sense
* because it belongs to a groupview * because it belongs to a groupview
*/ */
export interface IGroupPanelApi export interface IDockviewPanelApi
extends Omit<IGridPanelApi, 'setVisible' | 'visible'> { extends Omit<IGridviewPanelApi, 'setVisible' | 'visible'> {
readonly group: GroupviewPanel | undefined; readonly group: GroupviewPanel | undefined;
readonly isGroupActive: boolean; readonly isGroupActive: boolean;
onDidDirtyChange: Event<boolean>; onDidDirtyChange: Event<boolean>;
@ -22,7 +22,9 @@ export interface IGroupPanelApi
setTitle(title: string): void; setTitle(title: string): void;
} }
export class GroupPanelApi extends GridPanelApi implements IGroupPanelApi { export class DockviewPanelApi
extends GridviewPanelApi
implements IDockviewPanelApi {
private _group: GroupviewPanel | undefined; private _group: GroupviewPanel | undefined;
private _interceptor: undefined | (() => Promise<boolean>); private _interceptor: undefined | (() => Promise<boolean>);

View File

@ -1,64 +1,207 @@
import { Emitter, Event } from '../events'; import { Emitter, Event } from '../events';
import { IDisposable } from '../lifecycle'; import { CompositeDisposable } from '../lifecycle';
import { FunctionOrValue } from '../types';
import { BaseViewApi, IBaseViewApi } from './api';
interface PanelConstraintChangeEvent2 { /**
minimumSize?: FunctionOrValue<number>; * A valid JSON type
maximumSize?: FunctionOrValue<number>; */
export type StateObject =
| number
| string
| boolean
| null
| object
| StateObject[]
| { [key: string]: StateObject };
/**
* A JSON-serializable object
*/
export interface State {
[key: string]: StateObject;
} }
export interface PanelConstraintChangeEvent { export interface FocusEvent {
minimumSize?: number; isFocused: boolean;
maximumSize?: number; }
export interface PanelDimensionChangeEvent {
width: number;
height: number;
} }
export interface PanelSizeEvent { export interface VisibilityEvent {
size: number; isVisible: boolean;
} }
export interface IPanelApi extends IBaseViewApi { export interface ActiveEvent {
onDidConstraintsChange: Event<PanelConstraintChangeEvent>; isActive: boolean;
setConstraints(value: PanelConstraintChangeEvent2): void;
setSize(event: PanelSizeEvent): void;
} }
export class PanelApi extends BaseViewApi implements IPanelApi, IDisposable { export interface IPanelApi {
readonly _onDidConstraintsChangeInternal = new Emitter< // events
PanelConstraintChangeEvent2 onDidDimensionsChange: Event<PanelDimensionChangeEvent>;
>(); onDidStateChange: Event<void>;
readonly onDidConstraintsChangeInternal: Event< onDidFocusChange: Event<FocusEvent>;
PanelConstraintChangeEvent2 onDidVisibilityChange: Event<VisibilityEvent>;
> = this._onDidConstraintsChangeInternal.event; onDidActiveChange: Event<ActiveEvent>;
onFocusEvent: Event<void>;
// //
setVisible(isVisible: boolean): void;
setActive(): void;
// state
setState(key: string, value: StateObject): void;
setState(state: State): void;
getState: () => State;
getStateKey: <T extends StateObject>(key: string) => T;
/**
* The id of the panel that would have been assigned when the panel was created
*/
readonly id: string;
/**
* Whether the panel holds the current focus
*/
readonly isFocused: boolean;
/**
* Whether the panel is the actively selected panel
*/
readonly isActive: boolean;
/**
* Whether the panel is visible
*/
readonly isVisible: boolean;
/**
* The panel width in pixels
*/
readonly width: number;
/**
* The panel height in pixels
*/
readonly height: number;
}
readonly _onDidConstraintsChange = new Emitter<PanelConstraintChangeEvent>({ /**
* A core api implementation that should be used across all panel-like objects
*/
export class PanelApi extends CompositeDisposable implements IPanelApi {
private _state: State = {};
private _isFocused = false;
private _isActive = false;
private _isVisible = true;
private _width = 0;
private _height = 0;
readonly _onDidStateChange = new Emitter<void>();
readonly onDidStateChange: Event<void> = this._onDidStateChange.event;
//
readonly _onDidPanelDimensionChange = new Emitter<PanelDimensionChangeEvent>(
{
replay: true,
}
);
readonly onDidDimensionsChange = this._onDidPanelDimensionChange.event;
//
readonly _onDidChangeFocus = new Emitter<FocusEvent>({
replay: true, replay: true,
}); });
readonly onDidConstraintsChange: Event<PanelConstraintChangeEvent> = this readonly onDidFocusChange: Event<FocusEvent> = this._onDidChangeFocus.event;
._onDidConstraintsChange.event; //
readonly _onFocusEvent = new Emitter<void>();
readonly onFocusEvent: Event<void> = this._onFocusEvent.event;
//
readonly _onDidVisibilityChange = new Emitter<VisibilityEvent>({
replay: true,
});
readonly onDidVisibilityChange: Event<VisibilityEvent> = this
._onDidVisibilityChange.event;
// //
readonly _onDidSizeChange = new Emitter<PanelSizeEvent>(); readonly _onVisibilityChange = new Emitter<VisibilityEvent>();
readonly onDidSizeChange: Event<PanelSizeEvent> = this._onDidSizeChange readonly onVisibilityChange: Event<VisibilityEvent> = this
._onVisibilityChange.event;
//
readonly _onDidActiveChange = new Emitter<ActiveEvent>({
replay: true,
});
readonly onDidActiveChange: Event<ActiveEvent> = this._onDidActiveChange
.event; .event;
// //
readonly _onActiveChange = new Emitter<void>();
readonly onActiveChange: Event<void> = this._onActiveChange.event;
//
constructor(id: string) { get isFocused() {
super(id); return this._isFocused;
} }
setConstraints(value: PanelConstraintChangeEvent2) { get isActive() {
this._onDidConstraintsChangeInternal.fire(value); return this._isActive;
}
get isVisible() {
return this._isVisible;
} }
setSize(event: PanelSizeEvent) { get width() {
this._onDidSizeChange.fire(event); return this._width;
}
get height() {
return this._height;
}
constructor(readonly id: string) {
super();
this.addDisposables(
this._onDidStateChange,
this._onDidPanelDimensionChange,
this._onDidChangeFocus,
this._onDidVisibilityChange,
this._onDidActiveChange,
this._onFocusEvent,
this.onDidFocusChange((event) => {
this._isFocused = event.isFocused;
}),
this.onDidActiveChange((event) => {
this._isActive = event.isActive;
}),
this.onDidVisibilityChange((event) => {
this._isVisible = event.isVisible;
}),
this.onDidDimensionsChange((event) => {
this._width = event.width;
this._height = event.height;
})
);
}
setVisible(isVisible: boolean) {
this._onVisibilityChange.fire({ isVisible });
}
setActive(): void {
this._onActiveChange.fire();
}
setState(
key: string | { [key: string]: StateObject },
value?: StateObject
): void {
if (typeof key === 'object') {
this._state = key;
} else if (typeof value !== undefined) {
this._state[key] = value!;
}
this._onDidStateChange.fire(undefined);
}
getState(): State {
return this._state;
}
getStateKey<T extends StateObject>(key: string): T {
return this._state[key] as T;
} }
dispose() { dispose() {
super.dispose(); super.dispose();
this._onDidConstraintsChange.dispose();
this._onDidSizeChange.dispose();
} }
} }

View File

@ -1,12 +1,12 @@
import { Emitter, Event } from '../events'; import { Emitter, Event } from '../events';
import { PaneviewPanel } from '../paneview/paneviewPanel'; import { PaneviewPanel } from '../paneview/paneviewPanel';
import { IPanelApi, PanelApi } from './panelApi'; import { ISplitviewPanelApi, SplitviewPanelApi } from './splitviewPanelApi';
export interface ExpansionEvent { export interface ExpansionEvent {
isExpanded: boolean; isExpanded: boolean;
} }
export interface IPanePanelApi extends IPanelApi { export interface IPaneviewPanelApi extends ISplitviewPanelApi {
onDidExpansionChange: Event<ExpansionEvent>; onDidExpansionChange: Event<ExpansionEvent>;
readonly onMouseEnter: Event<MouseEvent>; readonly onMouseEnter: Event<MouseEvent>;
readonly onMouseLeave: Event<MouseEvent>; readonly onMouseLeave: Event<MouseEvent>;
@ -14,7 +14,9 @@ export interface IPanePanelApi extends IPanelApi {
readonly isExpanded: boolean; readonly isExpanded: boolean;
} }
export class PanePanelApi extends PanelApi implements IPanePanelApi { export class PaneviewPanelApi
extends SplitviewPanelApi
implements IPaneviewPanelApi {
readonly _onDidExpansionChange = new Emitter<ExpansionEvent>({ readonly _onDidExpansionChange = new Emitter<ExpansionEvent>({
replay: true, replay: true,
}); });

View File

@ -0,0 +1,63 @@
import { Emitter, Event } from '../events';
import { IDisposable } from '../lifecycle';
import { FunctionOrValue } from '../types';
import { PanelApi, IPanelApi } from './panelApi';
interface PanelConstraintChangeEvent2 {
minimumSize?: FunctionOrValue<number>;
maximumSize?: FunctionOrValue<number>;
}
export interface PanelConstraintChangeEvent {
minimumSize?: number;
maximumSize?: number;
}
export interface PanelSizeEvent {
size: number;
}
export interface ISplitviewPanelApi extends IPanelApi {
onDidConstraintsChange: Event<PanelConstraintChangeEvent>;
setConstraints(value: PanelConstraintChangeEvent2): void;
setSize(event: PanelSizeEvent): void;
}
export class SplitviewPanelApi
extends PanelApi
implements ISplitviewPanelApi, IDisposable {
readonly _onDidConstraintsChangeInternal = new Emitter<PanelConstraintChangeEvent2>();
readonly onDidConstraintsChangeInternal: Event<PanelConstraintChangeEvent2> = this
._onDidConstraintsChangeInternal.event;
//
readonly _onDidConstraintsChange = new Emitter<PanelConstraintChangeEvent>({
replay: true,
});
readonly onDidConstraintsChange: Event<PanelConstraintChangeEvent> = this
._onDidConstraintsChange.event;
//
readonly _onDidSizeChange = new Emitter<PanelSizeEvent>();
readonly onDidSizeChange: Event<PanelSizeEvent> = this._onDidSizeChange
.event;
//
constructor(id: string) {
super(id);
}
setConstraints(value: PanelConstraintChangeEvent2) {
this._onDidConstraintsChangeInternal.fire(value);
}
setSize(event: PanelSizeEvent) {
this._onDidSizeChange.fire(event);
}
dispose() {
super.dispose();
this._onDidConstraintsChange.dispose();
this._onDidSizeChange.dispose();
}
}

View File

@ -47,7 +47,7 @@ import {
toTarget, toTarget,
} from '../gridview/baseComponentGridview'; } from '../gridview/baseComponentGridview';
import { DockviewApi } from '../api/component.api'; import { DockviewApi } from '../api/component.api';
import { State } from '../api/api'; import { State } from '../api/panelApi';
import { LayoutMouseEvent, MouseEventKind } from '../groupview/tab'; import { LayoutMouseEvent, MouseEventKind } from '../groupview/tab';
import { Orientation } from '../splitview/core/splitview'; import { Orientation } from '../splitview/core/splitview';
import { DefaultTab } from './components/tab/defaultTab'; import { DefaultTab } from './components/tab/defaultTab';

View File

@ -6,7 +6,7 @@ import {
PanelInitParameters, PanelInitParameters,
IPanel, IPanel,
} from '../panel/types'; } from '../panel/types';
import { BaseViewApi } from '../api/api'; import { PanelApi } from '../api/panelApi';
export interface BasePanelViewState { export interface BasePanelViewState {
id: string; id: string;
@ -15,7 +15,7 @@ export interface BasePanelViewState {
state?: { [key: string]: any }; state?: { [key: string]: any };
} }
export interface BasePanelViewExported<T extends BaseViewApi> { export interface BasePanelViewExported<T extends PanelApi> {
readonly id: string; readonly id: string;
readonly api: T; readonly api: T;
readonly width: number; readonly width: number;
@ -25,7 +25,7 @@ export interface BasePanelViewExported<T extends BaseViewApi> {
update(params: PanelUpdateEvent): void; update(params: PanelUpdateEvent): void;
} }
export abstract class BasePanelView<T extends BaseViewApi> export abstract class BasePanelView<T extends PanelApi>
extends CompositeDisposable extends CompositeDisposable
implements IPanel, BasePanelViewExported<T> { implements IPanel, BasePanelViewExported<T> {
private _height = 0; private _height = 0;

View File

@ -19,14 +19,14 @@ import {
IGridviewPanel, IGridviewPanel,
} from './gridviewPanel'; } from './gridviewPanel';
import { BaseComponentOptions } from '../panel/types'; import { BaseComponentOptions } from '../panel/types';
import { GridPanelApi } from '../api/gridPanelApi'; import { GridviewPanelApi } from '../api/gridviewPanelApi';
import { GridviewApi } from '../api/component.api'; import { GridviewApi } from '../api/component.api';
import { Orientation, Sizing } from '../splitview/core/splitview'; import { Orientation, Sizing } from '../splitview/core/splitview';
import { createComponent } from '../panel/componentFactory'; import { createComponent } from '../panel/componentFactory';
import { GroupChangeKind } from '../groupview/v2/component'; import { GroupChangeKind } from '../groupview/v2/component';
interface PanelReference { interface PanelReference {
api: GridPanelApi; api: GridviewPanelApi;
} }
export interface SerializedGridview { export interface SerializedGridview {

View File

@ -6,7 +6,7 @@ import {
BasePanelViewExported, BasePanelViewExported,
BasePanelViewState, BasePanelViewState,
} from './basePanelView'; } from './basePanelView';
import { GridPanelApi } from '../api/gridPanelApi'; import { GridviewPanelApi } from '../api/gridviewPanelApi';
import { LayoutPriority } from '../splitview/core/splitview'; import { LayoutPriority } from '../splitview/core/splitview';
import { Emitter, Event } from '../events'; import { Emitter, Event } from '../events';
import { IViewSize } from './gridview'; import { IViewSize } from './gridview';
@ -23,7 +23,8 @@ export interface GridviewInitParameters extends PanelInitParameters {
isVisible?: boolean; isVisible?: boolean;
} }
export interface IGridviewPanel extends BasePanelViewExported<GridPanelApi> { export interface IGridviewPanel
extends BasePanelViewExported<GridviewPanelApi> {
readonly minimumWidth: number; readonly minimumWidth: number;
readonly maximumWidth: number; readonly maximumWidth: number;
readonly minimumHeight: number; readonly minimumHeight: number;
@ -33,7 +34,7 @@ export interface IGridviewPanel extends BasePanelViewExported<GridPanelApi> {
} }
export abstract class GridviewPanel export abstract class GridviewPanel
extends BasePanelView<GridPanelApi> extends BasePanelView<GridviewPanelApi>
implements IGridPanelComponentView, IGridviewPanel { implements IGridPanelComponentView, IGridviewPanel {
private _evaluatedMinimumWidth = 0; private _evaluatedMinimumWidth = 0;
private _evaluatedMaximumWidth = Number.MAX_SAFE_INTEGER; private _evaluatedMaximumWidth = Number.MAX_SAFE_INTEGER;
@ -119,7 +120,7 @@ export abstract class GridviewPanel
return this.api.isActive; return this.api.isActive;
} }
constructor(id: string, component: string, api = new GridPanelApi(id)) { constructor(id: string, component: string, api = new GridviewPanelApi(id)) {
super(id, component, api); super(id, component, api);
this.addDisposables( this.addDisposables(

View File

@ -1,4 +1,4 @@
import { GroupPanelApi, IGroupPanelApi } from '../api/groupPanelApi'; import { DockviewPanelApi, IDockviewPanelApi } from '../api/groupPanelApi';
import { Event } from '../events'; import { Event } from '../events';
import { import {
MutableDisposable, MutableDisposable,
@ -31,7 +31,7 @@ export interface IGroupPanel extends IDisposable, IPanel {
// readonly content?: IContentRenderer; // readonly content?: IContentRenderer;
readonly view?: IGroupPanelView; readonly view?: IGroupPanelView;
readonly group?: GroupviewPanel; readonly group?: GroupviewPanel;
readonly api: IGroupPanelApi; readonly api: IDockviewPanelApi;
updateParentGroup(group: GroupviewPanel, isGroupActive: boolean): void; updateParentGroup(group: GroupviewPanel, isGroupActive: boolean): void;
setDirty(isDirty: boolean): void; setDirty(isDirty: boolean): void;
close?(): Promise<boolean>; close?(): Promise<boolean>;
@ -52,7 +52,7 @@ export interface GroupviewPanelState {
export class GroupPanel extends CompositeDisposable implements IGroupPanel { export class GroupPanel extends CompositeDisposable implements IGroupPanel {
private readonly mutableDisposable = new MutableDisposable(); private readonly mutableDisposable = new MutableDisposable();
readonly api: GroupPanelApi; readonly api: DockviewPanelApi;
private _group: GroupviewPanel | undefined; private _group: GroupviewPanel | undefined;
private params?: IGroupPanelInitParameters; private params?: IGroupPanelInitParameters;
@ -84,7 +84,7 @@ export class GroupPanel extends CompositeDisposable implements IGroupPanel {
) { ) {
super(); super();
this.api = new GroupPanelApi(this, this._group); this.api = new DockviewPanelApi(this, this._group);
this.onDidStateChange = this.api.onDidStateChange; this.onDidStateChange = this.api.onDidStateChange;
this.addDisposables( this.addDisposables(

View File

@ -6,7 +6,7 @@ import {
import { Emitter, Event } from '../../events'; import { Emitter, Event } from '../../events';
import { trackFocus } from '../../dom'; import { trackFocus } from '../../dom';
import { HostedContainer } from '../../hostedContainer'; import { HostedContainer } from '../../hostedContainer';
import { IGroupPanelApi } from '../../api/groupPanelApi'; import { IDockviewPanelApi } from '../../api/groupPanelApi';
import { IGroupPanel } from '../groupPanel'; import { IGroupPanel } from '../groupPanel';
export interface IRenderable { export interface IRenderable {

View File

@ -1,6 +1,6 @@
import { IDisposable } from '../lifecycle'; import { IDisposable } from '../lifecycle';
import { IDockviewComponent } from '../dockview/dockviewComponent'; import { IDockviewComponent } from '../dockview/dockviewComponent';
import { IGroupPanelApi } from '../api/groupPanelApi'; import { IDockviewPanelApi } from '../api/groupPanelApi';
import { PanelInitParameters, IPanel } from '../panel/types'; import { PanelInitParameters, IPanel } from '../panel/types';
import { DockviewApi } from '../api/component.api'; import { DockviewApi } from '../api/component.api';
import { GroupviewPanel } from './v2/groupviewPanel'; import { GroupviewPanel } from './v2/groupviewPanel';
@ -14,7 +14,7 @@ export interface HeaderPartInitParameters {
export interface GroupPanelPartInitParameters export interface GroupPanelPartInitParameters
extends PanelInitParameters, extends PanelInitParameters,
HeaderPartInitParameters { HeaderPartInitParameters {
api: IGroupPanelApi; api: IDockviewPanelApi;
containerApi: DockviewApi; containerApi: DockviewApi;
} }

View File

@ -1,15 +1,18 @@
import { IFrameworkPart } from '../../panel/types'; import { IFrameworkPart } from '../../panel/types';
import { IDockviewComponent } from '../../dockview/dockviewComponent'; import { IDockviewComponent } from '../../dockview/dockviewComponent';
import { GridPanelApi, IGridPanelApi } from '../../api/gridPanelApi'; import {
GridviewPanelApi,
IGridviewPanelApi,
} from '../../api/gridviewPanelApi';
import { GroupComponent, GroupOptions, GroupPanelViewState } from './component'; import { GroupComponent, GroupOptions, GroupPanelViewState } from './component';
import { import {
GridPanelViewState, GridPanelViewState,
GridviewPanel, GridviewPanel,
} from '../../gridview/gridviewPanel'; } from '../../gridview/gridviewPanel';
interface IGroupApi extends IGridPanelApi {} interface IGroupApi extends IGridviewPanelApi {}
class GroupApi extends GridPanelApi implements IGroupApi { class GroupApi extends GridviewPanelApi implements IGroupApi {
private _value?: GroupComponent; private _value?: GroupComponent;
set group(value: GroupComponent) { set group(value: GroupComponent) {

View File

@ -27,16 +27,16 @@ export {
PanelDimensionChangeEvent, PanelDimensionChangeEvent,
VisibilityEvent, VisibilityEvent,
ActiveEvent, ActiveEvent,
} from './api/api'; } from './api/panelApi';
export { export {
SizeEvent, SizeEvent,
IGridPanelApi, IGridviewPanelApi,
GridConstraintChangeEvent, GridConstraintChangeEvent,
} from './api/gridPanelApi'; } from './api/gridviewPanelApi';
export { TitleEvent, IGroupPanelApi } from './api/groupPanelApi'; export { TitleEvent, IDockviewPanelApi } from './api/groupPanelApi';
export { export {
PanelSizeEvent, PanelSizeEvent,
PanelConstraintChangeEvent, PanelConstraintChangeEvent,
IPanelApi, ISplitviewPanelApi,
} from './api/panelApi'; } from './api/splitviewPanelApi';
export { ExpansionEvent, IPanePanelApi } from './api/panePanelApi'; export { ExpansionEvent, IPaneviewPanelApi } from './api/paneviewPanelApi';

View File

@ -1,4 +1,4 @@
import { State } from '../api/api'; import { State } from '../api/panelApi';
import { IDisposable } from '../lifecycle'; import { IDisposable } from '../lifecycle';
import { LayoutPriority } from '../splitview/core/splitview'; import { LayoutPriority } from '../splitview/core/splitview';

View File

@ -1,5 +1,5 @@
import { PaneviewApi } from '../api/component.api'; import { PaneviewApi } from '../api/component.api';
import { PanePanelApi } from '../api/panePanelApi'; import { PaneviewPanelApi } from '../api/paneviewPanelApi';
import { createComponent } from '../panel/componentFactory'; import { createComponent } from '../panel/componentFactory';
import { addDisposableListener, Emitter, Event } from '../events'; import { addDisposableListener, Emitter, Event } from '../events';
import { import {
@ -47,7 +47,7 @@ export interface SerializedPaneview {
class DefaultHeader extends CompositeDisposable implements IPaneHeaderPart { class DefaultHeader extends CompositeDisposable implements IPaneHeaderPart {
private _element: HTMLElement; private _element: HTMLElement;
private apiRef: { api: PanePanelApi | null } = { api: null }; private apiRef: { api: PaneviewPanelApi | null } = { api: null };
get element() { get element() {
return this._element; return this._element;
@ -64,7 +64,7 @@ class DefaultHeader extends CompositeDisposable implements IPaneHeaderPart {
); );
} }
init(params: PanePanelInitParameter & { api: PanePanelApi }) { init(params: PanePanelInitParameter & { api: PaneviewPanelApi }) {
this.apiRef.api = params.api; this.apiRef.api = params.api;
this._element.textContent = params.title; this._element.textContent = params.title;
} }

View File

@ -1,5 +1,5 @@
import { PaneviewApi } from '../api/component.api'; import { PaneviewApi } from '../api/component.api';
import { PanePanelApi } from '../api/panePanelApi'; import { PaneviewPanelApi } from '../api/paneviewPanelApi';
import { addDisposableListener, Emitter, Event } from '../events'; import { addDisposableListener, Emitter, Event } from '../events';
import { import {
BasePanelView, BasePanelView,
@ -30,7 +30,7 @@ export interface PanePanelInitParameter extends PanelInitParameters {
export interface PanePanelComponentInitParameter export interface PanePanelComponentInitParameter
extends PanePanelInitParameter { extends PanePanelInitParameter {
api: PanePanelApi; api: PaneviewPanelApi;
} }
export interface IPaneBodyPart extends IDisposable { export interface IPaneBodyPart extends IDisposable {
@ -49,7 +49,8 @@ export interface IPaneview extends IView {
onDidChangeExpansionState: Event<boolean>; onDidChangeExpansionState: Event<boolean>;
} }
export interface IPaneviewPanel extends BasePanelViewExported<PanePanelApi> { export interface IPaneviewPanel
extends BasePanelViewExported<PaneviewPanelApi> {
readonly minimumSize: number; readonly minimumSize: number;
readonly maximumSize: number; readonly maximumSize: number;
readonly minimumBodySize: number; readonly minimumBodySize: number;
@ -59,7 +60,7 @@ export interface IPaneviewPanel extends BasePanelViewExported<PanePanelApi> {
} }
export abstract class PaneviewPanel export abstract class PaneviewPanel
extends BasePanelView<PanePanelApi> extends BasePanelView<PaneviewPanelApi>
implements IPaneview, IPaneviewPanel { implements IPaneview, IPaneviewPanel {
private _onDidChangeExpansionState: Emitter<boolean> = new Emitter<boolean>( private _onDidChangeExpansionState: Emitter<boolean> = new Emitter<boolean>(
{ replay: true } { replay: true }
@ -138,7 +139,7 @@ export abstract class PaneviewPanel
orientation: Orientation, orientation: Orientation,
isExpanded: boolean isExpanded: boolean
) { ) {
super(id, component, new PanePanelApi(id)); super(id, component, new PaneviewPanelApi(id));
this.api.pane = this; // TODO cannot use 'this' before 'super' this.api.pane = this; // TODO cannot use 'this' before 'super'
this._isExpanded = isExpanded; this._isExpanded = isExpanded;

View File

@ -12,7 +12,7 @@ import {
GroupPanelFrameworkComponentFactory, GroupPanelFrameworkComponentFactory,
TabContextMenuEvent, TabContextMenuEvent,
} from '../../dockview/options'; } from '../../dockview/options';
import { IGroupPanelApi } from '../../api/groupPanelApi'; import { IDockviewPanelApi } from '../../api/groupPanelApi';
import { usePortalsLifecycle } from '../react'; import { usePortalsLifecycle } from '../react';
import { DockviewApi } from '../../api/component.api'; import { DockviewApi } from '../../api/component.api';
import { ReactWatermarkPart } from './reactWatermarkPart'; import { ReactWatermarkPart } from './reactWatermarkPart';
@ -27,7 +27,7 @@ export interface ActionsbarReference<P> extends IDisposable {
} }
export interface IGroupPanelBaseProps { export interface IGroupPanelBaseProps {
api: IGroupPanelApi; api: IDockviewPanelApi;
containerApi: DockviewApi; containerApi: DockviewApi;
[key: string]: any; [key: string]: any;
} }

View File

@ -6,14 +6,14 @@ import {
import { ReactPart, ReactPortalStore } from '../react'; import { ReactPart, ReactPortalStore } from '../react';
import { ActionsbarReference, IDockviewPanelProps } from '../dockview/dockview'; import { ActionsbarReference, IDockviewPanelProps } from '../dockview/dockview';
import { PanelUpdateEvent } from '../../panel/types'; import { PanelUpdateEvent } from '../../panel/types';
import { IGroupPanelApi } from '../../api/groupPanelApi'; import { IDockviewPanelApi } from '../../api/groupPanelApi';
import { DockviewApi } from '../../api/component.api'; import { DockviewApi } from '../../api/component.api';
import { HostedContainer } from '../../hostedContainer'; import { HostedContainer } from '../../hostedContainer';
import { GroupviewPanel } from '../../groupview/v2/groupviewPanel'; import { GroupviewPanel } from '../../groupview/v2/groupviewPanel';
import { Emitter, Event } from '../../events'; import { Emitter, Event } from '../../events';
export interface IGroupPanelActionbarProps { export interface IGroupPanelActionbarProps {
api: IGroupPanelApi; api: IDockviewPanelApi;
containerApi: DockviewApi; containerApi: DockviewApi;
} }

View File

@ -3,7 +3,7 @@ import {
GridviewComponent, GridviewComponent,
IGridviewComponent, IGridviewComponent,
} from '../../gridview/gridviewComponent'; } from '../../gridview/gridviewComponent';
import { IGridPanelApi } from '../../api/gridPanelApi'; import { IGridviewPanelApi } from '../../api/gridviewPanelApi';
import { Orientation } from '../../splitview/core/splitview'; import { Orientation } from '../../splitview/core/splitview';
import { ReactGridPanelView } from './view'; import { ReactGridPanelView } from './view';
import { usePortalsLifecycle } from '../react'; import { usePortalsLifecycle } from '../react';
@ -16,7 +16,7 @@ export interface GridviewReadyEvent {
} }
export interface IGridviewPanelProps { export interface IGridviewPanelProps {
api: IGridPanelApi; api: IGridviewPanelApi;
containerApi: GridviewApi; containerApi: GridviewApi;
[key: string]: any; [key: string]: any;
} }

View File

@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { IPanePanelApi } from '../../api/panePanelApi'; import { IPaneviewPanelApi } from '../../api/paneviewPanelApi';
import { import {
PaneviewComponent, PaneviewComponent,
IPaneviewComponent, IPaneviewComponent,
@ -15,7 +15,7 @@ export interface PaneviewReadyEvent {
} }
export interface IPaneviewPanelProps { export interface IPaneviewPanelProps {
api: IPanePanelApi; api: IPaneviewPanelApi;
containerApi: PaneviewApi; containerApi: PaneviewApi;
title: string; title: string;
[key: string]: any; [key: string]: any;

View File

@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { SplitviewApi } from '../../api/component.api'; import { SplitviewApi } from '../../api/component.api';
import { IPanelApi } from '../../api/panelApi'; import { ISplitviewPanelApi } from '../../api/splitviewPanelApi';
import { import {
ISplitviewComponent, ISplitviewComponent,
SplitviewComponent, SplitviewComponent,
@ -16,7 +16,7 @@ export interface SplitviewReadyEvent {
} }
export interface ISplitviewPanelProps { export interface ISplitviewPanelProps {
api: IPanelApi; api: ISplitviewPanelApi;
containerApi: SplitviewApi; containerApi: SplitviewApi;
[key: string]: any; [key: string]: any;
} }

View File

@ -3,12 +3,13 @@ import {
BasePanelView, BasePanelView,
BasePanelViewExported, BasePanelViewExported,
} from '../gridview/basePanelView'; } from '../gridview/basePanelView';
import { PanelApi } from '../api/panelApi'; import { SplitviewPanelApi } from '../api/splitviewPanelApi';
import { LayoutPriority, Orientation } from './core/splitview'; import { LayoutPriority, Orientation } from './core/splitview';
import { FunctionOrValue } from '../types'; import { FunctionOrValue } from '../types';
import { Emitter, Event } from '../events'; import { Emitter, Event } from '../events';
export interface ISplitviewPanel extends BasePanelViewExported<PanelApi> { export interface ISplitviewPanel
extends BasePanelViewExported<SplitviewPanelApi> {
readonly priority: LayoutPriority | undefined; readonly priority: LayoutPriority | undefined;
readonly minimumSize: number; readonly minimumSize: number;
readonly maximumSize: number; readonly maximumSize: number;
@ -17,7 +18,7 @@ export interface ISplitviewPanel extends BasePanelViewExported<PanelApi> {
} }
export abstract class SplitviewPanel export abstract class SplitviewPanel
extends BasePanelView<PanelApi> extends BasePanelView<SplitviewPanelApi>
implements ISerializableView, ISplitviewPanel { implements ISerializableView, ISplitviewPanel {
private _evaluatedMinimumSize = 0; private _evaluatedMinimumSize = 0;
private _evaluatedMaximumSize = Number.POSITIVE_INFINITY; private _evaluatedMaximumSize = Number.POSITIVE_INFINITY;
@ -77,7 +78,7 @@ export abstract class SplitviewPanel
} }
constructor(id: string, componentName: string) { constructor(id: string, componentName: string) {
super(id, componentName, new PanelApi(id)); super(id, componentName, new SplitviewPanelApi(id));
this.addDisposables( this.addDisposables(
this.api.onVisibilityChange((event) => { this.api.onVisibilityChange((event) => {