From e8e2004aa868c984f4ea3c4b6323c7d6b128f769 Mon Sep 17 00:00:00 2001 From: lucaronin Date: Thu, 16 Apr 2026 05:41:41 +0200 Subject: [PATCH] fix: make the pulse header draggable --- src/components/PulseView.test.tsx | 34 +++++++++++++++++++++++++++++++ src/components/PulseView.tsx | 10 ++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/components/PulseView.test.tsx b/src/components/PulseView.test.tsx index 237d4aec..750090cf 100644 --- a/src/components/PulseView.test.tsx +++ b/src/components/PulseView.test.tsx @@ -34,6 +34,7 @@ const mockCommits: PulseCommit[] = [ ] const mockInvokeFn = vi.fn() +const dragRegionMouseDown = vi.fn() vi.mock('@tauri-apps/api/core', () => ({ invoke: (...args: unknown[]) => mockInvokeFn(...args), })) @@ -41,10 +42,14 @@ vi.mock('../mock-tauri', () => ({ isTauri: () => false, mockInvoke: (...args: unknown[]) => mockInvokeFn(...args), })) +vi.mock('../hooks/useDragRegion', () => ({ + useDragRegion: () => ({ onMouseDown: dragRegionMouseDown }), +})) describe('PulseView', () => { beforeEach(() => { vi.clearAllMocks() + dragRegionMouseDown.mockClear() }) it('shows loading state initially', () => { @@ -243,4 +248,33 @@ describe('PulseView', () => { expect(screen.getByText('Pulse')).toBeInTheDocument() }) }) + + it('wires the Pulse header into the shared drag-region handler', async () => { + mockInvokeFn.mockResolvedValue([]) + + render() + + const header = await screen.findByTestId('pulse-header') + fireEvent.mouseDown(header) + + expect(dragRegionMouseDown).toHaveBeenCalledTimes(1) + }) + + it('keeps the expand-sidebar button clickable when the header is draggable', async () => { + mockInvokeFn.mockResolvedValue([]) + const onExpandSidebar = vi.fn() + + render( + , + ) + + const button = await screen.findByRole('button', { name: 'Expand sidebar' }) + fireEvent.click(button) + + expect(onExpandSidebar).toHaveBeenCalledTimes(1) + }) }) diff --git a/src/components/PulseView.tsx b/src/components/PulseView.tsx index e8551970..49cbac35 100644 --- a/src/components/PulseView.tsx +++ b/src/components/PulseView.tsx @@ -1,6 +1,7 @@ import { useState, useEffect, useCallback, useRef, memo, type KeyboardEvent } from 'react' import { invoke } from '@tauri-apps/api/core' import { isTauri, mockInvoke } from '../mock-tauri' +import { useDragRegion } from '../hooks/useDragRegion' import type { PulseCommit, PulseFile } from '../types' import { relativeDate } from '../utils/noteListHelpers' import { @@ -234,8 +235,15 @@ function PulseHeader({ sidebarCollapsed, onExpandSidebar, }: Pick) { + const { onMouseDown } = useDragRegion() + return ( -
+
{sidebarCollapsed && onExpandSidebar && (