improve: control operation history boundary #540

pr675
Hufe921 2 years ago
parent 34104917d7
commit 24c5b74bf2

@ -2304,31 +2304,7 @@ export class Draw {
(isSubmitHistory && !isFirstRender) ||
(curIndex !== undefined && this.historyManager.isStackEmpty())
) {
const oldElementList = getSlimCloneElementList(this.elementList)
const oldHeaderElementList = getSlimCloneElementList(
this.header.getElementList()
)
const oldFooterElementList = getSlimCloneElementList(
this.footer.getElementList()
)
const oldRange = deepClone(this.range.getRange())
const pageNo = this.pageNo
const oldPositionContext = deepClone(positionContext)
const zone = this.zone.getZone()
this.historyManager.execute(() => {
this.zone.setZone(zone)
this.setPageNo(pageNo)
this.position.setPositionContext(deepClone(oldPositionContext))
this.header.setElementList(deepClone(oldHeaderElementList))
this.footer.setElementList(deepClone(oldFooterElementList))
this.elementList = deepClone(oldElementList)
this.range.replaceRange(deepClone(oldRange))
this.render({
curIndex,
isSubmitHistory: false,
isSourceHistory: true
})
})
this.submitHistory(curIndex)
}
// 信息变动回调
nextTick(() => {
@ -2359,6 +2335,35 @@ export class Draw {
})
}
public submitHistory(curIndex: number | undefined) {
const positionContext = this.position.getPositionContext()
const oldElementList = getSlimCloneElementList(this.elementList)
const oldHeaderElementList = getSlimCloneElementList(
this.header.getElementList()
)
const oldFooterElementList = getSlimCloneElementList(
this.footer.getElementList()
)
const oldRange = deepClone(this.range.getRange())
const pageNo = this.pageNo
const oldPositionContext = deepClone(positionContext)
const zone = this.zone.getZone()
this.historyManager.execute(() => {
this.zone.setZone(zone)
this.setPageNo(pageNo)
this.position.setPositionContext(deepClone(oldPositionContext))
this.header.setElementList(deepClone(oldHeaderElementList))
this.footer.setElementList(deepClone(oldFooterElementList))
this.elementList = deepClone(oldElementList)
this.range.replaceRange(deepClone(oldRange))
this.render({
curIndex,
isSubmitHistory: false,
isSourceHistory: true
})
})
}
public destroy() {
this.container.remove()
this.globalEvent.removeEvent()

@ -420,11 +420,18 @@ export class Control {
startElement.controlComponent === ControlComponent.PLACEHOLDER ||
nextElement.controlComponent === ControlComponent.PLACEHOLDER
) {
let isHasSubmitHistory = false
let index = startIndex
while (index < elementList.length) {
const curElement = elementList[index]
if (curElement.controlId !== startElement.controlId) break
if (curElement.controlComponent === ControlComponent.PLACEHOLDER) {
// 删除占位符时替换前一个历史记录
if (!isHasSubmitHistory) {
isHasSubmitHistory = true
this.draw.getHistoryManager().popUndo()
this.draw.submitHistory(startIndex)
}
this.draw.spliceElementList(elementList, index, 1)
} else {
index++

@ -54,4 +54,8 @@ export class HistoryManager {
this.undoStack = []
this.redoStack = []
}
public popUndo() {
return this.undoStack.pop()
}
}

Loading…
Cancel
Save