@@ -2,14 +2,23 @@ import DatePicker, { type Value } from '@/common/components/DatePicker';
22
33import * as s from './style.css.ts' ;
44import { formatDate } from 'date-fns' ;
5+ import { useGetRentalAvailability } from '@/features/pick/apis/useGetRentalAvailability.ts' ;
6+ import { useState } from 'react' ;
7+ import type { TileDisabledFunc } from 'react-calendar' ;
58
69interface Props {
10+ itemId : number ;
711 dateTime : Date | null ;
812 setDateTime : ( date : Date | null ) => void ;
913 transactionText : 'κ±°λ' | 'λμ¬' | 'λ°λ©' ;
1014 next : ( ) => void ;
15+ minDate ?: Date ;
16+ maxDate ?: Date ;
1117}
12- const DateDrawer = ( { dateTime, setDateTime, transactionText, next } : Props ) => {
18+ const DateDrawer = ( { itemId, dateTime, setDateTime, transactionText, next, minDate = new Date ( ) , maxDate } : Props ) => {
19+ const [ year , setYear ] = useState ( new Date ( ) . getFullYear ( ) ) ;
20+ const [ month , setMonth ] = useState ( new Date ( ) . getMonth ( ) + 1 ) ;
21+ const { data : rentalAvailability } = useGetRentalAvailability ( { itemId, year, month } ) ;
1322 const value = dateTime as Value ;
1423 const setValue = ( value : Value ) => {
1524 if ( Array . isArray ( value ) ) return ;
@@ -18,12 +27,26 @@ const DateDrawer = ({ dateTime, setDateTime, transactionText, next }: Props) =>
1827
1928 const reset = ( ) => setDateTime ( null ) ;
2029
21- // TODO: λ μ§ μ νν΄μΌ λ€μ λ²νΌ νμ±ν
30+ const tileDisabled : TileDisabledFunc = ( { date } ) => {
31+ if ( rentalAvailability === undefined ) return true ;
32+ const canRental = ! ! rentalAvailability [ formatDate ( date , 'yyyy-MM-dd' ) ] ;
33+ return ! canRental ;
34+ } ;
2235
2336 return (
2437 < div className = { s . Container } >
2538 < div className = { s . DateWrapper } >
26- < DatePicker value = { value } setValue = { setValue } />
39+ < DatePicker
40+ value = { value }
41+ setValue = { setValue }
42+ minDate = { minDate }
43+ maxDate = { maxDate }
44+ tileDisabled = { tileDisabled }
45+ checkMonthYear = { ( month , year ) => {
46+ setMonth ( month ) ;
47+ setYear ( year ) ;
48+ } }
49+ />
2750 < div className = { s . SelectedDateWrapper } >
2851 < label > { transactionText } μΌ</ label >
2952 < div > { dateTime ? formatDate ( dateTime , 'yyyy.MM.dd' ) : '' } </ div >
0 commit comments