From f78c39fcb64f299da862ddc82d898f363d5c309a Mon Sep 17 00:00:00 2001 From: onebone Date: Wed, 12 Aug 2026 01:30:19 +0900 Subject: [PATCH 1/4] feat: add skeleton to song search page --- src/pages/SongListPage.tsx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/pages/SongListPage.tsx b/src/pages/SongListPage.tsx index df68279..81448bd 100644 --- a/src/pages/SongListPage.tsx +++ b/src/pages/SongListPage.tsx @@ -4,6 +4,7 @@ import { useQueryClient } from '@tanstack/react-query'; import { TopBar } from '@/components/ui/TopBar'; import { SearchInput } from '@/components/ui/SearchInput'; +import { SongSelectSkeleton } from '@/components/skeletons/SongSelectSkeleton'; import { useToast } from '@/hooks/useToast'; import { SongCard } from '@/features/pin/components/SongCard'; import { fetchPlaybackPreparations } from '@/features/pin/queries/useGetPlaybackPreparations'; @@ -25,7 +26,13 @@ export default function SongListPage() { const [preparingTrackId, setPreparingTrackId] = useState(null); const trackSearchQuery = useSearchTracks({ keyword: query, limit: 200 }); - const tracks = trackSearchQuery.data; + const hasSearchQuery = query.trim().length > 0; + const isSearchPending = + hasSearchQuery && (trackSearchQuery.isDebouncing || trackSearchQuery.isPending); + const tracks = + hasSearchQuery && !trackSearchQuery.isDebouncing + ? (trackSearchQuery.data?.tracks ?? []) + : []; useEffect(() => { if (!trackSearchQuery.isError) return; @@ -68,7 +75,9 @@ export default function SongListPage() { />
- {trackSearchQuery.isError ? ( + {isSearchPending ? ( + + ) : trackSearchQuery.isError ? (

노래를 검색하지 못했어요.

diff --git a/src/pages/PinRadiusOverlayPreviewPage.tsx b/src/pages/PinRadiusOverlayPreviewPage.tsx index c9b3092..6339d4e 100644 --- a/src/pages/PinRadiusOverlayPreviewPage.tsx +++ b/src/pages/PinRadiusOverlayPreviewPage.tsx @@ -73,7 +73,7 @@ export default function PinRadiusOverlayPreviewPage() { zoom={zoom} centerLatitude={centerLatitude} radiusElementRef={radiusElementRef} - feedbackMessage={hasNearbyPinConflict ? '이미 근처 20m 이내에 PIN이 있어요' : null} + feedbackMessage={hasNearbyPinConflict ? '이미 근처 10m 이내에 PIN이 있어요' : null} onCancel={() => setLastAction('Cancel 콜백이 호출됐어요.')} onComplete={() => setLastAction('Complete 콜백이 호출됐어요.')} /> @@ -86,7 +86,7 @@ export default function PinRadiusOverlayPreviewPage() {