diff --git a/frontend/src/tools/drawing/RotateSeatingGroupTool.ts b/frontend/src/tools/drawing/RotateSeatingGroupTool.ts new file mode 100644 index 0000000..f4e55cc --- /dev/null +++ b/frontend/src/tools/drawing/RotateSeatingGroupTool.ts @@ -0,0 +1,75 @@ +import { Tool } from '../Tool'; +import { YjsDocument } from '../../crdt/YjsDocument'; + +class RotateSeatingGroupTool extends Tool { + private selectedElementIds: string[] = []; + private rotationAngle: number = 90; // Default rotation angle in degrees + + constructor(yjsDoc: YjsDocument) { + super(yjsDoc); + this.name = 'RotateSeatingGroupTool'; + } + + onMouseDown(event: MouseEvent): void { + // This tool works on selected elements, not on mouse clicks + // The actual rotation logic would be triggered through a UI action + } + + onMouseMove(event: MouseEvent): void { + // No preview needed for this tool + } + + onMouseUp(event: MouseEvent): void { + // No action needed on mouse up + } + + onKeyUp(event: KeyboardEvent): void { + // Handle key up events + if (event.key === 'Escape') { + this.reset(); + } + } + + reset(): void { + // Reset any state if needed + this.selectedElementIds = []; + } + + // Rotate selected elements + rotateSelectedElements(): void { + // Get all elements from the document + const elements = this.yjsDoc.getElements(); + + // Filter for selected elements + const selectedElements = elements.filter(element => + this.selectedElementIds.includes(element.id) + ); + + // Rotate each selected element + selectedElements.forEach(element => { + // Calculate new rotation (add rotation angle, wrapping at 360 degrees) + let newRotation = element.properties.rotation || 0; + newRotation = (newRotation + this.rotationAngle) % 360; + + // Update element with new rotation property + this.yjsDoc.updateElement(element.id, { + properties: { + ...element.properties, + rotation: newRotation + } + }); + }); + } + + // Set selected elements + setSelectedElements(elementIds: string[]): void { + this.selectedElementIds = elementIds; + } + + // Set rotation angle + setRotationAngle(angle: number): void { + this.rotationAngle = angle; + } +} + +export { RotateSeatingGroupTool }; \ No newline at end of file