refactor: reduce code smells

This commit is contained in:
mathuo 2021-03-24 21:35:59 +00:00
parent 7aaec28ebd
commit 9c547f90b6
23 changed files with 65 additions and 121 deletions

View File

@ -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',
};

View File

@ -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,

View File

@ -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;
} }
} }

View File

@ -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(

View File

@ -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';

View File

@ -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);

View File

@ -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';

View File

@ -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,
}; };
} }

View File

@ -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(

View File

@ -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();

View File

@ -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,

View File

@ -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,

View File

@ -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();

View File

@ -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 {}

View File

@ -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 {

View File

@ -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!);
} }

View File

@ -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) {

View File

@ -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) {

View File

@ -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';

View File

@ -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,
});
}, },
}, },
}, },

View File

@ -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');

View File

@ -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';

View File

@ -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) {