增加上一步高亮的Model与原来的Model一样的功能
This commit is contained in:
parent
d01f552e61
commit
68982ebcb0
@ -23,6 +23,7 @@ export class Reconcile {
|
|||||||
private engine: Engine;
|
private engine: Engine;
|
||||||
private renderer: Renderer;
|
private renderer: Renderer;
|
||||||
private isFirstPatch: boolean;
|
private isFirstPatch: boolean;
|
||||||
|
private prevUpdate: string[][] = [];
|
||||||
|
|
||||||
constructor(engine: Engine, renderer: Renderer) {
|
constructor(engine: Engine, renderer: Renderer) {
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
@ -167,6 +168,14 @@ export class Reconcile {
|
|||||||
return removedModels;
|
return removedModels;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private getModelsById(ids: string[], modelList: SVModel[]): SVModel[] {
|
||||||
|
return modelList.filter(item =>
|
||||||
|
ids?.find(id => {
|
||||||
|
return id === item.id;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 找出重新指向的外部指针
|
* 找出重新指向的外部指针
|
||||||
* @param prevModelList
|
* @param prevModelList
|
||||||
@ -231,6 +240,10 @@ export class Reconcile {
|
|||||||
return freedNodes;
|
return freedNodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public setPrevUpdataId(prevUpdataId: string[]) {
|
||||||
|
this.prevUpdate.push(prevUpdataId);
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -392,18 +405,29 @@ export class Reconcile {
|
|||||||
prevModelList: SVModel[],
|
prevModelList: SVModel[],
|
||||||
modelList: SVModel[],
|
modelList: SVModel[],
|
||||||
accumulateLeakModels: SVModel[],
|
accumulateLeakModels: SVModel[],
|
||||||
isDiffLeak: boolean
|
isDiffLeak: boolean,
|
||||||
|
hasTriggerLastStep: boolean
|
||||||
): DiffResult {
|
): DiffResult {
|
||||||
|
if (hasTriggerLastStep) {
|
||||||
|
this.prevUpdate.pop();
|
||||||
|
}
|
||||||
const continuousModels: SVModel[] = this.getContinuousModels(prevModelList, modelList);
|
const continuousModels: SVModel[] = this.getContinuousModels(prevModelList, modelList);
|
||||||
const leakModels: SVModel[] = isDiffLeak ? [] : this.getLeakModels(layoutGroupTable, prevModelList, modelList);
|
const leakModels: SVModel[] = isDiffLeak ? [] : this.getLeakModels(layoutGroupTable, prevModelList, modelList);
|
||||||
const appendModels: SVModel[] = this.getAppendModels(prevModelList, modelList, accumulateLeakModels);
|
const appendModels: SVModel[] = this.getAppendModels(prevModelList, modelList, accumulateLeakModels);
|
||||||
const removeModels: SVModel[] = this.getRemoveModels(prevModelList, modelList, accumulateLeakModels);
|
const removeModels: SVModel[] = this.getRemoveModels(prevModelList, modelList, accumulateLeakModels);
|
||||||
const updateModels: SVModel[] = [
|
const updateModels: SVModel[] = hasTriggerLastStep ? [...this.getModelsById(this.prevUpdate.pop(), modelList)]: [
|
||||||
...this.getReTargetMarkers(prevModelList, modelList),
|
...this.getReTargetMarkers(prevModelList, modelList),
|
||||||
...this.getLabelChangeModels(prevModelList, modelList),
|
...this.getLabelChangeModels(prevModelList, modelList),
|
||||||
...this.filterUnChangeModelsOfAppend(appendModels, prevModelList),
|
...this.filterUnChangeModelsOfAppend(appendModels, prevModelList),
|
||||||
...leakModels,
|
...leakModels,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
let UpdataModelsId: string [] =[];
|
||||||
|
for (let model of updateModels) {
|
||||||
|
UpdataModelsId.push(model.id);
|
||||||
|
}
|
||||||
|
this.prevUpdate?.push(UpdataModelsId);
|
||||||
|
|
||||||
const freedModels: SVNode[] = this.getFreedModels(prevModelList, modelList);
|
const freedModels: SVNode[] = this.getFreedModels(prevModelList, modelList);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -168,6 +168,10 @@ export class ViewContainer {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private setPrevUpdateId(prevUpdataId: string[]) {
|
||||||
|
this.reconcile.setPrevUpdataId(prevUpdataId)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 渲染所有视图
|
* 渲染所有视图
|
||||||
* @param models
|
* @param models
|
||||||
@ -184,6 +188,7 @@ export class ViewContainer {
|
|||||||
|
|
||||||
// 如果数据没变的话,直接退出
|
// 如果数据没变的话,直接退出
|
||||||
if (isSameSources) {
|
if (isSameSources) {
|
||||||
|
this.setPrevUpdateId([])
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,7 +201,8 @@ export class ViewContainer {
|
|||||||
modelList,
|
modelList,
|
||||||
this.accumulateLeakModels,
|
this.accumulateLeakModels,
|
||||||
// handleUpdate?.isEnterFunction
|
// handleUpdate?.isEnterFunction
|
||||||
isDiffLeak
|
isDiffLeak,
|
||||||
|
handleUpdate?.hasTriggerLastStep
|
||||||
),
|
),
|
||||||
renderModelList = [...modelList, ...diffResult.REMOVE, ...diffResult.LEAKED, ...this.accumulateLeakModels];
|
renderModelList = [...modelList, ...diffResult.REMOVE, ...diffResult.LEAKED, ...this.accumulateLeakModels];
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user