Skip to content

Commit ab69ee6

Browse files
committed
add ICommandElementObject
1 parent 2240ac9 commit ab69ee6

File tree

7 files changed

+61
-25
lines changed

7 files changed

+61
-25
lines changed

src/modules/command/ElementsAddedCommand.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,19 @@ import ElementsBaseCommand from "@/modules/command/ElementsBaseCommand";
33

44
export default class ElementsAddedCommand extends ElementsBaseCommand {
55
undo(): void {
6+
this.store.deSelectAll();
67
this.payload.dataList.forEach(data => {
7-
const { id } = data;
8+
const {
9+
model: { id },
10+
} = data;
811
this.store.removeElement(id);
912
});
1013
}
1114

1215
redo(): void {
16+
this.store.deSelectAll();
1317
this.payload.dataList.forEach(data => {
14-
this.store.addElementByModel(data as ElementObject);
18+
this.store.addElementByModel(data.model as ElementObject);
1519
});
1620
}
1721
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { ElementObject } from "@/types/IElement";
2+
import ElementsBaseCommand from "@/modules/command/ElementsBaseCommand";
3+
4+
export default class ElementsRemovedCommand extends ElementsBaseCommand {
5+
undo(): void {
6+
this.store.deSelectAll();
7+
this.payload.dataList.forEach(data => {
8+
this.store.addElementByModel(data.model as ElementObject);
9+
});
10+
}
11+
12+
redo(): void {
13+
this.store.deSelectAll();
14+
this.payload.dataList.forEach(data => {
15+
const {
16+
model: { id },
17+
} = data;
18+
this.store.removeElement(id);
19+
});
20+
}
21+
}

src/modules/command/ElementsUpdatedCommand.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import ElementsBaseCommand from "@/modules/command/ElementsBaseCommand";
2-
import { ElementObject } from "@/types/IElement";
2+
import { ICommandElementObject } from "@/types/ICommand";
33

44
export default class ElementsUpdatedCommand extends ElementsBaseCommand {
55
/**
66
* 恢复数据
77
*
88
* @param dataList
99
*/
10-
private _restoreElementsFromData(dataList: Array<Partial<ElementObject>>) {
10+
private _restoreElementsFromData(dataList: Array<ICommandElementObject>) {
1111
dataList.forEach(data => {
12-
const { id } = data;
13-
const element = this.store.updateElementModel(id, data);
12+
const { model } = data;
13+
const element = this.store.updateElementModel(model.id, model);
1414
element && element.refresh();
1515
});
1616
}

src/modules/render/RenderTaskCargo.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export default class RenderTaskCargo extends RenderTaskBase implements IRenderTa
6868
try {
6969
await task.run();
7070
} catch (e) {
71-
console.error(e);
71+
console.error("RenderTaskCargo: error running task", task.id, e);
7272
} finally {
7373
if (task.destroy) {
7474
await task.destroy();

src/modules/stage/StageShield.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ import DOMUtils from "@/utils/DOMUtils";
3737
import RenderQueue from "@/modules/render/RenderQueue";
3838
import IStageUndo from "@/types/IStageUndo";
3939
import StageUndo from "@/modules/stage/StageUndo";
40-
import { CommandTypes } from "@/types/ICommand";
40+
import { CommandTypes, ICommandElementObject, IRemovedCommandElementObject } from "@/types/ICommand";
4141
import ElementsAddedCommand from "@/modules/command/ElementsAddedCommand";
42-
import ElementsUpdatedCommand from "../command/ElementsUpdatedCommand";
42+
import ElementsUpdatedCommand from "@/modules/command/ElementsUpdatedCommand";
43+
import ElementsRemovedCommand from "@/modules/command/ElementsRemovedCommand";
4344

4445
export default class StageShield extends DrawerBase implements IStageShield, IStageAlignFuncs {
4546
// 当前正在使用的创作工具
@@ -882,8 +883,8 @@ export default class StageShield extends DrawerBase implements IStageShield, ISt
882883
const command = new ElementsUpdatedCommand(
883884
{
884885
type: CommandTypes.ElementsUpdated,
885-
dataList: await Promise.all(selectedElements.map(element => element.toOriginalTranslateJson())),
886-
rDataList: await Promise.all(selectedElements.map(element => element.toTranslateJson())),
886+
dataList: await Promise.all(selectedElements.map(async element => ({ model: await element.toOriginalTranslateJson() }) as ICommandElementObject)),
887+
rDataList: await Promise.all(selectedElements.map(async element => ({ model: await element.toTranslateJson() }) as ICommandElementObject)),
887888
},
888889
this.store,
889890
);
@@ -993,7 +994,7 @@ export default class StageShield extends DrawerBase implements IStageShield, ISt
993994
const command = new ElementsAddedCommand(
994995
{
995996
type: CommandTypes.ElementsAdded,
996-
dataList: await Promise.all(provisionalElements.map(element => element.toJson())),
997+
dataList: await Promise.all(provisionalElements.map(async element => ({ model: await element.toJson() }) as ICommandElementObject)),
997998
},
998999
this.store,
9991000
);
@@ -1316,22 +1317,23 @@ export default class StageShield extends DrawerBase implements IStageShield, ISt
13161317
}
13171318

13181319
/**
1319-
* 删除选中组件
1320+
* 处理选中组件删除
13201321
*/
1321-
deleteSelectElements(): void {
1322+
async _handleSelectsDelete(): Promise<void> {
13221323
if (this.store.isSelectedEmpty) {
13231324
return;
13241325
}
1326+
const command = new ElementsRemovedCommand(
1327+
{
1328+
type: CommandTypes.ElementsRemoved,
1329+
dataList: await Promise.all(this.store.selectedElements.map(async element => ({ model: await element.toJson() }) as IRemovedCommandElementObject)),
1330+
},
1331+
this.store,
1332+
);
1333+
this.undo.undoStack.push(command);
13251334
this.store.deleteSelects();
13261335
}
13271336

1328-
/**
1329-
* 处理选中组件删除
1330-
*/
1331-
_handleSelectsDelete(): void {
1332-
this.deleteSelectElements();
1333-
}
1334-
13351337
/**
13361338
* 选中所有组件
13371339
*/

src/types/ICommand.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
import { ElementObject } from "@/types/IElement";
22

3+
// 通用组件命令对象
4+
export type ICommandElementObject = {
5+
model: Partial<ElementObject>;
6+
};
7+
8+
// 组件删除命令对象
9+
export type IRemovedCommandElementObject = ICommandElementObject & {
10+
prevId?: string;
11+
nextId?: string;
12+
};
13+
314
export default interface ICommand {
415
payload: ICommandPayload;
516
undo(): void;
@@ -8,8 +19,8 @@ export default interface ICommand {
819

920
export interface ICommandPayload {
1021
type: CommandTypes;
11-
dataList: Array<Partial<ElementObject>>;
12-
rDataList?: Array<Partial<ElementObject>>;
22+
dataList: Array<ICommandElementObject>;
23+
rDataList?: Array<ICommandElementObject>;
1324
}
1425

1526
export enum CommandTypes {

src/types/IStageShield.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,6 @@ export default interface IStageShield extends IStageDrawer, IStageSetter {
8989
setScaleReduce(): void;
9090
// 设置放大
9191
setScaleIncrease(): void;
92-
// 删除选区组件
93-
deleteSelectElements(): void;
9492
// 全选
9593
selectAll(): void;
9694
// 上传图片

0 commit comments

Comments
 (0)