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