Merge branch 'master' of https://github.com/mathuo/dockview into 361-full-screen-mode-for-a-single-tab

This commit is contained in:
mathuo 2024-01-01 22:47:08 +00:00
commit cb203bdf1e
No known key found for this signature in database
GPG Key ID: C6EEDEFD6CA07281
3 changed files with 35 additions and 67 deletions

View File

@ -22,6 +22,27 @@ describe('defaultTab', () => {
expect(element.querySelector('.dv-react-tab-close-btn')).toBeTruthy(); expect(element.querySelector('.dv-react-tab-close-btn')).toBeTruthy();
}); });
test('that title is displayed', async () => {
const api = fromPartial<DockviewPanelApi>({
title: 'test_title',
});
const containerApi = fromPartial<DockviewApi>({});
const params = {};
render(
<DockviewDefaultTab
api={api}
containerApi={containerApi}
params={params}
/>
);
const element = await screen.getByTestId('dockview-default-tab');
expect(
element.querySelector('.dockview-react-tab-title')?.textContent
).toBe('test_title');
});
test('has no close button when hideClose=true', async () => { test('has no close button when hideClose=true', async () => {
const api = fromPartial<DockviewPanelApi>({}); const api = fromPartial<DockviewPanelApi>({});
const containerApi = fromPartial<DockviewApi>({}); const containerApi = fromPartial<DockviewApi>({});

View File

@ -57,7 +57,7 @@ export const DockviewDefaultTab: React.FunctionComponent<
onClick={onClick} onClick={onClick}
className="dockview-react-tab" className="dockview-react-tab"
> >
<span className="dockview-react-tab-title">{api.renderer}</span> <span className="dockview-react-tab-title">{api.title}</span>
{!hideClose && ( {!hideClose && (
<div <div
className="dv-react-tab-close-btn" className="dv-react-tab-close-btn"

View File

@ -5,69 +5,17 @@ import {
IDockviewPanelHeaderProps, IDockviewPanelHeaderProps,
IDockviewPanelProps, IDockviewPanelProps,
IDockviewHeaderActionsProps, IDockviewHeaderActionsProps,
DockviewPanelApi,
DockviewPanelRenderer,
} from 'dockview'; } from 'dockview';
import * as React from 'react'; import * as React from 'react';
import * as ReactDOM from 'react-dom'; import * as ReactDOM from 'react-dom';
import { v4 } from 'uuid'; import { v4 } from 'uuid';
import './app.scss'; import './app.scss';
const useRenderer = (
api: DockviewPanelApi
): [DockviewPanelRenderer, (value: DockviewPanelRenderer) => void] => {
const [mode, setMode] = React.useState<DockviewPanelRenderer>(api.renderer);
React.useEffect(() => {
const disposable = api.onDidRendererChange((event) => {
setMode(event.renderer);
});
return () => {
disposable.dispose();
};
}, []);
const _setMode = React.useCallback(
(mode: DockviewPanelRenderer) => {
api.setRenderer(mode);
},
[api]
);
return [mode, _setMode];
};
const components = { const components = {
default: (props: IDockviewPanelProps<{ title: string }>) => { default: (props: IDockviewPanelProps<{ title: string }>) => {
const [mode, setMode] = useRenderer(props.api);
return ( return (
<div style={{ height: '100%', overflow: 'auto', color: 'white' }}> <div style={{ height: '100%', overflow: 'auto', color: 'white' }}>
<div {''}
style={{
height: '1000px',
padding: '20px',
overflow: 'auto',
}}
>
<div>{props.api.title}</div>
<input />
<div>
{mode}
<button
onClick={() => {
setMode(
mode === 'onlyWhenVisibile'
? 'always'
: 'onlyWhenVisibile'
);
}}
>
Toggle render mode
</button>
</div>
</div>
</div> </div>
); );
}, },
@ -294,18 +242,18 @@ const DockviewDemo = (props: { theme?: string }) => {
title: 'Panel 4', title: 'Panel 4',
position: { referencePanel: 'panel_3', direction: 'right' }, position: { referencePanel: 'panel_3', direction: 'right' },
}); });
// event.api.addPanel({ event.api.addPanel({
// id: 'panel_5', id: 'panel_5',
// component: 'default', component: 'default',
// title: 'Panel 5', title: 'Panel 5',
// position: { referencePanel: 'panel_3', direction: 'below' }, position: { referencePanel: 'panel_3', direction: 'below' },
// }); });
// event.api.addPanel({ event.api.addPanel({
// id: 'panel_6', id: 'panel_6',
// component: 'default', component: 'default',
// title: 'Panel 6', title: 'Panel 6',
// position: { referencePanel: 'panel_3', direction: 'right' }, position: { referencePanel: 'panel_3', direction: 'right' },
// }); });
event.api.getPanel('panel_1')!.api.setActive(); event.api.getPanel('panel_1')!.api.setActive();
@ -321,7 +269,6 @@ const DockviewDemo = (props: { theme?: string }) => {
prefixHeaderActionsComponent={PrefixHeaderControls} prefixHeaderActionsComponent={PrefixHeaderControls}
onReady={onReady} onReady={onReady}
className={props.theme || 'dockview-theme-abyss'} className={props.theme || 'dockview-theme-abyss'}
// debug={true}
/> />
); );
}; };