mirror of
https://github.com/mathuo/dockview
synced 2025-02-16 05:15:45 +00:00
chore: tests and docs
This commit is contained in:
parent
bfa4f60288
commit
a1cd01380b
@ -13,6 +13,10 @@ import { IDockviewPanel } from '../../dockview/dockviewPanel';
|
|||||||
import { DockviewGroupPanel } from '../../dockview/dockviewGroupPanel';
|
import { DockviewGroupPanel } from '../../dockview/dockviewGroupPanel';
|
||||||
import { fireEvent } from '@testing-library/dom';
|
import { fireEvent } from '@testing-library/dom';
|
||||||
import { getPanelData } from '../../dnd/dataTransfer';
|
import { getPanelData } from '../../dnd/dataTransfer';
|
||||||
|
import {
|
||||||
|
GroupDragEvent,
|
||||||
|
TabDragEvent,
|
||||||
|
} from '../../dockview/components/titlebar/tabsContainer';
|
||||||
|
|
||||||
class PanelContentPartTest implements IContentRenderer {
|
class PanelContentPartTest implements IContentRenderer {
|
||||||
element: HTMLElement = document.createElement('div');
|
element: HTMLElement = document.createElement('div');
|
||||||
@ -3979,4 +3983,84 @@ describe('dockviewComponent', () => {
|
|||||||
});
|
});
|
||||||
expect(showDndOverlay).toBeCalledTimes(5);
|
expect(showDndOverlay).toBeCalledTimes(5);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('that dragging a tab triggers onWillDragPanel', () => {
|
||||||
|
const container = document.createElement('div');
|
||||||
|
|
||||||
|
const dockview = new DockviewComponent({
|
||||||
|
parentElement: container,
|
||||||
|
components: {
|
||||||
|
default: PanelContentPartTest,
|
||||||
|
},
|
||||||
|
tabComponents: {
|
||||||
|
test_tab_id: PanelTabPartTest,
|
||||||
|
},
|
||||||
|
orientation: Orientation.HORIZONTAL,
|
||||||
|
});
|
||||||
|
|
||||||
|
dockview.layout(1000, 500);
|
||||||
|
|
||||||
|
dockview.addPanel({
|
||||||
|
id: 'panel_1',
|
||||||
|
component: 'default',
|
||||||
|
});
|
||||||
|
|
||||||
|
const tabDragEvents: TabDragEvent[] = [];
|
||||||
|
const groupDragEvents: GroupDragEvent[] = [];
|
||||||
|
|
||||||
|
dockview.onWillDragPanel((event) => {
|
||||||
|
tabDragEvents.push(event);
|
||||||
|
});
|
||||||
|
dockview.onWillDragGroup((event) => {
|
||||||
|
groupDragEvents.push(event);
|
||||||
|
});
|
||||||
|
|
||||||
|
const el = dockview.element.querySelector('.tab')!;
|
||||||
|
expect(el).toBeTruthy();
|
||||||
|
|
||||||
|
fireEvent.dragStart(el);
|
||||||
|
|
||||||
|
expect(tabDragEvents.length).toBe(1);
|
||||||
|
expect(groupDragEvents.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('that dragging a group triggers onWillDragGroup', () => {
|
||||||
|
const container = document.createElement('div');
|
||||||
|
|
||||||
|
const dockview = new DockviewComponent({
|
||||||
|
parentElement: container,
|
||||||
|
components: {
|
||||||
|
default: PanelContentPartTest,
|
||||||
|
},
|
||||||
|
tabComponents: {
|
||||||
|
test_tab_id: PanelTabPartTest,
|
||||||
|
},
|
||||||
|
orientation: Orientation.HORIZONTAL,
|
||||||
|
});
|
||||||
|
|
||||||
|
dockview.layout(1000, 500);
|
||||||
|
|
||||||
|
dockview.addPanel({
|
||||||
|
id: 'panel_1',
|
||||||
|
component: 'default',
|
||||||
|
});
|
||||||
|
|
||||||
|
const tabDragEvents: TabDragEvent[] = [];
|
||||||
|
const groupDragEvents: GroupDragEvent[] = [];
|
||||||
|
|
||||||
|
dockview.onWillDragPanel((event) => {
|
||||||
|
tabDragEvents.push(event);
|
||||||
|
});
|
||||||
|
dockview.onWillDragGroup((event) => {
|
||||||
|
groupDragEvents.push(event);
|
||||||
|
});
|
||||||
|
|
||||||
|
const el = dockview.element.querySelector('.void-container')!;
|
||||||
|
expect(el).toBeTruthy();
|
||||||
|
|
||||||
|
fireEvent.dragStart(el);
|
||||||
|
|
||||||
|
expect(tabDragEvents.length).toBe(0);
|
||||||
|
expect(groupDragEvents.length).toBe(1);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -155,10 +155,10 @@ export class DockviewComponent
|
|||||||
private _options: Exclude<DockviewComponentOptions, 'orientation'>;
|
private _options: Exclude<DockviewComponentOptions, 'orientation'>;
|
||||||
private watermark: IWatermarkRenderer | null = null;
|
private watermark: IWatermarkRenderer | null = null;
|
||||||
|
|
||||||
readonly _onWillDragPanel = new Emitter<TabDragEvent>();
|
private readonly _onWillDragPanel = new Emitter<TabDragEvent>();
|
||||||
readonly onWillDragPanel: Event<TabDragEvent> = this._onWillDragPanel.event;
|
readonly onWillDragPanel: Event<TabDragEvent> = this._onWillDragPanel.event;
|
||||||
|
|
||||||
readonly _onWillDragGroup = new Emitter<GroupDragEvent>();
|
private readonly _onWillDragGroup = new Emitter<GroupDragEvent>();
|
||||||
readonly onWillDragGroup: Event<GroupDragEvent> =
|
readonly onWillDragGroup: Event<GroupDragEvent> =
|
||||||
this._onWillDragGroup.event;
|
this._onWillDragGroup.event;
|
||||||
|
|
||||||
|
@ -365,6 +365,10 @@ return (
|
|||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Intercepting Drag Events
|
||||||
|
|
||||||
|
You can intercept drag events to attach your own metadata using the `onWillDragPanel` and `onWillDragGroup` api methods.
|
||||||
|
|
||||||
<MultiFrameworkContainer sandboxId="dnd-dockview" react={DndDockview} />
|
<MultiFrameworkContainer sandboxId="dnd-dockview" react={DndDockview} />
|
||||||
|
|
||||||
### Third Party Dnd Libraries
|
### Third Party Dnd Libraries
|
||||||
|
@ -38,7 +38,7 @@ const DraggableElement = () => (
|
|||||||
}}
|
}}
|
||||||
draggable={true}
|
draggable={true}
|
||||||
>
|
>
|
||||||
Drag me
|
Drag me into the dock
|
||||||
</span>
|
</span>
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -162,7 +162,17 @@ const DndDockview = (props: { renderVisibleOnly: boolean; theme?: string }) => {
|
|||||||
>
|
>
|
||||||
<div style={{ margin: '2px 0px' }}>
|
<div style={{ margin: '2px 0px' }}>
|
||||||
<DraggableElement />
|
<DraggableElement />
|
||||||
<div onDrop={onDrop}>Inspect Data Transfer</div>
|
<div
|
||||||
|
style={{
|
||||||
|
padding: '0px 4px',
|
||||||
|
backgroundColor: 'black',
|
||||||
|
borderRadius: '2px',
|
||||||
|
color: 'white',
|
||||||
|
}}
|
||||||
|
onDrop={onDrop}
|
||||||
|
>
|
||||||
|
Drop a tab or group here to inspect the attached metadata
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<DockviewReact
|
<DockviewReact
|
||||||
components={components}
|
components={components}
|
||||||
|
Loading…
Reference in New Issue
Block a user