mirror of
https://github.com/idrawjs/idraw
synced 2026-05-24 01:58:27 +00:00
fix: fix disableWatcher effect and select element effect
This commit is contained in:
parent
106260558c
commit
a4bda10496
7 changed files with 55 additions and 37 deletions
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"private": false,
|
||||
"version": "0.4.1",
|
||||
"version": "0.4.2",
|
||||
"workspaces": [
|
||||
"packages/*"
|
||||
],
|
||||
|
|
|
|||
|
|
@ -45,7 +45,8 @@ export class Board<T extends BoardExtendEventMap = BoardExtendEventMap> {
|
|||
|
||||
const watcher = new BoardWatcher({
|
||||
boardContent,
|
||||
sharer
|
||||
sharer,
|
||||
disabled: opts?.disableWatcher
|
||||
});
|
||||
const renderer = new Renderer({
|
||||
viewContext: boardContent.viewContext,
|
||||
|
|
|
|||
|
|
@ -32,6 +32,9 @@ export class BoardWatcher extends EventEmitter<BoardWatcherEventMap> {
|
|||
}
|
||||
|
||||
onEvents() {
|
||||
if (this.#opts.disabled === true) {
|
||||
return;
|
||||
}
|
||||
if (this.#hasDestroyed) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -48,6 +51,9 @@ export class BoardWatcher extends EventEmitter<BoardWatcherEventMap> {
|
|||
}
|
||||
|
||||
offEvents() {
|
||||
if (this.#opts.disabled === true) {
|
||||
return;
|
||||
}
|
||||
const container = window;
|
||||
const canvas = this.#opts.boardContent.boardContext.canvas;
|
||||
container.removeEventListener('mousemove', this.#onHover);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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<IDrawEvent>(mount, { width, height, devicePixelRatio });
|
||||
const { width, height, devicePixelRatio, disableWatcher } = opts;
|
||||
const core = new Core<IDrawEvent>(mount, { width, height, devicePixelRatio, disableWatcher });
|
||||
this.#core = core;
|
||||
this.#opts = opts;
|
||||
this.#init();
|
||||
|
|
@ -171,7 +171,7 @@ export class iDraw {
|
|||
|
||||
createElement<T extends ElementType>(
|
||||
type: T,
|
||||
element: RecursivePartial<Element<T>>,
|
||||
element: RecursivePartial<Omit<Element, 'uuid' | 'type'>>,
|
||||
opts?: { viewCenter?: boolean }
|
||||
): Element<T> {
|
||||
return createElement<T>({ core: this.#core }, type, element, opts);
|
||||
|
|
@ -249,4 +249,8 @@ export class iDraw {
|
|||
undo() {
|
||||
this.#historyHandler?.undo();
|
||||
}
|
||||
|
||||
clearHistory() {
|
||||
this.#historyHandler?.clear();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -156,6 +156,7 @@ export interface BoardRenderer extends UtilEventEmitter<RendererEventMap> {
|
|||
}
|
||||
|
||||
export interface BoardWatcherOptions {
|
||||
disabled?: boolean;
|
||||
boardContent: BoardContent;
|
||||
sharer: StoreSharer<Record<any | symbol, any>>;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue