diff --git a/frontend/src/components/canvas/__tests__/GroupNode.test.tsx b/frontend/src/components/canvas/__tests__/GroupNode.test.tsx index 217cc68..f99ffae 100644 --- a/frontend/src/components/canvas/__tests__/GroupNode.test.tsx +++ b/frontend/src/components/canvas/__tests__/GroupNode.test.tsx @@ -1,5 +1,5 @@ import { describe, it, expect, vi, beforeEach } from 'vitest' -import { render, screen } from '@testing-library/react' +import { fireEvent, render, screen } from '@testing-library/react' import { GroupNode } from '../nodes/GroupNode' import * as canvasStore from '@/stores/canvasStore' import type { Node } from '@xyflow/react' @@ -102,6 +102,19 @@ describe('GroupNode', () => { expect(screen.getByTestId('node-resizer').getAttribute('data-visible')).toBe('true') }) + it('allows dragging from the header while keeping rename controls nodrag', () => { + renderGroupNode({ selected: true }) + + expect(screen.getByText('My Group').closest('div')).not.toHaveClass('nodrag') + + const renameButton = screen.getByTitle('Rename group') + expect(renameButton).toHaveClass('nodrag') + + fireEvent.click(renameButton) + + expect(screen.getByDisplayValue('My Group')).toHaveClass('nodrag') + }) + it('shows online/offline status summary from children', () => { const storeNodes = [ { id: 'c1', parentId: 'g1', data: { status: 'online' } }, diff --git a/frontend/src/components/canvas/nodes/GroupNode.tsx b/frontend/src/components/canvas/nodes/GroupNode.tsx index 983a730..e8396b6 100644 --- a/frontend/src/components/canvas/nodes/GroupNode.tsx +++ b/frontend/src/components/canvas/nodes/GroupNode.tsx @@ -66,13 +66,13 @@ export function GroupNode({ id, data, selected }: NodeProps>) { borderBottom: isVisible ? `1px solid ${borderColor}40` : 'none', pointerEvents: 'auto', }} - className="nodrag" > {editing ? ( setLabelDraft(e.target.value)} onKeyDown={(e) => { @@ -97,11 +97,12 @@ export function GroupNode({ id, data, selected }: NodeProps>) { {editing ? ( <> - - + + ) : (