From 7971251ca0afd8a2b16a4598b33a6305c258e8df Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Wed, 23 Aug 2023 03:59:08 +0400 Subject: [PATCH] Make frameRefs work --- src/canvas/index.ts | 2 +- src/canvas/model/Frame.ts | 20 +++++++++++++++----- src/canvas/model/Frames.ts | 15 +++++++++++++-- src/pages/index.ts | 4 +++- src/pages/model/Page.ts | 5 ++--- 5 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/canvas/index.ts b/src/canvas/index.ts index 7e18b6b08..eb544c696 100644 --- a/src/canvas/index.ts +++ b/src/canvas/index.ts @@ -85,11 +85,11 @@ export default class CanvasModule extends Module { return this.canvasView as any; } - //name = 'Canvas'; canvas: Canvas; model: Canvas; spots: CanvasSpots; events = CanvasEvents; + framesById: Record = {}; private canvasView?: CanvasView; /** diff --git a/src/canvas/model/Frame.ts b/src/canvas/model/Frame.ts index cee3b403a..dddbb0503 100644 --- a/src/canvas/model/Frame.ts +++ b/src/canvas/model/Frame.ts @@ -1,12 +1,12 @@ -import { result, forEach, isEmpty, isString, isNumber } from 'underscore'; -import { ModuleModel } from '../../abstract'; +import { forEach, isEmpty, isNumber, isString, result } from 'underscore'; import CanvasModule from '..'; +import { ModuleModel } from '../../abstract'; +import { BoxRect } from '../../common'; import ComponentWrapper from '../../dom_components/model/ComponentWrapper'; -import { isComponent, isObject } from '../../utils/mixins'; +import Page from '../../pages/model/Page'; +import { createId, isComponent, isObject } from '../../utils/mixins'; import FrameView from '../view/FrameView'; import Frames from './Frames'; -import Page from '../../pages/model/Page'; -import { BoxRect } from '../../common'; const keyAutoW = '__aw'; const keyAutoH = '__ah'; @@ -102,6 +102,8 @@ export default class Frame extends ModuleModel { !attr.width && this.set(keyAutoW, 1); !attr.height && this.set(keyAutoH, 1); + + !this.id && this.set('id', createId()); } get width() { @@ -125,6 +127,14 @@ export default class Frame extends ModuleModel { return refFrame?.getComponent() || this.getComponent(); } + initRefs() { + const { refFrame } = this; + if (isString(refFrame)) { + const frame = this.module.framesById[refFrame]; + frame && this.set({ refFrame: frame }, { silent: true }); + } + } + getBoxRect(): BoxRect { const { x, y } = this.attributes; const { width, height } = this; diff --git a/src/canvas/model/Frames.ts b/src/canvas/model/Frames.ts index fe836191b..c4683afdc 100644 --- a/src/canvas/model/Frames.ts +++ b/src/canvas/model/Frames.ts @@ -12,8 +12,14 @@ export default class Frames extends ModuleCollection { constructor(module: CanvasModule, models: Frame[] | Array> = []) { super(module, models, Frame); bindAll(this, 'itemLoaded'); + this.on('add', this.onAdd); this.on('reset', this.onReset); this.on('remove', this.onRemove); + this.forEach(frame => this.onAdd(frame)); + } + + onAdd(frame: Frame) { + this.module.framesById[frame.id] = frame; } onReset(m: Frame, opts?: { previousModels?: Frame[] }) { @@ -21,8 +27,13 @@ export default class Frames extends ModuleCollection { prev.map(p => this.onRemove(p)); } - onRemove(removed?: Frame) { - removed?.onRemove(); + onRemove(frame: Frame) { + frame.onRemove(); + delete this.module.framesById[frame.id]; + } + + initRefs() { + this.forEach(frame => frame.initRefs()); } itemLoaded() { diff --git a/src/pages/index.ts b/src/pages/index.ts index a292a3873..d8dec1b62 100644 --- a/src/pages/index.ts +++ b/src/pages/index.ts @@ -283,7 +283,9 @@ export default class PageManager extends ItemManagerModule page.getFrames().initRefs()); + return result; } _createId() { diff --git a/src/pages/model/Page.ts b/src/pages/model/Page.ts index 46df2d19d..db0eaa6d3 100644 --- a/src/pages/model/Page.ts +++ b/src/pages/model/Page.ts @@ -61,9 +61,8 @@ export default class Page extends Model { const frames = new Frames(em!.Canvas, frms); frames.page = this; this.set('frames', frames); - !this.getId() && this.set('id', em?.get('PageManager')._createId()); - const um = em?.get('UndoManager'); - um?.add(frames); + !this.getId() && this.set('id', em?.Pages._createId()); + em?.UndoManager.add(frames); } onRemove() {