chore: docs

This commit is contained in:
mathuo 2024-04-25 22:14:39 +01:00
parent 4b1b4bab32
commit 36527910f3
No known key found for this signature in database
GPG Key ID: C6EEDEFD6CA07281
5 changed files with 214 additions and 149 deletions

View File

@ -188,16 +188,20 @@ const DockviewDemo = (props: { theme?: string }) => {
> >
<div> <div>
<GridActions api={api} /> <GridActions api={api} />
{api && (
<PanelActions <PanelActions
api={api} api={api}
panels={panels} panels={panels}
activePanel={activePanel} activePanel={activePanel}
/> />
)}
{api && (
<GroupActions <GroupActions
api={api} api={api}
groups={groups} groups={groups}
activeGroup={activeGroup} activeGroup={activeGroup}
/> />
)}
</div> </div>
<div <div
style={{ style={{

View File

@ -3,9 +3,7 @@ import { DockviewApi } from 'dockview';
export const nextId = (() => { export const nextId = (() => {
let counter = 0; let counter = 0;
return () => { return () => counter++;
counter++;
};
})(); })();
export function defaultConfig(api: DockviewApi) { export function defaultConfig(api: DockviewApi) {

View File

@ -34,11 +34,12 @@ export const GridActions = (props: { api?: DockviewApi }) => {
} }
}; };
const onAddPanel = () => { const onAddPanel = (options?: { inactive: boolean }) => {
props.api?.addPanel({ props.api?.addPanel({
id: `id_${Date.now().toString()}`, id: `id_${Date.now().toString()}`,
component: 'default', component: 'default',
title: `Tab ${nextId()}`, title: `Tab ${nextId()}`,
inactive: options?.inactive,
}); });
}; };
@ -48,9 +49,15 @@ export const GridActions = (props: { api?: DockviewApi }) => {
return ( return (
<div className="action-container"> <div className="action-container">
<button className="text-button" onClick={onAddPanel}> <button className="text-button" onClick={() => onAddPanel()}>
Add Panel Add Panel
</button> </button>
<button
className="text-button"
onClick={() => onAddPanel({ inactive: true })}
>
Add Inactive Panel
</button>
<button className="text-button" onClick={onAddGroup}> <button className="text-button" onClick={onAddGroup}>
Add Group Add Group
</button> </button>

View File

@ -1,50 +1,85 @@
import { DockviewApi } from 'dockview'; import { DockviewApi, DockviewGroupLocation } from 'dockview';
import * as React from 'react';
export const GroupActions = (props: { const GroupAction = (props: {
groupId: string;
groups: string[]; groups: string[];
api?: DockviewApi; api: DockviewApi;
activeGroup?: string; activeGroup?: string;
}) => { }) => {
return (
<div className="action-container">
{props.groups.map((x) => {
const onClick = () => { const onClick = () => {
props.api?.getGroup(x)?.focus(); props.api?.getGroup(props.groupId)?.focus();
}; };
const isActive = props.activeGroup === props.groupId;
const group = React.useMemo(
() => props.api.getGroup(props.groupId),
[props.api, props.groupId]
);
const [location, setLocation] =
React.useState<DockviewGroupLocation | null>(null);
const [isMaximized, setIsMaximized] = React.useState<boolean>(false);
React.useEffect(() => {
if (!group) {
setLocation(null);
return;
}
const disposable = group.api.onDidLocationChange((event) => {
setLocation(event.location);
});
const disposable2 = props.api.onDidMaximizedGroupChange(() => {
setIsMaximized(group.api.isMaximized());
});
setLocation(group.api.location);
setIsMaximized(group.api.isMaximized());
return () => {
disposable.dispose();
disposable2.dispose();
};
}, [group]);
return ( return (
<div className="button-action"> <div className="button-action">
<div style={{ display: 'flex' }}> <div style={{ display: 'flex' }}>
<button <button
onClick={onClick} onClick={onClick}
className={ className={
props.activeGroup === x isActive ? 'demo-button selected' : 'demo-button'
? 'demo-button selected'
: 'demo-button'
} }
> >
{x} {props.groupId}
</button> </button>
</div> </div>
<div style={{ display: 'flex' }}> <div style={{ display: 'flex' }}>
<button <button
className="demo-icon-button" className={
location?.type === 'floating'
? 'demo-icon-button selected'
: 'demo-icon-button'
}
onClick={() => { onClick={() => {
const panel = props.api?.getGroup(x); if (group) {
if (panel) { props.api.addFloatingGroup(group);
props.api?.addFloatingGroup(panel);
} }
}} }}
> >
<span className="material-symbols-outlined"> <span className="material-symbols-outlined">ad_group</span>
ad_group
</span>
</button> </button>
<button <button
className="demo-icon-button" className={
location?.type === 'popout'
? 'demo-icon-button selected'
: 'demo-icon-button'
}
onClick={() => { onClick={() => {
const panel = props.api?.getGroup(x); if (group) {
if (panel) { props.api.addPopoutGroup(group);
props.api?.addPopoutGroup(panel);
} }
}} }}
> >
@ -53,13 +88,18 @@ export const GroupActions = (props: {
</span> </span>
</button> </button>
<button <button
className="demo-icon-button" className={
isMaximized
? 'demo-icon-button selected'
: 'demo-icon-button'
}
onClick={() => { onClick={() => {
const panel = props.api?.getGroup(x); if (group) {
if (panel?.api.isMaximized()) { if (group.api.isMaximized()) {
panel.api.exitMaximized(); group.api.exitMaximized();
} else { } else {
panel?.api.maximize(); group.api.maximize();
}
} }
}} }}
> >
@ -70,17 +110,28 @@ export const GroupActions = (props: {
<button <button
className="demo-icon-button" className="demo-icon-button"
onClick={() => { onClick={() => {
const panel = props.api?.getGroup(x); const panel = props.api?.getGroup(props.groupId);
panel?.api.close(); panel?.api.close();
}} }}
> >
<span className="material-symbols-outlined"> <span className="material-symbols-outlined">close</span>
close
</span>
</button> </button>
</div> </div>
</div> </div>
); );
};
export const GroupActions = (props: {
groups: string[];
api: DockviewApi;
activeGroup?: string;
}) => {
return (
<div className="action-container">
{props.groups.map((groupId) => {
return (
<GroupAction key={groupId} {...props} groupId={groupId} />
);
})} })}
</div> </div>
); );

View File

@ -1,48 +1,44 @@
import { DockviewApi } from 'dockview'; import { DockviewApi } from 'dockview';
export const PanelActions = (props: { const PanelAction = (props: {
panels: string[]; panels: string[];
api?: DockviewApi; api: DockviewApi;
activePanel?: string; activePanel?: string;
panelId: string;
}) => { }) => {
return (
<div className="action-container">
{props.panels.map((x) => {
const onClick = () => { const onClick = () => {
props.api?.getPanel(x)?.focus(); props.api?.getPanel(props.panelId)?.focus();
}; };
return ( return (
<div className="button-action"> <div className="button-action">
<div style={{ display: 'flex' }}> <div style={{ display: 'flex' }}>
<button <button
className={ className={
props.activePanel === x props.activePanel === props.panelId
? 'demo-button selected' ? 'demo-button selected'
: 'demo-button' : 'demo-button'
} }
onClick={onClick} onClick={onClick}
> >
{x} {props.panelId}
</button> </button>
</div> </div>
<div style={{ display: 'flex' }}> <div style={{ display: 'flex' }}>
<button <button
className="demo-icon-button" className="demo-icon-button"
onClick={() => { onClick={() => {
const panel = props.api?.getPanel(x); const panel = props.api?.getPanel(props.panelId);
if (panel) { if (panel) {
props.api?.addFloatingGroup(panel); props.api?.addFloatingGroup(panel);
} }
}} }}
> >
<span className="material-symbols-outlined"> <span className="material-symbols-outlined">ad_group</span>
ad_group
</span>
</button> </button>
<button <button
className="demo-icon-button" className="demo-icon-button"
onClick={() => { onClick={() => {
const panel = props.api?.getPanel(x); const panel = props.api?.getPanel(props.panelId);
if (panel) { if (panel) {
props.api?.addPopoutGroup(panel); props.api?.addPopoutGroup(panel);
} }
@ -55,17 +51,26 @@ export const PanelActions = (props: {
<button <button
className="demo-icon-button" className="demo-icon-button"
onClick={() => { onClick={() => {
const panel = props.api?.getPanel(x); const panel = props.api?.getPanel(props.panelId);
panel?.api.close(); panel?.api.close();
}} }}
> >
<span className="material-symbols-outlined"> <span className="material-symbols-outlined">close</span>
close
</span>
</button> </button>
</div> </div>
</div> </div>
); );
};
export const PanelActions = (props: {
panels: string[];
api: DockviewApi;
activePanel?: string;
}) => {
return (
<div className="action-container">
{props.panels.map((id) => {
return <PanelAction key={id} {...props} panelId={id} />;
})} })}
</div> </div>
); );