-
Notifications
You must be signed in to change notification settings - Fork 3
Refactor: LNK-46-Leenk QA 내용 반영 #67
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
The head ref may contain hidden characters: "refactor/LNK-46-Leenk-QA-\uB0B4\uC6A9-\uBC18\uC601"
Conversation
전체 요약 (Walkthrough)여러 UI 컴포넌트에 애니메이션 기능을 추가하고, 공유 기능을 변경사항 (Changes)
예상 코드 리뷰 노력 (Estimated Code Review Effort)🎯 3 (Moderate) | ⏱️ ~25 minutes 관련된 가능성 있는 PR (Possibly Related PRs)
검토 담당자 제안 (Suggested Reviewers)
축시 (Poem)
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 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.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
ios/Leenk.xcodeproj/project.pbxproj (1)
174-178: 프로젝트 레벨의 서명 설정이 제거되고 수동 서명으로 변경되었습니다.TargetAttributes에서 DevelopmentTeam과 ProvisioningStyle이 제거되었으며, 동시에 CODE_SIGN_STYLE이 Automatic에서 Manual로 변경되고 DEVELOPMENT_TEAM이 빈 문자열로 설정되었습니다 (Debug와 Release 모두). 디바이스별 조건부 서명 설정은 유지되나, 이러한 변경사항이 QA 내용 반영의 일부인지 확인이 필요합니다. 수동 서명으로 전환하면 팀원들이 프로비저닝 프로필을 명시적으로 관리해야 하므로, 이 변경이 의도적이라면 팀에 공지하고 문서화해주세요.
🧹 Nitpick comments (7)
components/feed/GradientOverlay.tsx (1)
36-39: 도달 불가능한 코드입니다.31-34번 라인에서
gradientColors는 항상 유효한 2개 요소 배열로 할당됩니다 (colorsprop이 유효하지 않으면TOP_DEFAULT또는BOTTOM_DEFAULT로 폴백). 따라서 이 조건문은 절대 참이 될 수 없어 36-39번 라인은 실행되지 않는 불필요한 코드입니다.🔎 제안하는 수정안
- // colors 배열이 비어있으면 렌더링하지 않음 - if (!gradientColors || gradientColors.length < 2) { - return null; - } -components/common/Header/KebabButton.tsx (1)
18-18: 핸들러가 없을 때의 동작 고려 (선택사항)현재
handleKebab이 제공되지 않으면 빈 함수가 실행되어 버튼을 눌러도 아무 동작이 일어나지 않습니다. 의도된 동작일 수 있지만, 핸들러가 없을 때는 버튼을 비활성화하거나 렌더링하지 않는 것도 고려해볼 수 있습니다.🔎 선택적 개선 방안
return ( <TouchableOpacity - onPress={handleKebab || (() => {})} + onPress={handleKebab} + disabled={!handleKebab} hitSlop={{ top: 16, bottom: 16, left: 16, right: 16 }} > <KebabIcon color={iconColor} width={18} height={18} /> </TouchableOpacity> );또는 핸들러가 없으면 렌더링하지 않기:
+ if (!handleKebab) return null; + return ( <TouchableOpacity - onPress={handleKebab || (() => {})} + onPress={handleKebab} hitSlop={{ top: 16, bottom: 16, left: 16, right: 16 }} > <KebabIcon color={iconColor} width={18} height={18} /> </TouchableOpacity> );app/(post)/feed/write.tsx (1)
219-224: 주석 처리된 코드를 제거하는 것을 고려하세요.조건부 렌더링이 주석 처리되어 있습니다. 이 코드가 더 이상 필요하지 않다면 제거하여 코드베이스를 깔끔하게 유지하세요.
🔎 수정 제안
- {/* {previewMedia.length > 0 && ( */} <BackgroundImageSlider mediaUrls={previewMedia} gradient={{ top: 120 * height, bottom: 420 * height }} /> - {/* )} */}components/common/Toggle.tsx (2)
16-29: useNativeDriver 성능 최적화 고려backgroundColor는 Native Driver에서 지원하지 않아
useNativeDriver: false를 사용한 것은 이해됩니다. 다만 다음 사항들을 고려해주세요:
의존성 배열에서 anim 제거: Line 29의 의존성 배열에서
anim은 제거해도 됩니다.anim은 ref로 관리되며 변경되지 않으므로 불필요한 의존성입니다.성능 고려사항: backgroundColor 애니메이션으로 인해 JS 스레드에서 실행되지만, 토글과 같은 작은 컴포넌트에서는 큰 성능 문제가 발생하지 않을 것으로 예상됩니다.
🔎 의존성 배열 최적화
- }, [isOn, anim]); + }, [isOn]);
31-34: 매직 넘버 상수화 권장
15 * width값이 하드코딩되어 있습니다. 이 값은 Thumb의 이동 거리를 나타내는데, 코드 가독성과 유지보수성을 위해 상수로 추출하는 것을 권장합니다.🔎 상수 추출 제안
+const THUMB_TRAVEL_DISTANCE = 15; + export default function Toggle({ isOn, onToggle }: ToggleProps) { const anim = useRef(new Animated.Value(isOn ? 1 : 0)).current; const isFirstRender = useRef(true); // ... useEffect ... const translateX = anim.interpolate({ inputRange: [0, 1], - outputRange: [0, 15 * width], // Thumb 이동 거리 + outputRange: [0, THUMB_TRAVEL_DISTANCE * width], });components/Modal/UserListModal.tsx (2)
49-60: 애니메이션 duration 불일치닫힘 애니메이션에서 fadeAnim의 duration은 300ms(Line 52)인데 slideAnim의 duration은 350ms(Line 57)입니다. 이러한 타이밍 불일치는 다음을 유발할 수 있습니다:
- 비자연스러운 애니메이션: 배경이 먼저 사라지고 모달이 나중에 사라지는 시각적 불일치
- 의도하지 않은 동작: 애니메이션 완료 시점이 명확하지 않음
일관된 사용자 경험을 위해 두 애니메이션의 duration을 동일하게 맞추는 것을 권장합니다.
🔎 duration 통일 제안
Animated.parallel([ Animated.timing(fadeAnim, { toValue: 0, - duration: 300, + duration: 350, useNativeDriver: true, }), Animated.timing(slideAnim, { toValue: 500, duration: 350, useNativeDriver: true, }), ]).start();
65-70: Modal의 key prop 제거 권장Line 66의
key={visible ? 'open' : 'closed'}는 불필요합니다. React Native의 Modal 컴포넌트는visibleprop으로 상태를 관리하며, key prop이 컴포넌트의 라이프사이클을 제어하지 않습니다. 닫힘 애니메이션(Lines 49-60)은 useEffect에서 visible 변경 시 정상 실행됩니다. 다른 Modal 컴포넌트들(예: TextInputModal)과 일관성 있게 key prop을 제거하는 것을 권장합니다.<Modal - key={visible ? 'open' : 'closed'} visible={visible} transparent animationType="none" >
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (13)
app/(post)/feed/write.tsxapp/(post)/leenk/[id]/index.tsxapp/account/notification-list.tsxapp/account/setting/notifications.tsxcomponents/Modal/NotificationModal.tsxcomponents/Modal/UserListModal.tsxcomponents/common/Header/KebabButton.tsxcomponents/common/ImagePicker.tsxcomponents/common/Toggle.tsxcomponents/feed/FeedDetailItem.tsxcomponents/feed/GradientOverlay.tsxhooks/useFeedDetailNavigation.tsios/Leenk.xcodeproj/project.pbxproj
🧰 Additional context used
🧠 Learnings (11)
📓 Common learnings
Learnt from: JIN921
Repo: Leets-Makers/Leenk-MOBILE PR: 23
File: components/SelectProfileImage.tsx:25-50
Timestamp: 2025-07-07T03:15:53.920Z
Learning: Leenk MOBILE 프로젝트에서는 대규모 기능 개선 시 범위를 나누어 우선순위가 높은 안전성 개선사항은 즉시 적용하고, 로딩 상태 관리와 같은 UX 개선사항은 별도 이슈로 분리하여 관리하는 접근 방식을 선호한다.
Learnt from: dalzzy
Repo: Leets-Makers/Leenk-MOBILE PR: 21
File: package.json:0-0
Timestamp: 2025-07-02T12:27:28.491Z
Learning: dalzzy prefers to uninstall unused libraries rather than fixing version compatibility issues. When a dependency is not actually used in the code, they remove it entirely instead of maintaining it.
📚 Learning: 2025-08-25T06:47:16.914Z
Learnt from: JIN921
Repo: Leets-Makers/Leenk-MOBILE PR: 46
File: components/leenk/LeenkImagePicker.tsx:31-36
Timestamp: 2025-08-25T06:47:16.914Z
Learning: In components/leenk/LeenkImagePicker.tsx, the defaultSvgs array order ([LeenkImg03, LeenkImg02, LeenkImg01, LeenkImg04, LeenkImg05]) is intentionally arranged to match the desired mapping with LEENK_DEFAULT_IMAGE_URLS, not an error that needs fixing.
Applied to files:
components/common/ImagePicker.tsx
📚 Learning: 2025-08-15T13:18:06.202Z
Learnt from: dalzzy
Repo: Leets-Makers/Leenk-MOBILE PR: 41
File: components/feed/FeedDetailItem.tsx:233-237
Timestamp: 2025-08-15T13:18:06.202Z
Learning: Leenk MOBILE 프로젝트의 components/feed/FeedDetailItem.tsx 파일은 현재 사용하지 않는 파일이다.
Applied to files:
components/feed/FeedDetailItem.tsxapp/(post)/leenk/[id]/index.tsx
📚 Learning: 2025-08-09T13:35:33.951Z
Learnt from: JIN921
Repo: Leets-Makers/Leenk-MOBILE PR: 39
File: app/(post)/feed.tsx:119-121
Timestamp: 2025-08-09T13:35:33.951Z
Learning: Leenk MOBILE 프로젝트의 일부 PopupModal에서는 디자인 요구사항에 따라 의도적으로 왼쪽=확인, 오른쪽=취소로 버튼 매핑을 반대로 설정할 수 있다. 특히 app/(post)/feed.tsx의 글 작성 취소 확인 모달은 이러한 의도적인 디자인이 적용되어 있다.
Applied to files:
components/feed/FeedDetailItem.tsx
📚 Learning: 2025-07-07T03:13:08.440Z
Learnt from: JIN921
Repo: Leets-Makers/Leenk-MOBILE PR: 23
File: app/(page)/mypage.tsx:18-26
Timestamp: 2025-07-07T03:13:08.440Z
Learning: Leenk MOBILE 프로젝트에서 useFocusEffect 내에서 API 재시도 시 에러 상태 체크(!error)를 제거하면 지속적인 에러 발생 시 무한 요청이 발생하는 문제가 있다. 따라서 에러가 없을 때만 refetch를 호출하는 현재 구현이 올바른 방법이다.
Applied to files:
hooks/useFeedDetailNavigation.tsapp/(post)/leenk/[id]/index.tsx
📚 Learning: 2025-07-11T09:15:26.964Z
Learnt from: dalzzy
Repo: Leets-Makers/Leenk-MOBILE PR: 27
File: ios/Leenk.xcodeproj/project.pbxproj:285-306
Timestamp: 2025-07-11T09:15:26.964Z
Learning: dalzzy prefers to prioritize feature implementation over build optimization tasks when they cause build errors. They reverted changes to avoid syntax errors in Xcode project files and questioned whether Dev bundle removal from Release builds is necessary.
Applied to files:
ios/Leenk.xcodeproj/project.pbxproj
📚 Learning: 2025-08-26T13:53:25.049Z
Learnt from: JIN921
Repo: Leets-Makers/Leenk-MOBILE PR: 47
File: components/leenk/LeenkDetailModals.tsx:126-129
Timestamp: 2025-08-26T13:53:25.049Z
Learning: In the Leenk mobile app, router.push('/(post)/feed') should be kept as-is rather than simplified to '/feed' because the developer has confirmed that removing the group segment breaks their intended routing behavior.
Applied to files:
app/account/notification-list.tsx
📚 Learning: 2025-06-18T10:13:13.855Z
Learnt from: dalzzy
Repo: Leets-Makers/Leenk-MOBILE PR: 7
File: components/common/Textarea.tsx:70-0
Timestamp: 2025-06-18T10:13:13.855Z
Learning: styled-components/native automatically converts CSS property names (kebab-case) to React Native style keys (camelCase). For example, `min-height` becomes `minHeight` and `text-align-vertical` becomes `textAlignVertical`. This allows developers to use familiar CSS syntax while working with React Native components.
Applied to files:
components/Modal/NotificationModal.tsx
📚 Learning: 2025-08-09T13:38:34.382Z
Learnt from: JIN921
Repo: Leets-Makers/Leenk-MOBILE PR: 39
File: app/(post)/leenk/[id]/index.tsx:37-37
Timestamp: 2025-08-09T13:38:34.382Z
Learning: Leenk MOBILE 프로젝트의 app/(post)/leenk/[id]/index.tsx 파일에서 `isAuthor` 값은 UI 개발 단계에서 의도적으로 하드코딩되어 있으며, API 연결 시점에 동적으로 계산하도록 수정될 예정이다.
Applied to files:
app/(post)/leenk/[id]/index.tsx
📚 Learning: 2025-08-26T09:12:36.353Z
Learnt from: JIN921
Repo: Leets-Makers/Leenk-MOBILE PR: 47
File: types/notification.ts:14-19
Timestamp: 2025-08-26T09:12:36.353Z
Learning: types/notification.ts의 LeenkDetail 인터페이스는 백엔드 알림 API에서 제공하는 구조를 그대로 따르고 있으며, types/leenk.ts의 LeenkDetail과는 다른 엔드포인트에서 오는 별개의 타입이다. 필드명이 다른 것은 정상이며 클라이언트에서 임의로 변경하면 안 된다.
Applied to files:
app/(post)/leenk/[id]/index.tsx
📚 Learning: 2025-08-09T13:49:06.672Z
Learnt from: JIN921
Repo: Leets-Makers/Leenk-MOBILE PR: 39
File: components/leenk/LeenkDetailBottomButton.tsx:15-20
Timestamp: 2025-08-09T13:49:06.672Z
Learning: Leenk MOBILE 프로젝트의 components/leenk/LeenkDetailBottomButton.tsx 파일에서 `onEalryClose` prop은 UI 개발 단계에서 의도적으로 정의만 되어있고 사용되지 않으며, API 연결 시점에 사용될 예정이다. 단, 철자 오류(onEalryClose → onEarlyClose)는 수정이 필요하다.
Applied to files:
app/(post)/leenk/[id]/index.tsx
🧬 Code graph analysis (5)
components/common/ImagePicker.tsx (1)
theme/globalStyles.ts (1)
height(14-14)
components/common/Toggle.tsx (2)
components/index.tsx (1)
Toggle(34-34)theme/globalStyles.ts (1)
height(14-14)
app/(post)/feed/write.tsx (2)
types/feed.ts (1)
Media(15-19)components/feed/BackgroundImageSlider.tsx (1)
BackgroundImageSlider(23-90)
hooks/useFeedDetailNavigation.ts (1)
stores/toastStore.ts (1)
useToastStore(13-25)
components/Modal/NotificationModal.tsx (3)
components/NotificationListItem.tsx (1)
SubText(332-338)components/common/Input.tsx (1)
Title(71-75)theme/globalStyles.ts (1)
height(14-14)
🔇 Additional comments (18)
components/feed/GradientOverlay.tsx (1)
41-42: LGTM!
locationsprop에 대한 기본값 처리가 깔끔하게 구현되었습니다. nullish coalescing 연산자를 사용하여 명확하게 기본값을 설정하고, 50번 라인에서 올바르게 사용하고 있습니다.Also applies to: 50-50
components/common/Header/KebabButton.tsx (1)
17-20: 터치 영역 확대 개선 사항이 좋습니다!
hitSlop추가로 케밥 메뉴 버튼의 터치 영역이 16px씩 확장되어 모바일 환경에서 사용성이 크게 향상됩니다. 작은 아이콘 버튼에 적합한 개선사항입니다.ios/Leenk.xcodeproj/project.pbxproj (1)
471-474: Release 빌드에서도 Manual 서명 방식으로 변경되었습니다.Debug와 동일하게 Release 빌드 설정도 Manual 서명으로 변경되었습니다. Release 빌드의 경우 특히 다음 사항들을 확인해주세요:
- App Store 배포를 위한 Distribution 프로비저닝 프로파일 설정
- TestFlight 배포 시 서명 설정이 올바른지 확인
- 현재 "leenk-dev-profile"이 Development 프로파일인 것으로 보이는데, Release 빌드에도 동일한 프로파일을 사용하는 것이 의도된 것인지 확인 필요
app/account/setting/notifications.tsx (1)
11-11: 햅틱 피드백 추가가 적절합니다.알림 토글 상호작용에 햅틱 피드백을 추가하여 사용자 경험이 개선되었습니다. Soft impact는 일반 토글에, Error notification은 실패 시에 사용되어 적절합니다.
Also applies to: 61-62, 73-73
components/common/ImagePicker.tsx (1)
104-108: 로딩 컴포넌트 스타일링이 적절합니다.갤러리 이미지 로드 시 로딩 컴포넌트의 위치와 정렬을 개선하여 더 나은 사용자 경험을 제공합니다.
app/(post)/leenk/[id]/index.tsx (2)
90-102: 삭제된 링크 처리가 적절합니다.404 에러 발생 시 사용자에게 명확한 피드백을 제공하고 900ms 후 뒤로 이동하여 메시지를 읽을 시간을 줍니다. early return을 통해 추가 처리를 방지하는 것도 좋습니다.
203-203: 라우팅 경로가 올바릅니다.그룹 세그먼트
(page)를 포함한 경로는 프로젝트의 라우팅 구조에 맞게 의도적으로 설정된 것입니다.components/feed/FeedDetailItem.tsx (1)
44-45: 삭제 모달 처리 개선이 적절합니다.
payload.feedId를 체크하여 정확한 피드에만 삭제 확인 모달이 표시되도록 개선되었습니다. 이는 다중 피드 컨텍스트에서 발생할 수 있는 버그를 방지합니다.Also applies to: 112-113, 242-242
app/(post)/feed/write.tsx (2)
95-101: 미디어 필터링이 안전합니다.빈
mediaUrl을 필터링하여BackgroundImageSlider에 유효한 미디어만 전달하도록 개선되었습니다. 방어적 프로그래밍으로 런타임 에러를 방지합니다.
226-235: 키보드 오버레이 추가가 적절합니다.키보드 활성화 시 뒷배경에 반투명 오버레이를 추가하여 피드 작성 시 집중도를 높였습니다.
pointerEvents="none"으로 터치 이벤트를 차단하지 않는 것도 좋습니다.hooks/useFeedDetailNavigation.ts (1)
6-6: 삭제된 피드 처리가 일관적입니다.링크 상세 페이지와 동일한 패턴으로 404 에러를 처리하여 사용자에게 일관된 경험을 제공합니다. 토스트 메시지 표시 후 지연된 뒤로가기 처리가 적절합니다.
Also applies to: 28-28, 70-80
components/Modal/NotificationModal.tsx (3)
40-40: 스크롤 조건 개선이 적절합니다.알림 항목이 4개 이상일 때 스크롤을 활성화하도록 변경하여 더 일찍 스크롤 가능하게 함으로써 사용자 경험이 개선되었습니다.
72-73: 알림 항목 렌더링 개선이 적절합니다.FeedFirstReaction에서 내용(
body)을 먼저 표시하고, NewLeenkParticipantDetails에서 참가자 이름에 다른 스타일을 적용하여 가독성이 향상되었습니다.Also applies to: 107-107
173-175: 스타일링 개선이 적절합니다.
ContentContainer에 flex 레이아웃과 gap을 추가하여 일관된 간격을 제공하고,StyledTitle컴포넌트로 텍스트 스타일을 세밀하게 제어할 수 있게 되었습니다.Also applies to: 189-191
components/common/Toggle.tsx (1)
13-22: 초기 렌더링 애니메이션 스킵 로직 승인isFirstRender를 사용하여 최초 진입 시 애니메이션을 건너뛰는 구현이 훌륭합니다. 이는 사용자 경험을 개선하는 좋은 패턴입니다.
components/Modal/UserListModal.tsx (3)
75-79: pointerEvents 동작 확인 필요Line 78의
pointerEvents="box-none"은 KeyboardAvoidingView 자체는 터치를 받지 않지만 자식 요소는 터치를 받도록 설정합니다. 이 설정이 의도한 대로 동작하는지 확인이 필요합니다:
- 배경 클릭: Line 72의 Pressable이 여전히 onClose를 호출하는지
- 모달 상호작용: 모달 내부의 모든 터치 이벤트가 정상적으로 동작하는지
다양한 시나리오에서 터치 이벤트가 의도대로 동작하는지 테스트해주세요:
- 배경 클릭 시 모달 닫힘
- 모달 내부 스크롤 및 버튼 클릭
- 키보드가 활성화된 상태에서의 상호작용
32-47: 애니메이션 효과가 우수함Animated.parallel을 사용하여 배경 페이드와 모달 슬라이드를 동시에 실행하고, spring 애니메이션으로 자연스러운 바운스 효과를 구현한 것이 훌륭합니다. useNativeDriver: true를 사용하여 성능도 최적화되었습니다.
105-112: AnimatedBackdrop 분리가 깔끔함배경 애니메이션을 별도의 컴포넌트로 분리하여 코드 가독성과 유지보수성이 향상되었습니다.
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
🧹 Nitpick comments (3)
ios/Leenk.xcodeproj/project.pbxproj (2)
563-566: OTHER_LDFLAGS에 불필요한 공백 엔트리 포함
OTHER_LDFLAGS배열에 공백 문자열" "가 포함되어 있습니다. 이 엔트리는 링커에 실질적인 영향을 주지 않지만 불필요합니다.pod install또는 Xcode에 의해 자동 생성된 것일 수 있으니, 의도적인 변경인지 확인해주세요.🔎 불필요한 엔트리 제거 제안
OTHER_LDFLAGS = ( "$(inherited)", - " ", );
632-635: Release 구성에도 동일한 불필요한 공백 엔트리 존재Debug 구성과 동일하게 불필요한 공백 엔트리가 포함되어 있습니다. 정리가 필요하다면 Debug와 함께 제거해주세요.
🔎 불필요한 엔트리 제거 제안
OTHER_LDFLAGS = ( "$(inherited)", - " ", );app/(post)/leenk/[id]/index.tsx (1)
90-102: 삭제된 링크 처리 로직이 잘 구현되었습니다.404 에러에 대한 토스트 메시지와 지연 후 뒤로가기 처리가 적절합니다. 한 가지 개선 제안:
- 매직 넘버
900을 상수로 추출하면 의도가 더 명확해집니다.🔎 상수 추출 제안
+const TOAST_DELAY_MS = 900; + // ... 컴포넌트 내부 if (e?.response?.status === 404) { showToast('삭제된 링크야!', 'error'); setTimeout(() => { router.back(); - }, 900); + }, TOAST_DELAY_MS); return; }
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (2)
ios/Podfile.lockis excluded by!**/*.lockpackage-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (7)
app/(post)/feed/write.tsxapp/(post)/leenk/[id]/index.tsxapp/signup/terms.tsxcomponents/leenk/LeenkDetailContent.tsxcomponents/mypage/MypageButton.tsxios/Leenk.xcodeproj/project.pbxprojpackage.json
💤 Files with no reviewable changes (1)
- components/mypage/MypageButton.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
- app/(post)/feed/write.tsx
🧰 Additional context used
🧠 Learnings (8)
📓 Common learnings
Learnt from: JIN921
Repo: Leets-Makers/Leenk-MOBILE PR: 23
File: components/SelectProfileImage.tsx:25-50
Timestamp: 2025-07-07T03:15:53.920Z
Learning: Leenk MOBILE 프로젝트에서는 대규모 기능 개선 시 범위를 나누어 우선순위가 높은 안전성 개선사항은 즉시 적용하고, 로딩 상태 관리와 같은 UX 개선사항은 별도 이슈로 분리하여 관리하는 접근 방식을 선호한다.
Learnt from: dalzzy
Repo: Leets-Makers/Leenk-MOBILE PR: 21
File: package.json:0-0
Timestamp: 2025-07-02T12:27:28.491Z
Learning: dalzzy prefers to uninstall unused libraries rather than fixing version compatibility issues. When a dependency is not actually used in the code, they remove it entirely instead of maintaining it.
📚 Learning: 2025-08-28T14:14:39.780Z
Learnt from: JIN921
Repo: Leets-Makers/Leenk-MOBILE PR: 51
File: components/leenk/LeenkDetailContent.tsx:54-58
Timestamp: 2025-08-28T14:14:39.780Z
Learning: Leenk MOBILE 프로젝트의 components/leenk/LeenkDetailContent.tsx 파일에서 `onShare` prop과 `ShareButton` 컴포넌트는 UI 개발 단계에서 의도적으로 정의만 되어있고 사용되지 않으며, 나중에 공유 기능 구현 시점에 연결될 예정이다.
Applied to files:
app/(post)/leenk/[id]/index.tsxcomponents/leenk/LeenkDetailContent.tsx
📚 Learning: 2025-08-09T13:38:34.382Z
Learnt from: JIN921
Repo: Leets-Makers/Leenk-MOBILE PR: 39
File: app/(post)/leenk/[id]/index.tsx:37-37
Timestamp: 2025-08-09T13:38:34.382Z
Learning: Leenk MOBILE 프로젝트의 app/(post)/leenk/[id]/index.tsx 파일에서 `isAuthor` 값은 UI 개발 단계에서 의도적으로 하드코딩되어 있으며, API 연결 시점에 동적으로 계산하도록 수정될 예정이다.
Applied to files:
app/(post)/leenk/[id]/index.tsxcomponents/leenk/LeenkDetailContent.tsx
📚 Learning: 2025-08-15T13:18:06.202Z
Learnt from: dalzzy
Repo: Leets-Makers/Leenk-MOBILE PR: 41
File: components/feed/FeedDetailItem.tsx:233-237
Timestamp: 2025-08-15T13:18:06.202Z
Learning: Leenk MOBILE 프로젝트의 components/feed/FeedDetailItem.tsx 파일은 현재 사용하지 않는 파일이다.
Applied to files:
app/(post)/leenk/[id]/index.tsxcomponents/leenk/LeenkDetailContent.tsx
📚 Learning: 2025-08-09T13:49:06.672Z
Learnt from: JIN921
Repo: Leets-Makers/Leenk-MOBILE PR: 39
File: components/leenk/LeenkDetailBottomButton.tsx:15-20
Timestamp: 2025-08-09T13:49:06.672Z
Learning: Leenk MOBILE 프로젝트의 components/leenk/LeenkDetailBottomButton.tsx 파일에서 `onEalryClose` prop은 UI 개발 단계에서 의도적으로 정의만 되어있고 사용되지 않으며, API 연결 시점에 사용될 예정이다. 단, 철자 오류(onEalryClose → onEarlyClose)는 수정이 필요하다.
Applied to files:
app/(post)/leenk/[id]/index.tsxcomponents/leenk/LeenkDetailContent.tsx
📚 Learning: 2025-08-26T09:12:36.353Z
Learnt from: JIN921
Repo: Leets-Makers/Leenk-MOBILE PR: 47
File: types/notification.ts:14-19
Timestamp: 2025-08-26T09:12:36.353Z
Learning: types/notification.ts의 LeenkDetail 인터페이스는 백엔드 알림 API에서 제공하는 구조를 그대로 따르고 있으며, types/leenk.ts의 LeenkDetail과는 다른 엔드포인트에서 오는 별개의 타입이다. 필드명이 다른 것은 정상이며 클라이언트에서 임의로 변경하면 안 된다.
Applied to files:
app/(post)/leenk/[id]/index.tsx
📚 Learning: 2025-08-09T13:35:33.951Z
Learnt from: JIN921
Repo: Leets-Makers/Leenk-MOBILE PR: 39
File: app/(post)/feed.tsx:119-121
Timestamp: 2025-08-09T13:35:33.951Z
Learning: Leenk MOBILE 프로젝트의 일부 PopupModal에서는 디자인 요구사항에 따라 의도적으로 왼쪽=확인, 오른쪽=취소로 버튼 매핑을 반대로 설정할 수 있다. 특히 app/(post)/feed.tsx의 글 작성 취소 확인 모달은 이러한 의도적인 디자인이 적용되어 있다.
Applied to files:
app/signup/terms.tsx
📚 Learning: 2025-07-11T09:15:26.964Z
Learnt from: dalzzy
Repo: Leets-Makers/Leenk-MOBILE PR: 27
File: ios/Leenk.xcodeproj/project.pbxproj:285-306
Timestamp: 2025-07-11T09:15:26.964Z
Learning: dalzzy prefers to prioritize feature implementation over build optimization tasks when they cause build errors. They reverted changes to avoid syntax errors in Xcode project files and questioned whether Dev bundle removal from Release builds is necessary.
Applied to files:
ios/Leenk.xcodeproj/project.pbxproj
🧬 Code graph analysis (2)
components/leenk/LeenkDetailContent.tsx (1)
utils/format-date.ts (1)
formatRelativeTime(27-29)
app/signup/terms.tsx (1)
assets/index.tsx (1)
RightArrowIcon(79-79)
🔇 Additional comments (10)
ios/Leenk.xcodeproj/project.pbxproj (3)
176-176: DevelopmentTeam 설정 확인 완료PBXProject TargetAttributes에 DevelopmentTeam이 올바르게 설정되어 있습니다. Debug/Release 구성의 설정과 일관성이 유지됩니다.
428-429: LGTM - 서명 설정이 적절합니다시뮬레이터(기본값)와 실제 기기(
iphoneos*SDK)에 대한 개발팀 분리 설정이 적절합니다.CODE_SIGN_STYLE = Automatic과 함께 올바르게 구성되어 있습니다.
471-472: Release 구성 서명 설정 확인 완료Debug 구성과 동일하게 설정되어 일관성이 유지됩니다.
app/signup/terms.tsx (1)
87-87: LGTM!
RightArrowIcon에 명시적인stroke색상 지정으로 UI 일관성이 향상되었습니다.colors.gray[400]사용으로 테마 시스템과 일관성을 유지합니다.Also applies to: 95-95
components/leenk/LeenkDetailContent.tsx (2)
58-60: 공유 기능이 구현되었는데 ShareButton이 주석 처리되어 있습니다.
app/(post)/leenk/[id]/index.tsx에서handleShare함수와react-native-share통합이 완료되었고,onShareprop도 전달되고 있습니다. ShareButton 주석을 해제하여 공유 기능을 활성화해야 하지 않을까요?또한 현재
ShareIconimport (line 7)와ShareButtonstyled component (lines 128-138)가 사용되지 않고 있습니다. 의도적으로 비활성화한 것이라면 주석으로 이유를 남기거나, 활성화할 계획이라면 주석을 해제하는 것이 좋겠습니다.
73-73: LGTM!작성자 이름과 상대 시간 표시가 더 간결하게 단순화되었습니다.
formatRelativeTime함수 활용이 적절합니다.app/(post)/leenk/[id]/index.tsx (3)
15-15: LGTM!
react-native-share로의 전환이 적절합니다. 이 라이브러리는 더 많은 공유 옵션과 플랫폼별 커스터마이징을 제공합니다.
284-303: 공유 기능 리팩토링이 잘 되었습니다.
react-native-share의Share.open()사용과 에러 처리가 적절합니다:
- 사용자 취소 시 조용히 종료
- 실제 에러 시 클립보드 복사 폴백
다만,
shareOptions에서url이 Android에서는 무시될 수 있습니다.react-native-share는 플랫폼별로 동작이 다르므로 테스트가 필요합니다.
203-203: 라우트 경로 변경 확인됨 - 올바른 라우팅
'/(page)/leenk'경로는 프로젝트의app/(page)/leenk.tsx파일에 해당하는 유효한 라우트입니다. 이 경로 변경은 올바릅니다.package.json (1)
77-77: react-native-share 의존성 추가 확인됨
react-native-share12.2.1이 app/(post)/leenk/[id]/index.tsx에서 실제로 사용되고 있으며(Share.open() 호출), 공유 기능 리팩토링에 부합합니다. 이 라이브러리는 React Native 기본 Share API보다 더 많은 플랫폼별 공유 옵션을 제공합니다.
nabbang6
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.
확인했습니다 !!! 고생하셨어요~! bb
📝 Work Description
등,, QA + 자잘한 수정사항들을 반영했습니다
📸 Screenshot
🚨Issue
📣 To Reviewers
react-native-share 관련 공유하기 기능 코드는 일단 그냥 무시하셔도 됩니당,,
링크 상세페이지에서 공유하기 기능 다시 구현해보다가 좀 더 찾아보고 이슈 따로 파서 작업하는 게 좋을 것 같애서 놔뒀어욤
✅ Check List
Summary by CodeRabbit
릴리스 노트
새로운 기능
버그 수정
스타일
✏️ Tip: You can customize this high-level summary in your review settings.