index.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. 'use strict';
  2. const HistoryManagerBase = require('./history-manager-base');
  3. const SnapshotCommand = require('./snapshot-command');
  4. class AssetHistoryManager extends HistoryManagerBase {
  5. lastRecord = {
  6. uuidListStr: '',
  7. metaListStr:'',
  8. renderDataStr: '',
  9. };
  10. constructor() {
  11. super();
  12. }
  13. async snapshot(panel) {
  14. const record = await panel.record();
  15. if (this.lastRecord.uuidListStr === record.uuidListStr) {
  16. // 数据没变化
  17. const metaChanged = this.lastRecord.metaListStr !== record.metaListStr;
  18. const renderChanged = this.lastRecord.renderDataStr !== record.renderDataStr;
  19. if (!metaChanged && !renderChanged) {
  20. return;
  21. }
  22. const undoData = Object.assign({}, this.lastRecord);
  23. Object.assign(this.lastRecord, record);
  24. const redoData = Object.assign({}, this.lastRecord);
  25. const command = new AssetHistoryCommand(undoData, redoData);
  26. command.panel = panel;
  27. command.manager = this;
  28. this.push(command);
  29. } else {
  30. this.lastRecord = Object.assign({
  31. uuidListStr: '',
  32. metaListStr:'',
  33. renderDataStr: '',
  34. }, record);
  35. this.rebase();
  36. }
  37. }
  38. async undo() {
  39. await super.undo();
  40. }
  41. async redo() {
  42. await super.redo();
  43. }
  44. }
  45. class AssetHistoryCommand extends SnapshotCommand {
  46. async execute(record) {
  47. if (this.panel) {
  48. const success = await this.panel.restore(record);
  49. if (success) {
  50. this.manager.lastRecord = record;
  51. }
  52. }
  53. }
  54. }
  55. module.exports = AssetHistoryManager;