Skip to content

Commit

Permalink
fix: manual merge
Browse files Browse the repository at this point in the history
  • Loading branch information
lumixraku committed Feb 5, 2025
1 parent 5b19e4c commit accce06
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 39 deletions.
23 changes: 20 additions & 3 deletions packages/core/src/sheets/sheet-skeleton.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ import type {
} from './typedef';
import type { Worksheet } from './worksheet';
import { Inject, Injector } from '@wendellhu/redi';
import { IS_ROW_STYLE_PRECEDE_COLUMN_STYLE } from '../common/const';
import { AUTO_HEIGHT_FOR_MERGED_CELLS, IS_ROW_STYLE_PRECEDE_COLUMN_STYLE } from '../common/const';
import { DocumentDataModel } from '../docs/data-model/document-data-model';
import { IConfigService } from '../services/config/config.service';
import { IContextService } from '../services/context/context.service';
Expand Down Expand Up @@ -71,6 +71,12 @@ export class SheetSkeleton extends Skeleton {
* Whether the row style precedes the column style.
*/
protected _isRowStylePrecedeColumnStyle = false;

/**
* Whether auto height for merged cells
*/
protected _skipAutoHeightForMergedCells = true;

constructor(
readonly worksheet: Worksheet,
protected _styles: Styles,
Expand All @@ -84,10 +90,11 @@ export class SheetSkeleton extends Skeleton {
this._cellData = this.worksheet.getCellMatrix();
this._imageCacheMap = new ImageCacheMap(this._injector);

this.init();
this.initConfig();
}

init() {
initConfig() {
this._skipAutoHeightForMergedCells = !(this._configService.getConfig(AUTO_HEIGHT_FOR_MERGED_CELLS) ?? false);
this._isRowStylePrecedeColumnStyle = this._configService.getConfig(IS_ROW_STYLE_PRECEDE_COLUMN_STYLE) ?? false;
}

Expand Down Expand Up @@ -126,6 +133,16 @@ export class SheetSkeleton extends Skeleton {
/** Viewport scrolled value */
protected _scrollY: number;

set columnHeaderHeight(value: number) {
this._columnHeaderHeight = value;
this._worksheetData.columnHeader.height = value;
}

set rowHeaderWidth(value: number) {
this._rowHeaderWidth = value;
this._worksheetData.rowHeader.width = value;
}

get rowHeightAccumulation(): number[] {
return this._rowHeightAccumulation;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import type { IScale } from '@univerjs/core';
import type { UniverRenderingContext } from '../../../context';

import type { IAColumnCfg, IAColumnCfgObj, IHeaderStyleCfg } from '../interfaces';
import type { SpreadsheetSkeleton } from '../sheet-skeleton';
import type { SpreadsheetSkeleton } from '../sheet.render-skeleton';
import { numberToABC } from '@univerjs/core';
import { DEFAULT_FONTFACE_PLANE, FIX_ONE_PIXEL_BLUR_OFFSET, MIDDLE_CELL_POS_MAGIC_NUMBER } from '../../../basics/const';
import { getColor } from '../../../basics/tools';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import type { IScale } from '@univerjs/core';

import type { UniverRenderingContext } from '../../../context';
import type { IARowCfg, IARowCfgObj, IHeaderStyleCfg, IRowStyleCfg } from '../interfaces';
import type { SpreadsheetSkeleton } from '../sheet-skeleton';
import type { SpreadsheetSkeleton } from '../sheet.render-skeleton';
import { DEFAULT_FONTFACE_PLANE, FIX_ONE_PIXEL_BLUR_OFFSET, MIDDLE_CELL_POS_MAGIC_NUMBER } from '../../../basics/const';
import { getColor } from '../../../basics/tools';
import { SheetRowHeaderExtensionRegistry } from '../../extension';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ export class SpreadsheetSkeleton extends SheetSkeleton {
super(worksheet, _styles, _localeService, _contextService, _configService, _injector);
}

override init() {
override initConfig() {
this._updateLayout();
this.disposeWithMe(
this._contextService.subscribeContextValue$(RENDER_RAW_FORMULA_KEY).pipe(
Expand Down Expand Up @@ -206,17 +206,6 @@ export class SpreadsheetSkeleton extends SheetSkeleton {
super._updateLayout(); // make dirty false
}


set columnHeaderHeight(value: number) {
this._columnHeaderHeight = value;
this._worksheetData.columnHeader.height = value;
}

set rowHeaderWidth(value: number) {
this._rowHeaderWidth = value;
this._worksheetData.rowHeader.width = value;
}

/**
* Range of visible area(range in viewBounds)
*/
Expand Down Expand Up @@ -417,6 +406,7 @@ export class SpreadsheetSkeleton extends SheetSkeleton {
return results;
}

// eslint-disable-next-line max-lines-per-function
private _calculateRowAutoHeight(rowNum: number): number {
const worksheet = this.worksheet;
const { columnCount, columnData, defaultRowHeight, defaultColumnWidth } = this._worksheetData;
Expand Down Expand Up @@ -617,13 +607,13 @@ export class SpreadsheetSkeleton extends SheetSkeleton {

getColWidth(colIndex: number) {
const preColIndex = Math.max(0, colIndex - 1);
const currColWidth = this._columnWidthAccumulation[colIndex] - this._columnWidthAccumulation[preColIndex];
const currColWidth = this.columnWidthAccumulation[colIndex] - this.columnWidthAccumulation[preColIndex];
return currColWidth;
}

getRowHeight(rowIndex: number) {
const preRowIndex = Math.max(0, rowIndex - 1);
const currRowHeight = this._rowHeightAccumulation[rowIndex] - this._rowHeightAccumulation[preRowIndex];
const currRowHeight = this.rowHeightAccumulation[rowIndex] - this.rowHeightAccumulation[preRowIndex];
return currRowHeight;
}

Expand Down Expand Up @@ -1451,6 +1441,30 @@ export class SpreadsheetSkeleton extends SheetSkeleton {
}
return hiddenCols;
}

/**
* @deprecated use function `convertTransformToOffsetX` in same package.
*/
convertTransformToOffsetX(
offsetX: number,
scaleX: number,
scrollXY: { x: number; y: number }
): number {
const { x: scrollX } = scrollXY;
return (offsetX - scrollX) * scaleX;
}

/**
* @deprecated use function `convertTransformToOffsetY` in same package.
*/
convertTransformToOffsetY(
offsetY: number,
scaleY: number,
scrollXY: { x: number; y: number }
): number {
const { y: scrollY } = scrollXY;
return (offsetY - scrollY) * scaleY;
}
}

/**
Expand Down
27 changes: 12 additions & 15 deletions packages/sheets-ui/src/services/sheet-skeleton-manager.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
*/

import type { IRange, IRangeWithCoord, Nullable, Workbook, Worksheet } from '@univerjs/core';
import type { IRender, IRenderContext, IRenderModule } from '@univerjs/engine-render';
import type { IRender, IRenderContext, IRenderModule, Scene } from '@univerjs/engine-render';
import { Disposable, Inject, Injector } from '@univerjs/core';
import { SHEET_VIEWPORT_KEY, SpreadsheetSkeleton } from '@univerjs/engine-render';
import { SheetsSelectionsService } from '@univerjs/sheets';
import { SheetSkeletonService, SheetsSelectionsService } from '@univerjs/sheets';
import { BehaviorSubject } from 'rxjs';
import { SetColumnHeaderHeightCommand, SetRowHeaderWidthCommand } from '../commands/commands/headersize-changed.command';
import { ISheetSelectionRenderService } from './selection/base-selection-render.service';
Expand Down Expand Up @@ -121,17 +121,15 @@ export class SheetSkeletonManagerService extends Disposable implements IRenderMo
return this.getSkeletonParam(sheetId);
}

/**
* unitId is never read?
* why ?? what does unitId for ??? no need unitId this service is registered in render unit already.
*/
// getUnitSkeleton(sheetId: string): Nullable<ISheetSkeletonManagerParam> {
// const param = this._getSkeleton(sheetId);
// // if (param) {
// // param.unitId = unitId;
// // }
// return param;
// }
// why ?? what does unitId for ??? no need unitId, this service is registered in render unit already.
getUnitSkeleton(unitId: string, sheetId: string): Nullable<ISheetSkeletonManagerParam> {
const param = this._getSkeletonParam(sheetId);
if (param != null) {
// unitId is never read?
param.unitId = unitId;
}
return param;
}

setCurrent(searchParam: ISheetSkeletonManagerSearch): Nullable<ISheetSkeletonManagerParam> {
this._setCurrent(searchParam.sheetId);
Expand Down Expand Up @@ -256,7 +254,7 @@ export class SheetSkeletonManagerService extends Disposable implements IRenderMo
return param ? param.skeleton : null;
}

private _buildSkeleton(worksheet: Worksheet, scene: Nullable<Scene>) {
private _buildSkeleton(worksheet: Worksheet, _scene?: Nullable<Scene>) {
const spreadsheetSkeleton = this._injector.createInstance(
SpreadsheetSkeleton,
worksheet,
Expand Down Expand Up @@ -337,6 +335,5 @@ export class SheetSkeletonManagerService extends Disposable implements IRenderMo
sheetSkeletonManagerParam.commandId = SetRowHeaderWidthCommand.id;
this._currentSkeleton$.next(sheetSkeletonManagerParam);
}
return spreadsheetSkeleton;
}
}
9 changes: 4 additions & 5 deletions packages/sheets-ui/src/views/clipboard/ClipboardPopupMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import type { IDiscreteRange } from '../../controllers/utils/range-tools';
import type { IPasteHookKeyType } from '../../services/clipboard/type';
import { ICommandService, IUniverInstanceService, LocaleService, toDisposable, useDependency, useObservable } from '@univerjs/core';
import { DropdownOverlay, DropdownProvider, DropdownTrigger } from '@univerjs/design';
import { IRenderManagerService } from '@univerjs/engine-render';
import { convertTransformToOffsetX, convertTransformToOffsetY, IRenderManagerService } from '@univerjs/engine-render';
import { CheckMarkSingle, MoreDownSingle, PasteSpecial } from '@univerjs/icons';
import clsx from 'clsx';
import React, { useCallback, useEffect, useState } from 'react';
Expand Down Expand Up @@ -81,8 +81,8 @@ const useMenuPosition = (range?: IDiscreteRange) => {
const endX = endPosition?.endX ?? 0;
const endY = endPosition?.endY ?? 0;

const positionEndX = skeleton?.convertTransformToOffsetX(endX, scaleX, scrollXY) ?? -9999;
const positionEndY = skeleton?.convertTransformToOffsetY(endY, scaleY, scrollXY) ?? -9999;
const positionEndX = convertTransformToOffsetX(endX, scaleX, scrollXY) ?? -9999;
const positionEndY = convertTransformToOffsetY(endY, scaleY, scrollXY) ?? -9999;

const canvasWidth = canvas?.getWidth();
const canvasHeight = canvas?.getHeight();
Expand Down Expand Up @@ -192,7 +192,7 @@ export const ClipboardPopupMenu = () => {
</div>
</DropdownTrigger>
<DropdownOverlay className={clsx(styles.sheetPasteOptionsMenu, `
univer-border univer-border-gray-200 univer-border-solid
univer-border univer-border-solid univer-border-gray-200
`)}
>
<ul>
Expand Down Expand Up @@ -220,4 +220,3 @@ export const ClipboardPopupMenu = () => {
</div>
);
};

0 comments on commit accce06

Please sign in to comment.