diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 9524db8..e8e66a5 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -5,7 +5,7 @@ import { Cursor } from './lib/cursor'; export { eventChange } from './config'; // export { MiddlewareSelector } from './middleware/selector'; -export { MiddlewareSelector, middlewareEventSelect, middlewareEventSelectClear } from './middleware/selector'; +export { MiddlewareSelector, middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup } from './middleware/selector'; export { MiddlewareScroller } from './middleware/scroller'; export { MiddlewareScaler, middlewareEventScale } from './middleware/scaler'; export { MiddlewareRuler, middlewareEventRuler } from './middleware/ruler'; diff --git a/packages/core/src/middleware/selector/config.ts b/packages/core/src/middleware/selector/config.ts index a55157b..56b7e77 100644 --- a/packages/core/src/middleware/selector/config.ts +++ b/packages/core/src/middleware/selector/config.ts @@ -16,6 +16,7 @@ export const keySelectedReferenceYLines = Symbol(`${key}_selectedReferenceYLines export const keyGroupQueue = Symbol(`${key}_groupQueue`); // Array> | [] export const keyGroupQueueVertexesList = Symbol(`${key}_groupQueueVertexesList`); // Array | [] export const keyIsMoving = Symbol(`${key}_isMoving`); // boolean | null +export const keyEnableSelectInGroup = Symbol(`${key}_canSelectInGroup`); export const keyDebugElemCenter = Symbol(`${key}_debug_elemCenter`); export const keyDebugStartVertical = Symbol(`${key}_debug_startVertical`); @@ -37,3 +38,9 @@ export const controllerSize = 10; export const auxiliaryColor = '#f7276e'; export const referenceColor = '#f7276e'; + +export const middlewareEventSelect: string = '@middleware/select'; + +export const middlewareEventSelectClear: string = '@middleware/select-clear'; + +export const middlewareEventSelectInGroup: string = '@middleware/select-in-group'; diff --git a/packages/core/src/middleware/selector/index.ts b/packages/core/src/middleware/selector/index.ts index 0648448..39beb4c 100644 --- a/packages/core/src/middleware/selector/index.ts +++ b/packages/core/src/middleware/selector/index.ts @@ -45,6 +45,9 @@ import { calcMoveInGroup } from './util'; import { + middlewareEventSelect, + middlewareEventSelectClear, + middlewareEventSelectInGroup, keyActionType, keyResizeType, keyAreaStart, @@ -60,6 +63,7 @@ import { keySelectedReferenceXLines, keySelectedReferenceYLines, keyIsMoving, + keyEnableSelectInGroup, controllerSize // keyDebugElemCenter, // keyDebugEnd0, @@ -75,9 +79,7 @@ import { eventChange } from '../../config'; export { keySelectedElementList, keyActionType, keyResizeType, keyGroupQueue }; export type { DeepSelectorSharedStorage, ActionType }; -export const middlewareEventSelect: string = '@middleware/select'; - -export const middlewareEventSelectClear: string = '@middleware/select-clear'; +export { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup }; export const MiddlewareSelector: BoardMiddleware = (opts) => { const { viewer, sharer, boardContent, calculator, eventHub } = opts; @@ -173,6 +175,7 @@ export const MiddlewareSelector: BoardMiddleware { + sharer.setSharedStorage(keyEnableSelectInGroup, !!e.enable); + }; + return { name: '@middleware/selector', use() { eventHub.on(middlewareEventSelect, selectCallback); eventHub.on(middlewareEventSelectClear, selectClearCallback); + eventHub.on(middlewareEventSelectInGroup, selectInGroupCallback); }, disuse() { eventHub.off(middlewareEventSelect, selectCallback); eventHub.off(middlewareEventSelectClear, selectClearCallback); + eventHub.off(middlewareEventSelectInGroup, selectInGroupCallback); }, hover: (e: PointWatcherEvent) => { @@ -677,6 +686,10 @@ export const MiddlewareSelector: BoardMiddleware; [keySelectedReferenceYLines]: Array; [keyIsMoving]: boolean | null; + [keyEnableSelectInGroup]: boolean | null; [keyDebugElemCenter]: PointSize | null; [keyDebugEnd0]: PointSize | null; diff --git a/packages/idraw/src/idraw.ts b/packages/idraw/src/idraw.ts index 518222a..54c6635 100644 --- a/packages/idraw/src/idraw.ts +++ b/packages/idraw/src/idraw.ts @@ -1,4 +1,4 @@ -import { Core } from '@idraw/core'; +import { Core, middlewareEventSelectInGroup } from '@idraw/core'; import type { PointSize, IDrawOptions, @@ -59,7 +59,7 @@ export class iDraw { #setFeature(feat: IDrawFeature, status: boolean) { const store = this.#store; if (['ruler', 'scroll', 'scale', 'info'].includes(feat)) { - const map: Record> = { + const map: Record> = { ruler: 'enableRuler', scroll: 'enableScroll', scale: 'enableScale', @@ -68,6 +68,10 @@ export class iDraw { store.set(map[feat], !!status); runMiddlewares(this.#core, store); this.#core.refresh(); + } else if (feat === 'selectInGroup') { + this.#core.trigger(middlewareEventSelectInGroup, { + enable: !!status + }); } } diff --git a/packages/types/src/lib/idraw.ts b/packages/types/src/lib/idraw.ts index 2299adb..f47659c 100644 --- a/packages/types/src/lib/idraw.ts +++ b/packages/types/src/lib/idraw.ts @@ -2,7 +2,7 @@ import type { CoreOptions } from './core'; export type IDrawMode = 'select' | 'drag' | 'readOnly'; -export type IDrawFeature = 'ruler' | 'scroll' | 'scale' | 'info'; // TODO other feature +export type IDrawFeature = 'ruler' | 'scroll' | 'scale' | 'info' | 'selectInGroup'; // TODO other feature export interface IDrawSettings { mode?: IDrawMode;