in src/state/minimapActionDispatcher.ts [52:92]
export function handleMinimapEvent(event: NormalizedEvent, diagramMaker: DiagramMaker) {
if (event.type === Event.LEFT_CLICK && event.target.type === DiagramMakerMinimapType.CANVAS) {
const state = diagramMaker.store.getState();
if (!state.plugins)return;
const offset = event.offset;
const position = getWorkspacePositionAfterClick(offset, state.workspace, state.plugins.minimap);
diagramMaker.api.dispatch({
payload: { position },
type: WorkspaceActions.WORKSPACE_DRAG
});
} else if (event.type === Event.DRAG_START && event.target.type === DiagramMakerMinimapType.RECTANGLE) {
const state = diagramMaker.store.getState();
if (!state.plugins)return;
const scale = getScale(state.workspace, state.plugins.minimap);
const workspace = state.workspace;
rectInitOffset = getRectOffset(workspace, scale);
} else if (event.type === Event.DRAG && event.target.type === DiagramMakerMinimapType.RECTANGLE) {
const state = diagramMaker.store.getState();
if (!state.plugins)return;
const rectInitPos = event.dragReference || { x:0, y:0 };
const canvasPos = subtract(rectInitPos, rectInitOffset);
const pos = event.position;
const offset = event.offset || { x:0, y:0 };
const rectPos = subtract(pos, offset);
const rectOffset = subtract(rectPos, canvasPos);
const position = getWorkspacePositionAfterDrag(rectOffset, state.workspace, state.plugins.minimap);
diagramMaker.api.dispatch({
payload: { position },
type: WorkspaceActions.WORKSPACE_DRAG
});
}
}