feat: api improvements

This commit is contained in:
mathuo 2022-05-01 21:08:59 +01:00
parent 432ab10e7f
commit 20b6db2202
No known key found for this signature in database
GPG Key ID: C6EEDEFD6CA07281
6 changed files with 48 additions and 44 deletions

View File

@ -22,7 +22,7 @@ describe('component.api', () => {
'onDidLayoutChange', 'onDidLayoutChange',
'onDidAddView', 'onDidAddView',
'onDidRemoveView', 'onDidRemoveView',
'getPanels', 'panels',
'focus', 'focus',
'resizeToFit', 'resizeToFit',
'toJSON', 'toJSON',
@ -54,7 +54,7 @@ describe('component.api', () => {
'onDidLayoutChange', 'onDidLayoutChange',
'onDidAddView', 'onDidAddView',
'onDidRemoveView', 'onDidRemoveView',
'getPanels', 'panels',
'focus', 'focus',
'resizeToFit', 'resizeToFit',
'toJSON', 'toJSON',

View File

@ -1,4 +1,5 @@
import { import {
DockviewDropEvent,
IDockviewComponent, IDockviewComponent,
SerializedDockview, SerializedDockview,
} from '../dockview/dockviewComponent'; } from '../dockview/dockviewComponent';
@ -71,6 +72,10 @@ export class SplitviewApi implements CommonApi<SerializedSplitview> {
return this.component.orientation; return this.component.orientation;
} }
get panels(): ISplitviewPanel[] {
return this.component.panels;
}
get onDidLayoutFromJSON(): Event<void> { get onDidLayoutFromJSON(): Event<void> {
return this.component.onDidLayoutFromJSON; return this.component.onDidLayoutFromJSON;
} }
@ -101,10 +106,6 @@ export class SplitviewApi implements CommonApi<SerializedSplitview> {
this.component.setVisible(panel, isVisible); this.component.setVisible(panel, isVisible);
} }
getPanels(): ISplitviewPanel[] {
return this.component.getPanels();
}
focus(): void { focus(): void {
this.component.focus(); this.component.focus();
} }
@ -159,6 +160,10 @@ export class PaneviewApi implements CommonApi<SerializedPaneview> {
return this.component.width; return this.component.width;
} }
get panels(): IPaneviewPanel[] {
return this.component.panels;
}
get onDidLayoutChange(): Event<void> { get onDidLayoutChange(): Event<void> {
return this.component.onDidLayoutChange; return this.component.onDidLayoutChange;
} }
@ -192,8 +197,8 @@ export class PaneviewApi implements CommonApi<SerializedPaneview> {
constructor(private readonly component: IPaneviewComponent) {} constructor(private readonly component: IPaneviewComponent) {}
getPanels(): IPaneviewPanel[] { addPanel(options: AddPaneviewComponentOptions): IPaneviewPanel {
return this.component.getPanels(); return this.component.addPanel(options);
} }
removePanel(panel: IPaneviewPanel): void { removePanel(panel: IPaneviewPanel): void {
@ -216,10 +221,6 @@ export class PaneviewApi implements CommonApi<SerializedPaneview> {
this.component.layout(width, height); this.component.layout(width, height);
} }
addPanel(options: AddPaneviewComponentOptions): void {
this.component.addPanel(options);
}
resizeToFit(): void { resizeToFit(): void {
this.component.resizeToFit(); this.component.resizeToFit();
} }
@ -409,6 +410,10 @@ export class DockviewApi implements CommonApi<SerializedDockview> {
return this.component.onDidLayoutChange; return this.component.onDidLayoutChange;
} }
get onDidDrop(): Event<DockviewDropEvent> {
return this.component.onDidDrop;
}
get panels(): IGroupPanel[] { get panels(): IGroupPanel[] {
return this.component.panels; return this.component.panels;
} }

View File

@ -16,8 +16,7 @@ export interface SuppressClosableEvent {
* 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 DockviewPanelApi export interface DockviewPanelApi extends Omit<GridviewPanelApi, 'setVisible'> {
extends Omit<GridviewPanelApi, 'setVisible' | 'visible'> {
readonly group: GroupviewPanel | undefined; readonly group: GroupviewPanel | undefined;
readonly isGroupActive: boolean; readonly isGroupActive: boolean;
readonly title: string; readonly title: string;

View File

@ -115,10 +115,10 @@ export abstract class DraggablePaneviewPanel extends PaneviewPanel {
return; return;
} }
const allPanels = containerApi.getPanels(); const allPanels = containerApi.panels;
const fromIndex = allPanels.indexOf(existingPanel); const fromIndex = allPanels.indexOf(existingPanel);
let toIndex = containerApi.getPanels().indexOf(this); let toIndex = containerApi.panels.indexOf(this);
if ( if (
event.position === Position.Left || event.position === Position.Left ||

View File

@ -98,6 +98,7 @@ export interface IPaneviewComponent extends IDisposable {
readonly height: number; readonly height: number;
readonly minimumSize: number; readonly minimumSize: number;
readonly maximumSize: number; readonly maximumSize: number;
readonly panels: IPaneviewPanel[];
readonly onDidAddView: Event<PaneviewPanel>; readonly onDidAddView: Event<PaneviewPanel>;
readonly onDidRemoveView: Event<PaneviewPanel>; readonly onDidRemoveView: Event<PaneviewPanel>;
readonly onDidDrop: Event<PaneviewDropEvent2>; readonly onDidDrop: Event<PaneviewDropEvent2>;
@ -109,7 +110,6 @@ export interface IPaneviewComponent extends IDisposable {
fromJSON(serializedPaneview: SerializedPaneview): void; fromJSON(serializedPaneview: SerializedPaneview): void;
resizeToFit(): void; resizeToFit(): void;
focus(): void; focus(): void;
getPanels(): IPaneviewPanel[];
removePanel(panel: IPaneviewPanel): void; removePanel(panel: IPaneviewPanel): void;
getPanel(id: string): IPaneviewPanel | undefined; getPanel(id: string): IPaneviewPanel | undefined;
movePanel(from: number, to: number): void; movePanel(from: number, to: number): void;
@ -139,6 +139,10 @@ export class PaneviewComponent
private readonly _onDidRemoveView = new Emitter<PaneviewPanel>(); private readonly _onDidRemoveView = new Emitter<PaneviewPanel>();
readonly onDidRemoveView = this._onDidRemoveView.event; readonly onDidRemoveView = this._onDidRemoveView.event;
get panels(): PaneviewPanel[] {
return this.paneview.getPanes();
}
set paneview(value: Paneview) { set paneview(value: Paneview) {
this._paneview = value; this._paneview = value;
@ -288,12 +292,8 @@ export class PaneviewComponent
return view; return view;
} }
getPanels(): PaneviewPanel[] {
return this.paneview.getPanes();
}
removePanel(panel: PaneviewPanel) { removePanel(panel: PaneviewPanel) {
const views = this.getPanels(); const views = this.panels;
const index = views.findIndex((_) => _ === panel); const index = views.findIndex((_) => _ === panel);
this.paneview.removePane(index); this.paneview.removePane(index);
@ -305,7 +305,7 @@ export class PaneviewComponent
} }
getPanel(id: string): PaneviewPanel | undefined { getPanel(id: string): PaneviewPanel | undefined {
return this.getPanels().find((view) => view.id === id); return this.panels.find((view) => view.id === id);
} }
layout(width: number, height: number): void { layout(width: number, height: number): void {

View File

@ -61,6 +61,7 @@ export interface ISplitviewComponent extends IDisposable {
readonly onDidAddView: Event<IView>; readonly onDidAddView: Event<IView>;
readonly onDidRemoveView: Event<IView>; readonly onDidRemoveView: Event<IView>;
readonly onDidLayoutFromJSON: Event<void>; readonly onDidLayoutFromJSON: Event<void>;
readonly panels: SplitviewPanel[];
updateOptions(options: Partial<SplitviewComponentUpdateOptions>): void; updateOptions(options: Partial<SplitviewComponentUpdateOptions>): void;
addPanel(options: AddSplitviewComponentOptions): void; addPanel(options: AddSplitviewComponentOptions): void;
layout(width: number, height: number): void; layout(width: number, height: number): void;
@ -72,7 +73,6 @@ export interface ISplitviewComponent extends IDisposable {
getPanel(id: string): ISplitviewPanel | undefined; getPanel(id: string): ISplitviewPanel | undefined;
setActive(view: ISplitviewPanel, skipFocus?: boolean): void; setActive(view: ISplitviewPanel, skipFocus?: boolean): void;
removePanel(panel: ISplitviewPanel, sizing?: Sizing): void; removePanel(panel: ISplitviewPanel, sizing?: Sizing): void;
getPanels(): SplitviewPanel[];
setVisible(panel: ISplitviewPanel, visible: boolean): void; setVisible(panel: ISplitviewPanel, visible: boolean): void;
movePanel(from: number, to: number): void; movePanel(from: number, to: number): void;
} }
@ -87,7 +87,7 @@ export class SplitviewComponent
private _disposable = new MutableDisposable(); private _disposable = new MutableDisposable();
private _splitview!: Splitview; private _splitview!: Splitview;
private _activePanel: SplitviewPanel | undefined; private _activePanel: SplitviewPanel | undefined;
private panels = new Map<string, IValueDisposable<SplitviewPanel>>(); private _panels = new Map<string, IValueDisposable<SplitviewPanel>>();
private _options: SplitviewComponentOptions; private _options: SplitviewComponentOptions;
private readonly _onDidLayoutfromJSON = new Emitter<void>(); private readonly _onDidLayoutfromJSON = new Emitter<void>();
@ -102,6 +102,10 @@ export class SplitviewComponent
private readonly _onDidLayoutChange = new Emitter<void>(); private readonly _onDidLayoutChange = new Emitter<void>();
readonly onDidLayoutChange: Event<void> = this._onDidLayoutChange.event; readonly onDidLayoutChange: Event<void> = this._onDidLayoutChange.event;
get panels(): SplitviewPanel[] {
return this.splitview.getViews();
}
get options() { get options() {
return this._options; return this._options;
} }
@ -149,7 +153,7 @@ export class SplitviewComponent
} }
get length() { get length() {
return this.panels.size; return this._panels.size;
} }
constructor( constructor(
@ -204,14 +208,14 @@ export class SplitviewComponent
} }
setVisible(panel: SplitviewPanel, visible: boolean) { setVisible(panel: SplitviewPanel, visible: boolean) {
const index = this.getPanels().indexOf(panel); const index = this.panels.indexOf(panel);
this.splitview.setViewVisible(index, visible); this.splitview.setViewVisible(index, visible);
} }
setActive(view: SplitviewPanel, skipFocus?: boolean) { setActive(view: SplitviewPanel, skipFocus?: boolean) {
this._activePanel = view; this._activePanel = view;
this.getPanels() this.panels
.filter((v) => v !== view) .filter((v) => v !== view)
.forEach((v) => { .forEach((v) => {
v.api._onDidActiveChange.fire({ isActive: false }); v.api._onDidActiveChange.fire({ isActive: false });
@ -225,12 +229,8 @@ export class SplitviewComponent
} }
} }
getPanels(): SplitviewPanel[] {
return this.splitview.getViews();
}
removePanel(panel: SplitviewPanel, sizing?: Sizing) { removePanel(panel: SplitviewPanel, sizing?: Sizing) {
const disposable = this.panels.get(panel.id); const disposable = this._panels.get(panel.id);
if (!disposable) { if (!disposable) {
throw new Error(`unknown splitview panel ${panel.id}`); throw new Error(`unknown splitview panel ${panel.id}`);
@ -239,23 +239,23 @@ export class SplitviewComponent
disposable.disposable.dispose(); disposable.disposable.dispose();
disposable.value.dispose(); disposable.value.dispose();
this.panels.delete(panel.id); this._panels.delete(panel.id);
const index = this.getPanels().findIndex((_) => _ === panel); const index = this.panels.findIndex((_) => _ === panel);
this.splitview.removeView(index, sizing); this.splitview.removeView(index, sizing);
const panels = this.getPanels(); const panels = this.panels;
if (panels.length > 0) { if (panels.length > 0) {
this.setActive(panels[panels.length - 1]); this.setActive(panels[panels.length - 1]);
} }
} }
getPanel(id: string): SplitviewPanel | undefined { getPanel(id: string): SplitviewPanel | undefined {
return this.getPanels().find((view) => view.id === id); return this.panels.find((view) => view.id === id);
} }
addPanel(options: AddSplitviewComponentOptions): void { addPanel(options: AddSplitviewComponentOptions): void {
if (this.panels.has(options.id)) { if (this._panels.has(options.id)) {
throw new Error(`panel ${options.id} already exists`); throw new Error(`panel ${options.id} already exists`);
} }
@ -322,7 +322,7 @@ export class SplitviewComponent
this.setActive(view, true); this.setActive(view, true);
}); });
this.panels.set(view.id, { disposable, value: view }); this._panels.set(view.id, { disposable, value: view });
} }
toJSON(): SerializedSplitview { toJSON(): SerializedSplitview {
@ -349,11 +349,11 @@ export class SplitviewComponent
fromJSON(serializedSplitview: SerializedSplitview): void { fromJSON(serializedSplitview: SerializedSplitview): void {
const { views, orientation, size, activeView } = serializedSplitview; const { views, orientation, size, activeView } = serializedSplitview;
for (const [_, value] of this.panels.entries()) { for (const [_, value] of this._panels.entries()) {
value.disposable.dispose(); value.disposable.dispose();
value.value.dispose(); value.value.dispose();
} }
this.panels.clear(); this._panels.clear();
this.splitview.dispose(); this.splitview.dispose();
const queue: Function[] = []; const queue: Function[] = [];
@ -366,7 +366,7 @@ export class SplitviewComponent
views: views.map((view) => { views: views.map((view) => {
const data = view.data; const data = view.data;
if (this.panels.has(data.id)) { if (this._panels.has(data.id)) {
throw new Error(`panel ${data.id} already exists`); throw new Error(`panel ${data.id} already exists`);
} }
@ -423,11 +423,11 @@ export class SplitviewComponent
} }
dispose() { dispose() {
for (const [_, value] of this.panels.entries()) { for (const [_, value] of this._panels.entries()) {
value.disposable.dispose(); value.disposable.dispose();
value.value.dispose(); value.value.dispose();
} }
this.panels.clear(); this._panels.clear();
this.splitview.dispose(); this.splitview.dispose();