Skip to content

Commit

Permalink
feat: add executeLocationArea api #940
Browse files Browse the repository at this point in the history
  • Loading branch information
Hufe921 committed Jan 24, 2025
1 parent ae8bbb8 commit cd42514
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 1 deletion.
10 changes: 10 additions & 0 deletions docs/en/guide/command-execute.md
Original file line number Diff line number Diff line change
Expand Up @@ -1051,3 +1051,13 @@ Usage:
```javascript
instance.command.executeSetAreaProperties(payload: ISetAreaPropertiesOption)
```

## executeLocationArea

Feature: positioning area position

Usage:

```javascript
instance.command.executeLocationArea(areaId: string)
```
8 changes: 8 additions & 0 deletions docs/guide/command-execute.md
Original file line number Diff line number Diff line change
Expand Up @@ -1047,3 +1047,11 @@ const areaId = instance.command.executeInsertArea(payload: IInsertAreaOption)
```js
instance.command.executeSetAreaProperties(payload: ISetAreaPropertiesOption)
```

## executeLocationArea

功能:定位区域位置

```js
instance.command.executeLocationArea(areaId: string)
```
2 changes: 2 additions & 0 deletions src/editor/core/command/Command.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ export class Command {
public executeInsertElementList: CommandAdapt['insertElementList']
public executeInsertArea: CommandAdapt['insertArea']
public executeSetAreaProperties: CommandAdapt['setAreaProperties']
public executeLocationArea: CommandAdapt['locationArea']
public executeAppendElementList: CommandAdapt['appendElementList']
public executeUpdateElementById: CommandAdapt['updateElementById']
public executeSetValue: CommandAdapt['setValue']
Expand Down Expand Up @@ -224,6 +225,7 @@ export class Command {
this.getAreaValue = adapt.getAreaValue.bind(adapt)
this.executeInsertArea = adapt.insertArea.bind(adapt)
this.executeSetAreaProperties = adapt.setAreaProperties.bind(adapt)
this.executeLocationArea = adapt.locationArea.bind(adapt)
// 通用
this.executeInsertElementList = adapt.insertElementList.bind(adapt)
this.executeAppendElementList = adapt.appendElementList.bind(adapt)
Expand Down
28 changes: 28 additions & 0 deletions src/editor/core/command/CommandAdapt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2297,4 +2297,32 @@ export class CommandAdapt {
public setAreaProperties(payload: ISetAreaPropertiesOption) {
this.draw.getArea().setAreaProperties(payload)
}

public locationArea(areaId: string) {
const context = this.draw.getArea().getContextByAreaId(areaId)
if (!context) return
const {
range: { endIndex },
elementPosition
} = context
this.position.setPositionContext({
isTable: false
})
this.range.setRange(endIndex, endIndex)
this.draw.render({
isSetCursor: false,
isCompute: false,
isSubmitHistory: false
})
// 移动到可见区域
const cursor = this.draw.getCursor()
this.position.setCursorPosition(elementPosition)
cursor.drawCursor({
hitLineStartIndex: endIndex
})
cursor.moveCursorToVisible({
cursorPosition: elementPosition,
direction: MoveDirection.UP
})
}
}
22 changes: 22 additions & 0 deletions src/editor/core/draw/interactive/Area.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import { Zone } from '../../zone/Zone'
import { Position } from '../../position/Position'
import { zipElementList } from '../../../utils/element'
import { AreaMode } from '../../../dataset/enum/Area'
import { IRange } from '../../../interface/Range'
import { IElementPosition } from '../../../interface/Element'

export class Area {
private draw: Draw
Expand Down Expand Up @@ -165,6 +167,26 @@ export class Area {
}
}

public getContextByAreaId(
areaId: string
): { range: IRange; elementPosition: IElementPosition } | null {
const elementList = this.draw.getOriginalMainElementList()
for (let e = 0; e < elementList.length; e++) {
const element = elementList[e]
if (element.areaId === areaId) {
const positionList = this.position.getOriginalMainPositionList()
return {
range: {
startIndex: e,
endIndex: e
},
elementPosition: positionList[e]
}
}
}
return null
}

public setAreaProperties(payload: ISetAreaPropertiesOption) {
const areaId = payload.id || this.getActiveAreaId()
if (!areaId) return
Expand Down
2 changes: 1 addition & 1 deletion src/editor/utils/element.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ export function formatElementList(
const valueList = el?.valueList || []
formatElementList(valueList, {
...options,
isHandleFirstElement: false,
isHandleFirstElement: true,
isForceCompensation: false
})
if (valueList.length) {
Expand Down

0 comments on commit cd42514

Please sign in to comment.