Skip to content

Commit eabcf7d

Browse files
authored
Merge pull request #122 from billilge/feat/#120-rental-time-change
[Feat/#120] 운영시간 변경에 따른 입력조건 로직 수정
2 parents 57c1773 + f36e793 commit eabcf7d

File tree

1 file changed

+64
-37
lines changed

1 file changed

+64
-37
lines changed

src/components/mobile/BottomSheet/index.tsx

Lines changed: 64 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,6 @@ export default function BottomSheet({
4949
const isLoadingRef = useRef(false);
5050
const reRender = useReRenderer();
5151

52-
// 현재 시간 가져오기 (현재 시간 이후로만 입력 가능하도록 하기 위함)
53-
const now = new Date();
54-
const currentHour = now.getHours();
55-
const currentMinute = now.getMinutes();
56-
5752
const maxQuantity = item?.count || 0;
5853

5954
// 모달이 열릴 때마다 입력값 초기화
@@ -92,49 +87,81 @@ export default function BottomSheet({
9287
setErrors((prevErrors) => ({ ...prevErrors, quantity: errorMsg }));
9388
};
9489

95-
// 시간 입력 시 검증
96-
const handleHourChange = (e: React.ChangeEvent<HTMLInputElement>) => {
97-
const { value } = e.target;
98-
setHour(value);
90+
// 통합 시간 검증 함수
91+
const validateTime = (hourStr: string, minuteStr: string): string => {
92+
const numHour = parseInt(hourStr, 10);
93+
const numMinute = parseInt(minuteStr, 10);
9994

100-
const numHour = parseInt(value, 10);
101-
let errorMsg = '';
95+
if (Number.isNaN(numHour) || Number.isNaN(numMinute)) {
96+
return '올바른 시간을 입력해주세요.';
97+
}
10298

103-
if (Number.isNaN(numHour)) {
104-
errorMsg = '올바른 시간을 입력해주세요.';
105-
} else if (numHour < 10 || numHour >= 17) {
106-
errorMsg = '대여 가능 시간은 10:00 ~ 17:00입니다.'; // 10시 ~ 17시 사이가 아닐 경우
107-
} else if (numHour < currentHour) {
108-
errorMsg = '대여는 현재 시간 이후로만 가능합니다.'; // 현재 시간보다 이전이면 무조건 오류
109-
} else if (
110-
numHour === currentHour &&
111-
parseInt(minute || '0', 10) <= currentMinute
112-
) {
113-
errorMsg = '대여는 현재 시간 이후로만 가능합니다.'; // 현재 시각과 같다면, 분이 현재 분보다 커야 함
99+
const now = new Date();
100+
const inputTime = new Date(
101+
now.getFullYear(),
102+
now.getMonth(),
103+
now.getDate(),
104+
numHour,
105+
numMinute,
106+
);
107+
const openTime = new Date(
108+
now.getFullYear(),
109+
now.getMonth(),
110+
now.getDate(),
111+
10,
112+
0,
113+
);
114+
const closeTime = new Date(
115+
now.getFullYear(),
116+
now.getMonth(),
117+
now.getDate(),
118+
17,
119+
0,
120+
);
121+
122+
// 운영시간: 10:00 ~ 17:00
123+
if (inputTime < openTime || inputTime > closeTime) {
124+
return '대여 가능한 시간은 10:00 ~ 17:00입니다.';
125+
}
126+
127+
// 입력 시간이 현재 시간보다 이후인지 체크
128+
if (inputTime <= now) {
129+
return '대여는 현재 시간 이후로만 가능합니다.';
130+
}
131+
132+
// 현재 시각을 기준으로 5분 후 체크 (현재 시간이 16:55 이전일 때만 적용)
133+
const threshold = new Date(
134+
now.getFullYear(),
135+
now.getMonth(),
136+
now.getDate(),
137+
16,
138+
55,
139+
);
140+
if (now < threshold) {
141+
const fiveMinutesLater = new Date(now.getTime() + 5 * 60 * 1000);
142+
if (inputTime < fiveMinutesLater) {
143+
return '대여는 현재 시간으로부터 5분 후에 가능합니다.';
144+
}
114145
}
115146

147+
return '';
148+
};
149+
150+
// 시간 입력 시 검증 (시)
151+
const handleHourChange = (e: React.ChangeEvent<HTMLInputElement>) => {
152+
const { value } = e.target;
153+
setHour(value);
154+
155+
const errorMsg = validateTime(value, minute);
116156
setErrors((prevErrors) => ({ ...prevErrors, time: errorMsg }));
117157
};
118158

119-
// 입력 시 검증
159+
// 시간 입력 시 검증 (분)
120160
const handleMinuteChange = (e: React.ChangeEvent<HTMLInputElement>) => {
121161
const { value } = e.target;
122162
setMinute(value);
123163

124-
const numHour = parseInt(hour, 10);
125-
const numMinute = parseInt(value, 10);
126-
let errorMsg = '';
127-
128-
if (Number.isNaN(numHour) || Number.isNaN(numMinute)) {
129-
errorMsg = '올바른 시간을 입력해주세요.';
130-
} else if (numHour < 10 || numHour >= 17) {
131-
errorMsg = '대여 가능 시간은 10:00 ~ 17:00입니다.';
132-
} else if (numHour < currentHour) {
133-
errorMsg = '대여는 현재 시간 이후로만 가능합니다.';
134-
} else if (numHour === currentHour && numMinute <= currentMinute) {
135-
errorMsg = '대여는 현재 시간 이후로만 가능합니다.';
136-
}
137-
164+
const errorMsg = validateTime(hour, value);
138165
setErrors((prevErrors) => ({ ...prevErrors, time: errorMsg }));
139166
};
140167

0 commit comments

Comments
 (0)