mirror of
https://github.com/mathuo/dockview
synced 2025-02-18 22:25:46 +00:00
feat: addPanel generics
This commit is contained in:
parent
bfc4faeed2
commit
6665c61a95
@ -118,7 +118,7 @@ export class SplitviewApi implements CommonApi<SerializedSplitview> {
|
||||
return this.component.layout(width, height);
|
||||
}
|
||||
|
||||
addPanel(options: AddSplitviewComponentOptions): ISplitviewPanel {
|
||||
addPanel<T extends object = Parameters>(options: AddSplitviewComponentOptions<T>): ISplitviewPanel {
|
||||
return this.component.addPanel(options);
|
||||
}
|
||||
|
||||
@ -213,7 +213,7 @@ export class PaneviewApi implements CommonApi<SerializedPaneview> {
|
||||
this.component.layout(width, height);
|
||||
}
|
||||
|
||||
addPanel(options: AddPaneviewComponentOptions): IPaneviewPanel {
|
||||
addPanel<T extends object = Parameters>(options: AddPaneviewComponentOptions<T>): IPaneviewPanel {
|
||||
return this.component.addPanel(options);
|
||||
}
|
||||
|
||||
@ -297,7 +297,7 @@ export class GridviewApi implements CommonApi<SerializedGridviewComponent> {
|
||||
this.component.layout(width, height, force);
|
||||
}
|
||||
|
||||
addPanel(options: AddComponentOptions): IGridviewPanel {
|
||||
addPanel<T extends object = Parameters>(options: AddComponentOptions<T>): IGridviewPanel {
|
||||
return this.component.addPanel(options);
|
||||
}
|
||||
|
||||
@ -432,7 +432,7 @@ export class DockviewApi implements CommonApi<SerializedDockview> {
|
||||
this.component.layout(width, height, force);
|
||||
}
|
||||
|
||||
addPanel<P extends object = Parameters>(options: AddPanelOptions<P>): IDockviewPanel {
|
||||
addPanel<T extends object = Parameters>(options: AddPanelOptions<T>): IDockviewPanel {
|
||||
return this.component.addPanel(options);
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,6 @@ import {
|
||||
isPanelOptionsWithPanel,
|
||||
MovementOptions,
|
||||
} from './options';
|
||||
import { Parameters } from '../panel/types';
|
||||
import {
|
||||
BaseGrid,
|
||||
Direction,
|
||||
@ -45,6 +44,7 @@ import {
|
||||
import { DockviewGroupPanel, IDockviewGroupPanel } from './dockviewGroupPanel';
|
||||
import { DockviewPanelModel } from './dockviewPanelModel';
|
||||
import { getPanelData } from '../dnd/dataTransfer';
|
||||
import { Parameters } from '../panel/types';
|
||||
|
||||
export interface PanelReference {
|
||||
update: (event: { params: { [key: string]: any } }) => void;
|
||||
@ -97,7 +97,9 @@ export interface IDockviewComponent extends IBaseGrid<DockviewGroupPanel> {
|
||||
doSetGroupActive: (group: DockviewGroupPanel, skipFocus?: boolean) => void;
|
||||
removeGroup: (group: DockviewGroupPanel) => void;
|
||||
options: DockviewComponentOptions;
|
||||
addPanel<P extends object = Parameters>(options: AddPanelOptions<P>): IDockviewPanel;
|
||||
addPanel<T extends object = Parameters>(
|
||||
options: AddPanelOptions<T>
|
||||
): IDockviewPanel;
|
||||
removePanel(panel: IDockviewPanel): void;
|
||||
getGroupPanel: (id: string) => IDockviewPanel | undefined;
|
||||
createWatermarkComponent(): IWatermarkRenderer;
|
||||
@ -496,7 +498,9 @@ export class DockviewComponent
|
||||
}
|
||||
}
|
||||
|
||||
addPanel<P extends object = Parameters>(options: AddPanelOptions<P>): IDockviewPanel {
|
||||
addPanel<T extends object = Parameters>(
|
||||
options: AddPanelOptions<T>
|
||||
): IDockviewPanel {
|
||||
if (this.panels.find((_) => _.id === options.id)) {
|
||||
throw new Error(`panel with id ${options.id} already exists`);
|
||||
}
|
||||
@ -914,8 +918,8 @@ export class DockviewComponent
|
||||
return view;
|
||||
}
|
||||
|
||||
private createPanel<P extends object = Parameters>(
|
||||
options: AddPanelOptions<P>,
|
||||
private createPanel(
|
||||
options: AddPanelOptions,
|
||||
group: DockviewGroupPanel
|
||||
): IDockviewPanel {
|
||||
const contentComponent = options.component;
|
||||
|
@ -14,7 +14,7 @@ export interface IDockviewPanel extends IDisposable, IPanel {
|
||||
readonly view: IDockviewPanelModel;
|
||||
readonly group: DockviewGroupPanel;
|
||||
readonly api: DockviewPanelApi;
|
||||
readonly title: string;
|
||||
readonly title: string | undefined;
|
||||
readonly params: Parameters | undefined;
|
||||
updateParentGroup(group: DockviewGroupPanel, isGroupActive: boolean): void;
|
||||
init(params: IGroupPanelInitParameters): void;
|
||||
|
@ -21,7 +21,7 @@ import {
|
||||
GridPanelViewState,
|
||||
IGridviewPanel,
|
||||
} from './gridviewPanel';
|
||||
import { BaseComponentOptions } from '../panel/types';
|
||||
import { BaseComponentOptions, Parameters } from '../panel/types';
|
||||
import { Orientation, Sizing } from '../splitview/splitview';
|
||||
import { createComponent } from '../panel/componentFactory';
|
||||
import { Emitter, Event } from '../events';
|
||||
@ -32,7 +32,8 @@ export interface SerializedGridviewComponent {
|
||||
activePanel?: string;
|
||||
}
|
||||
|
||||
export interface AddComponentOptions extends BaseComponentOptions {
|
||||
export interface AddComponentOptions<T extends object = Parameters>
|
||||
extends BaseComponentOptions<T> {
|
||||
minimumWidth?: number;
|
||||
maximumWidth?: number;
|
||||
minimumHeight?: number;
|
||||
@ -57,7 +58,9 @@ export interface IGridviewComponent extends IBaseGrid<GridviewPanel> {
|
||||
readonly orientation: Orientation;
|
||||
readonly onDidLayoutFromJSON: Event<void>;
|
||||
updateOptions(options: Partial<GridviewComponentUpdateOptions>): void;
|
||||
addPanel(options: AddComponentOptions): IGridviewPanel;
|
||||
addPanel<T extends object = Parameters>(
|
||||
options: AddComponentOptions<T>
|
||||
): IGridviewPanel;
|
||||
removePanel(panel: IGridviewPanel, sizing?: Sizing): void;
|
||||
focus(): void;
|
||||
fromJSON(serializedGridview: SerializedGridviewComponent): void;
|
||||
@ -276,7 +279,9 @@ export class GridviewComponent
|
||||
this.doAddGroup(removedPanel, relativeLocation, options.size);
|
||||
}
|
||||
|
||||
public addPanel(options: AddComponentOptions): IGridviewPanel {
|
||||
public addPanel<T extends object = Parameters>(
|
||||
options: AddComponentOptions<T>
|
||||
): IGridviewPanel {
|
||||
let relativeLocation: number[] = options.location || [0];
|
||||
|
||||
if (options.position?.referencePanel) {
|
||||
|
@ -29,10 +29,10 @@ export interface IFrameworkPart extends IDisposable {
|
||||
update(params: Parameters): void;
|
||||
}
|
||||
|
||||
export interface BaseComponentOptions {
|
||||
export interface BaseComponentOptions<T extends object = Parameters> {
|
||||
id: string;
|
||||
component: string;
|
||||
params?: Parameters;
|
||||
params?: T;
|
||||
snap?: boolean;
|
||||
priority?: LayoutPriority;
|
||||
size?: number;
|
||||
|
@ -23,6 +23,7 @@ import { DefaultHeader } from './defaultPaneviewHeader';
|
||||
import { sequentialNumberGenerator } from '../math';
|
||||
import { PaneTransfer } from '../dnd/dataTransfer';
|
||||
import { Resizable } from '../resizable';
|
||||
import { Parameters } from '../panel/types';
|
||||
|
||||
const nextLayoutId = sequentialNumberGenerator();
|
||||
|
||||
@ -87,13 +88,11 @@ export class PaneFramework extends DraggablePaneviewPanel {
|
||||
}
|
||||
}
|
||||
|
||||
export interface AddPaneviewComponentOptions {
|
||||
export interface AddPaneviewComponentOptions<T extends object = Parameters> {
|
||||
id: string;
|
||||
component: string;
|
||||
headerComponent?: string;
|
||||
params?: {
|
||||
[key: string]: any;
|
||||
};
|
||||
params?: T;
|
||||
minimumBodySize?: number;
|
||||
maximumBodySize?: number;
|
||||
isExpanded?: boolean;
|
||||
@ -115,7 +114,9 @@ export interface IPaneviewComponent extends IDisposable {
|
||||
readonly onDidDrop: Event<PaneviewDropEvent>;
|
||||
readonly onDidLayoutChange: Event<void>;
|
||||
readonly onDidLayoutFromJSON: Event<void>;
|
||||
addPanel(options: AddPaneviewComponentOptions): IPaneviewPanel;
|
||||
addPanel<T extends object = Parameters>(
|
||||
options: AddPaneviewComponentOptions<T>
|
||||
): IPaneviewPanel;
|
||||
layout(width: number, height: number): void;
|
||||
toJSON(): SerializedPaneview;
|
||||
fromJSON(serializedPaneview: SerializedPaneview): void;
|
||||
@ -233,7 +234,9 @@ export class PaneviewComponent extends Resizable implements IPaneviewComponent {
|
||||
this._options = { ...this.options, ...options };
|
||||
}
|
||||
|
||||
addPanel(options: AddPaneviewComponentOptions): IPaneviewPanel {
|
||||
addPanel<T extends object = Parameters>(
|
||||
options: AddPaneviewComponentOptions<T>
|
||||
): IPaneviewPanel {
|
||||
const body = createComponent(
|
||||
options.id,
|
||||
options.component,
|
||||
|
@ -11,7 +11,7 @@ import {
|
||||
Splitview,
|
||||
} from './splitview';
|
||||
import { SplitviewComponentOptions } from './options';
|
||||
import { BaseComponentOptions } from '../panel/types';
|
||||
import { BaseComponentOptions, Parameters } from '../panel/types';
|
||||
import { Emitter, Event } from '../events';
|
||||
import { SplitviewPanel, ISplitviewPanel } from './splitviewPanel';
|
||||
import { createComponent } from '../panel/componentFactory';
|
||||
@ -39,7 +39,8 @@ export interface SerializedSplitview {
|
||||
views: SerializedSplitviewPanel[];
|
||||
}
|
||||
|
||||
export interface AddSplitviewComponentOptions extends BaseComponentOptions {
|
||||
export interface AddSplitviewComponentOptions<T extends Parameters = Parameters>
|
||||
extends BaseComponentOptions<T> {
|
||||
index?: number;
|
||||
minimumSize?: number;
|
||||
maximumSize?: number;
|
||||
@ -62,7 +63,9 @@ export interface ISplitviewComponent extends IDisposable {
|
||||
readonly onDidLayoutFromJSON: Event<void>;
|
||||
readonly panels: SplitviewPanel[];
|
||||
updateOptions(options: Partial<SplitviewComponentUpdateOptions>): void;
|
||||
addPanel(options: AddSplitviewComponentOptions): ISplitviewPanel;
|
||||
addPanel<T extends object = Parameters>(
|
||||
options: AddSplitviewComponentOptions<T>
|
||||
): ISplitviewPanel;
|
||||
layout(width: number, height: number): void;
|
||||
onDidLayoutChange: Event<void>;
|
||||
toJSON(): SerializedSplitview;
|
||||
@ -248,7 +251,9 @@ export class SplitviewComponent
|
||||
return this.panels.find((view) => view.id === id);
|
||||
}
|
||||
|
||||
addPanel(options: AddSplitviewComponentOptions): SplitviewPanel {
|
||||
addPanel<T extends object = Parameters>(
|
||||
options: AddSplitviewComponentOptions<T>
|
||||
): SplitviewPanel {
|
||||
if (this._panels.has(options.id)) {
|
||||
throw new Error(`panel ${options.id} already exists`);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user