import { updateSelectionWithItem } from "../utils/selectionUtils"; import { createCanvasPlugin } from "./baseCanvas"; import { BaseContextProperties, ElementProperties, PointerCaptureProperties, ScreenPointProperties, SelectableProperties, } from "./contextProperties"; import { NoneMode } from "./PluginSystem"; export type SelectMode = NoneMode; export type SelectData = { selectedElementIds: string[]; }; export interface SelectContextProperties extends BaseContextProperties, ScreenPointProperties, ElementProperties, SelectableProperties, PointerCaptureProperties {} export function selectPlugin() { return createCanvasPlugin({ name: "select", data: { selectedElementIds: [], }, handlers: (context: SelectContextProperties) => ({ onPointerDown(event) { const mode = context.getMode(); if (mode.type !== "none") return; // if (isRightButtonClicked(event)) return; const data = context.getData(); const point = context.getCanvasPoint(event.nativeEvent); const elements = context.filterElements({ at: point, predicate: context.isSelectable, }); const elementId = elements.length > 0 ? context.getElementId(elements[0]) : undefined; const selection = updateSelectionWithItem( data.selectedElementIds, elementId, event.shiftKey ); if (selection !== data.selectedElementIds) { context.setData({ ...data, selectedElementIds: selection }); } }, }), }); }