-
Notifications
You must be signed in to change notification settings - Fork 3
Feat/147/skeleton : 마이페이지 스켈레톤 추가 #162
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Walkthrough이번 변경 사항은 Changes
Possibly related PRs
Suggested reviewers
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Outside diff range and nitpick comments (3)
src/components/common/skeleton/reviewable-gathering-skeleton-list/index.tsx (2)
12-15: 배열 인덱스를 key로 사용하는 것을 재고해 주세요.인덱스를 key로 사용하면 React의 재조정(reconciliation) 과정에서 문제가 발생할 수 있습니다. 스켈레톤 UI의 특성상 큰 문제는 없을 수 있으나, 더 안정적인 방법을 고려해보시는 것이 좋겠습니다.
다음과 같이 수정하는 것을 제안드립니다:
- <ReviewableGatheringSkeleton key={index} /> + <ReviewableGatheringSkeleton key={`skeleton-${index}`} />
11-11: 반응형 그리드 레이아웃 적용을 고려해 주세요.현재 단일 컬럼으로만 구성되어 있는데, 더 큰 화면에서는 여러 컬럼으로 표시하는 것이 좋을 수 있습니다.
다음과 같이 수정하는 것을 제안드립니다:
- <div className="grid grid-cols-1 gap-12" aria-label="콘텐츠 로딩 중"> + <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-12" aria-label="콘텐츠 로딩 중">src/components/my-page/reviewable-gatherings/reviewable-gathering-card-list.tsx (1)
21-26: 매직 넘버를 상수로 분리하는 것이 좋겠습니다.스켈레톤 아이템의 개수(6)가 페이지 크기와 일치하는 것은 좋습니다만, 이 값을 상수로 분리하면 유지보수성이 향상될 것 같습니다.
다음과 같이 변경을 제안드립니다:
+const ITEMS_PER_PAGE = 6; export default function ReviewableGatheringCardList() { const { data, ref, isLoading, isFetchingNextPage } = useInfiniteScroll( useGetReviewableQuery({ - pageable: { page: 0, size: 6, sort: ['dateTime,desc'] }, + pageable: { page: 0, size: ITEMS_PER_PAGE, sort: ['dateTime,desc'] }, }), ); if (isLoading) return ( <div className="py-6"> - <ReviewableGatheringSkeletonList num={6} /> + <ReviewableGatheringSkeletonList num={ITEMS_PER_PAGE} /> </div> );
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (5)
src/app/(crew)/my-page/my-review/page.tsx(2 hunks)src/components/common/skeleton/reviewable-gathering-skeleton-list/index.tsx(1 hunks)src/components/common/skeleton/reviewable-gathering-skeleton/index.tsx(1 hunks)src/components/common/skeleton/reviewable-review-skeleton-list/index.tsx(0 hunks)src/components/my-page/reviewable-gatherings/reviewable-gathering-card-list.tsx(2 hunks)
💤 Files with no reviewable changes (1)
- src/components/common/skeleton/reviewable-review-skeleton-list/index.tsx
✅ Files skipped from review due to trivial changes (1)
- src/components/common/skeleton/reviewable-gathering-skeleton/index.tsx
🔇 Additional comments (6)
src/components/common/skeleton/reviewable-gathering-skeleton-list/index.tsx (2)
1-5: 인터페이스 정의가 명확하고 간단합니다!
타입 정의가 명확하며 필요한 프롭만 정의되어 있습니다.
7-18: 대량의 스켈레톤 렌더링에 대한 성능 고려가 필요합니다.
num 값이 매우 큰 경우 성능 저하가 발생할 수 있습니다. 최대 개수를 제한하거나 가상화(virtualization)를 고려해보시는 것이 좋겠습니다.
다음 스크립트로 컴포넌트의 사용 패턴을 확인해보겠습니다:
src/app/(crew)/my-page/my-review/page.tsx (2)
8-8: 스켈레톤 컴포넌트 import 구문이 적절히 추가되었습니다.
새로운 스켈레톤 컴포넌트의 import 경로가 프로젝트 구조에 맞게 잘 구성되어 있습니다.
19-21: 로딩 상태 UI가 개선되었습니다.
기존의 단순한 로딩 스피너를 스켈레톤 UI로 대체한 것은 좋은 UX 개선입니다. 다만 몇 가지 제안사항이 있습니다:
- 마진 값(mt-8)이 페이지 컨텐츠와 일관성이 있는지 확인해주세요.
- 스켈레톤의 개수(size)가 실제 데이터 렌더링 시의 개수와 일치하는지 검증이 필요합니다.
스켈레톤 UI와 실제 데이터의 일관성을 확인하기 위한 스크립트입니다:
✅ Verification successful
스켈레톤 UI 구현이 적절하게 되어있습니다.
검증 결과 다음과 같은 사항들이 확인되었습니다:
- size 변수가 6으로 설정되어 있고, 이는 실제 데이터 쿼리(
useGetMyReviewsQuery)와 스켈레톤 UI 모두에서 일관되게 사용되고 있습니다. - 마진 값(mt-8)은 로딩 상태와 실제 콘텐츠 렌더링 시 동일하게 적용되어 일관성이 유지되고 있습니다.
- 스켈레톤 컴포넌트는 grid 레이아웃을 사용하여 실제 데이터 표시와 동일한 구조를 가지고 있습니다.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: 실제 데이터 렌더링과 스켈레톤 UI의 일관성 확인
# ReviewCardList 컴포넌트에서 렌더링되는 아이템 수 확인
ast-grep --pattern 'ReviewCardList.*data={data.*}'
# 스켈레톤 컴포넌트의 구현 확인
fd "my-review-skeleton-list" --exec cat {}
Length of output: 175
Script:
#!/bin/bash
# 1. 페이지 컴포넌트에서 ReviewCardList 사용 확인
rg -A 5 "ReviewCardList" "src/app/(crew)/my-page/my-review/page.tsx"
# 2. size 변수의 정의 확인
rg "size" "src/app/(crew)/my-page/my-review/page.tsx"
# 3. 스켈레톤 컴포넌트 구현 확인
fd "MyReviewSkeletonList" -t f --exec cat {}
# 4. 마진 관련 스타일 확인
rg "mt-" "src/app/(crew)/my-page/my-review/page.tsx"
Length of output: 908
Script:
#!/bin/bash
# 스켈레톤 컴포넌트 구현 확인을 위한 다른 접근
rg -l "MyReviewSkeletonList" --type ts --type tsx
cat src/components/common/skeleton/my-review-skeleton-list/index.tsx
# 실제 데이터 렌더링 관련 코드 확인
rg -A 5 "useGetMyReviewsQuery" "src/app/(crew)/my-page/my-review/page.tsx"
Length of output: 1141
src/components/my-page/reviewable-gatherings/reviewable-gathering-card-list.tsx (2)
5-5: 스켈레톤 컴포넌트 임포트가 적절히 추가되었습니다.
컴포넌트 임포트 구문이 기존 임포트들과 일관성 있게 배치되었습니다.
Line range hint 10-14: useInfiniteScroll 훅의 타입 검증이 필요합니다.
isLoading이 추가된 것은 적절해 보이나, 타입 안정성을 위해 훅의 반환 타입을 확인해주세요.
✅ Verification successful
useInfiniteScroll 훅의 타입이 올바르게 정의되어 있습니다.
useInfiniteScroll 훅은 제네릭 타입 <TData>를 사용하여 타입 안전성을 보장하고 있으며, isLoading을 포함한 모든 반환값이 명확하게 타입이 지정되어 있습니다. 현재 구현에서 타입 관련 문제가 없습니다.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify the type definition of useInfiniteScroll hook
ast-grep --pattern 'export function useInfiniteScroll<$_>($_) {
$$$
}'
Length of output: 74
Script:
#!/bin/bash
# Let's try to find the hook definition with a more flexible pattern
rg "useInfiniteScroll" -A 5
# Also search for type definitions
rg "type.*InfiniteScroll" -A 2
Length of output: 7976
Script:
#!/bin/bash
# Let's check the content of the use-infinite-scroll.ts file
cat src/hooks/use-infinite-scroll.ts
Length of output: 862
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Outside diff range and nitpick comments (19)
src/components/common/input/file-input-wrap/file-sample/index.tsx (2)
Line range hint
11-24: 상태 관리 개선 제안현재
useRef를 사용한 라디오 버튼 상태 관리를 React의 제어 컴포넌트 패턴으로 리팩토링하면 코드를 더 단순화할 수 있습니다.- const radioInput = useRef<HTMLInputElement>(null); + const [isChecked, setIsChecked] = useState<boolean>(false); const handleClick = async () => { onChange(image); + setIsChecked(true); }; useEffect(() => { - if (isBlur && radioInput.current) { - radioInput.current.checked = false; - } - if (!isBlur && isEdit && value === image && radioInput.current) { - radioInput.current.checked = true; + if (isBlur) { + setIsChecked(false); + } else if (!isBlur && isEdit && value === image) { + setIsChecked(true); } }, [isBlur, value, isEdit]);
Line range hint
34-40: 접근성 및 이미지 최적화 개선이 필요합니다
- 대체 텍스트가 하드코딩되어 있습니다
- 이미지 크기가 고정되어 있어 반응형 처리가 필요할 수 있습니다
- Next.js Image 컴포넌트의 최적화 속성이 누락되었습니다
<Image src={image} width={282} height={282} - alt="샘플 이미지 1" + alt={`${value} 미리보기 이미지`} + sizes="(max-width: 768px) 100vw, 282px" + priority={true} className="h-full w-full object-cover" />src/components/common/header/header.stories.tsx (1)
Line range hint
15-21: QueryClient 인스턴스 최적화 필요매 렌더링마다 새로운 QueryClient 인스턴스가 생성되고 있습니다. 이는 불필요한 메모리 사용을 초래할 수 있습니다.
다음과 같이 수정하는 것을 추천드립니다:
+const queryClient = new QueryClient(); function Template() { return ( - <QueryClientProvider client={new QueryClient()}> + <QueryClientProvider client={queryClient}> <Header /> </QueryClientProvider> ); }src/components/gathering-list/liked-list-presenter.tsx (1)
Line range hint
44-63: 페이지네이션 스타일링 개선 제안현재 페이지네이션 스타일링이 인라인으로 되어있어 재사용성이 떨어집니다. 다음과 같은 개선을 제안드립니다:
+ // styles/pagination.ts + export const paginationStyles = { + control: { + '&[data-active]': { + backgroundColor: 'transparent', + fontWeight: 'var(--pagination-active-font-weight)', + color: 'var(--pagination-active-color)', + boxShadow: 'none', + }, + }, + }; + // styles/pagination.css + .pagination-control { + @apply data-[active="true"]:text-blue-500 data-[active="true"]:font-bold + border-none bg-transparent hover:bg-transparent; + } - classNames={{ - control: cn( - 'data-[active="true"]:text-blue-500 data-[active="true"]:font-bold', - 'border-none bg-transparent hover:bg-transparent', - ), - }} - styles={{ - control: { - '&[data-active]': { - backgroundColor: 'transparent', - fontWeight: 'var(--pagination-active-font-weight)', - color: 'var(--pagination-active-color)', - boxShadow: 'none', - }, - }, - }} + classNames={{ control: 'pagination-control' }} + styles={paginationStyles}src/app/(crew)/crew/detail/[id]/edit/page.tsx (1)
Line range hint
31-35: 스켈레톤 UI로 전환 필요PR의 목적에 맞게 스피너(Loader) 대신 스켈레톤 UI를 사용하는 것이 좋습니다. 이는 사용자 경험을 향상시키고 다른 페이지들과의 일관성을 유지할 수 있습니다.
다음과 같이 스켈레톤 컴포넌트로 변경하는 것을 제안합니다:
- return ( - <div className="fixed inset-0 flex items-center justify-center"> - <Loader size="sm" /> - </div> - ); + return <EditCrewSkeleton />;새로운 스켈레톤 컴포넌트를 생성하여 폼의 구조를 미리 보여주는 것이 좋습니다.
스켈레톤 컴포넌트 구현에 도움이 필요하시다면 말씀해 주세요.
src/app/(crew)/my-page/_components/profile-card/container.tsx (3)
Line range hint
20-31: 에러 처리 개선이 필요합니다인증 확인 과정에서 네트워크 오류나 예기치 않은 상황에 대한 처리가 부족합니다.
다음과 같은 개선을 제안드립니다:
useEffect(() => { if (userLoading) return; - if (user) { - setIsAuthChecked(true); - } else if (!isAuth) { - toast.error('로그인이 필요합니다.'); - router.push('/login'); - } else { - setIsAuthChecked(true); - } + try { + if (user) { + setIsAuthChecked(true); + } else if (!isAuth) { + toast.error('로그인이 필요합니다.'); + router.push('/login'); + } else { + setIsAuthChecked(true); + } + } catch (error) { + toast.error('인증 확인 중 오류가 발생했습니다. 다시 시도해 주세요.'); + router.push('/login'); + } }, [user, userLoading, isAuth, router]);
Line range hint
39-64: 파일 업로드 보안 강화가 필요합니다파일 확장자 검사만으로는 충분하지 않으며, MIME 타입 검증이 필요합니다.
다음과 같은 보안 개선을 제안드립니다:
if (file) { if (file.size > 5 * 1024 * 1024) { toast.error('5MB 이하의 파일만 업로드 가능합니다.'); return; } + const validMimeTypes = ['image/jpeg', 'image/png', 'image/jpg']; + if (!validMimeTypes.includes(file.type)) { + toast.error('유효하지 않은 이미지 형식입니다.'); + return; + } try { await updateUserProfile(file);
Line range hint
66-75: 사용자 확인 절차 추가 필요프로필 이미지 삭제 전에 사용자 확인을 받는 것이 좋습니다.
다음과 같은 개선을 제안드립니다:
const handleDeleteProfile = async () => { + const isConfirmed = window.confirm('프로필 이미지를 삭제하시겠습니까?'); + if (!isConfirmed) return; + try { await resetUserProfileImage(); await refetchUser(); setProfileImageUrl(''); toast.success('프로필 이미지가 초기화되었습니다.'); } catch (error) { toast.error('프로필 이미지 초기화에 실패했습니다.'); } };src/components/common/input/pop-over-calendar/index.tsx (1)
18-18: 상태 관리 최적화가 잘 되었습니다!
useState를 사용하는 대신opened상태값으로부터inputTheme을 직접 계산하도록 변경한 것이 좋은 개선사항입니다. 이는 불필요한 상태 관리를 제거하고 컴포넌트의 성능을 향상시킵니다.추가적인 개선사항으로, 이 로직을 더욱 명확하게 하기 위해 다음과 같이 분리된 함수로 추출하는 것을 고려해보세요:
-const inputTheme = opened ? 'dark' : 'light'; +const getInputTheme = (isOpened: boolean) => isOpened ? 'dark' : 'light'; +const inputTheme = getInputTheme(opened);src/components/common/review-list/review-card.tsx (3)
Line range hint
71-71: 에러 메시지 개선 제안에러 메시지에 현재 값들을 포함하면 디버깅에 더 도움이 될 것 같습니다.
다음과 같이 수정을 제안드립니다:
- if (!isMine && !reviewer) throw new Error('나의 카드 리뷰 리스트일시 isMine이 true여야 합니다.'); + if (!isMine && !reviewer) throw new Error(`리뷰어 정보가 필요합니다. (isMine: ${isMine}, reviewer: ${JSON.stringify(reviewer)})`);
Line range hint
48-56: 에러 처리 개선 제안에러 처리 시 더 구체적인 정보를 제공하면 좋을 것 같습니다.
다음과 같이 수정을 제안드립니다:
try { await deleteReview(id); toast.success('리뷰가 성공적으로 삭제되었습니다.'); closeConfirmDeleteModal(); refetch(); } catch (error) { - toast.error('리뷰 삭제에 실패했습니다.'); + const errorMessage = error instanceof Error ? error.message : '알 수 없는 오류가 발생했습니다.'; + toast.error(`리뷰 삭제 실패: ${errorMessage}`); + console.error('리뷰 삭제 중 오류 발생:', error); }
Line range hint
72-134: 접근성 개선 제안현재 구현은 잘 되어있지만, 스크린 리더 사용자를 위한 접근성 개선이 필요해 보입니다.
다음과 같은 개선사항을 제안드립니다:
- <div className="w-full"> + <article className="w-full" aria-label={`${reviewer?.nickname || '내'}의 리뷰`}> {isMine && ( <button type="button" + aria-label={`${crewName} 모임으로 이동`} className="mb-3 flex w-fit items-center gap-2 text-xl font-semibold text-gray-800" onClick={handleClick} > {crewName} </button> )} <div role="presentation" + aria-label={`별점 ${rate}점, 리뷰 내용: ${comment}`} className={`flex h-full items-end gap-[15px] ${!isMine ? 'border-b-[2px] border-b-[#F3F4F6] py-4' : 'rounded-[12px] p-6 shadow-bg'} bg-white lg:gap-[40px]`} >src/app/(crew)/page.tsx (1)
Line range hint
139-143: 로딩 상태에 대한 접근성 개선 제안스켈레톤 로딩 상태에서 스크린 리더 사용자를 위한 접근성 개선이 필요합니다.
다음과 같이 aria-label을 추가하는 것을 제안드립니다:
{isLoading || isFetchingNextPage ? ( - <CrewSkeletonList num={6} column={2} /> + <CrewSkeletonList + num={6} + column={2} + aria-label="크루 목록을 불러오는 중입니다" + /> ) : ( <div ref={ref} className="h-[1px]" /> )}src/mock/review-data.ts (2)
Line range hint
6-196: CrewReviewData의 샘플 데이터 개선 필요다음과 같은 문제점들이 발견되었습니다:
- ID 중복: id 5가 여러 리뷰에서 중복 사용됨
- 일관성 없는 평점: rate가 0-5 사이로 불규칙하게 사용됨
- 이미지 URL이 모든 사용자에게 동일함
다음과 같은 개선을 제안드립니다:
export const CrewReviewData: { data: CrewReview[] } = { data: [ { crewId: 1, - id: 5, + id: unique_id, // 각 리뷰마다 고유한 ID 사용 rate: 4, // 1-5 사이의 일관된 평점 사용 comment: '좋아용', createdAt: '2024-10-31T10:09:12.306+09:00', reviewer: { id: 5, nickname: '샘플5', - imageUrl: 'https://i.pinimg.com/736x/5d/83/ce/5d83cec545201e5ca8f2477070e2eac9.jpg', + imageUrl: unique_image_url, // 각 사용자마다 다른 이미지 URL 사용 }, }, // ... 나머지 데이터도 동일하게 수정 ], };
Line range hint
198-307: MyReviewData 구조 및 날짜 형식 개선 필요다음과 같은 문제점들이 발견되었습니다:
- 날짜 형식이 일관적이지 않음 (
2024-10-31T00:56vs2024-10-31T10:09:12.306+09:00)- 페이지네이션 파라미터가 비어있음
- 위치 정보가 모든 데이터에서 동일함 ('어느동')
샘플 데이터의 현실성을 높이기 위해 다음과 같은 개선을 제안드립니다:
export const MyReviewData = { pages: [ { content: [ { crewId: 1, crewName: '크루크루크루크루크루크루', gatheringName: '모임모임모임약속약속약속', id: 3, rate: 3, comment: '리뷰리뷰리뷰리뷰리뷰리뷰리뷰리뷰리뷰리뷰', - createdAt: '2024-10-31T00:56', + createdAt: '2024-10-31T00:56:00.000+09:00', - gatheringLocation: '어느동', + gatheringLocation: '강남구 역삼동', // 실제 지역명 사용 }, // ... 나머지 데이터도 동일하게 수정 ], hasNext: true, }, ], - pageParams: [], // 페이지 파라미터 + pageParams: [null, 0, 1], // 실제 페이지네이션 파라미터 예시 };src/app/(crew)/crew/detail/[id]/_components/create-gathering/create-gathering-form/index.tsx (4)
Line range hint
22-45: 폼 유효성 검사 개선을 제안드립니다.현재 'onBlur' 모드는 사용자가 필드를 벗어날 때만 유효성 검사를 수행합니다. 실시간 피드백을 위해 다음과 같은 개선을 고려해보세요:
const { control, handleSubmit, trigger, setError, clearErrors, formState: { errors, isValid, isSubmitting }, } = useForm<CreateGatheringFormTypes>({ defaultValues: data, - mode: 'onBlur', + mode: 'onChange', + defaultValues: { + ...data, + totalCount: Math.max(4, Math.min(20, data.totalCount || 4)), + }, });
Line range hint
47-65: 에러 처리 로직 개선이 필요합니다.현재 에러 처리가 너무 일반적이며, 사용자에게 더 명확한 피드백을 제공할 수 있습니다.
try { if (file instanceof File) { + if (file.size > 5 * 1024 * 1024) { + throw new Error('이미지 크기는 5MB를 초과할 수 없습니다.'); + } + const allowedTypes = ['image/jpeg', 'image/png', 'image/gif']; + if (!allowedTypes.includes(file.type)) { + throw new Error('지원되지 않는 이미지 형식입니다.'); + } const imgResponse = await getImageUrl(file, 'GATHERING'); if (imgResponse?.imageUrl) { clearErrors('imageUrl'); onChange(imgResponse.imageUrl); } else { throw new Error('이미지 업로드 중 문제가 발생했습니다.'); } } } catch (error) { - setError('imageUrl', { type: 'server', message: errors.imageUrl?.message }); + setError('imageUrl', { + type: 'server', + message: error instanceof Error ? error.message : '이미지 업로드 중 문제가 발생했습니다.' + }); }
Line range hint
67-74: 불필요한 코드를 제거하여 함수를 단순화할 수 있습니다.
handleSubmit이 이미preventDefault를 처리하므로, 함수를 더 간단하게 만들 수 있습니다.- const handleSendForm = (e: FormEvent<HTMLFormElement>) => { - e.preventDefault(); - if (!isEdit) { - handleSubmit(onSubmit)(); - } else { - handleSubmit(onEdit)(); - } - }; + const handleSendForm = handleSubmit(isEdit ? onEdit : onSubmit);
Line range hint
76-217: 폼 렌더링 성능 최적화를 제안드립니다.현재 구현은 잘 되어있지만, 큰 폼에서 성능 이슈가 발생할 수 있습니다. 다음과 같은 최적화를 고려해보세요:
- 각 입력 필드를 개별 컴포넌트로 분리
- React.memo를 사용하여 불필요한 리렌더링 방지
예시:
const GatheringTitleInput = React.memo(({ control, errors, trigger }: Props) => ( <Controller name="title" control={control} rules={{ required: '필수 입력사항입니다.', }} render={({ field }) => ( <TextInput {...field} // ... 기존 props /> )} /> ));또한 접근성 개선을 위해 다음 사항도 검토해주세요:
- 에러 메시지에
aria-live="polite"추가- 필수 입력 필드에
aria-required="true"추가
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (24)
src/_apis/crew/crew.ts(0 hunks)src/app/(crew)/crew/create/_components/create-crew-form/index.tsx(0 hunks)src/app/(crew)/crew/detail/[id]/_components/create-gathering/create-gathering-form/index.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/_components/create-gathering/index.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/edit/page.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/page.tsx(0 hunks)src/app/(crew)/my-crew/hosted/page.tsx(0 hunks)src/app/(crew)/my-crew/joined/page.tsx(0 hunks)src/app/(crew)/my-page/_components/profile-card/container.tsx(1 hunks)src/app/(crew)/page.tsx(1 hunks)src/components/common/crew-list/crew-card.tsx(0 hunks)src/components/common/gathering-card/container.tsx(1 hunks)src/components/common/gathering-card/presenter.tsx(0 hunks)src/components/common/gathering-card/scheduled-gathering-card/presenter.tsx(0 hunks)src/components/common/header/header.stories.tsx(1 hunks)src/components/common/input/file-input-wrap/file-sample/index.tsx(1 hunks)src/components/common/input/pop-over-calendar/index.tsx(1 hunks)src/components/common/review-list/review-card.tsx(1 hunks)src/components/gathering-list/liked-list-container.tsx(0 hunks)src/components/gathering-list/liked-list-presenter.tsx(1 hunks)src/components/my-page/reviewable-gatherings/reviewable-gathering-card-list.tsx(2 hunks)src/mock/review-data.ts(1 hunks)src/types/create-crew.d.ts(0 hunks)src/types/gathering-data.d.ts(0 hunks)
💤 Files with no reviewable changes (11)
- src/_apis/crew/crew.ts
- src/app/(crew)/crew/create/_components/create-crew-form/index.tsx
- src/app/(crew)/crew/detail/[id]/page.tsx
- src/app/(crew)/my-crew/hosted/page.tsx
- src/app/(crew)/my-crew/joined/page.tsx
- src/components/common/crew-list/crew-card.tsx
- src/components/common/gathering-card/presenter.tsx
- src/components/common/gathering-card/scheduled-gathering-card/presenter.tsx
- src/components/gathering-list/liked-list-container.tsx
- src/types/create-crew.d.ts
- src/types/gathering-data.d.ts
✅ Files skipped from review due to trivial changes (1)
- src/components/common/gathering-card/container.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
- src/components/my-page/reviewable-gatherings/reviewable-gathering-card-list.tsx
🔇 Additional comments (12)
src/components/common/input/file-input-wrap/file-sample/index.tsx (1)
1-2: 타입 안전성 검증이 필요합니다
StaticImageData 타입이 제거되었는데, 이미지 prop의 타입 안전성이 보장되는지 확인이 필요합니다.
src/components/common/header/header.stories.tsx (1)
Line range hint 23-63: 스토리 구성이 잘 되어있습니다!
각 스토리에 대한 설명과 네비게이션 파라미터가 명확하게 정의되어 있으며, 문서화도 잘 되어있습니다. 특히 다음 사항들이 인상적입니다:
- 각 경로별 스토리 구분
- 사용자 상태(로그인/로그아웃)에 따른 케이스 구분
- 명확한 스토리 설명
src/app/(crew)/crew/detail/[id]/_components/create-gathering/index.tsx (1)
16-16: 에러 처리 및 로딩 상태 구현 확인 필요
isLoading과 error 상태를 제거한 것이 확인되었습니다. 스켈레톤 로딩을 구현하는 과정에서 의도된 변경으로 보이나, 다음 사항들을 확인해 주시기 바랍니다:
- 에러가 발생했을 때의 처리 방안
- 상위 컴포넌트나 다른 곳에서 로딩 상태를 적절히 처리하고 있는지 여부
src/components/gathering-list/liked-list-presenter.tsx (2)
21-21: 사용하지 않는 pageSize 제거 승인
불필요한 pageSize 속성을 제거한 것은 코드를 더 간결하게 만드는 좋은 리팩토링입니다.
Line range hint 24-31: 반응형 레이아웃 구현이 잘 되어있습니다
그리드 시스템을 활용한 반응형 레이아웃 구현이 잘 되어있습니다:
- 모바일: 1열
- 태블릿: 2열
- 데스크톱: 3열
최소 높이 설정으로 레이아웃 시프트도 방지하고 있습니다.
src/app/(crew)/crew/detail/[id]/edit/page.tsx (1)
Line range hint 1-53: 전반적인 구조가 잘 구성되어 있습니다
컴포넌트의 전체적인 구조와 타입 처리가 잘 되어 있습니다. CreateCrewForm을 재사용하여 수정 기능을 구현한 것이 효율적입니다.
src/app/(crew)/my-page/_components/profile-card/container.tsx (2)
6-6: API 통합이 잘 되었습니다!
사용자 프로필 관련 API들이 논리적으로 잘 통합되어 있습니다.
Line range hint 77-84: 컴포넌트 구조가 잘 설계되었습니다!
프레젠터 패턴이 잘 적용되어 있고, 프로퍼티 전달이 명확합니다.
src/components/common/review-list/review-card.tsx (1)
3-3: 불필요한 import 제거 승인
useState를 사용하지 않는 컴포넌트에서 해당 import를 제거한 것이 적절합니다.
src/app/(crew)/page.tsx (1)
5-5: 불필요한 임포트 제거 승인
Loader와 Skeleton 컴포넌트를 제거하고 스켈레톤 로딩 상태로 전환한 것이 적절합니다.
src/mock/review-data.ts (1)
3-3: MyReview 타입 임포트 제거 관련 확인 필요
MyReview 타입 임포트가 제거되었지만 MyReviewData는 여전히 사용 중입니다. 타입 안정성을 위해 다음 사항을 확인해주세요:
MyReviewData의 타입 정의가 다른 파일로 이동되었는지- 혹은
MyReview타입이 여전히 필요한지
✅ Verification successful
MyReview 타입 임포트 제거는 안전합니다
MyReview 타입은 types/review.d.ts에 정의되어 있으며, MyReviewData는 스토리북 테스트용으로만 사용되고 있습니다. 현재 파일에서 MyReview 타입 임포트를 제거해도 문제가 없습니다.
MyReviewData는review-card-list.stories.tsx에서만 사용되는 테스트 데이터입니다.MyReview타입은types/review.d.ts에서 올바르게 정의되어 있습니다.- 실제 애플리케이션 코드에서는 API 응답을 통해 타입이 적용됩니다.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# MyReview 타입의 새로운 위치 확인
rg -t typescript "type.*MyReview.*="
# MyReviewData 사용처 확인
rg -t typescript "MyReviewData"
Length of output: 140
Script:
#!/bin/bash
# Search for MyReview type definition and usage
rg "type.*MyReview" --type-list
rg "MyReview" -l
# Search for MyReviewData usage
rg "MyReviewData" -l
# Check the content of the current file
cat src/mock/review-data.ts
Length of output: 8587
Script:
#!/bin/bash
# Check the types/review.d.ts file for type definitions
cat src/types/review.d.ts
# Check the components using MyReviewData
cat src/app/\(crew\)/my-page/_components/review-tabs.tsx
cat src/components/common/review-list/review-card-list.stories.tsx
Length of output: 3225
src/app/(crew)/crew/detail/[id]/_components/create-gathering/create-gathering-form/index.tsx (1)
Line range hint 3-20: 코드가 깔끔하게 정리되었습니다!
불필요한 import들이 제거되어 코드가 더욱 간결해졌습니다.
| export default function EditCrewPage() { | ||
| const { id } = useParams(); | ||
| const { data, isLoading, error } = useGetCrewDetailQuery(Number(id)); | ||
| const { data, isLoading } = useGetCrewDetailQuery(Number(id)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
에러 처리 로직 검토 필요
error 변수를 제거하면서 쿼리 실패에 대한 처리가 누락되었습니다. 사용자에게 적절한 에러 피드백을 제공하기 위해 에러 처리 로직을 추가하는 것이 좋습니다.
다음과 같이 에러 처리를 추가하는 것을 제안합니다:
- const { data, isLoading } = useGetCrewDetailQuery(Number(id));
+ const { data, isLoading, error } = useGetCrewDetailQuery(Number(id));
+
+ if (error) {
+ return (
+ <div className="fixed inset-0 flex items-center justify-center">
+ <p className="text-red-500">데이터를 불러오는데 실패했습니다. 다시 시도해주세요.</p>
+ </div>
+ );
+ }📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| const { data, isLoading } = useGetCrewDetailQuery(Number(id)); | |
| const { data, isLoading, error } = useGetCrewDetailQuery(Number(id)); | |
| if (error) { | |
| return ( | |
| <div className="fixed inset-0 flex items-center justify-center"> | |
| <p className="text-red-500">데이터를 불러오는데 실패했습니다. 다시 시도해주세요.</p> | |
| </div> | |
| ); | |
| } |
HaeJungg
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안쓰는 import들 싹 삭제하셨군요!수고하셨습니다👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Caution
Inline review comments failed to post. This is likely due to GitHub's limits when posting large numbers of comments.
Actionable comments posted: 4
🧹 Outside diff range and nitpick comments (34)
src/_queries/crew/crew-review-queries.ts (1)
4-9: 쿼리 구성을 개선하면 좋을 것 같습니다.현재 구현은 기본적인 기능은 잘 동작하지만, 다음 사항들을 고려해보시면 좋을 것 같습니다:
- 페이지 번호 조정 로직(
page - 1)에 대한 주석 추가- 에러 처리 및 재시도 설정
- 캐싱 전략 구성
다음과 같이 개선해보시는 건 어떨까요?:
export function useGetCrewReviewsQuery(crewId: number, page: number) { return useQuery({ queryKey: ['crewReviews', crewId, page], queryFn: () => getCrewReviews(crewId, page - 1), + staleTime: 5 * 60 * 1000, // 5분 + retry: 1, + onError: (error) => { + console.error('크루 리뷰 조회 실패:', error); + }, }); }추가로, 페이지네이션 관련 타입 안전성을 위해 다음과 같은 검증도 추가하면 좋을 것 같습니다:
export function useGetCrewReviewsQuery(crewId: number, page: number) { + if (page < 1) { + throw new Error('페이지 번호는 1 이상이어야 합니다.'); + } return useQuery({src/components/common/skeleton/my-review-skeleton-list/index.tsx (1)
5-12: 시맨틱 마크업으로의 개선이 잘 이루어졌습니다.
div에서ul/li구조로 변경한 것은 다음과 같은 장점이 있습니다:
- 시맨틱하게 더 명확한 의미 전달
- 스크린 리더 사용자를 위한 접근성 향상
- 리스트 아이템임을 명확히 표현
추가로 고려할 만한 개선사항이 있습니다:
-<ul className="flex flex-col items-center gap-4"> +<ul className="flex flex-col items-center gap-4" role="list" aria-label="리뷰 로딩 중">이렇게 하면:
role="list"를 통해 일부 스크린리더에서 리스트로 인식하지 못하는 문제 해결aria-label을 통해 현재 상태를 더 명확히 전달src/_apis/crew/crew-review-apis.ts (3)
4-5: JSDoc 문서화를 추가하면 좋을 것 같습니다.현재 주석이 간단하여 함수의 매개변수와 반환값에 대한 설명이 부족합니다.
다음과 같이 JSDoc을 추가하는 것을 제안드립니다:
-// 크루 리뷰 조회 +/** + * 크루의 리뷰 목록을 조회합니다. + * @param crewId - 조회할 크루의 ID + * @param page - 페이지 번호 (0부터 시작) + * @returns 크루 리뷰 응답 데이터 + */
6-7: 페이지 크기를 상수로 분리하면 좋을 것 같습니다.페이지 크기가 하드코딩되어 있어 변경이 필요할 때 유연하지 않을 수 있습니다.
다음과 같이 상수로 분리하는 것을 제안드립니다:
+const REVIEWS_PER_PAGE = 5; + export async function getCrewReviews(crewId: number, page: number): Promise<CrewReviewResponse> { - const url = `/api/review/${crewId}?page=${page}&size=5`; + const url = `/api/review/${crewId}?page=${page}&size=${REVIEWS_PER_PAGE}`;
15-15: 응답 데이터 유효성 검사를 추가하면 좋을 것 같습니다.현재는 응답 데이터의 유효성 검사 없이 바로 반환하고 있습니다.
다음과 같이 응답 데이터 검증을 추가하는 것을 제안드립니다:
- return response.data; + if (!response.data) { + throw new Error('유효하지 않은 응답 데이터입니다.'); + } + return response.data;src/components/common/skeleton/gathering-skeleton-list/index.tsx (1)
13-16: Array 생성 최적화 제안현재 매 렌더링마다 새로운 배열을 생성하고 있습니다. 성능 최적화를 위해 다음과 같은 방식을 고려해보세요:
- {[...Array(num)].map((_, index) => ( + {Array.from({ length: num }).map((_, index) => (또는 메모이제이션을 활용할 수 있습니다:
const skeletonIndices = useMemo(() => Array.from({ length: num }), [num]); // JSX에서: {skeletonIndices.map((_, index) => ( <GatheringSkeleton key={`GatheringSkeleton-${index}`} /> ))}src/components/common/skeleton/crew-skeleton-list/index.tsx (2)
14-14: 키(key) 속성의 개선사항 제안배열 인덱스에 접두사를 추가한 것은 좋은 개선이지만, 더 나은 고유성을 위해 UUID나 난수를 사용하는 것을 고려해보세요.
다음과 같이 수정하는 것을 제안합니다:
-<CrewSkeleton key={`CrewSkeleton-${index}`} /> +<CrewSkeleton key={`CrewSkeleton-${index}-${Math.random().toString(36).substr(2, 9)}`} />
Line range hint
1-17: 전반적인 구현이 잘 되어있습니다
- 접근성을 고려한 aria-label 추가
- 반응형 그리드 레이아웃 구현
- Props 인터페이스 정의
다만, Props에 대한 JSDoc 문서화를 추가하면 좋을 것 같습니다.
다음과 같이 문서화를 추가해보세요:
/** * 크루 스켈레톤 목록을 표시하는 컴포넌트 * @param {number} num - 표시할 스켈레톤 아이템의 개수 * @param {number} [column] - 데스크톱 뷰에서 표시할 열의 개수 (기본값: 1) */ interface CrewSkeletonListProps { num: number; column?: number; }src/components/common/skeleton/gathering-skeleton/index.tsx (1)
15-15: 액션 버튼 스켈레톤의 접근성 고려가 필요합니다.버튼 스켈레톤에 대한 접근성 속성(예: aria-label)을 추가하는 것이 좋습니다.
다음과 같이 수정을 제안합니다:
- <Skeleton className="absolute bottom-4 left-4 right-4 h-10 w-auto rounded-xl" /> + <Skeleton + className="absolute bottom-4 left-4 right-4 h-10 w-auto rounded-xl" + aria-label="로딩 중인 액션 버튼" + />src/components/common/skeleton/my-gathering-skeleton/index.tsx (1)
9-16: 상세 정보 영역의 시각적 계층 구조를 개선할 수 있습니다.현재 구현은 기능적으로는 문제가 없으나, 다음과 같은 개선사항을 제안드립니다:
- <Skeleton className="h-4 w-48" /> - <Skeleton className="h-6 w-32" /> - <Skeleton className="h-4 w-24" /> + <Skeleton className="h-6 w-48" /> + <Skeleton className="h-4 w-32" /> + <Skeleton className="h-4 w-24 opacity-60" />제안 사항:
- 첫 번째 줄의 높이를 늘려 제목임을 더 명확히 표현
- 마지막 메타 정보의 투명도를 조절하여 시각적 계층을 강화
또한, 접근성 향상을 위해 스켈레톤 영역에 aria-label을 추가하는 것을 고려해보세요:
- <div className="flex flex-col gap-4"> + <div className="flex flex-col gap-4" aria-label="콘텐츠 로딩 중">src/components/common/skeleton/my-review-skeleton/index.tsx (2)
13-16: 사용자 정보 섹션의 접근성 개선이 필요합니다.스켈레톤 UI에도 적절한 aria 레이블을 추가하는 것이 좋습니다.
- <Skeleton className="h-5 w-5 rounded-full" /> - <Skeleton className="h-5 w-12" /> + <Skeleton className="h-5 w-5 rounded-full" aria-label="프로필 이미지 로딩 중" /> + <Skeleton className="h-5 w-12" aria-label="사용자 이름 로딩 중" />
17-19: 하단 섹션의 스켈레톤이 단순화되어 있습니다.현재 구현은 단순한 한 줄의 스켈레톤만 표시하고 있습니다. 실제 컨텐츠의 구조를 더 정확하게 반영하는 것이 좋을 것 같습니다.
<div className="mt-auto"> - <Skeleton className="h-4 w-1/4" /> + <div className="flex items-center gap-2"> + <Skeleton className="h-4 w-20" aria-label="날짜 로딩 중" /> + <Skeleton className="h-4 w-24" aria-label="상태 로딩 중" /> + </div> </div>src/components/common/skeleton/my-gathering-skeleton-list/index.tsx (2)
13-13: 키 prop 구현이 개선되었습니다템플릿 리터럴을 사용하여 더 명확한 키값을 생성한 것이 좋습니다. ESLint 규칙을 비활성화하는 대신 UUID나 안정적인 ID를 사용하는 것을 고려해보세요.
- // eslint-disable-next-line react/no-array-index-key - <div key={`MyGatheringSkeleton-${index}`} className="py-4 md:flex md:py-0"> + <div key={`MyGatheringSkeleton-${crypto.randomUUID()}`} className="py-4 md:flex md:py-0">
16-17: 접근성 개선이 필요합니다숨겨진 스켈레톤 요소에 대해 스크린 리더 사용자를 위한 접근성 속성을 추가하는 것이 좋습니다.
- <Skeleton className="hidden h-4 w-20 md:block" /> - <Skeleton className="hidden h-4 w-10 md:block" /> + <Skeleton className="hidden h-4 w-20 md:block" aria-hidden="true" /> + <Skeleton className="hidden h-4 w-10 md:block" aria-hidden="true" />src/components/common/skeleton/review-skeleton/index.tsx (3)
3-5: 인터페이스에 JSDoc 문서를 추가하는 것이 좋습니다.타입과 용도를 명확하게 설명하는 문서를 추가하면 컴포넌트의 사용성이 향상될 것 같습니다.
다음과 같이 문서를 추가해보세요:
+/** + * 스켈레톤 리스트의 타입을 정의하는 인터페이스 + * @property type - 'mine': 내가 작성한 리뷰 스켈레톤, 'crew': 크루 리뷰 스켈레톤 + */ interface SkeletonListProps { type: 'mine' | 'crew'; }
7-30: 상수 추출 및 스타일 관리 개선이 필요합니다.코드는 잘 작동하지만 몇 가지 개선할 부분이 있습니다:
- 매직 넘버를 상수로 추출:
+const MINE_SKELETON_COUNT = 3; +const CREW_SKELETON_COUNT = 2; export default function ReviewListSkeleton({ type }: SkeletonListProps) { return ( <div className="space-y-10"> {type === 'mine' && ( <ul className="mx-auto flex h-full w-full flex-col gap-8"> - {Array.from({ length: 3 }).map((_, idx) => ( + {Array.from({ length: MINE_SKELETON_COUNT }).map((_, idx) => (
- 반복되는 Tailwind 클래스를 상수로 분리:
const CONTAINER_STYLES = { mine: 'mx-auto flex h-full w-full flex-col gap-8', crew: 'mb-6 grid flex-grow gap-4' };
- 스켈레톤 아이템 컴포넌트를 별도로 분리하는 것을 고려해보세요.
13-14: 배열 인덱스를 키로 사용하는 것에 대한 대안을 고려해보세요.현재 ESLint 규칙을 비활성화하고 배열 인덱스를 키로 사용하고 있습니다. 스켈레톤의 경우 문제가 되지 않을 수 있지만, 더 나은 방법이 있습니다.
다음과 같이 개선해보세요:
-// eslint-disable-next-line react/no-array-index-key -<li key={`mine-skeleton-${idx}`} className="h-auto min-h-[112px]"> +<li key={`mine-skeleton-${crypto.randomUUID()}`} className="h-auto min-h-[112px]">또는
useMemo를 사용하여 키 배열을 미리 생성할 수 있습니다:const skeletonKeys = useMemo(() => Array.from({ length: count }).map(() => crypto.randomUUID()), [count] );Also applies to: 23-24
src/components/common/skeleton/review-skeleton/review-card.tsx (3)
11-16: className 문자열 처리와 접근성 개선이 필요합니다.
- 복잡한 className 문자열은 가독성이 떨어집니다.
role="presentation"은 이 컴포넌트의 용도에 적절하지 않을 수 있습니다.다음과 같은 개선을 제안드립니다:
- role="presentation" + role="article" className={`flex h-full items-end gap-[15px] ${ isMine ? 'rounded-[12px] p-6 shadow-bg' : 'border-b-[2px] border-[#F3F4F6] py-4' } bg-white lg:gap-[40px]`}또한 className 문자열 처리를 위해 clsx나 classnames 라이브러리 사용을 고려해보세요:
import clsx from 'clsx'; // ... className={clsx( 'flex h-full items-end gap-[15px] bg-white lg:gap-[40px]', isMine ? 'rounded-[12px] p-6 shadow-bg' : 'border-b-[2px] border-[#F3F4F6] py-4' )}
17-35: 스켈레톤 UI의 사실성 개선이 필요합니다.현재 구현된 스켈레톤의 크기가 실제 컨텐츠와 차이가 있을 수 있습니다. 또한 하드코딩된 수치들이 있습니다.
다음과 같은 개선을 제안드립니다:
- 상수로 분리하여 관리:
const SKELETON_SIZES = { TITLE: 'w-32', CONTENT: 'w-full', SUBCONTENT: 'w-3/4', AVATAR: 'w-8', USERNAME: 'w-24', DATE: 'w-12', } as const;
- 실제 컨텐츠 크기에 맞춰 스켈레톤 크기 조정:
- <Skeleton className="h-6 w-32" /> + <Skeleton className={`h-6 ${SKELETON_SIZES.TITLE}`} /> - <Skeleton className="h-4 w-full" /> + <Skeleton className={`h-4 ${SKELETON_SIZES.CONTENT}`} />
1-39: 스켈레톤 UI 사용성 개선을 위한 제안
- 스켈레톤 UI에 애니메이션 효과를 추가하면 사용자 경험이 향상될 수 있습니다.
- 로딩 상태가 너무 오래 지속될 경우를 대비한 처리가 필요할 수 있습니다.
다음과 같은 개선을 고려해보세요:
- Mantine의 Skeleton 컴포넌트 애니메이션 활용:
<Skeleton animate={true} />
- 타임아웃 처리:
const LOADING_TIMEOUT = 5000; // 5초 useEffect(() => { const timer = setTimeout(() => { // 에러 상태로 전환 또는 재시도 로직 }, LOADING_TIMEOUT); return () => clearTimeout(timer); }, []);src/app/(crew)/crew/detail/[id]/_components/rating-display.stories.tsx (2)
17-17: 인터페이스 속성에 JSDoc 문서화 추가를 제안합니다.타입스크립트 인터페이스의 가독성과 유지보수성을 높이기 위해 JSDoc 문서화를 추가하는 것이 좋습니다.
다음과 같이 JSDoc을 추가해보세요:
interface RatingDisplayStoryProps { + /** 총 평가 개수 */ totalRate: number; averageRate: number; ratingsData: { score: number; count: number }[]; }
32-32: 테스트 데이터 시나리오가 잘 구성되어 있습니다.다양한 평점 시나리오(기본, 높은 평점, 낮은 평점)를 잘 커버하고 있습니다. 추가로 경계값 테스트 케이스도 고려해보시면 좋을 것 같습니다.
다음과 같은 경계값 테스트 케이스를 추가해보세요:
- 평가가 없는 경우 (totalRate: 0)
- 모든 평가가 동일한 점수인 경우
- 최대 평가 개수에 도달한 경우
Also applies to: 45-45, 58-58
src/app/(crew)/my-page/_components/profile-card/container.tsx (3)
14-14: 옵셔널 체이닝 사용에 대한 제안현재 구현은 작동하지만, 더 안전한 방식으로 개선할 수 있습니다.
다음과 같이 기본값을 명시적으로 설정하는 것을 고려해보세요:
- const profileImageUrl = user?.profileImageUrl || ''; + const profileImageUrl = user?.profileImageUrl ?? '/default-profile-image.png';
16-20: 로딩 상태 처리가 깔끔하게 구현되었습니다!스켈레톤 UI와 null 체크 구현이 잘 되었습니다. 다만, 한가지 제안사항이 있습니다.
코드의 가독성을 위해 주석을 JSDoc 형식으로 변경하는 것을 고려해보세요:
- // 로딩 중일 때 스켈레톤 표시 + /** 데이터 로딩 중일 때 스켈레톤 UI를 표시합니다 */ - // 사용자 데이터가 없는 경우 null 반환 + /** 사용자 데이터가 없는 경우 null을 반환합니다 */
Line range hint
23-53: 파일 업로드 처리에 대한 보안 강화 제안현재 파일 크기 검증은 잘 구현되어 있으나, 파일 형식에 대한 추가 검증이 필요합니다.
다음과 같이 파일 형식 검증을 추가하는 것을 추천드립니다:
input.onchange = async (event) => { const file = (event.target as HTMLInputElement)?.files?.[0]; if (file) { + const validTypes = ['image/jpeg', 'image/png', 'image/jpg']; + if (!validTypes.includes(file.type)) { + toast.error('JPG 또는 PNG 형식의 이미지만 업로드 가능합니다.'); + return; + } + if (file.size > 5 * 1024 * 1024) { toast.error('5MB 이하의 파일만 업로드 가능합니다.'); return; }src/app/(crew)/crew/detail/[id]/_components/gathering-detail-modal/container.tsx (1)
38-42: 에러 메시지를 더 구체적으로 개선하면 좋겠습니다인증 오류(401)에 대한 처리는 잘 구현되었으나, 그 외 에러에 대한 메시지가 다소 일반적입니다. 다음과 같은 개선을 제안드립니다:
- showToast('참여 중 에러가 발생했습니다.', 'error'); + const errorMessage = error instanceof ApiError + ? `참여 중 오류가 발생했습니다: ${error.message}` + : '참여 중 예기치 않은 오류가 발생했습니다. 잠시 후 다시 시도해 주세요.'; + showToast(errorMessage, 'error');이렇게 하면:
- API 에러의 경우 구체적인 오류 내용을 표시
- 기타 예외의 경우 사용자 친화적인 메시지를 표시
src/app/(crew)/crew/detail/[id]/_components/gathering-list-section.tsx (1)
25-30: 에러 처리 로직 개선이 필요합니다에러 처리가 개선되었지만, 다음과 같은 추가 개선사항을 제안드립니다:
- ApiError 타입을 더 구체적으로 정의하여 401 외의 다른 상태 코드도 처리
- 에러 메시지를 상수로 분리하여 재사용성 향상
+const ERROR_MESSAGES = { + LOGIN_REQUIRED: '로그인이 필요합니다.', + LIKE_FAILED: '찜하기에 실패했습니다.', + LIKE_SUCCESS: '찜하기가 완료되었습니다!' +} as const; const handleLike = async (gatheringId: number) => { try { await addLike(gatheringId); - toast.success('찜하기가 완료되었습니다!'); + toast.success(ERROR_MESSAGES.LIKE_SUCCESS); } catch (apiError) { if (apiError instanceof ApiError && apiError.status === 401) { - toast.error('로그인이 필요합니다.'); + toast.error(ERROR_MESSAGES.LOGIN_REQUIRED); } else { - toast.error('찜하기에 실패했습니다.'); + toast.error(ERROR_MESSAGES.LIKE_FAILED); } } };src/components/my-page/reviewable-gatherings/reviewable-gathering-card.tsx (1)
43-89: 레이아웃 구조에 대한 개선 제안현재 구현은 잘 작동하지만, 다음과 같은 개선사항을 고려해보시면 좋을 것 같습니다:
- CSS 클래스의 매직 넘버를 디자인 토큰으로 추출
- 이미지 크기를 상수로 정의
- 접근성 개선
다음과 같이 수정해보시는 건 어떨까요?
+ const IMAGE_SIZES = { + mobile: { width: 28, height: 28 }, + desktop: { width: 294, height: 166 } + } as const; + const SPACING = { + cardPadding: 6, + contentGap: 4, + } as const; return ( - <div className="relative flex w-full max-w-[1200px] flex-wrap gap-4 border-b-[2px] border-b-gray-200 py-6"> + <div className={clsx( + 'relative flex w-full max-w-[1200px] flex-wrap', + `gap-${SPACING.contentGap}`, + `py-${SPACING.cardPadding}`, + 'border-b-[2px] border-b-gray-200' + )}> {/* 이미지 영역 */} - <div className="relative h-28 w-28 flex-shrink-0 overflow-hidden rounded-[12px] md:h-[166px] md:w-[294px]"> + <div + className={clsx( + 'relative flex-shrink-0 overflow-hidden rounded-[12px]', + `h-${IMAGE_SIZES.mobile.height} w-${IMAGE_SIZES.mobile.width}`, + `md:h-[${IMAGE_SIZES.desktop.height}px] md:w-[${IMAGE_SIZES.desktop.width}px]` + )} + role="img" + aria-label={`${gatheringName} 모임 이미지`} + >또한 접근성을 위해 다음 속성들을 추가하는 것을 추천드립니다:
- 버튼에
aria-label추가- 참여 인원 정보에
aria-description추가src/app/(crew)/crew/detail/[id]/_components/rating-display.tsx (1)
54-64: 기본 평점 데이터 처리 로직 개선 제안기본값 처리 로직이 잘 구현되어 있으나, 다음과 같은 개선사항을 제안드립니다:
- 변수명을 더 명확하게 지정
- 매직 넘버에 대한 상수 처리
- const defaultRatingsData = Array.from({ length: 5 }, (_, index) => ({ + const MAX_RATING = 5; + const initialRatingsData = Array.from({ length: MAX_RATING }, (_, index) => ({ - score: 5 - index, + score: MAX_RATING - index, count: 0, })); - const mergedRatingsData = defaultRatingsData.map((defaultData) => { + const completeRatingsData = initialRatingsData.map((defaultData) => { const foundData = ratingsData.find((data) => data.score === defaultData.score); return foundData || defaultData; });src/components/common/review-list/review-card.tsx (1)
50-54: 에러 메시지 개선 제안에러 처리가 추가된 것은 좋은 개선이지만, 에러 메시지를 사용자 친화적으로 수정하는 것이 좋겠습니다.
- toast.error('리뷰 ID가 없습니다.'); + toast.error('리뷰를 삭제할 수 없습니다. 다시 시도해 주세요.');src/app/(crew)/crew/detail/[id]/_components/detail-crew-container.tsx (1)
65-69: 인증 에러 처리가 적절히 구현되었습니다.401 에러 처리와 로그인 페이지 리다이렉션이 잘 구현되어 있습니다. 다만 몇 가지 개선사항을 제안드립니다:
- 리다이렉션 URL을 상수로 분리하여 재사용성을 높이는 것이 좋습니다.
- 에러 메시지를 다국어 처리하면 좋을 것 같습니다.
다음과 같이 개선해보시는 건 어떨까요?:
+ const LOGIN_PATH = '/login'; + const ERROR_MESSAGES = { + JOIN_FAILED: '🚫 크루 참여 중 에러가 발생했습니다.' + }; if (joinError instanceof ApiError) { if (joinError.status === 401) { - router.push(`/login?redirect=${encodeURIComponent(window.location.pathname)}`); + router.push(`${LOGIN_PATH}?redirect=${encodeURIComponent(window.location.pathname)}`); } else { toast.error(joinError.message); } } else { - toast.error('🚫 크루 참여 중 에러가 발생했습니다.'); + toast.error(ERROR_MESSAGES.JOIN_FAILED); }tailwind.config.ts (2)
39-39: 스켈레톤 UI를 위한 width 값이 적절히 추가되었습니다.새로운 width 값이 스켈레톤 UI 구현을 위해 잘 추가되었습니다. 다만, 향후 유지보수를 위해 주석으로 해당 값의 용도를 명시하면 좋을 것 같습니다.
다음과 같이 주석을 추가하는 것을 제안드립니다:
width: { 7.5: '30px', 12.5: '50px', - 18: '72px', + 18: '72px', // 스켈레톤 UI 컴포넌트 너비 27.5: '110px', 29.5: '118px', },
Line range hint
134-146: 스켈레톤 로딩을 위한 애니메이션이 적절히 구성되었습니다.
show와wave키프레임이 스켈레톤 UI의 로딩 상태를 표현하기 위해 잘 구현되었습니다. 다만, 애니메이션 속도와 타이밍을 더 쉽게 커스터마이즈할 수 있도록 하면 좋을 것 같습니다.다음과 같이 CSS 변수를 활용하는 것을 제안드립니다:
keyframes: { show: { '0%': { opacity: '0' }, '100%': { opacity: '1' }, }, wave: { - '0%': { transform: 'translate(-90px)' }, - '100%': { transform: 'translate(85px)' }, + '0%': { transform: 'translate(var(--wave-start, -90px))' }, + '100%': { transform: 'translate(var(--wave-end, 85px))' }, }, }, animation: { - fade: 'show 0.5s ease-in', - wave: 'wave 10s ease infinite', + fade: 'show var(--fade-duration, 0.5s) var(--fade-timing, ease-in)', + wave: 'wave var(--wave-duration, 10s) var(--wave-timing, ease) infinite', },src/app/(crew)/crew/detail/[id]/_components/review-section.tsx (1)
37-37: 불필요한 옵셔널 체이닝 연산자를 제거해주세요이미
isError와data === undefined여부를 확인하여data가 정의되어 있는 상태입니다. 따라서 이후 코드에서data에 접근할 때 옵셔널 체이닝 연산자?.를 사용할 필요가 없습니다. 불필요한?.를 제거하면 코드의 가독성과 성능을 향상시킬 수 있습니다.제안된 수정 사항:
- if (data?.reviewList.content.length === 0) { + if (data.reviewList.content.length === 0) { ... - <RatingDisplay reviewRateInfo={data?.reviewRateInfo} /> + <RatingDisplay reviewRateInfo={data.reviewRateInfo} />Also applies to: 49-49
🛑 Comments failed to post (4)
src/_apis/crew/crew-review-apis.ts (1)
8-13: 🛠️ Refactor suggestion
에러 처리를 추가하면 좋을 것 같습니다.
현재 API 호출 실패 시의 에러 처리가 없습니다. 사용자에게 더 명확한 에러 메시지를 제공하면 좋을 것 같습니다.
다음과 같이 에러 처리를 추가하는 것을 제안드립니다:
- const response = await fetchApi<{ data: CrewReviewResponse }>(url, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - }, - }); + try { + const response = await fetchApi<{ data: CrewReviewResponse }>(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + }, + }); + return response.data; + } catch (error) { + throw new Error('크루 리뷰를 불러오는데 실패했습니다.'); + }📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.try { const response = await fetchApi<{ data: CrewReviewResponse }>(url, { method: 'GET', headers: { 'Content-Type': 'application/json', }, }); return response.data; } catch (error) { throw new Error('크루 리뷰를 불러오는데 실패했습니다.'); }src/types/review.d.ts (1)
41-47: 💡 Codebase verification
ReviewContent타입이 정의되어 있지 않아 수정이 필요합니다
review.d.ts파일에서ReviewList인터페이스가ReviewContent[]타입을 사용하고 있지만, 해당 타입이 정의되어 있지 않습니다. 이는 타입 안정성을 저해할 수 있습니다.
src/types/review.d.ts:ReviewContent타입을 정의해야 합니다. 리뷰 내용에 필요한 속성들을 포함하여 인터페이스를 작성하세요. 기존의CrewReview또는MyReview인터페이스를 참고하실 수 있습니다.🔗 Analysis chain
페이지네이션 타입이 명확하게 정의되었습니다
ReviewList인터페이스가 페이지네이션에 필요한 모든 정보를 포함하고 있어 적절합니다. 다만,ReviewContent타입이 명시적으로 정의되어 있지 않은 것 같습니다.🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: ReviewContent 타입 정의 확인 echo "ReviewContent 타입 검색:" rg "type.*ReviewContent|interface.*ReviewContent" --type tsLength of output: 112
Script:
#!/bin/bash # ReviewContent 타입 관련 파일 찾기 echo "1. ReviewContent가 포함된 모든 타입스크립트 파일 검색:" rg "ReviewContent" --type ts -l echo -e "\n2. ReviewContent 타입이 사용되는 컨텍스트 확인:" rg "ReviewContent" --type ts -B 2 -A 2 echo -e "\n3. types 디렉토리의 모든 타입 정의 파일 확인:" fd "\.d\.ts$" src/types --exec cat {}Length of output: 6536
src/app/(crew)/crew/detail/[id]/_components/gathering-list-section.tsx (1)
38-43: 🛠️ Refactor suggestion
코드 중복 제거가 필요합니다
handleLike와handleUnlike함수의 에러 처리 로직이 중복되어 있습니다. 다음과 같이 공통 로직을 추출하여 재사용성을 높이는 것을 제안드립니다:+type LikeAction = 'add' | 'remove'; +const handleLikeAction = async ( + gatheringId: number, + action: LikeAction, + apiCall: (id: number) => Promise<void>, +) => { + try { + await apiCall(gatheringId); + toast.success( + action === 'add' + ? ERROR_MESSAGES.LIKE_SUCCESS + : ERROR_MESSAGES.UNLIKE_SUCCESS + ); + } catch (apiError) { + if (apiError instanceof ApiError && apiError.status === 401) { + toast.error(ERROR_MESSAGES.LOGIN_REQUIRED); + } else { + toast.error( + action === 'add' + ? ERROR_MESSAGES.LIKE_FAILED + : ERROR_MESSAGES.UNLIKE_FAILED + ); + } + } +}; -const handleLike = async (gatheringId: number) => { - try { - await addLike(gatheringId); - toast.success('찜하기가 완료되었습니다!'); - } catch (apiError) { - if (apiError instanceof ApiError && apiError.status === 401) { - toast.error('로그인이 필요합니다.'); - } else { - toast.error('찜하기에 실패했습니다.'); - } - } -}; +const handleLike = (gatheringId: number) => + handleLikeAction(gatheringId, 'add', addLike); -const handleUnlike = async (gatheringId: number) => { - try { - await removeLike(gatheringId); - toast.success('찜하기 해제가 완료되었습니다!'); - } catch (apiError) { - if (apiError instanceof ApiError && apiError.status === 401) { - toast.error('로그인이 필요합니다.'); - } else { - toast.error('찜하기 해제에 실패했습니다.'); - } - } -}; +const handleUnlike = (gatheringId: number) => + handleLikeAction(gatheringId, 'remove', removeLike);Committable suggestion skipped: line range outside the PR's diff.
src/app/(crew)/crew/detail/[id]/_components/review-section.tsx (1)
14-19:
⚠️ Potential issue
crewId변경 시page상태를 초기화해야 합니다현재
page상태는useState를 통해 초기값 1로 설정되어 있습니다. 그러나crewId가 변경될 경우page가 초기화되지 않아 이전 크루의 페이지 번호가 그대로 유지될 수 있습니다. 이는 예상치 못한 동작을 유발할 수 있으므로,crewId가 변경될 때page를 1로 재설정하는 로직이 필요합니다.제안된 수정 사항:
useEffect(() => { setPage(1); }, [crewId]);
* ✨ Feat: reviewing Form에 post api 연결 * Rename: review-apis * 🐛 fix: build warning 수정, 사용하지 않는 함수, import 삭제 * 💄 design: 스켈레톤 ui수정 * ✨ feat: 크루 디테일 스켈레톤 UI추가 * ✨ feat: 리스트 스켈레톤 적용, 데이터 없을 경우 스타일 추가 * ✨ feat: 스켈레톤 ui 추가 잘못된 id 404로 이동 * 🐛 fix: npm installed canged * ♻️ refactor: 스토리북 폴더, 파일명 수정 * 🚑 fix: npm i changed * 🚑 fix: 페이지 랜더링 안되는 문제 수정 * 📝 docs: 스토리북 configure doc 수정 * 🚑 fix: 맥 스토리북위해 esbuild설치 * 💄 design: fontweignt삭제 * 🐛 fix: 포멧 데이터 디자인에 맞게 수정 * 🐛 fix: 타입 수정 * 🐛 fix: 스토리북 목데이터 수정 * 💄 design: 디자인에 맞게 날짜 수정 * ✨ feat: 나의리뷰, 리뷰 삭제하기 추가 * 🐛 fix: 토스트로 변경 * ✨ feat: 나의 리뷰 리스트 무한스크롤 구현, 데이터 연결 * 📝 docs: 사용하지 않는 파일 삭제, 주석처리 * 🚑 fix: 중복 코드 삭제, 이동경로 수정 * 💄 design: 마진 추가 * 🐛 fix: 폴더 들여쓰기 에러 수정 - meta title 변경 * 🐛 fix: 프리패치 기능 다시 살림 * ✨ feat: 크루 리뷰 타입 추가 * 🐛 fix: 리뷰카드 수정 * 🐛 fix: 사용하지 않는 import 삭제 * 🚑 fix: 타입에 따라 이름 변경 * ✨ feat: 데이터 패치 * ✨ feat: 레이지 로딩을 통해 시간단축 * ♻️ refactor: 페이지네이션 리팩토링 * 🐛 fix: 선언했지만 사용하지 않는 값 삭제 * ✨ feat: 리뷰 리스트 스켈레톤 UI 추가 * Fix/youl bug fix (#150) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * ♿️ Fix: 크루 폼 접근성 개선 * ♿️ Fix : 약속 폼 접근성 개선 * ♿️ Fix: 크루찾기 접근성 개선 * 🐛 Fix: 이미지 fill, cover 워닝 없애기 * Merge branch 'develop' into Fix/YoulBugFix * 🍱 Fix: 샘플 이미지 교체 * ✨ Feat: 메타 설정 * ⬇️ Chore: package install * 🐛 Fix: 파일인풋 동작 개선 * Co-authored-by: JEP <[email protected]> * 🐛 Fix: FileInput 동작 개선 * 🚨 Fix: 빌드오류 수정 * ✨ feat: 스켈레톤 사용 * ✨ feat: 데이터 패치, 스켈레톤 사용 * 💄 design: 스켈레톤 디자인 수정 * 💄 design: 모바일 디자인 수정 * 최신화 * 🚑 fix: 데이터 수정 * 🐛 fix: zustand state 에러 수정, ✨ Feat: reissue에러시 redirect 추가 * 💄 Style: img style 변경 * 🚑 fix: 패키지 변경 * ✨ feat: 데이터가 없는경우 처리 * 💄 design: 스켈레톤 디자인 수정 * ♻️ refactor: 코드 리팩토링 * 💄 design: 디자인에 맞게 수정, 누락된 데이터 추가, 반응형 작업 * 🐛 fix: 데이터명 변경 * 🐛 fix: storybook err 수정 * Feat/135/not found 디자인 수정 (#167) * ✨ Feat: Not Found 추가 * 💄 Design: 디자인 개선 * 💄 Design: not-found 디자인 수정 * 💄 Design: favicon 추가 * 🚨 Fix: 임포트 정리 * 🐛 Fix : 오류처리 추가 * 🚑 fix: 마이페이지 401로직 수정 * ✨ feat: 로그인상태가 아닐경우 로그인 페이지로 이동 * 🐛 fix: 안쓰는 임시파일 삭제 * ♻️ refactor: storybook 폴더 변경, 📝 docs: configure 이미지 파일 추가 * Feat/147/skeleton : 마이페이지 스켈레톤 추가 (#162) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * 💄 Design: 크루카드 모바일 디자인 수정 * ✨ Feat: 마이페이지 스켈레톤 추가 * 🚨 Fix: 빌드 워닝 제거 * 💄 Design: 나의약속 스켈레톤 디자인 수정 초안 * 💄 Design: 스켈레톤 너비 수정 * Merge branch 'develop' into Feat/147/Skeleton * 🐛 fix: build err 수정 - import 추가 * 🐛 fix: 프로필 모음 위치수정 * 🐛 fix: 안쓰는 컴포넌트 삭제 * 🐛 fix: 폴더명 변경 * 🚑 fix: 버튼 컴포넌트 위치 변경 * 🐛 fix: 파일이동 * 📦 chore: 안쓰는 파일, 패키지 정리 * 🚑 fix: build warning 정리 * ✨ feat: 빌드 해결위해 추가 * 🚑 fix: 사용하지 않는 패키지 삭제 * Fix/youl bug fix : 로고, 파비콘 교체, 헤더 스타일 변경 (#171) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * ♿️ Fix: 크루 폼 접근성 개선 * ♿️ Fix : 약속 폼 접근성 개선 * ♿️ Fix: 크루찾기 접근성 개선 * 🐛 Fix: 이미지 fill, cover 워닝 없애기 * Merge branch 'develop' into Fix/YoulBugFix * 🍱 Fix: 샘플 이미지 교체 * ✨ Feat: 메타 설정 * ⬇️ Chore: package install * 🐛 Fix: 파일인풋 동작 개선 * Co-authored-by: JEP <[email protected]> * 🐛 Fix: FileInput 동작 개선 * 🚨 Fix: 빌드오류 수정 * 🎨 Style: 린트프리티어 적용 * 💄 Design: 헤더 수정 * 🔥 Chore: 파일 정리 * 🐛 Fix: 헤더 동작 개선 * 🐛 Fix: 크루 찾기 메뉴 원래대로 * 💄 Design: 헤더 디자인 수정 * 💄 Design: 로그인 폰트사이즈 변경 * 🐛 Fix: 이미지 경로 수정 * 🍱 Chore: 압축된 이미지로 교체 * 🔧 Chore: 파비콘 설정 추가 * 💚 Chore: package 싱크 --------- Co-authored-by: 조예은 <[email protected]> Co-authored-by: min5x5 <[email protected]> Co-authored-by: HaeJungg <[email protected]> Co-authored-by: HaeJungg <[email protected]> Co-authored-by: Cho Yeeun <[email protected]> Co-authored-by: 김민경 <[email protected]>
* ✨ Feat: reviewing Form에 post api 연결 * Rename: review-apis * 🐛 fix: build warning 수정, 사용하지 않는 함수, import 삭제 * 💄 design: 스켈레톤 ui수정 * ✨ feat: 크루 디테일 스켈레톤 UI추가 * ✨ feat: 리스트 스켈레톤 적용, 데이터 없을 경우 스타일 추가 * ✨ feat: 스켈레톤 ui 추가 잘못된 id 404로 이동 * 🐛 fix: npm installed canged * ♻️ refactor: 스토리북 폴더, 파일명 수정 * 🚑 fix: npm i changed * 🚑 fix: 페이지 랜더링 안되는 문제 수정 * 📝 docs: 스토리북 configure doc 수정 * 🚑 fix: 맥 스토리북위해 esbuild설치 * 💄 design: fontweignt삭제 * 🐛 fix: 포멧 데이터 디자인에 맞게 수정 * 🐛 fix: 타입 수정 * 🐛 fix: 스토리북 목데이터 수정 * 💄 design: 디자인에 맞게 날짜 수정 * ✨ feat: 나의리뷰, 리뷰 삭제하기 추가 * 🐛 fix: 토스트로 변경 * ✨ feat: 나의 리뷰 리스트 무한스크롤 구현, 데이터 연결 * 📝 docs: 사용하지 않는 파일 삭제, 주석처리 * 🚑 fix: 중복 코드 삭제, 이동경로 수정 * 💄 design: 마진 추가 * 🐛 fix: 폴더 들여쓰기 에러 수정 - meta title 변경 * 🐛 fix: 프리패치 기능 다시 살림 * ✨ feat: 크루 리뷰 타입 추가 * 🐛 fix: 리뷰카드 수정 * 🐛 fix: 사용하지 않는 import 삭제 * 🚑 fix: 타입에 따라 이름 변경 * ✨ feat: 데이터 패치 * ✨ feat: 레이지 로딩을 통해 시간단축 * ♻️ refactor: 페이지네이션 리팩토링 * 🐛 fix: 선언했지만 사용하지 않는 값 삭제 * ✨ feat: 리뷰 리스트 스켈레톤 UI 추가 * Fix/youl bug fix (#150) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * ♿️ Fix: 크루 폼 접근성 개선 * ♿️ Fix : 약속 폼 접근성 개선 * ♿️ Fix: 크루찾기 접근성 개선 * 🐛 Fix: 이미지 fill, cover 워닝 없애기 * Merge branch 'develop' into Fix/YoulBugFix * 🍱 Fix: 샘플 이미지 교체 * ✨ Feat: 메타 설정 * ⬇️ Chore: package install * 🐛 Fix: 파일인풋 동작 개선 * Co-authored-by: JEP <[email protected]> * 🐛 Fix: FileInput 동작 개선 * 🚨 Fix: 빌드오류 수정 * ✨ feat: 스켈레톤 사용 * ✨ feat: 데이터 패치, 스켈레톤 사용 * 💄 design: 스켈레톤 디자인 수정 * 💄 design: 모바일 디자인 수정 * 최신화 * 🚑 fix: 데이터 수정 * 🐛 fix: zustand state 에러 수정, ✨ Feat: reissue에러시 redirect 추가 * 💄 Style: img style 변경 * 🚑 fix: 패키지 변경 * ✨ feat: 데이터가 없는경우 처리 * 💄 design: 스켈레톤 디자인 수정 * ♻️ refactor: 코드 리팩토링 * 💄 design: 디자인에 맞게 수정, 누락된 데이터 추가, 반응형 작업 * 🐛 fix: 데이터명 변경 * 🐛 fix: storybook err 수정 * Feat/135/not found 디자인 수정 (#167) * ✨ Feat: Not Found 추가 * 💄 Design: 디자인 개선 * 💄 Design: not-found 디자인 수정 * 💄 Design: favicon 추가 * 🚨 Fix: 임포트 정리 * 🐛 Fix : 오류처리 추가 * 🚑 fix: 마이페이지 401로직 수정 * ✨ feat: 로그인상태가 아닐경우 로그인 페이지로 이동 * 🐛 fix: 안쓰는 임시파일 삭제 * ♻️ refactor: storybook 폴더 변경, 📝 docs: configure 이미지 파일 추가 * Feat/147/skeleton : 마이페이지 스켈레톤 추가 (#162) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * 💄 Design: 크루카드 모바일 디자인 수정 * ✨ Feat: 마이페이지 스켈레톤 추가 * 🚨 Fix: 빌드 워닝 제거 * 💄 Design: 나의약속 스켈레톤 디자인 수정 초안 * 💄 Design: 스켈레톤 너비 수정 * Merge branch 'develop' into Feat/147/Skeleton * 🐛 fix: build err 수정 - import 추가 * 🐛 fix: 프로필 모음 위치수정 * 🐛 fix: 안쓰는 컴포넌트 삭제 * 🐛 fix: 폴더명 변경 * 🚑 fix: 버튼 컴포넌트 위치 변경 * 🐛 fix: 파일이동 * 📦 chore: 안쓰는 파일, 패키지 정리 * 🚑 fix: build warning 정리 * ✨ feat: 빌드 해결위해 추가 * 🚑 fix: 사용하지 않는 패키지 삭제 * Fix/youl bug fix : 로고, 파비콘 교체, 헤더 스타일 변경 (#171) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * ♿️ Fix: 크루 폼 접근성 개선 * ♿️ Fix : 약속 폼 접근성 개선 * ♿️ Fix: 크루찾기 접근성 개선 * 🐛 Fix: 이미지 fill, cover 워닝 없애기 * Merge branch 'develop' into Fix/YoulBugFix * 🍱 Fix: 샘플 이미지 교체 * ✨ Feat: 메타 설정 * ⬇️ Chore: package install * 🐛 Fix: 파일인풋 동작 개선 * Co-authored-by: JEP <[email protected]> * 🐛 Fix: FileInput 동작 개선 * 🚨 Fix: 빌드오류 수정 * 🎨 Style: 린트프리티어 적용 * 💄 Design: 헤더 수정 * 🔥 Chore: 파일 정리 * 🐛 Fix: 헤더 동작 개선 * 🐛 Fix: 크루 찾기 메뉴 원래대로 * 💄 Design: 헤더 디자인 수정 * 💄 Design: 로그인 폰트사이즈 변경 * 🐛 Fix: 이미지 경로 수정 * 🍱 Chore: 압축된 이미지로 교체 * 🔧 Chore: 파비콘 설정 추가 * 💚 Chore: package 싱크 * 💄design: 간격 변경 * ✨ feat: 빈배열 문구 추가 * 💄 design: 스켈레톤 ui 수정 * ✨ Feat: 데이터 없을 때 문구 추가 * 🐛 fix: svg err 수정 * 📝 docs: 스토리북 docs 추가, 보강 * 🐛 fix: 안쓰는 목데이터 삭제 * 📝 docs: 프로필, 찜하기 스토리북 docs 추가 * 📝 docs: input, auth, layout component 스토리북 문서 수정 * ♻️ refactor: 이전 파비콘 삭제 * Fix/youl storybook + 노데이터 문구 수정 (#174) * 📝 Docs: 스토리북 수정, Refactor: 안쓰는 타입 수정 * 📝 Docs: jsdoc 추가 * ✨ feat: 빈배열일 경우 처리 추가, mt추가 * 🐛 fix: app 내 파비콘 삭제 * 💄 design: 디자인 수정 --------- Co-authored-by: 조예은 <[email protected]> Co-authored-by: min5x5 <[email protected]> Co-authored-by: HaeJungg <[email protected]> Co-authored-by: HaeJungg <[email protected]> Co-authored-by: Cho Yeeun <[email protected]> Co-authored-by: 김민경 <[email protected]>
* ✨ Feat: reviewing Form에 post api 연결 * Rename: review-apis * 🐛 fix: build warning 수정, 사용하지 않는 함수, import 삭제 * 💄 design: 스켈레톤 ui수정 * ✨ feat: 크루 디테일 스켈레톤 UI추가 * ✨ feat: 리스트 스켈레톤 적용, 데이터 없을 경우 스타일 추가 * ✨ feat: 스켈레톤 ui 추가 잘못된 id 404로 이동 * 🐛 fix: npm installed canged * ♻️ refactor: 스토리북 폴더, 파일명 수정 * 🚑 fix: npm i changed * 🚑 fix: 페이지 랜더링 안되는 문제 수정 * 📝 docs: 스토리북 configure doc 수정 * 🚑 fix: 맥 스토리북위해 esbuild설치 * 💄 design: fontweignt삭제 * 🐛 fix: 포멧 데이터 디자인에 맞게 수정 * 🐛 fix: 타입 수정 * 🐛 fix: 스토리북 목데이터 수정 * 💄 design: 디자인에 맞게 날짜 수정 * ✨ feat: 나의리뷰, 리뷰 삭제하기 추가 * 🐛 fix: 토스트로 변경 * ✨ feat: 나의 리뷰 리스트 무한스크롤 구현, 데이터 연결 * 📝 docs: 사용하지 않는 파일 삭제, 주석처리 * 🚑 fix: 중복 코드 삭제, 이동경로 수정 * 💄 design: 마진 추가 * 🐛 fix: 폴더 들여쓰기 에러 수정 - meta title 변경 * 🐛 fix: 프리패치 기능 다시 살림 * ✨ feat: 크루 리뷰 타입 추가 * 🐛 fix: 리뷰카드 수정 * 🐛 fix: 사용하지 않는 import 삭제 * 🚑 fix: 타입에 따라 이름 변경 * ✨ feat: 데이터 패치 * ✨ feat: 레이지 로딩을 통해 시간단축 * ♻️ refactor: 페이지네이션 리팩토링 * 🐛 fix: 선언했지만 사용하지 않는 값 삭제 * ✨ feat: 리뷰 리스트 스켈레톤 UI 추가 * Fix/youl bug fix (#150) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * ♿️ Fix: 크루 폼 접근성 개선 * ♿️ Fix : 약속 폼 접근성 개선 * ♿️ Fix: 크루찾기 접근성 개선 * 🐛 Fix: 이미지 fill, cover 워닝 없애기 * Merge branch 'develop' into Fix/YoulBugFix * 🍱 Fix: 샘플 이미지 교체 * ✨ Feat: 메타 설정 * ⬇️ Chore: package install * 🐛 Fix: 파일인풋 동작 개선 * Co-authored-by: JEP <[email protected]> * 🐛 Fix: FileInput 동작 개선 * 🚨 Fix: 빌드오류 수정 * ✨ feat: 스켈레톤 사용 * ✨ feat: 데이터 패치, 스켈레톤 사용 * 💄 design: 스켈레톤 디자인 수정 * 💄 design: 모바일 디자인 수정 * 최신화 * 🚑 fix: 데이터 수정 * 🐛 fix: zustand state 에러 수정, ✨ Feat: reissue에러시 redirect 추가 * 💄 Style: img style 변경 * 🚑 fix: 패키지 변경 * ✨ feat: 데이터가 없는경우 처리 * 💄 design: 스켈레톤 디자인 수정 * ♻️ refactor: 코드 리팩토링 * 💄 design: 디자인에 맞게 수정, 누락된 데이터 추가, 반응형 작업 * 🐛 fix: 데이터명 변경 * 🐛 fix: storybook err 수정 * Feat/135/not found 디자인 수정 (#167) * ✨ Feat: Not Found 추가 * 💄 Design: 디자인 개선 * 💄 Design: not-found 디자인 수정 * 💄 Design: favicon 추가 * 🚨 Fix: 임포트 정리 * 🐛 Fix : 오류처리 추가 * 🚑 fix: 마이페이지 401로직 수정 * ✨ feat: 로그인상태가 아닐경우 로그인 페이지로 이동 * 🐛 fix: 안쓰는 임시파일 삭제 * ♻️ refactor: storybook 폴더 변경, 📝 docs: configure 이미지 파일 추가 * Feat/147/skeleton : 마이페이지 스켈레톤 추가 (#162) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * 💄 Design: 크루카드 모바일 디자인 수정 * ✨ Feat: 마이페이지 스켈레톤 추가 * 🚨 Fix: 빌드 워닝 제거 * 💄 Design: 나의약속 스켈레톤 디자인 수정 초안 * 💄 Design: 스켈레톤 너비 수정 * Merge branch 'develop' into Feat/147/Skeleton * 🐛 fix: build err 수정 - import 추가 * 🐛 fix: 프로필 모음 위치수정 * 🐛 fix: 안쓰는 컴포넌트 삭제 * 🐛 fix: 폴더명 변경 * 🚑 fix: 버튼 컴포넌트 위치 변경 * 🐛 fix: 파일이동 * 📦 chore: 안쓰는 파일, 패키지 정리 * 🚑 fix: build warning 정리 * ✨ feat: 빌드 해결위해 추가 * 🚑 fix: 사용하지 않는 패키지 삭제 * Fix/youl bug fix : 로고, 파비콘 교체, 헤더 스타일 변경 (#171) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * ♿️ Fix: 크루 폼 접근성 개선 * ♿️ Fix : 약속 폼 접근성 개선 * ♿️ Fix: 크루찾기 접근성 개선 * 🐛 Fix: 이미지 fill, cover 워닝 없애기 * Merge branch 'develop' into Fix/YoulBugFix * 🍱 Fix: 샘플 이미지 교체 * ✨ Feat: 메타 설정 * ⬇️ Chore: package install * 🐛 Fix: 파일인풋 동작 개선 * Co-authored-by: JEP <[email protected]> * 🐛 Fix: FileInput 동작 개선 * 🚨 Fix: 빌드오류 수정 * 🎨 Style: 린트프리티어 적용 * 💄 Design: 헤더 수정 * 🔥 Chore: 파일 정리 * 🐛 Fix: 헤더 동작 개선 * 🐛 Fix: 크루 찾기 메뉴 원래대로 * 💄 Design: 헤더 디자인 수정 * 💄 Design: 로그인 폰트사이즈 변경 * 🐛 Fix: 이미지 경로 수정 * 🍱 Chore: 압축된 이미지로 교체 * 🔧 Chore: 파비콘 설정 추가 * 💚 Chore: package 싱크 * 💄design: 간격 변경 * ✨ feat: 빈배열 문구 추가 * 💄 design: 스켈레톤 ui 수정 * ✨ Feat: 데이터 없을 때 문구 추가 * 🐛 fix: svg err 수정 * 📝 docs: 스토리북 docs 추가, 보강 * 🐛 fix: 안쓰는 목데이터 삭제 * 📝 docs: 프로필, 찜하기 스토리북 docs 추가 * 📝 docs: input, auth, layout component 스토리북 문서 수정 * ♻️ refactor: 이전 파비콘 삭제 * Fix/youl storybook + 노데이터 문구 수정 (#174) * 📝 Docs: 스토리북 수정, Refactor: 안쓰는 타입 수정 * 📝 Docs: jsdoc 추가 * ✨ feat: 빈배열일 경우 처리 추가, mt추가 * 🐛 fix: app 내 파비콘 삭제 * 💄 design: 디자인 수정 * 💄 Design: 메인 버튼 크기 통일 --------- Co-authored-by: 조예은 <[email protected]> Co-authored-by: min5x5 <[email protected]> Co-authored-by: HaeJungg <[email protected]> Co-authored-by: HaeJungg <[email protected]> Co-authored-by: Cho Yeeun <[email protected]> Co-authored-by: 김민경 <[email protected]>
* ✨ Feat: reviewing Form에 post api 연결 * Rename: review-apis * 🐛 fix: build warning 수정, 사용하지 않는 함수, import 삭제 * 💄 design: 스켈레톤 ui수정 * ✨ feat: 크루 디테일 스켈레톤 UI추가 * ✨ feat: 리스트 스켈레톤 적용, 데이터 없을 경우 스타일 추가 * ✨ feat: 스켈레톤 ui 추가 잘못된 id 404로 이동 * 🐛 fix: npm installed canged * ♻️ refactor: 스토리북 폴더, 파일명 수정 * 🚑 fix: npm i changed * 🚑 fix: 페이지 랜더링 안되는 문제 수정 * 📝 docs: 스토리북 configure doc 수정 * 🚑 fix: 맥 스토리북위해 esbuild설치 * 💄 design: fontweignt삭제 * 🐛 fix: 포멧 데이터 디자인에 맞게 수정 * 🐛 fix: 타입 수정 * 🐛 fix: 스토리북 목데이터 수정 * 💄 design: 디자인에 맞게 날짜 수정 * ✨ feat: 나의리뷰, 리뷰 삭제하기 추가 * 🐛 fix: 토스트로 변경 * ✨ feat: 나의 리뷰 리스트 무한스크롤 구현, 데이터 연결 * 📝 docs: 사용하지 않는 파일 삭제, 주석처리 * 🚑 fix: 중복 코드 삭제, 이동경로 수정 * 💄 design: 마진 추가 * 🐛 fix: 폴더 들여쓰기 에러 수정 - meta title 변경 * 🐛 fix: 프리패치 기능 다시 살림 * ✨ feat: 크루 리뷰 타입 추가 * 🐛 fix: 리뷰카드 수정 * 🐛 fix: 사용하지 않는 import 삭제 * 🚑 fix: 타입에 따라 이름 변경 * ✨ feat: 데이터 패치 * ✨ feat: 레이지 로딩을 통해 시간단축 * ♻️ refactor: 페이지네이션 리팩토링 * 🐛 fix: 선언했지만 사용하지 않는 값 삭제 * ✨ feat: 리뷰 리스트 스켈레톤 UI 추가 * Fix/youl bug fix (#150) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * ♿️ Fix: 크루 폼 접근성 개선 * ♿️ Fix : 약속 폼 접근성 개선 * ♿️ Fix: 크루찾기 접근성 개선 * 🐛 Fix: 이미지 fill, cover 워닝 없애기 * Merge branch 'develop' into Fix/YoulBugFix * 🍱 Fix: 샘플 이미지 교체 * ✨ Feat: 메타 설정 * ⬇️ Chore: package install * 🐛 Fix: 파일인풋 동작 개선 * Co-authored-by: JEP <[email protected]> * 🐛 Fix: FileInput 동작 개선 * 🚨 Fix: 빌드오류 수정 * ✨ feat: 스켈레톤 사용 * ✨ feat: 데이터 패치, 스켈레톤 사용 * 💄 design: 스켈레톤 디자인 수정 * 💄 design: 모바일 디자인 수정 * 최신화 * 🚑 fix: 데이터 수정 * 🐛 fix: zustand state 에러 수정, ✨ Feat: reissue에러시 redirect 추가 * 💄 Style: img style 변경 * 🚑 fix: 패키지 변경 * ✨ feat: 데이터가 없는경우 처리 * 💄 design: 스켈레톤 디자인 수정 * ♻️ refactor: 코드 리팩토링 * 💄 design: 디자인에 맞게 수정, 누락된 데이터 추가, 반응형 작업 * 🐛 fix: 데이터명 변경 * 🐛 fix: storybook err 수정 * Feat/135/not found 디자인 수정 (#167) * ✨ Feat: Not Found 추가 * 💄 Design: 디자인 개선 * 💄 Design: not-found 디자인 수정 * 💄 Design: favicon 추가 * 🚨 Fix: 임포트 정리 * 🐛 Fix : 오류처리 추가 * 🚑 fix: 마이페이지 401로직 수정 * ✨ feat: 로그인상태가 아닐경우 로그인 페이지로 이동 * 🐛 fix: 안쓰는 임시파일 삭제 * ♻️ refactor: storybook 폴더 변경, 📝 docs: configure 이미지 파일 추가 * Feat/147/skeleton : 마이페이지 스켈레톤 추가 (#162) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * 💄 Design: 크루카드 모바일 디자인 수정 * ✨ Feat: 마이페이지 스켈레톤 추가 * 🚨 Fix: 빌드 워닝 제거 * 💄 Design: 나의약속 스켈레톤 디자인 수정 초안 * 💄 Design: 스켈레톤 너비 수정 * Merge branch 'develop' into Feat/147/Skeleton * 🐛 fix: build err 수정 - import 추가 * 🐛 fix: 프로필 모음 위치수정 * 🐛 fix: 안쓰는 컴포넌트 삭제 * 🐛 fix: 폴더명 변경 * 🚑 fix: 버튼 컴포넌트 위치 변경 * 🐛 fix: 파일이동 * 📦 chore: 안쓰는 파일, 패키지 정리 * 🚑 fix: build warning 정리 * ✨ feat: 빌드 해결위해 추가 * 🚑 fix: 사용하지 않는 패키지 삭제 * Fix/youl bug fix : 로고, 파비콘 교체, 헤더 스타일 변경 (#171) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * ♿️ Fix: 크루 폼 접근성 개선 * ♿️ Fix : 약속 폼 접근성 개선 * ♿️ Fix: 크루찾기 접근성 개선 * 🐛 Fix: 이미지 fill, cover 워닝 없애기 * Merge branch 'develop' into Fix/YoulBugFix * 🍱 Fix: 샘플 이미지 교체 * ✨ Feat: 메타 설정 * ⬇️ Chore: package install * 🐛 Fix: 파일인풋 동작 개선 * Co-authored-by: JEP <[email protected]> * 🐛 Fix: FileInput 동작 개선 * 🚨 Fix: 빌드오류 수정 * 🎨 Style: 린트프리티어 적용 * 💄 Design: 헤더 수정 * 🔥 Chore: 파일 정리 * 🐛 Fix: 헤더 동작 개선 * 🐛 Fix: 크루 찾기 메뉴 원래대로 * 💄 Design: 헤더 디자인 수정 * 💄 Design: 로그인 폰트사이즈 변경 * 🐛 Fix: 이미지 경로 수정 * 🍱 Chore: 압축된 이미지로 교체 * 🔧 Chore: 파비콘 설정 추가 * 💚 Chore: package 싱크 * 💄design: 간격 변경 * ✨ feat: 빈배열 문구 추가 * 💄 design: 스켈레톤 ui 수정 * ✨ Feat: 데이터 없을 때 문구 추가 * 🐛 fix: svg err 수정 * 📝 docs: 스토리북 docs 추가, 보강 * 🐛 fix: 안쓰는 목데이터 삭제 * 📝 docs: 프로필, 찜하기 스토리북 docs 추가 * 📝 docs: input, auth, layout component 스토리북 문서 수정 * ♻️ refactor: 이전 파비콘 삭제 * Fix/youl storybook + 노데이터 문구 수정 (#174) * 📝 Docs: 스토리북 수정, Refactor: 안쓰는 타입 수정 * 📝 Docs: jsdoc 추가 * ✨ feat: 빈배열일 경우 처리 추가, mt추가 * 🐛 fix: app 내 파비콘 삭제 * 💄 design: 디자인 수정 * 💄 Design: 메인 버튼 크기 통일 * 💄 Design: z-index 수정 * 💄 Design: 버튼 사이즈 조정, 안쓰는 클래스 삭제 * Merge branch 'main' into hotfix/Design --------- Co-authored-by: 조예은 <[email protected]> Co-authored-by: min5x5 <[email protected]> Co-authored-by: HaeJungg <[email protected]> Co-authored-by: HaeJungg <[email protected]> Co-authored-by: Cho Yeeun <[email protected]> Co-authored-by: 김민경 <[email protected]>
* ✨ Feat: reviewing Form에 post api 연결 * Rename: review-apis * 🐛 fix: build warning 수정, 사용하지 않는 함수, import 삭제 * 💄 design: 스켈레톤 ui수정 * ✨ feat: 크루 디테일 스켈레톤 UI추가 * ✨ feat: 리스트 스켈레톤 적용, 데이터 없을 경우 스타일 추가 * ✨ feat: 스켈레톤 ui 추가 잘못된 id 404로 이동 * 🐛 fix: npm installed canged * ♻️ refactor: 스토리북 폴더, 파일명 수정 * 🚑 fix: npm i changed * 🚑 fix: 페이지 랜더링 안되는 문제 수정 * 📝 docs: 스토리북 configure doc 수정 * 🚑 fix: 맥 스토리북위해 esbuild설치 * 💄 design: fontweignt삭제 * 🐛 fix: 포멧 데이터 디자인에 맞게 수정 * 🐛 fix: 타입 수정 * 🐛 fix: 스토리북 목데이터 수정 * 💄 design: 디자인에 맞게 날짜 수정 * ✨ feat: 나의리뷰, 리뷰 삭제하기 추가 * 🐛 fix: 토스트로 변경 * ✨ feat: 나의 리뷰 리스트 무한스크롤 구현, 데이터 연결 * 📝 docs: 사용하지 않는 파일 삭제, 주석처리 * 🚑 fix: 중복 코드 삭제, 이동경로 수정 * 💄 design: 마진 추가 * 🐛 fix: 폴더 들여쓰기 에러 수정 - meta title 변경 * 🐛 fix: 프리패치 기능 다시 살림 * ✨ feat: 크루 리뷰 타입 추가 * 🐛 fix: 리뷰카드 수정 * 🐛 fix: 사용하지 않는 import 삭제 * 🚑 fix: 타입에 따라 이름 변경 * ✨ feat: 데이터 패치 * ✨ feat: 레이지 로딩을 통해 시간단축 * ♻️ refactor: 페이지네이션 리팩토링 * 🐛 fix: 선언했지만 사용하지 않는 값 삭제 * ✨ feat: 리뷰 리스트 스켈레톤 UI 추가 * Fix/youl bug fix (#150) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * ♿️ Fix: 크루 폼 접근성 개선 * ♿️ Fix : 약속 폼 접근성 개선 * ♿️ Fix: 크루찾기 접근성 개선 * 🐛 Fix: 이미지 fill, cover 워닝 없애기 * Merge branch 'develop' into Fix/YoulBugFix * 🍱 Fix: 샘플 이미지 교체 * ✨ Feat: 메타 설정 * ⬇️ Chore: package install * 🐛 Fix: 파일인풋 동작 개선 * Co-authored-by: JEP <[email protected]> * 🐛 Fix: FileInput 동작 개선 * 🚨 Fix: 빌드오류 수정 * ✨ feat: 스켈레톤 사용 * ✨ feat: 데이터 패치, 스켈레톤 사용 * 💄 design: 스켈레톤 디자인 수정 * 💄 design: 모바일 디자인 수정 * 최신화 * 🚑 fix: 데이터 수정 * 🐛 fix: zustand state 에러 수정, ✨ Feat: reissue에러시 redirect 추가 * 💄 Style: img style 변경 * 🚑 fix: 패키지 변경 * ✨ feat: 데이터가 없는경우 처리 * 💄 design: 스켈레톤 디자인 수정 * ♻️ refactor: 코드 리팩토링 * 💄 design: 디자인에 맞게 수정, 누락된 데이터 추가, 반응형 작업 * 🐛 fix: 데이터명 변경 * 🐛 fix: storybook err 수정 * Feat/135/not found 디자인 수정 (#167) * ✨ Feat: Not Found 추가 * 💄 Design: 디자인 개선 * 💄 Design: not-found 디자인 수정 * 💄 Design: favicon 추가 * 🚨 Fix: 임포트 정리 * 🐛 Fix : 오류처리 추가 * 🚑 fix: 마이페이지 401로직 수정 * ✨ feat: 로그인상태가 아닐경우 로그인 페이지로 이동 * 🐛 fix: 안쓰는 임시파일 삭제 * ♻️ refactor: storybook 폴더 변경, 📝 docs: configure 이미지 파일 추가 * Feat/147/skeleton : 마이페이지 스켈레톤 추가 (#162) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * 💄 Design: 크루카드 모바일 디자인 수정 * ✨ Feat: 마이페이지 스켈레톤 추가 * 🚨 Fix: 빌드 워닝 제거 * 💄 Design: 나의약속 스켈레톤 디자인 수정 초안 * 💄 Design: 스켈레톤 너비 수정 * Merge branch 'develop' into Feat/147/Skeleton * 🐛 fix: build err 수정 - import 추가 * 🐛 fix: 프로필 모음 위치수정 * 🐛 fix: 안쓰는 컴포넌트 삭제 * 🐛 fix: 폴더명 변경 * 🚑 fix: 버튼 컴포넌트 위치 변경 * 🐛 fix: 파일이동 * 📦 chore: 안쓰는 파일, 패키지 정리 * 🚑 fix: build warning 정리 * ✨ feat: 빌드 해결위해 추가 * 🚑 fix: 사용하지 않는 패키지 삭제 * Fix/youl bug fix : 로고, 파비콘 교체, 헤더 스타일 변경 (#171) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * ♿️ Fix: 크루 폼 접근성 개선 * ♿️ Fix : 약속 폼 접근성 개선 * ♿️ Fix: 크루찾기 접근성 개선 * 🐛 Fix: 이미지 fill, cover 워닝 없애기 * Merge branch 'develop' into Fix/YoulBugFix * 🍱 Fix: 샘플 이미지 교체 * ✨ Feat: 메타 설정 * ⬇️ Chore: package install * 🐛 Fix: 파일인풋 동작 개선 * Co-authored-by: JEP <[email protected]> * 🐛 Fix: FileInput 동작 개선 * 🚨 Fix: 빌드오류 수정 * 🎨 Style: 린트프리티어 적용 * 💄 Design: 헤더 수정 * 🔥 Chore: 파일 정리 * 🐛 Fix: 헤더 동작 개선 * 🐛 Fix: 크루 찾기 메뉴 원래대로 * 💄 Design: 헤더 디자인 수정 * 💄 Design: 로그인 폰트사이즈 변경 * 🐛 Fix: 이미지 경로 수정 * 🍱 Chore: 압축된 이미지로 교체 * 🔧 Chore: 파비콘 설정 추가 * 💚 Chore: package 싱크 * 💄design: 간격 변경 * ✨ feat: 빈배열 문구 추가 * 💄 design: 스켈레톤 ui 수정 * ✨ Feat: 데이터 없을 때 문구 추가 * 🐛 fix: svg err 수정 * 📝 docs: 스토리북 docs 추가, 보강 * 🐛 fix: 안쓰는 목데이터 삭제 * 📝 docs: 프로필, 찜하기 스토리북 docs 추가 * 📝 docs: input, auth, layout component 스토리북 문서 수정 * ♻️ refactor: 이전 파비콘 삭제 * Fix/youl storybook + 노데이터 문구 수정 (#174) * 📝 Docs: 스토리북 수정, Refactor: 안쓰는 타입 수정 * 📝 Docs: jsdoc 추가 * ✨ feat: 빈배열일 경우 처리 추가, mt추가 * 🐛 fix: app 내 파비콘 삭제 * 💄 design: 디자인 수정 * 💄 Design: 메인 버튼 크기 통일 * 💄 Design: z-index 수정 * 💄 Design: 버튼 사이즈 조정, 안쓰는 클래스 삭제 * Merge branch 'main' into hotfix/Design * 🍱 Chore: 메타 이미지 변경 --------- Co-authored-by: 조예은 <[email protected]> Co-authored-by: min5x5 <[email protected]> Co-authored-by: HaeJungg <[email protected]> Co-authored-by: HaeJungg <[email protected]> Co-authored-by: Cho Yeeun <[email protected]> Co-authored-by: 김민경 <[email protected]>
* ✨ Feat: reviewing Form에 post api 연결 * Rename: review-apis * 🐛 fix: build warning 수정, 사용하지 않는 함수, import 삭제 * 💄 design: 스켈레톤 ui수정 * ✨ feat: 크루 디테일 스켈레톤 UI추가 * ✨ feat: 리스트 스켈레톤 적용, 데이터 없을 경우 스타일 추가 * ✨ feat: 스켈레톤 ui 추가 잘못된 id 404로 이동 * 🐛 fix: npm installed canged * ♻️ refactor: 스토리북 폴더, 파일명 수정 * 🚑 fix: npm i changed * 🚑 fix: 페이지 랜더링 안되는 문제 수정 * 📝 docs: 스토리북 configure doc 수정 * 🚑 fix: 맥 스토리북위해 esbuild설치 * 💄 design: fontweignt삭제 * 🐛 fix: 포멧 데이터 디자인에 맞게 수정 * 🐛 fix: 타입 수정 * 🐛 fix: 스토리북 목데이터 수정 * 💄 design: 디자인에 맞게 날짜 수정 * ✨ feat: 나의리뷰, 리뷰 삭제하기 추가 * 🐛 fix: 토스트로 변경 * ✨ feat: 나의 리뷰 리스트 무한스크롤 구현, 데이터 연결 * 📝 docs: 사용하지 않는 파일 삭제, 주석처리 * 🚑 fix: 중복 코드 삭제, 이동경로 수정 * 💄 design: 마진 추가 * 🐛 fix: 폴더 들여쓰기 에러 수정 - meta title 변경 * 🐛 fix: 프리패치 기능 다시 살림 * ✨ feat: 크루 리뷰 타입 추가 * 🐛 fix: 리뷰카드 수정 * 🐛 fix: 사용하지 않는 import 삭제 * 🚑 fix: 타입에 따라 이름 변경 * ✨ feat: 데이터 패치 * ✨ feat: 레이지 로딩을 통해 시간단축 * ♻️ refactor: 페이지네이션 리팩토링 * 🐛 fix: 선언했지만 사용하지 않는 값 삭제 * ✨ feat: 리뷰 리스트 스켈레톤 UI 추가 * Fix/youl bug fix (#150) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * ♿️ Fix: 크루 폼 접근성 개선 * ♿️ Fix : 약속 폼 접근성 개선 * ♿️ Fix: 크루찾기 접근성 개선 * 🐛 Fix: 이미지 fill, cover 워닝 없애기 * Merge branch 'develop' into Fix/YoulBugFix * 🍱 Fix: 샘플 이미지 교체 * ✨ Feat: 메타 설정 * ⬇️ Chore: package install * 🐛 Fix: 파일인풋 동작 개선 * Co-authored-by: JEP <[email protected]> * 🐛 Fix: FileInput 동작 개선 * 🚨 Fix: 빌드오류 수정 * ✨ feat: 스켈레톤 사용 * ✨ feat: 데이터 패치, 스켈레톤 사용 * 💄 design: 스켈레톤 디자인 수정 * 💄 design: 모바일 디자인 수정 * 최신화 * 🚑 fix: 데이터 수정 * 🐛 fix: zustand state 에러 수정, ✨ Feat: reissue에러시 redirect 추가 * 💄 Style: img style 변경 * 🚑 fix: 패키지 변경 * ✨ feat: 데이터가 없는경우 처리 * 💄 design: 스켈레톤 디자인 수정 * ♻️ refactor: 코드 리팩토링 * 💄 design: 디자인에 맞게 수정, 누락된 데이터 추가, 반응형 작업 * 🐛 fix: 데이터명 변경 * 🐛 fix: storybook err 수정 * Feat/135/not found 디자인 수정 (#167) * ✨ Feat: Not Found 추가 * 💄 Design: 디자인 개선 * 💄 Design: not-found 디자인 수정 * 💄 Design: favicon 추가 * 🚨 Fix: 임포트 정리 * 🐛 Fix : 오류처리 추가 * 🚑 fix: 마이페이지 401로직 수정 * ✨ feat: 로그인상태가 아닐경우 로그인 페이지로 이동 * 🐛 fix: 안쓰는 임시파일 삭제 * ♻️ refactor: storybook 폴더 변경, 📝 docs: configure 이미지 파일 추가 * Feat/147/skeleton : 마이페이지 스켈레톤 추가 (#162) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * 💄 Design: 크루카드 모바일 디자인 수정 * ✨ Feat: 마이페이지 스켈레톤 추가 * 🚨 Fix: 빌드 워닝 제거 * 💄 Design: 나의약속 스켈레톤 디자인 수정 초안 * 💄 Design: 스켈레톤 너비 수정 * Merge branch 'develop' into Feat/147/Skeleton * 🐛 fix: build err 수정 - import 추가 * 🐛 fix: 프로필 모음 위치수정 * 🐛 fix: 안쓰는 컴포넌트 삭제 * 🐛 fix: 폴더명 변경 * 🚑 fix: 버튼 컴포넌트 위치 변경 * 🐛 fix: 파일이동 * 📦 chore: 안쓰는 파일, 패키지 정리 * 🚑 fix: build warning 정리 * ✨ feat: 빌드 해결위해 추가 * 🚑 fix: 사용하지 않는 패키지 삭제 * Fix/youl bug fix : 로고, 파비콘 교체, 헤더 스타일 변경 (#171) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * ♿️ Fix: 크루 폼 접근성 개선 * ♿️ Fix : 약속 폼 접근성 개선 * ♿️ Fix: 크루찾기 접근성 개선 * 🐛 Fix: 이미지 fill, cover 워닝 없애기 * Merge branch 'develop' into Fix/YoulBugFix * 🍱 Fix: 샘플 이미지 교체 * ✨ Feat: 메타 설정 * ⬇️ Chore: package install * 🐛 Fix: 파일인풋 동작 개선 * Co-authored-by: JEP <[email protected]> * 🐛 Fix: FileInput 동작 개선 * 🚨 Fix: 빌드오류 수정 * 🎨 Style: 린트프리티어 적용 * 💄 Design: 헤더 수정 * 🔥 Chore: 파일 정리 * 🐛 Fix: 헤더 동작 개선 * 🐛 Fix: 크루 찾기 메뉴 원래대로 * 💄 Design: 헤더 디자인 수정 * 💄 Design: 로그인 폰트사이즈 변경 * 🐛 Fix: 이미지 경로 수정 * 🍱 Chore: 압축된 이미지로 교체 * 🔧 Chore: 파비콘 설정 추가 * 💚 Chore: package 싱크 * 💄design: 간격 변경 * ✨ feat: 빈배열 문구 추가 * 💄 design: 스켈레톤 ui 수정 * ✨ Feat: 데이터 없을 때 문구 추가 * 🐛 fix: svg err 수정 * 📝 docs: 스토리북 docs 추가, 보강 * 🐛 fix: 안쓰는 목데이터 삭제 * 📝 docs: 프로필, 찜하기 스토리북 docs 추가 * 📝 docs: input, auth, layout component 스토리북 문서 수정 * ♻️ refactor: 이전 파비콘 삭제 * Fix/youl storybook + 노데이터 문구 수정 (#174) * 📝 Docs: 스토리북 수정, Refactor: 안쓰는 타입 수정 * 📝 Docs: jsdoc 추가 * ✨ feat: 빈배열일 경우 처리 추가, mt추가 * 🐛 fix: app 내 파비콘 삭제 * 💄 design: 디자인 수정 * 🚑 fix: 이름수정, 시간계산 수정 --------- Co-authored-by: 조예은 <[email protected]> Co-authored-by: min5x5 <[email protected]> Co-authored-by: HaeJungg <[email protected]> Co-authored-by: HaeJungg <[email protected]> Co-authored-by: Cho Yeeun <[email protected]> Co-authored-by: 김민경 <[email protected]>
* ✨ Feat: reviewing Form에 post api 연결 * Rename: review-apis * 🐛 fix: build warning 수정, 사용하지 않는 함수, import 삭제 * 💄 design: 스켈레톤 ui수정 * ✨ feat: 크루 디테일 스켈레톤 UI추가 * ✨ feat: 리스트 스켈레톤 적용, 데이터 없을 경우 스타일 추가 * ✨ feat: 스켈레톤 ui 추가 잘못된 id 404로 이동 * 🐛 fix: npm installed canged * ♻️ refactor: 스토리북 폴더, 파일명 수정 * 🚑 fix: npm i changed * 🚑 fix: 페이지 랜더링 안되는 문제 수정 * 📝 docs: 스토리북 configure doc 수정 * 🚑 fix: 맥 스토리북위해 esbuild설치 * 💄 design: fontweignt삭제 * 🐛 fix: 포멧 데이터 디자인에 맞게 수정 * 🐛 fix: 타입 수정 * 🐛 fix: 스토리북 목데이터 수정 * 💄 design: 디자인에 맞게 날짜 수정 * ✨ feat: 나의리뷰, 리뷰 삭제하기 추가 * 🐛 fix: 토스트로 변경 * ✨ feat: 나의 리뷰 리스트 무한스크롤 구현, 데이터 연결 * 📝 docs: 사용하지 않는 파일 삭제, 주석처리 * 🚑 fix: 중복 코드 삭제, 이동경로 수정 * 💄 design: 마진 추가 * 🐛 fix: 폴더 들여쓰기 에러 수정 - meta title 변경 * 🐛 fix: 프리패치 기능 다시 살림 * ✨ feat: 크루 리뷰 타입 추가 * 🐛 fix: 리뷰카드 수정 * 🐛 fix: 사용하지 않는 import 삭제 * 🚑 fix: 타입에 따라 이름 변경 * ✨ feat: 데이터 패치 * ✨ feat: 레이지 로딩을 통해 시간단축 * ♻️ refactor: 페이지네이션 리팩토링 * 🐛 fix: 선언했지만 사용하지 않는 값 삭제 * ✨ feat: 리뷰 리스트 스켈레톤 UI 추가 * Fix/youl bug fix (#150) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * ♿️ Fix: 크루 폼 접근성 개선 * ♿️ Fix : 약속 폼 접근성 개선 * ♿️ Fix: 크루찾기 접근성 개선 * 🐛 Fix: 이미지 fill, cover 워닝 없애기 * Merge branch 'develop' into Fix/YoulBugFix * 🍱 Fix: 샘플 이미지 교체 * ✨ Feat: 메타 설정 * ⬇️ Chore: package install * 🐛 Fix: 파일인풋 동작 개선 * Co-authored-by: JEP <[email protected]> * 🐛 Fix: FileInput 동작 개선 * 🚨 Fix: 빌드오류 수정 * ✨ feat: 스켈레톤 사용 * ✨ feat: 데이터 패치, 스켈레톤 사용 * 💄 design: 스켈레톤 디자인 수정 * 💄 design: 모바일 디자인 수정 * 최신화 * 🚑 fix: 데이터 수정 * 🐛 fix: zustand state 에러 수정, ✨ Feat: reissue에러시 redirect 추가 * 💄 Style: img style 변경 * 🚑 fix: 패키지 변경 * ✨ feat: 데이터가 없는경우 처리 * 💄 design: 스켈레톤 디자인 수정 * ♻️ refactor: 코드 리팩토링 * 💄 design: 디자인에 맞게 수정, 누락된 데이터 추가, 반응형 작업 * 🐛 fix: 데이터명 변경 * 🐛 fix: storybook err 수정 * Feat/135/not found 디자인 수정 (#167) * ✨ Feat: Not Found 추가 * 💄 Design: 디자인 개선 * 💄 Design: not-found 디자인 수정 * 💄 Design: favicon 추가 * 🚨 Fix: 임포트 정리 * 🐛 Fix : 오류처리 추가 * 🚑 fix: 마이페이지 401로직 수정 * ✨ feat: 로그인상태가 아닐경우 로그인 페이지로 이동 * 🐛 fix: 안쓰는 임시파일 삭제 * ♻️ refactor: storybook 폴더 변경, 📝 docs: configure 이미지 파일 추가 * Feat/147/skeleton : 마이페이지 스켈레톤 추가 (#162) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * 💄 Design: 크루카드 모바일 디자인 수정 * ✨ Feat: 마이페이지 스켈레톤 추가 * 🚨 Fix: 빌드 워닝 제거 * 💄 Design: 나의약속 스켈레톤 디자인 수정 초안 * 💄 Design: 스켈레톤 너비 수정 * Merge branch 'develop' into Feat/147/Skeleton * 🐛 fix: build err 수정 - import 추가 * 🐛 fix: 프로필 모음 위치수정 * 🐛 fix: 안쓰는 컴포넌트 삭제 * 🐛 fix: 폴더명 변경 * 🚑 fix: 버튼 컴포넌트 위치 변경 * 🐛 fix: 파일이동 * 📦 chore: 안쓰는 파일, 패키지 정리 * 🚑 fix: build warning 정리 * ✨ feat: 빌드 해결위해 추가 * 🚑 fix: 사용하지 않는 패키지 삭제 * Fix/youl bug fix : 로고, 파비콘 교체, 헤더 스타일 변경 (#171) * Feat: 스켈레톤 컴포넌트 추가 * 🐛 Fix: 컬럼 수정 * ✨ Feat: 마이페이지 프로필 스켈레톤 추가 * ✨ Feat: 작성가능한리뷰 스켈레톤 추가 * ✨ Feat: 나의 리뷰 스켈레톤 추가가 * ♿️ Fix: 접근성 개선 * ✨ Feat: 나의 약속 로딩 스켈레톤 추가 * 💄 Design: 호버시 그림자 적용 * 🚨 Fix: 빌드 오류 수정 * 🐛 Fix: DateTimePicker 동작개선 * ♿️ Fix: 크루 폼 접근성 개선 * ♿️ Fix : 약속 폼 접근성 개선 * ♿️ Fix: 크루찾기 접근성 개선 * 🐛 Fix: 이미지 fill, cover 워닝 없애기 * Merge branch 'develop' into Fix/YoulBugFix * 🍱 Fix: 샘플 이미지 교체 * ✨ Feat: 메타 설정 * ⬇️ Chore: package install * 🐛 Fix: 파일인풋 동작 개선 * Co-authored-by: JEP <[email protected]> * 🐛 Fix: FileInput 동작 개선 * 🚨 Fix: 빌드오류 수정 * 🎨 Style: 린트프리티어 적용 * 💄 Design: 헤더 수정 * 🔥 Chore: 파일 정리 * 🐛 Fix: 헤더 동작 개선 * 🐛 Fix: 크루 찾기 메뉴 원래대로 * 💄 Design: 헤더 디자인 수정 * 💄 Design: 로그인 폰트사이즈 변경 * 🐛 Fix: 이미지 경로 수정 * 🍱 Chore: 압축된 이미지로 교체 * 🔧 Chore: 파비콘 설정 추가 * 💚 Chore: package 싱크 * 💄design: 간격 변경 * ✨ feat: 빈배열 문구 추가 * 💄 design: 스켈레톤 ui 수정 * ✨ Feat: 데이터 없을 때 문구 추가 * 🐛 fix: svg err 수정 * 📝 docs: 스토리북 docs 추가, 보강 * 🐛 fix: 안쓰는 목데이터 삭제 * 📝 docs: 프로필, 찜하기 스토리북 docs 추가 * 📝 docs: input, auth, layout component 스토리북 문서 수정 * ♻️ refactor: 이전 파비콘 삭제 * Fix/youl storybook + 노데이터 문구 수정 (#174) * 📝 Docs: 스토리북 수정, Refactor: 안쓰는 타입 수정 * 📝 Docs: jsdoc 추가 * ✨ feat: 빈배열일 경우 처리 추가, mt추가 * 🐛 fix: app 내 파비콘 삭제 * 💄 design: 디자인 수정 * 💄 Design: 메인 버튼 크기 통일 * 💄 Design: z-index 수정 * 💄 Design: 버튼 사이즈 조정, 안쓰는 클래스 삭제 * Merge branch 'main' into hotfix/Design * 🍱 Chore: 메타 이미지 변경 * 🍱 Chore : 메타 이미지 교체 --------- Co-authored-by: 조예은 <[email protected]> Co-authored-by: min5x5 <[email protected]> Co-authored-by: HaeJungg <[email protected]> Co-authored-by: HaeJungg <[email protected]> Co-authored-by: Cho Yeeun <[email protected]> Co-authored-by: 김민경 <[email protected]>
🔖 Issue Ticket
#147
✍️ Description
마이페이지 작성가능한 리뷰, 작성한 리뷰 로딩시 스켈레톤 보이도록 수정했습니다~
✅ Checklist
PR
Test
Summary by CodeRabbit
MyReviewPage의 로딩 상태에서 스켈레톤 로딩 컴포넌트인MyReviewSkeletonList로 대체되었습니다.ReviewableGatheringSkeletonList컴포넌트가 추가되어 데이터 로딩 중 시각적 피드백을 제공합니다.GatheringCardPresenter에서 24시간 이내의 이벤트를 표시하는 기능이 추가되었습니다.getCrewReviews함수와useGetCrewReviewsQuery훅이 추가되어 크루 리뷰 데이터를 효율적으로 가져옵니다.handleJoinClick및handleLike함수의 오류 처리 로직이 개선되었습니다.ReviewableReviewSkeletonList가 제거되었습니다.CrewReviewSection이 더 이상 사용되지 않아 관련 코드가 주석 처리되었습니다.