@@ -10,14 +10,24 @@ import WritableReview from '@/app/reviews/_components/WritableReview'
1010import WritableReviewSkeleton from '@/app/reviews/_components/WritableReviewSkeleton'
1111import { useInfiniteScroll } from '@/hooks/useInfiniteScroll'
1212import { motion } from 'motion/react'
13- import { useState } from 'react'
13+ import { useRouter , useSearchParams } from 'next/navigation'
14+ import { useRef , useState } from 'react'
1415
1516export type ReviewTabType = '작성가능' | '작성완료'
1617
1718const Review = ( ) => {
18- const [ tab , setTab ] = useState < ReviewTabType > ( '작성가능' )
19+ const searchParams = useSearchParams ( )
20+ const [ tab , setTab ] = useState < ReviewTabType > (
21+ searchParams . get ( 'tab' )
22+ ? searchParams . get ( 'tab' ) === '1'
23+ ? '작성가능'
24+ : '작성완료'
25+ : '작성가능'
26+ )
27+ const router = useRouter ( )
1928
2029 const { data : writableReviews , isLoading } = useGetWritableReviews ( )
30+ const scrollRef = useRef < HTMLDivElement > ( null )
2131
2232 const {
2333 data : completedReviews ,
@@ -32,10 +42,11 @@ const Review = () => {
3242
3343 const handleChangeTab = ( tab : ReviewTabType ) => {
3444 setTab ( tab )
45+ router . push ( `/reviews?tab=${ tab === '작성가능' ? '1' : '2' } ` )
3546 }
3647
3748 return (
38- < section >
49+ < section className = "pt-4" >
3950 < div className = "px-mobile_safe" >
4051 < ReviewTab
4152 tab = { tab }
@@ -44,23 +55,24 @@ const Review = () => {
4455 completedReviewsCount = { completedReviewsCount ?? 0 }
4556 />
4657 </ div >
47- < div className = "relative mt-2" >
58+ < div
59+ ref = { scrollRef }
60+ className = "relative mt-2 h-[calc(100dvh-40px-85px-56px-1rem-0.75rem-0.5rem)] w-dvw overflow-hidden"
61+ >
4862 < motion . div
4963 initial = { { x : 0 } }
5064 animate = { {
51- x : tab === '작성가능' ? 0 : '-110%' ,
65+ x : tab === '작성가능' ? 0 : - window . innerWidth ,
5266 } }
53- transition = { { duration : 0.3 } }
67+ transition = { { type : 'spring' , stiffness : 300 , damping : 30 } }
5468 className = "absolute w-full overflow-y-auto overflow-x-hidden"
55- style = { {
56- height : 'calc(100vh - 190px)' ,
57- } }
69+ style = { { height : '100%' } }
5870 >
5971 { isLoading ? (
6072 Array . from ( { length : 5 } ) . map ( ( _ , i ) => (
6173 < WritableReviewSkeleton key = { i } offSeparator = { i === 4 } />
6274 ) )
63- ) : writableReviews ? (
75+ ) : writableReviews && writableReviews . length > 0 ? (
6476 writableReviews . map ( ( review , index ) => (
6577 < WritableReview
6678 key = { review . orderId }
@@ -74,15 +86,13 @@ const Review = () => {
7486 </ motion . div >
7587
7688 < motion . div
77- initial = { { x : '110%' } }
89+ initial = { { x : window . innerWidth } }
7890 animate = { {
79- x : tab === '작성가능' ? '110%' : 0 ,
91+ x : tab === '작성가능' ? window . innerWidth : 0 ,
8092 } }
81- transition = { { duration : 0.3 } }
93+ transition = { { type : 'spring' , stiffness : 300 , damping : 30 } }
8294 className = "absolute w-full overflow-y-auto overflow-x-hidden"
83- style = { {
84- height : 'calc(100vh - 190px)' ,
85- } }
95+ style = { { height : '100%' } }
8696 >
8797 { completedReviews ?. map ( ( review , index ) => (
8898 < CompletedReview
0 commit comments