11"use client" ;
22
33import { MobileIconArrowLeftGray , MobileIconArrowRightGray } from "@setaday/icon" ;
4- import { useRef , useState } from "react" ;
5- import { DAY , MONTH_NAMES } from "../../contants/calendarConst" ;
4+ import { useState } from "react" ;
5+ import { DAY , MAX_DATE , MONTH_NAMES } from "../../constants/selectDateConst" ;
6+ import type { ClickDateProps , SelctDateCalendarProps , SelectedDateType } from "../../type/selectedDateType" ;
67import { getCalendarDate } from "../../utils/getCalendarDate" ;
78
8- function SelectDateCalendar ( {
9- handleSelectDate,
10- } : {
11- handleSelectDate : ( isSelected : boolean ) => void ;
12- } ) {
9+ function SelectDateCalendar ( { selectedDateNum, selectedDate, handleSelectDate } : SelctDateCalendarProps ) {
1310 const [ year , setYear ] = useState ( new Date ( ) . getFullYear ( ) ) ;
1411 const [ month , setMonth ] = useState ( new Date ( ) . getMonth ( ) + 1 ) ;
15- const [ selectedDate , setSelectedDate ] = useState <
16- Array < {
17- startYear : number ;
18- startMonth : number ;
19- startDate : number ;
20- endYear : number ;
21- endMonth : number ;
22- endDate : number ;
23- } >
24- > ( [ ] ) ;
25- const selectedDateNum = useRef ( 0 ) ;
2612
2713 const ALL_DATE = getCalendarDate ( { year, month } ) ;
2814
@@ -35,14 +21,7 @@ function SelectDateCalendar({
3521 endYear,
3622 endMonth,
3723 endDate,
38- } : {
39- startYear : number ;
40- startMonth : number ;
41- startDate : number ;
42- endYear : number ;
43- endMonth : number ;
44- endDate : number ;
45- } ) => {
24+ } : SelectedDateType ) => {
4625 const start = new Date ( startYear , startMonth - 1 , startDate ) ;
4726 const end = new Date ( endYear , endMonth - 1 , endDate ) ;
4827
@@ -80,7 +59,7 @@ function SelectDateCalendar({
8059 const endMonth = isSavedDateEarlier ? clickedMonth : month ;
8160 const endDate = isSavedDateEarlier ? clickedDate : date ;
8261
83- setSelectedDate ( ( prev ) => [
62+ handleSelectDate ( ( prev ) => [
8463 // 이전 값을 유지한 채 마지막 요소만 변경
8564 ...prev . slice ( 0 , - 1 ) ,
8665 { startYear, startMonth, startDate, endYear, endMonth, endDate } ,
@@ -118,15 +97,7 @@ function SelectDateCalendar({
11897 }
11998 } ;
12099
121- const handleClickDate = ( {
122- clickedYear,
123- clickedMonth,
124- clickedDate,
125- } : {
126- clickedYear : number ;
127- clickedMonth : number ;
128- clickedDate : number ;
129- } ) => {
100+ const handleClickDate = ( { clickedYear, clickedMonth, clickedDate } : ClickDateProps ) => {
130101 // 해당 날짜가 포함된 selectedDate 객체 찾기
131102 const idxOfDate = selectedDate . findIndex (
132103 ( { startDate, startMonth, startYear, endDate, endMonth, endYear } ) =>
@@ -172,16 +143,15 @@ function SelectDateCalendar({
172143 ) ,
173144 ] ;
174145
175- setSelectedDate ( updatedDate ) ;
176- handleSelectDate ( false ) ;
146+ handleSelectDate ( updatedDate ) ;
177147 } else {
178148 const lastDate = selectedDate [ selectedDate . length - 1 ] ;
179149 const isStartDateNull = lastDate && lastDate . startDate === 0 && lastDate . endDate !== 0 ;
180150 const isEndDateNull = lastDate && lastDate . startDate !== 0 && lastDate . endDate === 0 ;
181151
182152 // 선택된 날짜가 없는 경우
183153 if ( selectedDate . length === 0 ) {
184- setSelectedDate ( [
154+ handleSelectDate ( [
185155 {
186156 startYear : clickedYear ,
187157 startMonth : clickedMonth ,
@@ -191,7 +161,6 @@ function SelectDateCalendar({
191161 endDate : 0 ,
192162 } ,
193163 ] ) ;
194- handleSelectDate ( false ) ;
195164 }
196165
197166 // 시작 날짜와 끝나는 날짜 중 하나가 선택되어 있는 경우
@@ -212,11 +181,9 @@ function SelectDateCalendar({
212181 month : startMonth ,
213182 date : startDate ,
214183 } ) ;
215- handleSelectDate ( true ) ;
216- if ( selectedDateNum . current >= 14 ) {
184+ if ( selectedDateNum . current > MAX_DATE ) {
217185 // 선택한 날짜가 14일을 넘었을 때 동작하는 플로우 추가 시 삭제 예정
218186 alert ( "14일 넘음" ) ;
219- handleSelectDate ( false ) ;
220187 }
221188 }
222189
@@ -233,18 +200,16 @@ function SelectDateCalendar({
233200 month : endMonth ,
234201 date : endDate ,
235202 } ) ;
236- handleSelectDate ( true ) ;
237- if ( selectedDateNum . current >= 14 ) {
203+ if ( selectedDateNum . current > MAX_DATE ) {
238204 // 선택한 날짜가 14일을 넘었을 때 동작하는 플로우 추가 시 삭제 예정
239205 alert ( "14일 넘음" ) ;
240- handleSelectDate ( false ) ;
241206 }
242207 }
243208 }
244209
245210 // 선택된 날짜 묶음이 하나 이상이고, 시작/ 끝 날짜가 모두 선택되어 있는 경우
246211 else if ( selectedDate . length > 0 ) {
247- setSelectedDate ( ( prev ) => [
212+ handleSelectDate ( ( prev ) => [
248213 ...prev ,
249214 {
250215 startYear : clickedYear ,
@@ -255,7 +220,6 @@ function SelectDateCalendar({
255220 endDate : 0 ,
256221 } ,
257222 ] ) ;
258- handleSelectDate ( false ) ;
259223 }
260224 }
261225 } ;
0 commit comments