mirror of
https://github.com/mathuo/dockview
synced 2025-02-02 22:45:48 +00:00
feat: title and parameter events
This commit is contained in:
parent
1c33ee46a2
commit
c55c3e4a2f
@ -4628,12 +4628,6 @@ describe('dockviewComponent', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('that emits onDidPanelTitleChange and onDidLayoutChange when the panel set a title', () => {
|
test('that emits onDidPanelTitleChange and onDidLayoutChange when the panel set a title', () => {
|
||||||
const container = document.createElement('div');
|
|
||||||
|
|
||||||
const didPanelTitleChangeHandler = jest.fn();
|
|
||||||
const { dispose: disposeDidPanelTitleChangeHandler } =
|
|
||||||
dockview.onDidPanelTitleChange(didPanelTitleChangeHandler);
|
|
||||||
|
|
||||||
const didLayoutChangeHandler = jest.fn();
|
const didLayoutChangeHandler = jest.fn();
|
||||||
const { dispose: disposeDidLayoutChangeHandler } =
|
const { dispose: disposeDidLayoutChangeHandler } =
|
||||||
dockview.onDidLayoutChange(didLayoutChangeHandler);
|
dockview.onDidLayoutChange(didLayoutChangeHandler);
|
||||||
@ -4642,20 +4636,12 @@ describe('dockviewComponent', () => {
|
|||||||
|
|
||||||
jest.runAllTimers();
|
jest.runAllTimers();
|
||||||
|
|
||||||
expect(didPanelTitleChangeHandler).toHaveBeenCalledTimes(1);
|
|
||||||
expect(didLayoutChangeHandler).toHaveBeenCalledTimes(1);
|
expect(didLayoutChangeHandler).toHaveBeenCalledTimes(1);
|
||||||
|
|
||||||
disposeDidPanelTitleChangeHandler();
|
|
||||||
disposeDidLayoutChangeHandler();
|
disposeDidLayoutChangeHandler();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('that emits onDidPanelParametersChange and onDidLayoutChange when the panel updates parameters', () => {
|
test('that emits onDidPanelParametersChange and onDidLayoutChange when the panel updates parameters', () => {
|
||||||
const didPanelParametersChangeHandler = jest.fn();
|
|
||||||
const { dispose: disposeDidPanelParametersChangeHandler } =
|
|
||||||
dockview.onDidPanelParametersChange(
|
|
||||||
didPanelParametersChangeHandler
|
|
||||||
);
|
|
||||||
|
|
||||||
const didLayoutChangeHandler = jest.fn();
|
const didLayoutChangeHandler = jest.fn();
|
||||||
const { dispose: disposeDidLayoutChangeHandler } =
|
const { dispose: disposeDidLayoutChangeHandler } =
|
||||||
dockview.onDidLayoutChange(didLayoutChangeHandler);
|
dockview.onDidLayoutChange(didLayoutChangeHandler);
|
||||||
@ -4664,10 +4650,8 @@ describe('dockviewComponent', () => {
|
|||||||
|
|
||||||
jest.runAllTimers();
|
jest.runAllTimers();
|
||||||
|
|
||||||
expect(didPanelParametersChangeHandler).toHaveBeenCalledTimes(1);
|
|
||||||
expect(didLayoutChangeHandler).toHaveBeenCalledTimes(1);
|
expect(didLayoutChangeHandler).toHaveBeenCalledTimes(1);
|
||||||
|
|
||||||
disposeDidPanelParametersChangeHandler();
|
|
||||||
disposeDidLayoutChangeHandler();
|
disposeDidLayoutChangeHandler();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -38,11 +38,11 @@ import {
|
|||||||
FocusEvent,
|
FocusEvent,
|
||||||
VisibilityEvent,
|
VisibilityEvent,
|
||||||
ActiveEvent,
|
ActiveEvent,
|
||||||
HiddenEvent,
|
|
||||||
WillFocusEvent,
|
WillFocusEvent,
|
||||||
} from '../../api/panelApi';
|
} from '../../api/panelApi';
|
||||||
import { Position } from '../../dnd/droptarget';
|
import { Position } from '../../dnd/droptarget';
|
||||||
import { Emitter, Event } from '../../events';
|
import { Emitter, Event } from '../../events';
|
||||||
|
import { fromPartial } from '@total-typescript/shoehorn';
|
||||||
|
|
||||||
enum GroupChangeKind2 {
|
enum GroupChangeKind2 {
|
||||||
ADD_PANEL,
|
ADD_PANEL,
|
||||||
@ -269,11 +269,11 @@ describe('dockviewGroupPanelModel', () => {
|
|||||||
|
|
||||||
options = {};
|
options = {};
|
||||||
|
|
||||||
panelApi = {
|
panelApi = fromPartial<DockviewPanelApi>({
|
||||||
renderer: 'onlyWhenVisibile',
|
renderer: 'onlyWhenVisibile',
|
||||||
onDidTitleChange: new Emitter().event,
|
onDidTitleChange: new Emitter().event,
|
||||||
onUpdateParameters: new Emitter().event,
|
onDidParametersChange: new Emitter().event,
|
||||||
} as DockviewPanelApi;
|
});
|
||||||
|
|
||||||
dockview = (<Partial<DockviewComponent>>{
|
dockview = (<Partial<DockviewComponent>>{
|
||||||
options: { parentElement: document.createElement('div') },
|
options: { parentElement: document.createElement('div') },
|
||||||
|
@ -24,8 +24,7 @@ export interface PanelApi {
|
|||||||
readonly onDidFocusChange: Event<FocusEvent>;
|
readonly onDidFocusChange: Event<FocusEvent>;
|
||||||
readonly onDidVisibilityChange: Event<VisibilityEvent>;
|
readonly onDidVisibilityChange: Event<VisibilityEvent>;
|
||||||
readonly onDidActiveChange: Event<ActiveEvent>;
|
readonly onDidActiveChange: Event<ActiveEvent>;
|
||||||
readonly onDidHiddenChange: Event<HiddenEvent>;
|
readonly onDidParametersChange: Event<Parameters>;
|
||||||
readonly onUpdateParameters: Event<Parameters>;
|
|
||||||
setActive(): void;
|
setActive(): void;
|
||||||
setVisible(isVisible: boolean): void;
|
setVisible(isVisible: boolean): void;
|
||||||
updateParameters(parameters: Parameters): void;
|
updateParameters(parameters: Parameters): void;
|
||||||
@ -55,6 +54,8 @@ export interface PanelApi {
|
|||||||
readonly height: number;
|
readonly height: number;
|
||||||
|
|
||||||
readonly onWillFocus: Event<WillFocusEvent>;
|
readonly onWillFocus: Event<WillFocusEvent>;
|
||||||
|
|
||||||
|
getParameters<T extends Parameters = Parameters>(): T;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class WillFocusEvent extends DockviewEvent {
|
export class WillFocusEvent extends DockviewEvent {
|
||||||
@ -72,6 +73,7 @@ export class PanelApiImpl extends CompositeDisposable implements PanelApi {
|
|||||||
private _isVisible = true;
|
private _isVisible = true;
|
||||||
private _width = 0;
|
private _width = 0;
|
||||||
private _height = 0;
|
private _height = 0;
|
||||||
|
private _parameters: Parameters = {};
|
||||||
|
|
||||||
private readonly panelUpdatesDisposable = new MutableDisposable();
|
private readonly panelUpdatesDisposable = new MutableDisposable();
|
||||||
|
|
||||||
@ -99,9 +101,9 @@ export class PanelApiImpl extends CompositeDisposable implements PanelApi {
|
|||||||
readonly _onActiveChange = new Emitter<void>();
|
readonly _onActiveChange = new Emitter<void>();
|
||||||
readonly onActiveChange: Event<void> = this._onActiveChange.event;
|
readonly onActiveChange: Event<void> = this._onActiveChange.event;
|
||||||
|
|
||||||
readonly _onUpdateParameters = new Emitter<Parameters>();
|
readonly _onDidParametersChange = new Emitter<Parameters>();
|
||||||
readonly onUpdateParameters: Event<Parameters> =
|
readonly onDidParametersChange: Event<Parameters> =
|
||||||
this._onUpdateParameters.event;
|
this._onDidParametersChange.event;
|
||||||
|
|
||||||
get isFocused(): boolean {
|
get isFocused(): boolean {
|
||||||
return this._isFocused;
|
return this._isFocused;
|
||||||
@ -149,13 +151,18 @@ export class PanelApiImpl extends CompositeDisposable implements PanelApi {
|
|||||||
this._onActiveChange,
|
this._onActiveChange,
|
||||||
this._onWillFocus,
|
this._onWillFocus,
|
||||||
this._onWillVisibilityChange,
|
this._onWillVisibilityChange,
|
||||||
this._onUpdateParameters
|
this._onDidParametersChange
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getParameters<T extends Parameters = Parameters>(): T {
|
||||||
|
return this._parameters as T;
|
||||||
|
}
|
||||||
|
|
||||||
public initialize(panel: IPanel): void {
|
public initialize(panel: IPanel): void {
|
||||||
this.panelUpdatesDisposable.value = this._onUpdateParameters.event(
|
this.panelUpdatesDisposable.value = this._onDidParametersChange.event(
|
||||||
(parameters) => {
|
(parameters) => {
|
||||||
|
this._parameters = parameters;
|
||||||
panel.update({
|
panel.update({
|
||||||
params: parameters,
|
params: parameters,
|
||||||
});
|
});
|
||||||
@ -172,6 +179,6 @@ export class PanelApiImpl extends CompositeDisposable implements PanelApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateParameters(parameters: Parameters): void {
|
updateParameters(parameters: Parameters): void {
|
||||||
this._onUpdateParameters.fire(parameters);
|
this._onDidParametersChange.fire(parameters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -361,14 +361,6 @@ export class DockviewComponent
|
|||||||
private readonly _onDidAddPanel = new Emitter<IDockviewPanel>();
|
private readonly _onDidAddPanel = new Emitter<IDockviewPanel>();
|
||||||
readonly onDidAddPanel: Event<IDockviewPanel> = this._onDidAddPanel.event;
|
readonly onDidAddPanel: Event<IDockviewPanel> = this._onDidAddPanel.event;
|
||||||
|
|
||||||
private readonly _onDidPanelTitleChange = new Emitter<TitleEvent>();
|
|
||||||
readonly onDidPanelTitleChange: Event<TitleEvent> =
|
|
||||||
this._onDidPanelTitleChange.event;
|
|
||||||
|
|
||||||
private readonly _onDidPanelParametersChange = new Emitter<Parameters>();
|
|
||||||
readonly onDidPanelParametersChange: Event<Parameters> =
|
|
||||||
this._onDidPanelParametersChange.event;
|
|
||||||
|
|
||||||
private readonly _onDidLayoutFromJSON = new Emitter<void>();
|
private readonly _onDidLayoutFromJSON = new Emitter<void>();
|
||||||
readonly onDidLayoutFromJSON: Event<void> = this._onDidLayoutFromJSON.event;
|
readonly onDidLayoutFromJSON: Event<void> = this._onDidLayoutFromJSON.event;
|
||||||
|
|
||||||
@ -495,9 +487,7 @@ export class DockviewComponent
|
|||||||
Event.any(
|
Event.any(
|
||||||
this.onDidAddPanel,
|
this.onDidAddPanel,
|
||||||
this.onDidRemovePanel,
|
this.onDidRemovePanel,
|
||||||
this.onDidActivePanelChange,
|
this.onDidActivePanelChange
|
||||||
this.onDidPanelTitleChange,
|
|
||||||
this.onDidPanelParametersChange
|
|
||||||
)(() => {
|
)(() => {
|
||||||
this._bufferOnDidLayoutChange.fire();
|
this._bufferOnDidLayoutChange.fire();
|
||||||
}),
|
}),
|
||||||
@ -2187,11 +2177,11 @@ export class DockviewComponent
|
|||||||
this._onDidActivePanelChange.fire(event.panel);
|
this._onDidActivePanelChange.fire(event.panel);
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
view.model.onDidPanelTitleChange((event) => {
|
Event.any(
|
||||||
this._onDidPanelTitleChange.fire(event);
|
view.model.onDidPanelTitleChange,
|
||||||
}),
|
view.model.onDidPanelParametersChange
|
||||||
view.model.onDidPanelParametersChange((event) => {
|
)(() => {
|
||||||
this._onDidPanelParametersChange.fire(event);
|
this._bufferOnDidLayoutChange.fire();
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -239,8 +239,6 @@ export class DockviewGroupPanelModel
|
|||||||
private _leftHeaderActions: IHeaderActionsRenderer | undefined;
|
private _leftHeaderActions: IHeaderActionsRenderer | undefined;
|
||||||
private _prefixHeaderActions: IHeaderActionsRenderer | undefined;
|
private _prefixHeaderActions: IHeaderActionsRenderer | undefined;
|
||||||
|
|
||||||
private _panelDisposables = new Map<string, IDisposable[]>();
|
|
||||||
|
|
||||||
private _location: DockviewGroupLocation = { type: 'grid' };
|
private _location: DockviewGroupLocation = { type: 'grid' };
|
||||||
|
|
||||||
private mostRecentlyUsed: IDockviewPanel[] = [];
|
private mostRecentlyUsed: IDockviewPanel[] = [];
|
||||||
@ -253,6 +251,7 @@ export class DockviewGroupPanelModel
|
|||||||
private _height = 0;
|
private _height = 0;
|
||||||
|
|
||||||
private _panels: IDockviewPanel[] = [];
|
private _panels: IDockviewPanel[] = [];
|
||||||
|
private readonly _panelDisposables = new Map<string, IDisposable>();
|
||||||
|
|
||||||
private readonly _onMove = new Emitter<GroupMoveEvent>();
|
private readonly _onMove = new Emitter<GroupMoveEvent>();
|
||||||
readonly onMove: Event<GroupMoveEvent> = this._onMove.event;
|
readonly onMove: Event<GroupMoveEvent> = this._onMove.event;
|
||||||
@ -842,11 +841,11 @@ export class DockviewGroupPanelModel
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const panelDisposables = this._panelDisposables.get(panel.id);
|
const disposable = this._panelDisposables.get(panel.id);
|
||||||
|
if (disposable) {
|
||||||
|
disposable.dispose();
|
||||||
this._panelDisposables.delete(panel.id);
|
this._panelDisposables.delete(panel.id);
|
||||||
|
}
|
||||||
panelDisposables?.forEach(({ dispose }) => dispose());
|
|
||||||
|
|
||||||
this._onDidRemovePanel.fire({ panel });
|
this._onDidRemovePanel.fire({ panel });
|
||||||
}
|
}
|
||||||
@ -878,14 +877,17 @@ export class DockviewGroupPanelModel
|
|||||||
this.updateMru(panel);
|
this.updateMru(panel);
|
||||||
this.panels.splice(index, 0, panel);
|
this.panels.splice(index, 0, panel);
|
||||||
|
|
||||||
this._panelDisposables.set(panel.id, [
|
this._panelDisposables.set(
|
||||||
|
panel.id,
|
||||||
|
new CompositeDisposable(
|
||||||
panel.api.onDidTitleChange((event) =>
|
panel.api.onDidTitleChange((event) =>
|
||||||
this._onDidPanelTitleChange.fire(event)
|
this._onDidPanelTitleChange.fire(event)
|
||||||
),
|
),
|
||||||
panel.api.onUpdateParameters((event) =>
|
panel.api.onDidParametersChange((event) =>
|
||||||
this._onDidPanelParametersChange.fire(event)
|
this._onDidPanelParametersChange.fire(event)
|
||||||
),
|
)
|
||||||
]);
|
)
|
||||||
|
);
|
||||||
|
|
||||||
this._onDidAddPanel.fire({ panel });
|
this._onDidAddPanel.fire({ panel });
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user