diff --git a/package.json b/package.json index 9cc058a..57d2de1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": false, - "version": "0.4.1", + "version": "0.4.2", "workspaces": [ "packages/*" ], diff --git a/packages/core/src/board/index.ts b/packages/core/src/board/index.ts index d51806f..3fc9d61 100644 --- a/packages/core/src/board/index.ts +++ b/packages/core/src/board/index.ts @@ -45,7 +45,8 @@ export class Board { const watcher = new BoardWatcher({ boardContent, - sharer + sharer, + disabled: opts?.disableWatcher }); const renderer = new Renderer({ viewContext: boardContent.viewContext, diff --git a/packages/core/src/board/watcher.ts b/packages/core/src/board/watcher.ts index 1dbcfac..ae350b9 100644 --- a/packages/core/src/board/watcher.ts +++ b/packages/core/src/board/watcher.ts @@ -32,6 +32,9 @@ export class BoardWatcher extends EventEmitter { } onEvents() { + if (this.#opts.disabled === true) { + return; + } if (this.#hasDestroyed) { return; } @@ -48,6 +51,9 @@ export class BoardWatcher extends EventEmitter { } offEvents() { + if (this.#opts.disabled === true) { + return; + } const container = window; const canvas = this.#opts.boardContent.boardContext.canvas; container.removeEventListener('mousemove', this.#onHover); diff --git a/packages/core/src/middlewares/selector/index.ts b/packages/core/src/middlewares/selector/index.ts index f9f3166..7e98a3f 100644 --- a/packages/core/src/middlewares/selector/index.ts +++ b/packages/core/src/middlewares/selector/index.ts @@ -260,6 +260,7 @@ export const MiddlewareSelector: Middleware< const groupQueue = getGroupQueueFromList(elem.uuid, data?.elements || []); sharer.setSharedStorage(keyGroupQueue, groupQueue); updateSelectedElementList(elements); + pointStartElementSizeList = [{ ...getElementSize(elements[0]), uuid: elements[0].uuid }]; viewer.drawFrame(); } }; @@ -806,44 +807,47 @@ export const MiddlewareSelector: Middleware< type = 'resizeElement'; } if (hasChangedData) { - const startSize = pointStartElementSizeList[0] as ElementSize & { uuid: string }; let modifyRecord: ModifyRecord | null | undefined = null; - if (selectedElements.length === 1) { - modifyRecord = { - type: 'resizeElement', - time: 0, - content: { - method: 'modifyElement', - uuid: startSize.uuid, - before: toFlattenElement(startSize), - after: toFlattenElement(getElementSize(selectedElements[0])) - } - }; - if (selectedElements[0].type === 'group' && startResizeGroupRecord && endResizeGroupRecord) { + if (Array.isArray(pointStartElementSizeList) && pointStartElementSizeList.length) { + const startSize = pointStartElementSizeList[0] as ElementSize & { uuid: string }; + + if (selectedElements.length === 1) { modifyRecord = { - ...endResizeGroupRecord, + type: 'resizeElement', + time: 0, content: { - ...endResizeGroupRecord.content, - before: startResizeGroupRecord.content.before + method: 'modifyElement', + uuid: startSize.uuid, + before: toFlattenElement(startSize), + after: toFlattenElement(getElementSize(selectedElements[0])) + } + }; + if (selectedElements[0].type === 'group' && startResizeGroupRecord && endResizeGroupRecord) { + modifyRecord = { + ...endResizeGroupRecord, + content: { + ...endResizeGroupRecord.content, + before: startResizeGroupRecord.content.before + } + }; + } + } else if (selectedElements.length > 1) { + modifyRecord = { + type: 'resizeElements', + time: 0, + content: { + method: 'modifyElements', + before: pointStartElementSizeList.map((item) => ({ + ...toFlattenElement(item), + uuid: item.uuid + })), + after: selectedElements.map((item) => ({ + ...toFlattenElement(getElementSize(item)), + uuid: item.uuid + })) } }; } - } else if (selectedElements.length > 1) { - modifyRecord = { - type: 'resizeElements', - time: 0, - content: { - method: 'modifyElements', - before: pointStartElementSizeList.map((item) => ({ - ...toFlattenElement(item), - uuid: item.uuid - })), - after: selectedElements.map((item) => ({ - ...toFlattenElement(getElementSize(item)), - uuid: item.uuid - })) - } - }; } eventHub.trigger(coreEventKeys.CHANGE, { data, type, selectedElements, hoverElement, modifyRecord }); hasChangedData = false; diff --git a/packages/idraw/src/idraw.ts b/packages/idraw/src/idraw.ts index 7d779cc..30c96b1 100644 --- a/packages/idraw/src/idraw.ts +++ b/packages/idraw/src/idraw.ts @@ -42,8 +42,8 @@ export class iDraw { constructor(mount: HTMLDivElement, options: IDrawOptions) { const opts = { ...defaultSettings, ...defaultOptions, ...options }; this.#store.set('middlewareStyles', parseStyles(opts)); - const { width, height, devicePixelRatio } = opts; - const core = new Core(mount, { width, height, devicePixelRatio }); + const { width, height, devicePixelRatio, disableWatcher } = opts; + const core = new Core(mount, { width, height, devicePixelRatio, disableWatcher }); this.#core = core; this.#opts = opts; this.#init(); @@ -171,7 +171,7 @@ export class iDraw { createElement( type: T, - element: RecursivePartial>, + element: RecursivePartial>, opts?: { viewCenter?: boolean } ): Element { return createElement({ core: this.#core }, type, element, opts); @@ -249,4 +249,8 @@ export class iDraw { undo() { this.#historyHandler?.undo(); } + + clearHistory() { + this.#historyHandler?.clear(); + } } diff --git a/packages/idraw/src/middlewares/use-history.ts b/packages/idraw/src/middlewares/use-history.ts index 9e4d3ce..35f8119 100644 --- a/packages/idraw/src/middlewares/use-history.ts +++ b/packages/idraw/src/middlewares/use-history.ts @@ -204,9 +204,11 @@ export const useHistory = (opts: { core: Core; limit?: number }) => { while (doRecords?.length > 0) { doRecords.pop(); } + doRecords = []; while (undoRecords?.length > 0) { undoRecords.pop(); } + undoRecords = []; }; const getDoRecords = () => doRecords; diff --git a/packages/types/src/lib/board.ts b/packages/types/src/lib/board.ts index 965f359..3b61e2b 100644 --- a/packages/types/src/lib/board.ts +++ b/packages/types/src/lib/board.ts @@ -156,6 +156,7 @@ export interface BoardRenderer extends UtilEventEmitter { } export interface BoardWatcherOptions { + disabled?: boolean; boardContent: BoardContent; sharer: StoreSharer>; }