Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/assets/icons/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,4 @@ export { default as User } from './page/user.svg';
export { default as Warning } from './page/warning.svg';
export { default as Wellbeing } from './page/wellbeing.svg';
export { default as Burger } from './page/burger.svg';
export { default as FallbackImage } from './page/fallback_image.svg';
1 change: 1 addition & 0 deletions src/assets/icons/page/fallback_image.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions src/components/common/image-upload/ImageUpload.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Delete, PasswordHidden } from '@/assets/icons';
import { Delete, FallbackImage, PasswordHidden } from '@/assets/icons';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

FallbackImage 아이콘으로 대체되면서 PasswordHidden 아이콘이 더 이상 사용되지 않습니다. import 문에서 제거하여 코드를 더 깔끔하게 유지하는 것이 좋습니다.

Suggested change
import { Delete, FallbackImage, PasswordHidden } from '@/assets/icons';
import { Delete, FallbackImage } from '@/assets/icons';

import { useEffect, useRef, useState } from 'react';
import imageCompression from 'browser-image-compression';
type ImageUploadProps = {
Expand Down Expand Up @@ -91,7 +91,7 @@ export default function ImageUpload({
type='button'
onClick={handleClick}
className='flex h-20 w-20 flex-col items-center justify-center gap-0.5 rounded-md border border-gray-100 bg-white px-5 py-1.5 sm:h-32 sm:w-32 sm:gap-2.5 sm:rounded-2xl sm:py-4'>
<PasswordHidden className='h-10 w-10 px-[6.67px] pt-2.5 pb-[6.14px] text-gray-400' />
<FallbackImage className='h-10 w-10 px-[6.67px] pt-2.5 pb-[6.14px] text-gray-400' />
<div className='font-sm-medium md:font-md-medium text-gray-600'>
{fileCount}/{maxFiles}
</div>
Expand Down
18 changes: 13 additions & 5 deletions src/pages/CreateActivityPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,19 @@ export default function CreateActivityPage() {
//toISOString() 하면 "2026-01-02T00:00:00.000Z" 이런 문자열이 됨
//split('T')[0] 하면 "2026-01-02"만 뽑음
// 서버가 원하는 날짜 형식 완성
const schedules = values.rows.map((row) => ({
date: row.date.toISOString().split('T')[0],
startTime: row.startTime,
endTime: row.endTime,
}));
const schedules = values.rows.map((row) => {
const d = row.date;

const yyyy = d.getFullYear();
const mm = String(d.getMonth() + 1).padStart(2, '0');
const dd = String(d.getDate()).padStart(2, '0');

return {
date: `${yyyy}-${mm}-${dd}`, // ✅ 로컬 기준 날짜
startTime: row.startTime,
endTime: row.endTime,
};
});
Comment on lines +82 to +94
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

날짜를 YYYY-MM-DD 형식으로 포맷하는 로직은 타임존 문제를 해결하는 올바른 수정입니다. 하지만 이 로직은 여러 곳에서 사용될 수 있으므로 유틸리티 함수로 추출하는 것을 고려해보세요. 리포지토리의 일반 규칙에 따르면, 순수 헬퍼 함수는 재사용성과 유지보수성을 높이기 위해 별도의 유틸리티 파일(예: utils/dateUtils.ts)에 두는 것이 좋습니다. 예를 들어, formatDateToYyyyMmDd(date: Date)와 같은 함수를 만들 수 있습니다. 또한, ActivityForm.tsx 파일에서도 비슷한 날짜 포맷 로직(toISOString().split('T')[0])이 사용되고 있는데, 이 역시 동일한 타임존 버그를 가질 수 있습니다. 공통 유틸리티 함수를 사용하면 이런 문제를 일관되게 해결하고 코드를 중앙에서 관리할 수 있습니다.

References
  1. Pure helper functions that do not depend on component state or props should be defined outside the component scope. For better organization and reusability, place them in a dedicated utility file (e.g., utils/timeUtils.ts).


// 3) 최종 payload
const payload: CreateActivityRequest = {
Expand Down