diff --git a/packages/engine-render/src/components/sheets/sheet-skeleton.ts b/packages/engine-render/src/components/sheets/sheet-skeleton.ts index 92087d01eaa..9f19f5cfcb8 100644 --- a/packages/engine-render/src/components/sheets/sheet-skeleton.ts +++ b/packages/engine-render/src/components/sheets/sheet-skeleton.ts @@ -828,11 +828,12 @@ export class SpreadsheetSkeleton extends Skeleton { offsetY: number, scaleX: number, scaleY: number, - scrollXY: { x: number; y: number } + scrollXY: { x: number; y: number }, + closeFirst?: boolean ) { - const row = this.getRowPositionByOffsetY(offsetY, scaleY, scrollXY); + const row = this.getRowPositionByOffsetY(offsetY, scaleY, scrollXY, closeFirst); - const column = this.getColumnPositionByOffsetX(offsetX, scaleX, scrollXY); + const column = this.getColumnPositionByOffsetX(offsetX, scaleX, scrollXY, closeFirst); return { row, @@ -848,7 +849,7 @@ export class SpreadsheetSkeleton extends Skeleton { * @returns */ - getColumnPositionByOffsetX(offsetX: number, scaleX: number, scrollXY: { x: number; y: number }) { + getColumnPositionByOffsetX(offsetX: number, scaleX: number, scrollXY: { x: number; y: number }, closeFirst?: boolean) { offsetX = this.getTransformOffsetX(offsetX, scaleX, scrollXY); const { columnWidthAccumulation } = this; @@ -861,6 +862,13 @@ export class SpreadsheetSkeleton extends Skeleton { column = 0; } + if (closeFirst) { + // check if upper column was closer than current + if (Math.abs(columnWidthAccumulation[column] - offsetX) < Math.abs(offsetX - (columnWidthAccumulation[column - 1] ?? 0))) { + column = column + 1; + } + } + // if (column === -1) { // const columnLength = columnWidthAccumulation.length - 1; // const lastColumnValue = columnWidthAccumulation[columnLength]; @@ -874,6 +882,7 @@ export class SpreadsheetSkeleton extends Skeleton { return column; } + /** * * @param offsetY scaled offset y @@ -882,7 +891,7 @@ export class SpreadsheetSkeleton extends Skeleton { * @param scrollXY.x * @param scrollXY.y */ - getRowPositionByOffsetY(offsetY: number, scaleY: number, scrollXY: { x: number; y: number }) { + getRowPositionByOffsetY(offsetY: number, scaleY: number, scrollXY: { x: number; y: number }, closeFirst?: boolean) { const { rowHeightAccumulation } = this; offsetY = this.getTransformOffsetY(offsetY, scaleY, scrollXY); @@ -895,6 +904,12 @@ export class SpreadsheetSkeleton extends Skeleton { row = 0; } + if (closeFirst) { + // check if upper row was closer than current + if (Math.abs(rowHeightAccumulation[row] - offsetY) < Math.abs(offsetY - (rowHeightAccumulation[row - 1] ?? 0))) { + row = row + 1; + } + } // if (row === -1) { // const rowLength = rowHeightAccumulation.length - 1; // const lastRowValue = rowHeightAccumulation[rowLength]; diff --git a/packages/sheets-data-validation/src/controllers/dv-render.controller.ts b/packages/sheets-data-validation/src/controllers/dv-render.controller.ts index bd3230dc9f9..e86e76417fe 100644 --- a/packages/sheets-data-validation/src/controllers/dv-render.controller.ts +++ b/packages/sheets-data-validation/src/controllers/dv-render.controller.ts @@ -16,11 +16,11 @@ import type { ICellDataForSheetInterceptor, ICellRenderContext, Workbook } from '@univerjs/core'; -import { DataValidationRenderMode, DataValidationStatus, DataValidationType, IUniverInstanceService, LifecycleStages, OnLifecycle, RxDisposable, UniverInstanceType, WrapStrategy } from '@univerjs/core'; +import { DataValidationRenderMode, DataValidationStatus, DataValidationType, ICommandService, IUniverInstanceService, LifecycleStages, OnLifecycle, RxDisposable, sequenceExecute, UniverInstanceType, WrapStrategy } from '@univerjs/core'; import { DataValidationModel, DataValidatorRegistryService } from '@univerjs/data-validation'; import { ComponentManager, IMenuService } from '@univerjs/ui'; import { Inject, Injector } from '@wendellhu/redi'; -import { IEditorBridgeService, SheetSkeletonManagerService } from '@univerjs/sheets-ui'; +import { AutoHeightController, IEditorBridgeService, SheetSkeletonManagerService } from '@univerjs/sheets-ui'; import type { Spreadsheet } from '@univerjs/engine-render'; import { IRenderManagerService } from '@univerjs/engine-render'; import { INTERCEPTOR_POINT, SheetInterceptorService } from '@univerjs/sheets'; @@ -58,7 +58,9 @@ export class DataValidationRenderController extends RxDisposable { @IEditorBridgeService private readonly _editorBridgeService: IEditorBridgeService, @Inject(DataValidationDropdownManagerService) private readonly _dropdownManagerService: DataValidationDropdownManagerService, @Inject(SheetInterceptorService) private readonly _sheetInterceptorService: SheetInterceptorService, - @Inject(Injector) private readonly _injector: Injector + @Inject(Injector) private readonly _injector: Injector, + @Inject(AutoHeightController) private readonly _autoHeightController: AutoHeightController, + @ICommandService private readonly _commandService: ICommandService ) { super(); this._init(); @@ -70,6 +72,7 @@ export class DataValidationRenderController extends RxDisposable { this._initSkeletonChange(); this._initDropdown(); this._initViewModelIntercept(); + this._initAutoHeight(); } private _initMenu() { @@ -204,7 +207,7 @@ export class DataValidationRenderController extends RxDisposable { this._sheetInterceptorService.intercept( INTERCEPTOR_POINT.CELL_CONTENT, { - // eslint-disable-next-line max-lines-per-function + // eslint-disable-next-line max-lines-per-function, complexity handler: (cell, pos, next) => { const { row, col, unitId, subUnitId } = pos; const manager = this._dataValidationModel.ensureManager(unitId, subUnitId) as SheetDataValidationManager; @@ -328,4 +331,13 @@ export class DataValidationRenderController extends RxDisposable { ) ); } + + private _initAutoHeight() { + this._dataValidationModel.ruleChange$.subscribe((info) => { + if (info.rule?.ranges) { + const mutations = this._autoHeightController.getUndoRedoParamsOfAutoHeight(info.rule.ranges); + sequenceExecute(mutations.redos, this._commandService); + } + }); + } } diff --git a/packages/sheets-data-validation/src/locale/en-US.ts b/packages/sheets-data-validation/src/locale/en-US.ts index ff759801ab3..dd9ed878745 100644 --- a/packages/sheets-data-validation/src/locale/en-US.ts +++ b/packages/sheets-data-validation/src/locale/en-US.ts @@ -27,6 +27,7 @@ const locale: typeof zhCN = { date: 'Please input date or formula', list: 'Please input options', listInvalid: 'The list source must be a delimited list or a reference to a single row or column', + checkboxEqual: 'Enter different values for ticked and unticked cell contents.', }, panel: { title: 'Data validation management', diff --git a/packages/sheets-data-validation/src/locale/zh-CN.ts b/packages/sheets-data-validation/src/locale/zh-CN.ts index 0e020d062b0..414aae6516e 100644 --- a/packages/sheets-data-validation/src/locale/zh-CN.ts +++ b/packages/sheets-data-validation/src/locale/zh-CN.ts @@ -25,6 +25,7 @@ const locale = { date: '请输入合法的日期或公式', list: '请输入至少一个合法选项', listInvalid: '列表源必须是分隔列表或对单行或列的引用。', + checkboxEqual: '为勾选和未勾选的单元格内容输入不同的值。', }, panel: { title: '管理数据验证', diff --git a/packages/sheets-data-validation/src/validators/checkbox-validator.ts b/packages/sheets-data-validation/src/validators/checkbox-validator.ts index 20e6f7ecd84..795fc59c146 100644 --- a/packages/sheets-data-validation/src/validators/checkbox-validator.ts +++ b/packages/sheets-data-validation/src/validators/checkbox-validator.ts @@ -46,14 +46,23 @@ export class CheckboxValidator extends BaseDataValidator { } override validatorFormula(rule: IDataValidationRuleBase): IFormulaValidResult { - const { formula1 = CHECKBOX_FORMULA_1, formula2 = CHECKBOX_FORMULA_2 } = rule; + const { formula1, formula2 } = rule; const formula1Success = !Tools.isBlank(formula1); const formula2Success = !Tools.isBlank(formula2); + const isEqual = formula1 === formula2; return { - success: formula1Success && formula2Success, - formula1: !formula1Success ? this.localeService.t('dataValidation.validFail.common') : '', - formula2: !formula2Success ? this.localeService.t('dataValidation.validFail.common') : '', + success: (formula1Success && formula2Success && !isEqual) || (!formula1Success && !formula2Success), + formula1: !formula1Success ? + this.localeService.t('dataValidation.validFail.common') + : isEqual ? + this.localeService.t('dataValidation.validFail.checkboxEqual') + : '', + formula2: !formula2Success ? + this.localeService.t('dataValidation.validFail.common') + : isEqual ? + this.localeService.t('dataValidation.validFail.checkboxEqual') + : '', }; } diff --git a/packages/sheets-data-validation/src/views/formula-input/checkbox-formula-input.tsx b/packages/sheets-data-validation/src/views/formula-input/checkbox-formula-input.tsx index bb93a67c9f8..69ddaf4edc0 100644 --- a/packages/sheets-data-validation/src/views/formula-input/checkbox-formula-input.tsx +++ b/packages/sheets-data-validation/src/views/formula-input/checkbox-formula-input.tsx @@ -60,7 +60,7 @@ export function CheckboxFormulaInput(props: IFormulaInputProps) { onChange={(newValue) => { onChange?.({ ...value, - formula1: newValue, + formula1: newValue || undefined, }); }} /> @@ -77,7 +77,7 @@ export function CheckboxFormulaInput(props: IFormulaInputProps) { onChange={(newValue) => { onChange?.({ ...value, - formula2: newValue, + formula2: newValue || undefined, }); }} /> diff --git a/packages/sheets-data-validation/src/views/list/index.tsx b/packages/sheets-data-validation/src/views/list/index.tsx index 4fffc52c213..d50950d4736 100644 --- a/packages/sheets-data-validation/src/views/list/index.tsx +++ b/packages/sheets-data-validation/src/views/list/index.tsx @@ -53,7 +53,7 @@ function DataValidationListWithWorkbook(props: { workbook: Workbook }) { const { workbook } = props; const worksheet = useObservable(workbook.activeSheet$, undefined, true)!; const unitId = workbook.getUnitId(); - const subUnitId = worksheet.getSheetId(); + const subUnitId = worksheet?.getSheetId(); const manager = dataValidationModel.ensureManager(unitId, subUnitId); useEffect(() => { diff --git a/packages/sheets-data-validation/src/widgets/checkbox-widget.ts b/packages/sheets-data-validation/src/widgets/checkbox-widget.ts index 70cf1e7bcaa..74394d84766 100644 --- a/packages/sheets-data-validation/src/widgets/checkbox-widget.ts +++ b/packages/sheets-data-validation/src/widgets/checkbox-widget.ts @@ -78,8 +78,9 @@ export class CheckboxRender implements IBaseDataValidationWidget { // super } - calcCellAutoHeight(): number | undefined { - return undefined; + calcCellAutoHeight(info: ICellRenderContext): number | undefined { + const { style } = info; + return (style?.fs ?? 10) * 1.6; } private async _parseFormula(rule: IDataValidationRule, unitId: string, subUnitId: string): Promise { @@ -165,6 +166,7 @@ export class CheckboxRender implements IBaseDataValidationWidget { return false; } + async onPointerDown(info: ICellRenderContext, evt: IPointerEvent | IMouseEvent) { if (evt.button === 2) { return; diff --git a/packages/sheets-data-validation/src/widgets/dropdown-widget.ts b/packages/sheets-data-validation/src/widgets/dropdown-widget.ts index ad7ac869f70..52e972f3b90 100644 --- a/packages/sheets-data-validation/src/widgets/dropdown-widget.ts +++ b/packages/sheets-data-validation/src/widgets/dropdown-widget.ts @@ -229,7 +229,7 @@ export class DropdownWidget implements IBaseDataValidationWidget { if ( tb === WrapStrategy.WRAP ) { - docModel.updateDocumentDataPageSize(realWidth); + docModel.updateDocumentDataPageSize(Math.max(realWidth, 1)); } documentSkeleton.calculate(); @@ -295,7 +295,7 @@ export class DropdownWidget implements IBaseDataValidationWidget { if ( tb === WrapStrategy.WRAP ) { - docModel.updateDocumentDataPageSize(realWidth); + docModel.updateDocumentDataPageSize(Math.max(realWidth, 1)); } documentSkeleton.calculate(); @@ -329,7 +329,7 @@ export class DropdownWidget implements IBaseDataValidationWidget { } ctx.translate(MARGIN_H, paddingTop); - const rectWidth = cellWidth - MARGIN_H * 2; + const rectWidth = Math.max(cellWidth - MARGIN_H * 2, 1); const rectHeight = fontHeight; Rect.drawWith(ctx, { width: rectWidth, @@ -398,7 +398,7 @@ export class DropdownWidget implements IBaseDataValidationWidget { if ( tb === WrapStrategy.WRAP ) { - docModel.updateDocumentDataPageSize(realWidth); + docModel.updateDocumentDataPageSize(Math.max(realWidth, 1)); } documentSkeleton.calculate(); @@ -414,7 +414,7 @@ export class DropdownWidget implements IBaseDataValidationWidget { if ( tb === WrapStrategy.WRAP ) { - docModel.updateDocumentDataPageSize(realWidth); + docModel.updateDocumentDataPageSize(Math.max(realWidth, 1)); } documentSkeleton.calculate(); diff --git a/packages/sheets-ui/src/controllers/auto-height.controller.ts b/packages/sheets-ui/src/controllers/auto-height.controller.ts index bb08e1f813b..9da848129e4 100644 --- a/packages/sheets-ui/src/controllers/auto-height.controller.ts +++ b/packages/sheets-ui/src/controllers/auto-height.controller.ts @@ -15,7 +15,7 @@ */ import type { IRange, Workbook } from '@univerjs/core'; -import { IUniverInstanceService, LifecycleStages, OnLifecycle, UniverInstanceType } from '@univerjs/core'; +import { Disposable, IUniverInstanceService, LifecycleStages, OnLifecycle, UniverInstanceType } from '@univerjs/core'; import type { ISetRangeValuesRangeMutationParams, ISetStyleCommandParams, @@ -36,7 +36,7 @@ import { Inject, Injector } from '@wendellhu/redi'; import { SheetSkeletonManagerService } from '../services/sheet-skeleton-manager.service'; @OnLifecycle(LifecycleStages.Ready, AutoHeightController) -export class AutoHeightController { +export class AutoHeightController extends Disposable { constructor( @Inject(Injector) private _injector: Injector, @Inject(SheetInterceptorService) private _sheetInterceptorService: SheetInterceptorService, @@ -44,10 +44,11 @@ export class AutoHeightController { @Inject(IUniverInstanceService) private _univerInstanceService: IUniverInstanceService, @Inject(SheetSkeletonManagerService) private _sheetSkeletonManagerService: SheetSkeletonManagerService ) { + super(); this._initialize(); } - private _getUndoRedoParamsOfAutoHeight(ranges: IRange[]) { + getUndoRedoParamsOfAutoHeight(ranges: IRange[]) { const { _univerInstanceService: univerInstanceService, _sheetSkeletonManagerService: sheetSkeletonService, @@ -66,12 +67,10 @@ export class AutoHeightController { unitId, rowsAutoHeightInfo, }; - const undoParams: ISetWorksheetRowAutoHeightMutationParams = SetWorksheetRowAutoHeightMutationFactory( injector, redoParams ); - return { undos: [ { @@ -92,7 +91,7 @@ export class AutoHeightController { const { _sheetInterceptorService: sheetInterceptorService, _selectionManagerService: selectionManagerService } = this; // for intercept'SetRangeValuesCommand' command. - sheetInterceptorService.interceptCommand({ + this.disposeWithMe(sheetInterceptorService.interceptCommand({ getMutations: (command: { id: string; params: ISetRangeValuesRangeMutationParams }) => { if (command.id !== SetRangeValuesCommand.id) { return { @@ -101,11 +100,11 @@ export class AutoHeightController { }; } - return this._getUndoRedoParamsOfAutoHeight(command.params.range); + return this.getUndoRedoParamsOfAutoHeight(command.params.range); }, - }); + })); // for intercept 'sheet.command.set-row-is-auto-height' command. - sheetInterceptorService.interceptCommand({ + this.disposeWithMe(sheetInterceptorService.interceptCommand({ getMutations: (command: { id: string; params: ISetWorksheetRowIsAutoHeightMutationParams }) => { if (command.id !== SetWorksheetRowIsAutoHeightCommand.id) { return { @@ -114,12 +113,12 @@ export class AutoHeightController { }; } - return this._getUndoRedoParamsOfAutoHeight(command.params.ranges); + return this.getUndoRedoParamsOfAutoHeight(command.params.ranges); }, - }); + })); // for intercept set style command. - sheetInterceptorService.interceptCommand({ + this.disposeWithMe(sheetInterceptorService.interceptCommand({ getMutations: (command: { id: string; params: ISetStyleCommandParams }) => { if (command.id !== SetStyleCommand.id) { return { @@ -148,8 +147,8 @@ export class AutoHeightController { }; } - return this._getUndoRedoParamsOfAutoHeight(selections); + return this.getUndoRedoParamsOfAutoHeight(selections); }, - }); + })); } } diff --git a/packages/sheets-ui/src/controllers/cell-custom-render.controller.ts b/packages/sheets-ui/src/controllers/cell-custom-render.controller.ts index 5aedc89d536..2aaf0b53097 100644 --- a/packages/sheets-ui/src/controllers/cell-custom-render.controller.ts +++ b/packages/sheets-ui/src/controllers/cell-custom-render.controller.ts @@ -19,6 +19,7 @@ import { Disposable, DisposableCollection, IUniverInstanceService, LifecycleStag import type { IMouseEvent, IPointerEvent, IRenderContext, IRenderController, RenderManagerService, Spreadsheet } from '@univerjs/engine-render'; import { IRenderManagerService, Vector2 } from '@univerjs/engine-render'; import { Inject } from '@wendellhu/redi'; +import type { ISheetSkeletonManagerParam } from '../services/sheet-skeleton-manager.service'; import { SheetSkeletonManagerService } from '../services/sheet-skeleton-manager.service'; @@ -48,15 +49,17 @@ export class CellCustomRenderController extends Disposable implements IRenderCon const disposableCollection = new DisposableCollection(); const workbook = this._context.unit; - disposableCollection.dispose(); - if (workbook) { - const unitId = workbook.getUnitId(); - - const currentRender = this._renderManagerService.getRenderById(workbook.getUnitId()); + // eslint-disable-next-line max-lines-per-function + const handleSkeletonChange = (skeletonParam: Nullable) => { + disposableCollection.dispose(); + if (!skeletonParam) { + return; + } + const { unitId, skeleton } = skeletonParam; + const currentRender = this._renderManagerService.getRenderById(unitId); if (currentRender && currentRender.mainComponent) { const spreadsheet = currentRender.mainComponent as Spreadsheet; const getActiveRender = (evt: IPointerEvent | IMouseEvent) => { - const skeleton = this._sheetSkeletonManagerService.getCurrent()?.skeleton!; const { offsetX, offsetY } = evt; const scene = currentRender.scene; const worksheet = workbook.getActiveSheet(); @@ -164,8 +167,10 @@ export class CellCustomRenderController extends Disposable implements IRenderCon disposable && disposableCollection.add(disposable); moveDisposable && disposableCollection.add(moveDisposable); } - } + }; + this.disposeWithMe(this._sheetSkeletonManagerService.currentSkeleton$.subscribe(handleSkeletonChange)); + handleSkeletonChange(this._sheetSkeletonManagerService.getCurrent()); this.disposeWithMe(disposableCollection); } } diff --git a/packages/sheets-ui/src/controllers/hover-render.controller.ts b/packages/sheets-ui/src/controllers/hover-render.controller.ts index 42db6c34de7..84bdbeac6f3 100644 --- a/packages/sheets-ui/src/controllers/hover-render.controller.ts +++ b/packages/sheets-ui/src/controllers/hover-render.controller.ts @@ -14,12 +14,14 @@ * limitations under the License. */ -import type { Workbook } from '@univerjs/core'; -import { Disposable, IUniverInstanceService, LifecycleStages, OnLifecycle, UniverInstanceType } from '@univerjs/core'; +import type { Nullable, Workbook } from '@univerjs/core'; +import { Disposable, DisposableCollection, LifecycleStages, OnLifecycle } from '@univerjs/core'; import type { IRenderContext, IRenderController } from '@univerjs/engine-render'; import { IRenderManagerService } from '@univerjs/engine-render'; import { Inject } from '@wendellhu/redi'; import { HoverManagerService } from '../services/hover-manager.service'; +import type { ISheetSkeletonManagerParam } from '../services/sheet-skeleton-manager.service'; +import { SheetSkeletonManagerService } from '../services/sheet-skeleton-manager.service'; @OnLifecycle(LifecycleStages.Rendered, HoverRenderController) export class HoverRenderController extends Disposable implements IRenderController { @@ -27,7 +29,7 @@ export class HoverRenderController extends Disposable implements IRenderControll private readonly _context: IRenderContext, @IRenderManagerService private _renderManagerService: IRenderManagerService, @Inject(HoverManagerService) private _hoverManagerService: HoverManagerService, - @IUniverInstanceService private _univerInstanceService: IUniverInstanceService + @Inject(SheetSkeletonManagerService) private _sheetSkeletonManagerService: SheetSkeletonManagerService ) { super(); @@ -35,22 +37,34 @@ export class HoverRenderController extends Disposable implements IRenderControll } private _initPointerEvent() { - const currentRender = this._renderManagerService.getRenderById( - this._univerInstanceService.getCurrentUnitForType(UniverInstanceType.UNIVER_SHEET)!.getUnitId() - ); - if (!currentRender) { - return; - } - - const { scene } = currentRender; - const observer = scene.onPointerMoveObserver.add((evt) => { - this._hoverManagerService.onMouseMove(evt.offsetX, evt.offsetY); - }); - - this.disposeWithMe({ - dispose() { - scene.onPointerMoveObserver.remove(observer); - }, - }); + const disposeSet = new DisposableCollection(); + const handleSkeletonChange = (skeletonParam: Nullable) => { + disposeSet.dispose(); + if (!skeletonParam) { + return; + } + + const currentRender = this._renderManagerService.getRenderById(skeletonParam.unitId); + + if (!currentRender) { + return; + } + + const { scene } = currentRender; + const observer = scene.onPointerMoveObserver.add((evt) => { + this._hoverManagerService.onMouseMove(evt.offsetX, evt.offsetY); + }); + + disposeSet.add({ + dispose() { + scene.onPointerMoveObserver.remove(observer); + }, + }); + }; + + handleSkeletonChange(this._sheetSkeletonManagerService.getCurrent()); + this.disposeWithMe(this._sheetSkeletonManagerService.currentSkeleton$.subscribe((skeletonParam) => { + handleSkeletonChange(skeletonParam); + })); } } diff --git a/packages/sheets-ui/src/controllers/render-controllers/freeze.render-controller.ts b/packages/sheets-ui/src/controllers/render-controllers/freeze.render-controller.ts index 2462314f73c..a8a56caa769 100644 --- a/packages/sheets-ui/src/controllers/render-controllers/freeze.render-controller.ts +++ b/packages/sheets-ui/src/controllers/render-controllers/freeze.render-controller.ts @@ -396,6 +396,7 @@ export class HeaderFreezeRenderController extends Disposable implements IRenderC return viewports.find((i) => i.isHit(new Vector2(evt.offsetX, evt.offsetY))) || null; } + // eslint-disable-next-line max-lines-per-function private _freezeDown( evt: IPointerEvent | IMouseEvent, freezeObjectHeaderRect: Rect, @@ -427,7 +428,6 @@ export class HeaderFreezeRenderController extends Disposable implements IRenderC this._changeToColumn = oldFreeze.startColumn; this._changeToRow = oldFreeze.startRow; } - this._moveObserver = scene.onPointerMoveObserver.add((moveEvt: IPointerEvent | IMouseEvent) => { const activeViewport = this._getActiveViewport(moveEvt); @@ -436,7 +436,8 @@ export class HeaderFreezeRenderController extends Disposable implements IRenderC moveEvt.offsetY, scene, skeleton, - activeViewport || undefined + activeViewport || undefined, + true ); scene.setCursor(CURSOR_TYPE.GRABBING); @@ -484,6 +485,7 @@ export class HeaderFreezeRenderController extends Disposable implements IRenderC // this._columnMoving(newMoveOffsetX, newMoveOffsetY, matchSelectionData, initialType); }); + // eslint-disable-next-line max-lines-per-function, complexity this._upObserver = scene.onPointerUpObserver.add(() => { scene.resetCursor(); scene.enableEvent(); diff --git a/packages/sheets-ui/src/controllers/utils/component-tools.ts b/packages/sheets-ui/src/controllers/utils/component-tools.ts index 3c7eefc976b..a64c29c7e92 100644 --- a/packages/sheets-ui/src/controllers/utils/component-tools.ts +++ b/packages/sheets-ui/src/controllers/utils/component-tools.ts @@ -106,7 +106,8 @@ export function getCoordByOffset( evtOffsetY: number, scene: Scene, skeleton: SpreadsheetSkeleton, - viewport?: Viewport + viewport?: Viewport, + closeFirst?: boolean ) { const relativeCoords = scene.getRelativeCoord(Vector2.FromArray([evtOffsetX, evtOffsetY])); @@ -121,7 +122,8 @@ export function getCoordByOffset( newEvtOffsetY, scaleX, scaleY, - scrollXY + scrollXY, + closeFirst ); const { row, column } = moveActualSelection; diff --git a/packages/sheets-ui/src/index.ts b/packages/sheets-ui/src/index.ts index fbbf0c52158..b7164c99e6c 100644 --- a/packages/sheets-ui/src/index.ts +++ b/packages/sheets-ui/src/index.ts @@ -90,3 +90,4 @@ export type { IAutoFillLocation } from './services/auto-fill/type'; export type { IDiscreteRange } from './controllers/utils/range-tools'; export { virtualizeDiscreteRanges, rangeToDiscreteRange } from './controllers/utils/range-tools'; export { type IHoverCellPosition } from './services/hover-manager.service'; +export { AutoHeightController } from './controllers/auto-height.controller'; diff --git a/packages/sheets/src/commands/mutations/set-worksheet-row-height.mutation.ts b/packages/sheets/src/commands/mutations/set-worksheet-row-height.mutation.ts index 8705e81d02e..e74ba5eb206 100644 --- a/packages/sheets/src/commands/mutations/set-worksheet-row-height.mutation.ts +++ b/packages/sheets/src/commands/mutations/set-worksheet-row-height.mutation.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import type { BooleanNumber, IMutation, IObjectArrayPrimitiveType, IRange, Nullable } from '@univerjs/core'; +import type { BooleanNumber, IMutation, IObjectArrayPrimitiveType, IRange, Nullable, Workbook } from '@univerjs/core'; import { CommandType, IUniverInstanceService } from '@univerjs/core'; import type { IRowAutoHeightInfo } from '@univerjs/engine-render'; import type { IAccessor } from '@wendellhu/redi'; @@ -202,7 +202,7 @@ export const SetWorksheetRowAutoHeightMutation: IMutation { const { unitId, subUnitId, rowsAutoHeightInfo } = params; const univerInstanceService = accessor.get(IUniverInstanceService); - const workbook = univerInstanceService.getUniverSheetInstance(unitId); + const workbook = univerInstanceService.getUnit(unitId); const worksheet = workbook?.getSheetBySheetId(subUnitId); if (!worksheet || !workbook) {