mirror of
https://github.com/mathuo/dockview
synced 2025-02-22 08:05:45 +00:00
Merge pull request #282 from mpearson/mpearson/component-params-typing
feat: add optional type parameter for addPanel() params
This commit is contained in:
commit
bfc4faeed2
@ -21,7 +21,7 @@ class TestPanel implements IGridPanelView {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
get params(): Record<string, any> {
|
get params(): Parameters {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ import {
|
|||||||
ITabRenderer,
|
ITabRenderer,
|
||||||
IWatermarkRenderer,
|
IWatermarkRenderer,
|
||||||
} from '../../dockview/types';
|
} from '../../dockview/types';
|
||||||
import { PanelUpdateEvent } from '../../panel/types';
|
import { PanelUpdateEvent, Parameters } from '../../panel/types';
|
||||||
import {
|
import {
|
||||||
DockviewGroupPanelModel,
|
DockviewGroupPanelModel,
|
||||||
GroupOptions,
|
GroupOptions,
|
||||||
@ -178,7 +178,7 @@ export class TestPanel implements IDockviewPanel {
|
|||||||
return this._group!;
|
return this._group!;
|
||||||
}
|
}
|
||||||
|
|
||||||
get params(): Record<string, any> {
|
get params(): Parameters {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import {
|
|||||||
AddPanelOptions,
|
AddPanelOptions,
|
||||||
MovementOptions,
|
MovementOptions,
|
||||||
} from '../dockview/options';
|
} from '../dockview/options';
|
||||||
|
import { Parameters } from '../panel/types';
|
||||||
import { Direction } from '../gridview/baseComponentGridview';
|
import { Direction } from '../gridview/baseComponentGridview';
|
||||||
import {
|
import {
|
||||||
AddComponentOptions,
|
AddComponentOptions,
|
||||||
@ -431,7 +432,7 @@ export class DockviewApi implements CommonApi<SerializedDockview> {
|
|||||||
this.component.layout(width, height, force);
|
this.component.layout(width, height, force);
|
||||||
}
|
}
|
||||||
|
|
||||||
addPanel(options: AddPanelOptions): IDockviewPanel {
|
addPanel<P extends object = Parameters>(options: AddPanelOptions<P>): IDockviewPanel {
|
||||||
return this.component.addPanel(options);
|
return this.component.addPanel(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@ import {
|
|||||||
isPanelOptionsWithPanel,
|
isPanelOptionsWithPanel,
|
||||||
MovementOptions,
|
MovementOptions,
|
||||||
} from './options';
|
} from './options';
|
||||||
|
import { Parameters } from '../panel/types';
|
||||||
import {
|
import {
|
||||||
BaseGrid,
|
BaseGrid,
|
||||||
Direction,
|
Direction,
|
||||||
@ -96,7 +97,7 @@ export interface IDockviewComponent extends IBaseGrid<DockviewGroupPanel> {
|
|||||||
doSetGroupActive: (group: DockviewGroupPanel, skipFocus?: boolean) => void;
|
doSetGroupActive: (group: DockviewGroupPanel, skipFocus?: boolean) => void;
|
||||||
removeGroup: (group: DockviewGroupPanel) => void;
|
removeGroup: (group: DockviewGroupPanel) => void;
|
||||||
options: DockviewComponentOptions;
|
options: DockviewComponentOptions;
|
||||||
addPanel(options: AddPanelOptions): IDockviewPanel;
|
addPanel<P extends object = Parameters>(options: AddPanelOptions<P>): IDockviewPanel;
|
||||||
removePanel(panel: IDockviewPanel): void;
|
removePanel(panel: IDockviewPanel): void;
|
||||||
getGroupPanel: (id: string) => IDockviewPanel | undefined;
|
getGroupPanel: (id: string) => IDockviewPanel | undefined;
|
||||||
createWatermarkComponent(): IWatermarkRenderer;
|
createWatermarkComponent(): IWatermarkRenderer;
|
||||||
@ -495,7 +496,7 @@ export class DockviewComponent
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
addPanel(options: AddPanelOptions): IDockviewPanel {
|
addPanel<P extends object = Parameters>(options: AddPanelOptions<P>): IDockviewPanel {
|
||||||
if (this.panels.find((_) => _.id === options.id)) {
|
if (this.panels.find((_) => _.id === options.id)) {
|
||||||
throw new Error(`panel with id ${options.id} already exists`);
|
throw new Error(`panel with id ${options.id} already exists`);
|
||||||
}
|
}
|
||||||
@ -913,8 +914,8 @@ export class DockviewComponent
|
|||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
private createPanel(
|
private createPanel<P extends object = Parameters>(
|
||||||
options: AddPanelOptions,
|
options: AddPanelOptions<P>,
|
||||||
group: DockviewGroupPanel
|
group: DockviewGroupPanel
|
||||||
): IDockviewPanel {
|
): IDockviewPanel {
|
||||||
const contentComponent = options.component;
|
const contentComponent = options.component;
|
||||||
|
@ -14,8 +14,8 @@ export interface IDockviewPanel extends IDisposable, IPanel {
|
|||||||
readonly view: IDockviewPanelModel;
|
readonly view: IDockviewPanelModel;
|
||||||
readonly group: DockviewGroupPanel;
|
readonly group: DockviewGroupPanel;
|
||||||
readonly api: DockviewPanelApi;
|
readonly api: DockviewPanelApi;
|
||||||
readonly title: string | undefined;
|
readonly title: string;
|
||||||
readonly params: Record<string, any> | undefined;
|
readonly params: Parameters | undefined;
|
||||||
updateParentGroup(group: DockviewGroupPanel, isGroupActive: boolean): void;
|
updateParentGroup(group: DockviewGroupPanel, isGroupActive: boolean): void;
|
||||||
init(params: IGroupPanelInitParameters): void;
|
init(params: IGroupPanelInitParameters): void;
|
||||||
toJSON(): GroupviewPanelState;
|
toJSON(): GroupviewPanelState;
|
||||||
|
@ -8,6 +8,7 @@ import {
|
|||||||
IWatermarkRenderer,
|
IWatermarkRenderer,
|
||||||
DockviewDropTargets,
|
DockviewDropTargets,
|
||||||
} from './types';
|
} from './types';
|
||||||
|
import { Parameters } from '../panel/types';
|
||||||
import {
|
import {
|
||||||
DockviewGroupPanel,
|
DockviewGroupPanel,
|
||||||
DockviewGroupPanelApi,
|
DockviewGroupPanelApi,
|
||||||
@ -86,10 +87,10 @@ export interface DockviewComponentOptions extends DockviewRenderFunctions {
|
|||||||
parentElement?: HTMLElement;
|
parentElement?: HTMLElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PanelOptions {
|
export interface PanelOptions<P extends object = Parameters> {
|
||||||
component: string;
|
component: string;
|
||||||
tabComponent?: string;
|
tabComponent?: string;
|
||||||
params?: { [key: string]: any };
|
params?: P;
|
||||||
id: string;
|
id: string;
|
||||||
title?: string;
|
title?: string;
|
||||||
}
|
}
|
||||||
@ -131,8 +132,8 @@ export function isPanelOptionsWithGroup(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface AddPanelOptions
|
export interface AddPanelOptions<P extends object = Parameters>
|
||||||
extends Omit<PanelOptions, 'component' | 'tabComponent'> {
|
extends Omit<PanelOptions<P>, 'component' | 'tabComponent'> {
|
||||||
component: string;
|
component: string;
|
||||||
tabComponent?: string;
|
tabComponent?: string;
|
||||||
position?: AddPanelPositionOptions;
|
position?: AddPanelPositionOptions;
|
||||||
|
@ -5,13 +5,14 @@ import {
|
|||||||
PanelUpdateEvent,
|
PanelUpdateEvent,
|
||||||
PanelInitParameters,
|
PanelInitParameters,
|
||||||
IPanel,
|
IPanel,
|
||||||
|
Parameters,
|
||||||
} from '../panel/types';
|
} from '../panel/types';
|
||||||
import { PanelApi, PanelApiImpl } from '../api/panelApi';
|
import { PanelApi, PanelApiImpl } from '../api/panelApi';
|
||||||
|
|
||||||
export interface BasePanelViewState {
|
export interface BasePanelViewState {
|
||||||
readonly id: string;
|
readonly id: string;
|
||||||
readonly component: string;
|
readonly component: string;
|
||||||
readonly params?: Record<string, any>;
|
readonly params?: Parameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface BasePanelViewExported<T extends PanelApi> {
|
export interface BasePanelViewExported<T extends PanelApi> {
|
||||||
@ -19,7 +20,7 @@ export interface BasePanelViewExported<T extends PanelApi> {
|
|||||||
readonly api: T;
|
readonly api: T;
|
||||||
readonly width: number;
|
readonly width: number;
|
||||||
readonly height: number;
|
readonly height: number;
|
||||||
readonly params: Record<string, any> | undefined;
|
readonly params: Parameters | undefined;
|
||||||
focus(): void;
|
focus(): void;
|
||||||
toJSON(): object;
|
toJSON(): object;
|
||||||
update(event: PanelUpdateEvent): void;
|
update(event: PanelUpdateEvent): void;
|
||||||
@ -50,7 +51,7 @@ export abstract class BasePanelView<T extends PanelApiImpl>
|
|||||||
return this._height;
|
return this._height;
|
||||||
}
|
}
|
||||||
|
|
||||||
get params(): Record<string, any> | undefined {
|
get params(): Parameters | undefined {
|
||||||
return this._params?.params;
|
return this._params?.params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import * as ReactDOM from 'react-dom';
|
import * as ReactDOM from 'react-dom';
|
||||||
import { IFrameworkPart, IDockviewDisposable } from 'dockview-core';
|
import { IFrameworkPart, IDockviewDisposable, Parameters } from 'dockview-core';
|
||||||
|
|
||||||
export interface ReactPortalStore {
|
export interface ReactPortalStore {
|
||||||
addPortal: (portal: React.ReactPortal) => IDockviewDisposable;
|
addPortal: (portal: React.ReactPortal) => IDockviewDisposable;
|
||||||
@ -66,7 +66,7 @@ export const ReactPartContext = React.createContext<{}>({});
|
|||||||
export class ReactPart<P extends object, C extends object = {}>
|
export class ReactPart<P extends object, C extends object = {}>
|
||||||
implements IFrameworkPart
|
implements IFrameworkPart
|
||||||
{
|
{
|
||||||
private _initialProps: Record<string, any> = {};
|
private _initialProps: Parameters = {};
|
||||||
private componentInstance?: IPanelWrapperRef;
|
private componentInstance?: IPanelWrapperRef;
|
||||||
private ref?: {
|
private ref?: {
|
||||||
portal: React.ReactPortal;
|
portal: React.ReactPortal;
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
import { Parameters } from 'dockview-core';
|
||||||
|
|
||||||
export interface PanelCollection<T extends object> {
|
export interface PanelCollection<T extends object> {
|
||||||
[name: string]: React.FunctionComponent<T>;
|
[name: string]: React.FunctionComponent<T>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PanelParameters<T extends {} = Record<string, any>> {
|
export interface PanelParameters<T extends {} = Parameters> {
|
||||||
params: T;
|
params: T;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user