From c2461c88d5e514980d932248631df2ed5757e571 Mon Sep 17 00:00:00 2001 From: Psychotoxical <171614930+Psychotoxical@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:55:20 +0200 Subject: [PATCH] refactor(playback): co-locate floating-player-bar + fs-idle-fade hooks (and orphaned playback tests) with their features --- .../fullscreenPlayer/components/FullscreenPlayerStatic.tsx | 2 +- src/{ => features/fullscreenPlayer}/hooks/useFsIdleFade.ts | 0 src/features/playback/components/PlayerBar.tsx | 2 +- .../playback}/hooks/computeFloatingPlayerBarStyle.test.ts | 2 +- .../playback}/hooks/computeFloatingPlayerBarStyle.ts | 0 src/{ => features/playback}/hooks/useFloatingPlayerBar.ts | 2 +- .../playback}/hooks/usePlaybackServerId.test.ts | 6 +++--- .../playback}/hooks/useTimelinePlayHistory.test.ts | 4 ++-- 8 files changed, 9 insertions(+), 9 deletions(-) rename src/{ => features/fullscreenPlayer}/hooks/useFsIdleFade.ts (100%) rename src/{ => features/playback}/hooks/computeFloatingPlayerBarStyle.test.ts (86%) rename src/{ => features/playback}/hooks/computeFloatingPlayerBarStyle.ts (100%) rename src/{ => features/playback}/hooks/useFloatingPlayerBar.ts (93%) rename src/{ => features/playback}/hooks/usePlaybackServerId.test.ts (90%) rename src/{ => features/playback}/hooks/useTimelinePlayHistory.test.ts (93%) diff --git a/src/features/fullscreenPlayer/components/FullscreenPlayerStatic.tsx b/src/features/fullscreenPlayer/components/FullscreenPlayerStatic.tsx index 9c973150..a7af497c 100644 --- a/src/features/fullscreenPlayer/components/FullscreenPlayerStatic.tsx +++ b/src/features/fullscreenPlayer/components/FullscreenPlayerStatic.tsx @@ -12,7 +12,7 @@ import { useCachedUrl } from '@/ui/CachedImage'; import { useArtistFanart } from '@/cover/useArtistFanart'; import { backdropFromConfig } from '@/cover/artistBackdrop'; import { useThemeStore } from '@/store/themeStore'; -import { useFsIdleFade } from '@/hooks/useFsIdleFade'; +import { useFsIdleFade } from '@/features/fullscreenPlayer/hooks/useFsIdleFade'; import { useQueueTrackAt } from '@/features/queue'; import { WaveformSeek } from '@/features/waveform'; import { FsQueueModal } from '@/features/fullscreenPlayer/components/FsQueueModal'; diff --git a/src/hooks/useFsIdleFade.ts b/src/features/fullscreenPlayer/hooks/useFsIdleFade.ts similarity index 100% rename from src/hooks/useFsIdleFade.ts rename to src/features/fullscreenPlayer/hooks/useFsIdleFade.ts diff --git a/src/features/playback/components/PlayerBar.tsx b/src/features/playback/components/PlayerBar.tsx index be50559a..2e494823 100644 --- a/src/features/playback/components/PlayerBar.tsx +++ b/src/features/playback/components/PlayerBar.tsx @@ -30,7 +30,7 @@ import { PlayerSeekbarSection } from '@/features/playback/components/playerBar/P import { PlayerPlaybackRate } from '@/features/playback/components/playerBar/PlayerPlaybackRate'; import { PlayerVolume } from '@/features/playback/components/playerBar/PlayerVolume'; import { PlayerOverflowMenu } from '@/features/playback/components/playerBar/PlayerOverflowMenu'; -import { useFloatingPlayerBar } from '@/hooks/useFloatingPlayerBar'; +import { useFloatingPlayerBar } from '@/features/playback/hooks/useFloatingPlayerBar'; import { useUtilityOverflowMenu } from '@/hooks/useUtilityOverflowMenu'; import { usePlayerBarLayoutStore, diff --git a/src/hooks/computeFloatingPlayerBarStyle.test.ts b/src/features/playback/hooks/computeFloatingPlayerBarStyle.test.ts similarity index 86% rename from src/hooks/computeFloatingPlayerBarStyle.test.ts rename to src/features/playback/hooks/computeFloatingPlayerBarStyle.test.ts index 938970d8..d68b64aa 100644 --- a/src/hooks/computeFloatingPlayerBarStyle.test.ts +++ b/src/features/playback/hooks/computeFloatingPlayerBarStyle.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { computeFloatingPlayerBarStyle } from './computeFloatingPlayerBarStyle'; +import { computeFloatingPlayerBarStyle } from '@/features/playback/hooks/computeFloatingPlayerBarStyle'; describe('computeFloatingPlayerBarStyle', () => { it('centers in the main column and shrink-wraps instead of stretching', () => { diff --git a/src/hooks/computeFloatingPlayerBarStyle.ts b/src/features/playback/hooks/computeFloatingPlayerBarStyle.ts similarity index 100% rename from src/hooks/computeFloatingPlayerBarStyle.ts rename to src/features/playback/hooks/computeFloatingPlayerBarStyle.ts diff --git a/src/hooks/useFloatingPlayerBar.ts b/src/features/playback/hooks/useFloatingPlayerBar.ts similarity index 93% rename from src/hooks/useFloatingPlayerBar.ts rename to src/features/playback/hooks/useFloatingPlayerBar.ts index f7b3d068..1f7fd9f6 100644 --- a/src/hooks/useFloatingPlayerBar.ts +++ b/src/features/playback/hooks/useFloatingPlayerBar.ts @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react'; -import { computeFloatingPlayerBarStyle } from './computeFloatingPlayerBarStyle'; +import { computeFloatingPlayerBarStyle } from '@/features/playback/hooks/computeFloatingPlayerBarStyle'; /** Computes the floating player-bar position based on the current sidebar + * queue panel widths. Returns an inline-style object (left/right/width); only diff --git a/src/hooks/usePlaybackServerId.test.ts b/src/features/playback/hooks/usePlaybackServerId.test.ts similarity index 90% rename from src/hooks/usePlaybackServerId.test.ts rename to src/features/playback/hooks/usePlaybackServerId.test.ts index be906c87..3575ba67 100644 --- a/src/hooks/usePlaybackServerId.test.ts +++ b/src/features/playback/hooks/usePlaybackServerId.test.ts @@ -1,10 +1,10 @@ import { renderHook } from '@testing-library/react'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { useAuthStore } from '../store/authStore'; +import { useAuthStore } from '@/store/authStore'; import { usePlayerStore } from '@/features/playback/store/playerStore'; import { usePlaybackServerId } from '@/features/playback/hooks/usePlaybackServerId'; -vi.mock('../utils/server/switchActiveServer', () => ({ +vi.mock('@/utils/server/switchActiveServer', () => ({ switchActiveServer: vi.fn(async () => true), })); @@ -49,7 +49,7 @@ describe('usePlaybackServerId', () => { }); it('does not call switchActiveServer when browsed server changes', async () => { - const { switchActiveServer } = await import('../utils/server/switchActiveServer'); + const { switchActiveServer } = await import('@/utils/server/switchActiveServer'); vi.mocked(switchActiveServer).mockClear(); const { rerender } = renderHook(() => usePlaybackServerId()); useAuthStore.setState({ activeServerId: 'b' }); diff --git a/src/hooks/useTimelinePlayHistory.test.ts b/src/features/playback/hooks/useTimelinePlayHistory.test.ts similarity index 93% rename from src/hooks/useTimelinePlayHistory.test.ts rename to src/features/playback/hooks/useTimelinePlayHistory.test.ts index c89d469a..906dd002 100644 --- a/src/hooks/useTimelinePlayHistory.test.ts +++ b/src/features/playback/hooks/useTimelinePlayHistory.test.ts @@ -13,7 +13,7 @@ vi.mock('@/lib/api/library', () => ({ TIMELINE_HISTORY_BOOTSTRAP_LIMIT: 50, })); -vi.mock('../utils/queue/timelineBootstrapReady', () => ({ +vi.mock('@/utils/queue/timelineBootstrapReady', () => ({ timelineBootstrapIndexReady: vi.fn(), })); @@ -23,7 +23,7 @@ vi.mock('@/features/playback/store/queueTrackResolver', async importOriginal => }); import { libraryGetRecentPlaySessions } from '@/lib/api/library'; -import { timelineBootstrapIndexReady } from '../utils/queue/timelineBootstrapReady'; +import { timelineBootstrapIndexReady } from '@/utils/queue/timelineBootstrapReady'; describe('ensureTimelineBootstrap', () => { beforeEach(() => {