mirror of
https://github.com/mathuo/dockview
synced 2025-02-19 14:45:44 +00:00
refactor: reduce code smells
This commit is contained in:
parent
7aaec28ebd
commit
9c547f90b6
@ -1,22 +1,24 @@
|
|||||||
const package = require("./package");
|
const { name } = require('./package');
|
||||||
|
|
||||||
const baseConfig = require("../../jest.config.base");
|
const baseConfig = require('../../jest.config.base');
|
||||||
|
|
||||||
console.log("loaded");
|
console.log('loaded');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
...baseConfig,
|
...baseConfig,
|
||||||
roots: ["<rootDir>/packages/splitview"],
|
roots: ['<rootDir>/packages/splitview'],
|
||||||
modulePaths: ["<rootDir>/packages/splitview/src"],
|
modulePaths: ['<rootDir>/packages/splitview/src'],
|
||||||
displayName: {name: package.name, color: "blue"},
|
displayName: { name, color: 'blue' },
|
||||||
rootDir: "../../",
|
rootDir: '../../',
|
||||||
collectCoverageFrom:[
|
collectCoverageFrom: [
|
||||||
"<rootDir>/packages/splitview/src/**/*.{js,jsx,ts,tsx}",
|
'<rootDir>/packages/splitview/src/**/*.{js,jsx,ts,tsx}',
|
||||||
],
|
],
|
||||||
setupFiles: ["<rootDir>/packages/splitview/src/__tests__/__mocks__/resizeObserver.js"],
|
setupFiles: [
|
||||||
coveragePathIgnorePatterns: [
|
'<rootDir>/packages/splitview/src/__tests__/__mocks__/resizeObserver.js',
|
||||||
"/node_modules/",
|
|
||||||
],
|
],
|
||||||
modulePathIgnorePatterns: ["<rootDir>/packages/splitview/src/__tests__/__mocks__",],
|
coveragePathIgnorePatterns: ['/node_modules/'],
|
||||||
coverageDirectory: "coverage"
|
modulePathIgnorePatterns: [
|
||||||
}
|
'<rootDir>/packages/splitview/src/__tests__/__mocks__',
|
||||||
|
],
|
||||||
|
coverageDirectory: 'coverage',
|
||||||
|
};
|
||||||
|
@ -20,8 +20,8 @@ import { IGroupPanel } from '../groupview/groupPanel';
|
|||||||
import {
|
import {
|
||||||
AddPaneviewCompponentOptions,
|
AddPaneviewCompponentOptions,
|
||||||
SerializedPaneview,
|
SerializedPaneview,
|
||||||
|
IPaneviewComponent,
|
||||||
} from '../paneview/paneviewComponent';
|
} from '../paneview/paneviewComponent';
|
||||||
import { IPaneviewComponent } from '../paneview/paneviewComponent';
|
|
||||||
import { IPaneviewPanel } from '../paneview/paneviewPanel';
|
import { IPaneviewPanel } from '../paneview/paneviewPanel';
|
||||||
import {
|
import {
|
||||||
AddSplitviewComponentOptions,
|
AddSplitviewComponentOptions,
|
||||||
|
@ -28,12 +28,10 @@ export class DefaultDeserializer implements IViewDeserializer {
|
|||||||
panels.push(panel);
|
panels.push(panel);
|
||||||
}
|
}
|
||||||
|
|
||||||
const group = this.layout.createGroup({
|
return this.layout.createGroup({
|
||||||
panels,
|
panels,
|
||||||
activePanel: panels.find((p) => p.id === active),
|
activePanel: panels.find((p) => p.id === active),
|
||||||
id: node.data.id,
|
id: node.data.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
return group;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import {
|
import {
|
||||||
getRelativeLocation,
|
getRelativeLocation,
|
||||||
SerializedGridObject,
|
SerializedGridObject,
|
||||||
|
getGridLocation,
|
||||||
} from '../gridview/gridview';
|
} from '../gridview/gridview';
|
||||||
import { Position } from '../dnd/droptarget';
|
import { Position } from '../dnd/droptarget';
|
||||||
import { getGridLocation } from '../gridview/gridview';
|
|
||||||
import { tail, sequenceEquals } from '../array';
|
import { tail, sequenceEquals } from '../array';
|
||||||
import {
|
import {
|
||||||
GroupPanel,
|
GroupPanel,
|
||||||
@ -744,7 +744,6 @@ export class DockviewComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
referenceGroup.group.openPanel(groupItem, { index });
|
referenceGroup.group.openPanel(groupItem, { index });
|
||||||
return;
|
|
||||||
} else {
|
} else {
|
||||||
const referenceLocation = getGridLocation(referenceGroup.element);
|
const referenceLocation = getGridLocation(referenceGroup.element);
|
||||||
const targetLocation = getRelativeLocation(
|
const targetLocation = getRelativeLocation(
|
||||||
@ -770,7 +769,7 @@ export class DockviewComponent
|
|||||||
const targetGroup = this.doRemoveGroup(sourceGroup, {
|
const targetGroup = this.doRemoveGroup(sourceGroup, {
|
||||||
skipActive: true,
|
skipActive: true,
|
||||||
skipDispose: true,
|
skipDispose: true,
|
||||||
}) as GroupviewPanel;
|
});
|
||||||
|
|
||||||
// after deleting the group we need to re-evaulate the ref location
|
// after deleting the group we need to re-evaulate the ref location
|
||||||
const updatedReferenceLocation = getGridLocation(
|
const updatedReferenceLocation = getGridLocation(
|
||||||
|
@ -9,7 +9,6 @@ import {
|
|||||||
WatermarkPart,
|
WatermarkPart,
|
||||||
} from '../groupview/types';
|
} from '../groupview/types';
|
||||||
import { GroupviewPanel } from '../groupview/v2/groupviewPanel';
|
import { GroupviewPanel } from '../groupview/v2/groupviewPanel';
|
||||||
import { IGroupPanelView } from '../react/dockview/v2/defaultGroupPanelView';
|
|
||||||
import { ISplitviewStyles, Orientation } from '../splitview/core/splitview';
|
import { ISplitviewStyles, Orientation } from '../splitview/core/splitview';
|
||||||
import { FrameworkFactory } from '../types';
|
import { FrameworkFactory } from '../types';
|
||||||
|
|
||||||
|
@ -11,8 +11,8 @@ export function watchElementResize(
|
|||||||
cb: (entry: ResizeObserverEntry) => void
|
cb: (entry: ResizeObserverEntry) => void
|
||||||
): IDisposable {
|
): IDisposable {
|
||||||
const observer = new ResizeObserver((entires) => {
|
const observer = new ResizeObserver((entires) => {
|
||||||
const element = entires[0];
|
const firstEntry = entires[0];
|
||||||
cb(element);
|
cb(firstEntry);
|
||||||
});
|
});
|
||||||
|
|
||||||
observer.observe(element);
|
observer.observe(element);
|
||||||
|
@ -3,9 +3,12 @@ import { getGridLocation, Gridview, IGridView } from './gridview';
|
|||||||
import { Position } from '../dnd/droptarget';
|
import { Position } from '../dnd/droptarget';
|
||||||
import { CompositeDisposable, IValueDisposable } from '../lifecycle';
|
import { CompositeDisposable, IValueDisposable } from '../lifecycle';
|
||||||
import { sequentialNumberGenerator } from '../math';
|
import { sequentialNumberGenerator } from '../math';
|
||||||
import { ISplitviewStyles, Orientation } from '../splitview/core/splitview';
|
import {
|
||||||
|
ISplitviewStyles,
|
||||||
|
Orientation,
|
||||||
|
Sizing,
|
||||||
|
} from '../splitview/core/splitview';
|
||||||
import { IPanel } from '../panel/types';
|
import { IPanel } from '../panel/types';
|
||||||
import { Sizing } from '../splitview/core/splitview';
|
|
||||||
import { MovementOptions2 } from '../dockview/options';
|
import { MovementOptions2 } from '../dockview/options';
|
||||||
import { GroupChangeEvent, GroupChangeKind } from '../groupview/v2/component';
|
import { GroupChangeEvent, GroupChangeKind } from '../groupview/v2/component';
|
||||||
|
|
||||||
|
@ -104,14 +104,17 @@ export abstract class BasePanelView<T extends PanelApi>
|
|||||||
|
|
||||||
toJSON(): BasePanelViewState {
|
toJSON(): BasePanelViewState {
|
||||||
const state = this.api.getState();
|
const state = this.api.getState();
|
||||||
|
|
||||||
|
const params = this.params?.params
|
||||||
|
? Object.keys(this.params.params).length > 0
|
||||||
|
? this.params.params
|
||||||
|
: undefined
|
||||||
|
: undefined;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: this.id,
|
id: this.id,
|
||||||
component: this.component,
|
component: this.component,
|
||||||
params: this.params?.params
|
params,
|
||||||
? Object.keys(this.params.params).length > 0
|
|
||||||
? this.params.params
|
|
||||||
: undefined
|
|
||||||
: undefined,
|
|
||||||
state: Object.keys(state).length === 0 ? undefined : state,
|
state: Object.keys(state).length === 0 ? undefined : state,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -319,7 +319,7 @@ export class Gridview implements IDisposable {
|
|||||||
): Node {
|
): Node {
|
||||||
let result: Node;
|
let result: Node;
|
||||||
if (node.type === 'branch') {
|
if (node.type === 'branch') {
|
||||||
const serializedChildren = node.data as ISerializedNode[];
|
const serializedChildren = node.data;
|
||||||
const children = serializedChildren.map((serializedChild) => {
|
const children = serializedChildren.map((serializedChild) => {
|
||||||
return {
|
return {
|
||||||
node: this._deserializeNode(
|
node: this._deserializeNode(
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
import { getRelativeLocation, SerializedGridObject } from './gridview';
|
import {
|
||||||
|
getRelativeLocation,
|
||||||
|
SerializedGridObject,
|
||||||
|
getGridLocation,
|
||||||
|
} from './gridview';
|
||||||
import { Position } from '../dnd/droptarget';
|
import { Position } from '../dnd/droptarget';
|
||||||
import { getGridLocation } from './gridview';
|
|
||||||
import { tail, sequenceEquals } from '../array';
|
import { tail, sequenceEquals } from '../array';
|
||||||
import { CompositeDisposable } from '../lifecycle';
|
import { CompositeDisposable } from '../lifecycle';
|
||||||
import { IPanelDeserializer } from '../dockview/deserializer';
|
import { IPanelDeserializer } from '../dockview/deserializer';
|
||||||
@ -155,7 +158,7 @@ export class GridviewComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
public fromJSON(data: SerializedGridview, deferComponentLayout?: boolean) {
|
public fromJSON(data: SerializedGridview, deferComponentLayout?: boolean) {
|
||||||
const { grid, activePanel } = data as SerializedGridview;
|
const { grid, activePanel } = data;
|
||||||
|
|
||||||
this.gridview.clear();
|
this.gridview.clear();
|
||||||
this.groups.clear();
|
this.groups.clear();
|
||||||
|
@ -5,18 +5,12 @@ import {
|
|||||||
CompositeDisposable,
|
CompositeDisposable,
|
||||||
IDisposable,
|
IDisposable,
|
||||||
} from '../lifecycle';
|
} from '../lifecycle';
|
||||||
import {
|
import { HeaderPartInitParameters } from './types';
|
||||||
HeaderPartInitParameters,
|
|
||||||
IContentRenderer,
|
|
||||||
ITabRenderer,
|
|
||||||
} from './types';
|
|
||||||
import { IPanel, PanelInitParameters, PanelUpdateEvent } from '../panel/types';
|
import { IPanel, PanelInitParameters, PanelUpdateEvent } from '../panel/types';
|
||||||
import { DockviewApi } from '../api/component.api';
|
import { DockviewApi } from '../api/component.api';
|
||||||
import { DefaultTab } from '../dockview/components/tab/defaultTab';
|
|
||||||
import { GroupviewPanel } from './v2/groupviewPanel';
|
import { GroupviewPanel } from './v2/groupviewPanel';
|
||||||
import { GroupChangeKind } from './v2/component';
|
import { GroupChangeKind } from './v2/component';
|
||||||
import { IGroupPanelView } from '../react/dockview/v2/defaultGroupPanelView';
|
import { IGroupPanelView } from '../react/dockview/v2/defaultGroupPanelView';
|
||||||
import { IGridPanelView } from '../gridview/baseComponentGridview';
|
|
||||||
|
|
||||||
export interface IGroupPanelInitParameters
|
export interface IGroupPanelInitParameters
|
||||||
extends PanelInitParameters,
|
extends PanelInitParameters,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { addDisposableListener, Emitter, Event } from '../events';
|
import { addDisposableListener, Emitter, Event } from '../events';
|
||||||
import { Droptarget, DroptargetEvent } from '../dnd/droptarget';
|
import { Droptarget, DroptargetEvent } from '../dnd/droptarget';
|
||||||
import { CompositeDisposable, IDisposable } from '../lifecycle';
|
import { CompositeDisposable } from '../lifecycle';
|
||||||
import {
|
import {
|
||||||
DATA_KEY,
|
DATA_KEY,
|
||||||
DragType,
|
DragType,
|
||||||
|
@ -586,7 +586,7 @@ export class GroupComponent extends CompositeDisposable implements IGroupview {
|
|||||||
|
|
||||||
this.tabsContainer.openPanel(panel, index);
|
this.tabsContainer.openPanel(panel, index);
|
||||||
|
|
||||||
this.contentContainer.openPanel(panel!);
|
this.contentContainer.openPanel(panel);
|
||||||
|
|
||||||
this.tabsContainer.show();
|
this.tabsContainer.show();
|
||||||
this.contentContainer.show();
|
this.contentContainer.show();
|
||||||
|
@ -4,11 +4,8 @@ import {
|
|||||||
GridviewPanelApi,
|
GridviewPanelApi,
|
||||||
IGridviewPanelApi,
|
IGridviewPanelApi,
|
||||||
} from '../../api/gridviewPanelApi';
|
} from '../../api/gridviewPanelApi';
|
||||||
import { GroupComponent, GroupOptions, GroupPanelViewState } from './component';
|
import { GroupComponent, GroupOptions } from './component';
|
||||||
import {
|
import { GridviewPanel } from '../../gridview/gridviewPanel';
|
||||||
GridPanelViewState,
|
|
||||||
GridviewPanel,
|
|
||||||
} from '../../gridview/gridviewPanel';
|
|
||||||
|
|
||||||
interface IGroupApi extends IGridviewPanelApi {}
|
interface IGroupApi extends IGridviewPanelApi {}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { trackFocus } from './dom';
|
import { trackFocus } from './dom';
|
||||||
import { addDisposableListener, Emitter, Event } from './events';
|
import { Emitter, Event } from './events';
|
||||||
import { IDisposable } from './lifecycle';
|
import { IDisposable } from './lifecycle';
|
||||||
|
|
||||||
export interface HostedContainerOptions {
|
export interface HostedContainerOptions {
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import { Orientation } from '../splitview/core/splitview';
|
|
||||||
import { FrameworkFactory } from '../types';
|
import { FrameworkFactory } from '../types';
|
||||||
|
|
||||||
export function createComponent<T>(
|
export function createComponent<T>(
|
||||||
@ -50,5 +49,5 @@ export function createComponent<T>(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Component(id, componentName!) as T;
|
return new Component(id, componentName!);
|
||||||
}
|
}
|
||||||
|
@ -120,8 +120,8 @@ export class Paneview extends CompositeDisposable implements IDisposable {
|
|||||||
return this.splitview.getViewSize(index);
|
return this.splitview.getViewSize(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
public getPanes() {
|
public getPanes(): PaneviewPanel[] {
|
||||||
return this.splitview.getViews() as PaneviewPanel[];
|
return this.splitview.getViews();
|
||||||
}
|
}
|
||||||
|
|
||||||
public removePane(index: number) {
|
public removePane(index: number) {
|
||||||
|
@ -272,7 +272,7 @@ export class PaneviewComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
getPanels(): PaneviewPanel[] {
|
getPanels(): PaneviewPanel[] {
|
||||||
return this.paneview.getPanes() as PaneviewPanel[];
|
return this.paneview.getPanes();
|
||||||
}
|
}
|
||||||
|
|
||||||
removePanel(panel: PaneviewPanel) {
|
removePanel(panel: PaneviewPanel) {
|
||||||
|
@ -12,7 +12,6 @@ import { usePortalsLifecycle } from '../react';
|
|||||||
import { DockviewApi } from '../../api/component.api';
|
import { DockviewApi } from '../../api/component.api';
|
||||||
import { ReactWatermarkPart } from './reactWatermarkPart';
|
import { ReactWatermarkPart } from './reactWatermarkPart';
|
||||||
import { PanelCollection } from '../types';
|
import { PanelCollection } from '../types';
|
||||||
import { IDisposable } from '../../lifecycle';
|
|
||||||
import { watchElementResize } from '../../dom';
|
import { watchElementResize } from '../../dom';
|
||||||
import { IContentRenderer, ITabRenderer } from '../../groupview/types';
|
import { IContentRenderer, ITabRenderer } from '../../groupview/types';
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ import {
|
|||||||
} from '../../paneview/paneviewComponent';
|
} from '../../paneview/paneviewComponent';
|
||||||
import { usePortalsLifecycle } from '../react';
|
import { usePortalsLifecycle } from '../react';
|
||||||
import { PaneviewApi } from '../../api/component.api';
|
import { PaneviewApi } from '../../api/component.api';
|
||||||
import { PanelBody, PanelHeader } from './view';
|
import { PanePanelSection } from './view';
|
||||||
import { PanelCollection } from '../types';
|
import { PanelCollection } from '../types';
|
||||||
import { watchElementResize } from '../../dom';
|
import { watchElementResize } from '../../dom';
|
||||||
|
|
||||||
@ -66,7 +66,9 @@ export const PaneviewReact: React.FunctionComponent<IPaneviewReactProps> = (
|
|||||||
componentId,
|
componentId,
|
||||||
component: any
|
component: any
|
||||||
) => {
|
) => {
|
||||||
return new PanelHeader(id, component, { addPortal });
|
return new PanePanelSection(id, component, {
|
||||||
|
addPortal,
|
||||||
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
body: {
|
body: {
|
||||||
@ -75,7 +77,9 @@ export const PaneviewReact: React.FunctionComponent<IPaneviewReactProps> = (
|
|||||||
componentId,
|
componentId,
|
||||||
component: any
|
component: any
|
||||||
) => {
|
) => {
|
||||||
return new PanelBody(id, component, { addPortal });
|
return new PanePanelSection(id, component, {
|
||||||
|
addPortal,
|
||||||
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -7,7 +7,7 @@ import {
|
|||||||
import { ReactPart, ReactPortalStore } from '../react';
|
import { ReactPart, ReactPortalStore } from '../react';
|
||||||
import { IPaneviewPanelProps } from './paneview';
|
import { IPaneviewPanelProps } from './paneview';
|
||||||
|
|
||||||
export class PanelBody implements IPaneBodyPart {
|
export class PanePanelSection implements IPaneBodyPart {
|
||||||
private _element: HTMLElement;
|
private _element: HTMLElement;
|
||||||
private part?: ReactPart<IPaneviewPanelProps>;
|
private part?: ReactPart<IPaneviewPanelProps>;
|
||||||
|
|
||||||
@ -17,58 +17,7 @@ export class PanelBody implements IPaneBodyPart {
|
|||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
public readonly id: string,
|
public readonly id: string,
|
||||||
private readonly component: React.FunctionComponent<
|
private readonly component: React.FunctionComponent<IPaneviewPanelProps>,
|
||||||
IPaneviewPanelProps
|
|
||||||
>,
|
|
||||||
private readonly reactPortalStore: ReactPortalStore
|
|
||||||
) {
|
|
||||||
this._element = document.createElement('div');
|
|
||||||
this._element.style.height = '100%';
|
|
||||||
this._element.style.width = '100%';
|
|
||||||
}
|
|
||||||
|
|
||||||
public init(parameters: PanePanelComponentInitParameter): void {
|
|
||||||
this.part = new ReactPart(
|
|
||||||
this.element,
|
|
||||||
this.reactPortalStore,
|
|
||||||
this.component,
|
|
||||||
{
|
|
||||||
...parameters.params,
|
|
||||||
api: parameters.api,
|
|
||||||
title: parameters.title,
|
|
||||||
containerApi: parameters.containerApi,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public toJSON() {
|
|
||||||
return {
|
|
||||||
id: this.id,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public update(params: PanelUpdateEvent) {
|
|
||||||
this.part?.update(params.params);
|
|
||||||
}
|
|
||||||
|
|
||||||
public dispose() {
|
|
||||||
this.part?.dispose();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class PanelHeader implements IPaneBodyPart {
|
|
||||||
private _element: HTMLElement;
|
|
||||||
private part?: ReactPart<IPaneviewPanelProps>;
|
|
||||||
|
|
||||||
get element() {
|
|
||||||
return this._element;
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
public readonly id: string,
|
|
||||||
private readonly component: React.FunctionComponent<
|
|
||||||
IPaneviewPanelProps
|
|
||||||
>,
|
|
||||||
private readonly reactPortalStore: ReactPortalStore
|
private readonly reactPortalStore: ReactPortalStore
|
||||||
) {
|
) {
|
||||||
this._element = document.createElement('div');
|
this._element = document.createElement('div');
|
||||||
|
@ -1,11 +1,6 @@
|
|||||||
import { IPanel, PanelInitParameters } from '../../panel/types';
|
import { IPanel, PanelInitParameters } from '../../panel/types';
|
||||||
import {
|
import { IView, SplitViewOptions, LayoutPriority } from './splitview';
|
||||||
IView,
|
import { FrameworkFactory } from '../../types';
|
||||||
SplitViewOptions,
|
|
||||||
LayoutPriority,
|
|
||||||
Orientation,
|
|
||||||
} from './splitview';
|
|
||||||
import { Constructor, FrameworkFactory } from '../../types';
|
|
||||||
import { SplitviewPanel } from '../splitviewPanel';
|
import { SplitviewPanel } from '../splitviewPanel';
|
||||||
import { SplitviewApi } from '../../api/component.api';
|
import { SplitviewApi } from '../../api/component.api';
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ export class SplitviewComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
getPanels(): SplitviewPanel[] {
|
getPanels(): SplitviewPanel[] {
|
||||||
return this.splitview.getViews() as SplitviewPanel[];
|
return this.splitview.getViews();
|
||||||
}
|
}
|
||||||
|
|
||||||
removePanel(panel: SplitviewPanel, sizing?: Sizing) {
|
removePanel(panel: SplitviewPanel, sizing?: Sizing) {
|
||||||
|
Loading…
Reference in New Issue
Block a user