mirror of
https://github.com/mathuo/dockview
synced 2025-02-13 03:45:47 +00:00
bug: setup onDidAcitvePanelChange subscription quicker
This commit is contained in:
parent
ca09ae537d
commit
c6dcef537f
@ -2,10 +2,12 @@ import { DockviewComponent } from '../../dockview/dockviewComponent';
|
|||||||
import { DockviewGroupPanel } from '../../dockview/dockviewGroupPanel';
|
import { DockviewGroupPanel } from '../../dockview/dockviewGroupPanel';
|
||||||
import { fromPartial } from '@total-typescript/shoehorn';
|
import { fromPartial } from '@total-typescript/shoehorn';
|
||||||
import { GroupOptions } from '../../dockview/dockviewGroupPanelModel';
|
import { GroupOptions } from '../../dockview/dockviewGroupPanelModel';
|
||||||
import { DockviewPanel } from '../../dockview/dockviewPanel';
|
import { DockviewPanel, IDockviewPanel } from '../../dockview/dockviewPanel';
|
||||||
import { DockviewPanelModelMock } from '../__mocks__/mockDockviewPanelModel';
|
import { DockviewPanelModelMock } from '../__mocks__/mockDockviewPanelModel';
|
||||||
import { IContentRenderer, ITabRenderer } from '../../dockview/types';
|
import { IContentRenderer, ITabRenderer } from '../../dockview/types';
|
||||||
import { OverlayRenderContainer } from '../../overlay/overlayRenderContainer';
|
import { OverlayRenderContainer } from '../../overlay/overlayRenderContainer';
|
||||||
|
import { IDockviewPanelModel } from '../../dockview/dockviewPanelModel';
|
||||||
|
import { ContentContainer } from '../../dockview/components/panel/content';
|
||||||
|
|
||||||
describe('dockviewGroupPanel', () => {
|
describe('dockviewGroupPanel', () => {
|
||||||
test('default minimum/maximium width/height', () => {
|
test('default minimum/maximium width/height', () => {
|
||||||
@ -24,6 +26,50 @@ describe('dockviewGroupPanel', () => {
|
|||||||
expect(cut.maximumWidth).toBe(Number.MAX_SAFE_INTEGER);
|
expect(cut.maximumWidth).toBe(Number.MAX_SAFE_INTEGER);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('that onDidActivePanelChange is configured at inline', () => {
|
||||||
|
const accessor = fromPartial<DockviewComponent>({
|
||||||
|
onDidActivePanelChange: jest.fn(),
|
||||||
|
onDidAddPanel: jest.fn(),
|
||||||
|
onDidRemovePanel: jest.fn(),
|
||||||
|
options: {},
|
||||||
|
api: {},
|
||||||
|
renderer: 'always',
|
||||||
|
overlayRenderContainer: {
|
||||||
|
attach: jest.fn(),
|
||||||
|
detatch: jest.fn(),
|
||||||
|
},
|
||||||
|
doSetGroupActive: jest.fn(),
|
||||||
|
});
|
||||||
|
const options = fromPartial<GroupOptions>({});
|
||||||
|
|
||||||
|
const cut = new DockviewGroupPanel(accessor, 'test_id', options);
|
||||||
|
|
||||||
|
let counter = 0;
|
||||||
|
|
||||||
|
cut.api.onDidActivePanelChange((event) => {
|
||||||
|
counter++;
|
||||||
|
});
|
||||||
|
|
||||||
|
cut.model.openPanel(
|
||||||
|
fromPartial<IDockviewPanel>({
|
||||||
|
updateParentGroup: jest.fn(),
|
||||||
|
view: {
|
||||||
|
tab: { element: document.createElement('div') },
|
||||||
|
content: new ContentContainer(accessor, cut.model),
|
||||||
|
},
|
||||||
|
api: {
|
||||||
|
renderer: 'onlyWhenVisible',
|
||||||
|
onDidTitleChange: jest.fn(),
|
||||||
|
onDidParametersChange: jest.fn(),
|
||||||
|
},
|
||||||
|
layout: jest.fn(),
|
||||||
|
runEvents: jest.fn(),
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(counter).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
test('group constraints', () => {
|
test('group constraints', () => {
|
||||||
const accessor = fromPartial<DockviewComponent>({
|
const accessor = fromPartial<DockviewComponent>({
|
||||||
onDidActivePanelChange: jest.fn(),
|
onDidActivePanelChange: jest.fn(),
|
||||||
|
@ -6,7 +6,6 @@ import {
|
|||||||
DockviewGroupLocation,
|
DockviewGroupLocation,
|
||||||
} from '../dockview/dockviewGroupPanelModel';
|
} from '../dockview/dockviewGroupPanelModel';
|
||||||
import { Emitter, Event } from '../events';
|
import { Emitter, Event } from '../events';
|
||||||
import { MutableDisposable } from '../lifecycle';
|
|
||||||
import { GridviewPanelApi, GridviewPanelApiImpl } from './gridviewPanelApi';
|
import { GridviewPanelApi, GridviewPanelApiImpl } from './gridviewPanelApi';
|
||||||
|
|
||||||
export interface DockviewGroupMoveParams {
|
export interface DockviewGroupMoveParams {
|
||||||
@ -41,8 +40,6 @@ const NOT_INITIALIZED_MESSAGE =
|
|||||||
'dockview: DockviewGroupPanelApiImpl not initialized';
|
'dockview: DockviewGroupPanelApiImpl not initialized';
|
||||||
|
|
||||||
export class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
|
export class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
|
||||||
private readonly _mutableDisposable = new MutableDisposable();
|
|
||||||
|
|
||||||
private _group: DockviewGroupPanel | undefined;
|
private _group: DockviewGroupPanel | undefined;
|
||||||
|
|
||||||
readonly _onDidLocationChange =
|
readonly _onDidLocationChange =
|
||||||
@ -50,8 +47,7 @@ export class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
|
|||||||
readonly onDidLocationChange: Event<DockviewGroupPanelFloatingChangeEvent> =
|
readonly onDidLocationChange: Event<DockviewGroupPanelFloatingChangeEvent> =
|
||||||
this._onDidLocationChange.event;
|
this._onDidLocationChange.event;
|
||||||
|
|
||||||
private readonly _onDidActivePanelChange =
|
readonly _onDidActivePanelChange = new Emitter<DockviewGroupChangeEvent>();
|
||||||
new Emitter<DockviewGroupChangeEvent>();
|
|
||||||
readonly onDidActivePanelChange = this._onDidActivePanelChange.event;
|
readonly onDidActivePanelChange = this._onDidActivePanelChange.event;
|
||||||
|
|
||||||
get location(): DockviewGroupLocation {
|
get location(): DockviewGroupLocation {
|
||||||
@ -66,8 +62,7 @@ export class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
|
|||||||
|
|
||||||
this.addDisposables(
|
this.addDisposables(
|
||||||
this._onDidLocationChange,
|
this._onDidLocationChange,
|
||||||
this._onDidActivePanelChange,
|
this._onDidActivePanelChange
|
||||||
this._mutableDisposable
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,21 +135,6 @@ export class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
initialize(group: DockviewGroupPanel): void {
|
initialize(group: DockviewGroupPanel): void {
|
||||||
/**
|
|
||||||
* TODO: Annoying initialization order caveat, find a better way to initialize and avoid needing null checks
|
|
||||||
*
|
|
||||||
* Due to the order on initialization we know that the model isn't defined until later in the same stack-frame of setup.
|
|
||||||
* By queuing a microtask we can ensure the setup is completed within the same stack-frame, but after everything else has
|
|
||||||
* finished ensuring the `model` is defined.
|
|
||||||
*/
|
|
||||||
|
|
||||||
this._group = group;
|
this._group = group;
|
||||||
|
|
||||||
queueMicrotask(() => {
|
|
||||||
this._mutableDisposable.value =
|
|
||||||
this._group!.model.onDidActivePanelChange((event) => {
|
|
||||||
this._onDidActivePanelChange.fire(event);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -124,6 +124,12 @@ export class DockviewGroupPanel
|
|||||||
options,
|
options,
|
||||||
this
|
this
|
||||||
);
|
);
|
||||||
|
|
||||||
|
this.addDisposables(
|
||||||
|
this.model.onDidActivePanelChange((event) => {
|
||||||
|
this.api._onDidActivePanelChange.fire(event);
|
||||||
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
override focus(): void {
|
override focus(): void {
|
||||||
|
Loading…
Reference in New Issue
Block a user