-
Notifications
You must be signed in to change notification settings - Fork 2
develop <- native #179
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
develop <- native #179
Conversation
…eamline the component structure
…olor, improve text handling, and optimize layout management for better performance
…improve API request structure
…nt to streamline functionality
…mproving button opacity based on scroll position
…amline functionality
…ok to streamline scrap creation process
…pdown component for improved image organization
…oltip handling and styling options
…ure proper image display
…ith tooltip and name editing functionality
…ve project structure
…on and visual feedback
…d color and border radius for better styling
…tip, FolderScrapScreen, and ScrapScreen to improve state management
…r constant for consistency in styling
…onents with highlighted text support
…proved readability
…, and ScrapDetailScreen for improved UI consistency and visual appeal
…riptions, and update file references in schema
…r conditional chevron display
…nd improved notification handling
…edback, notification settings, phone verification, terms, and withdrawal screens
…mageModal with refetch on visibility
…rScrapScreen to use 'DATE' and 'DESC'
…nd update FolderScrapScreen accordingly
…ameters and adjust ScrapItemTooltip component accordingly
…dling and conditionally render FilterBar
Fix/native/qa/#173
- Add types.ts with event types, screen names, and button IDs - Add client.ts for API communication with error handling - Add queue.ts with batching, persistence, and retry logic - Add tracker.ts for event validation and session management - Add index.ts as public singleton API
- Add AnalyticsProvider for lifecycle management (session start/end, app state) - Add TrackedAnimatedPressable wrapper for button click tracking - Export components from analytics module
- Add useScreenTracking hook for automatic screen tracking - Map navigation routes to analytics screen names - Track SCREEN_ENTER and SCREEN_EXIT with dwellTimeMs - Wrap App with AnalyticsProvider - Add onStateChange and onReady to NavigationContainer
- Add buttonId, buttonLabel, screenName props to BottomActionBar.Button - Add buttonId, buttonLabel, screenName props to TextButton - Track BUTTON_CLICK when buttonId is provided
…able - ProblemSet: add start_study tracking to main button and TextButton - PointingScreen: add tracking for scrap, confirm/reject pointing, next_problem - AnalysisScreen: add tracking for problem, reading tip, one step more scrap - AllPointingsScreen: add tracking for problem and pointing scrap - MessageInput: add tracking for send_message and upload_image buttons
- Log event enqueue with event type and metadata - Log queue size and threshold status - Log flush lifecycle (before/after queue state) - Log batch sending details (events in batch) - Log API request/response status - Log screen changes
- Add clearQueue function to queue, tracker, and public API - Add version-based migration to clear old events on app start - Bump CURRENT_ANALYTICS_VERSION to 2 to trigger migration
…dent only - Move src/analytics/ to src/features/student/analytics/ - Remove AnalyticsProvider from App.tsx (global scope) - Add AnalyticsProvider to StudentNavigator (student scope only) - Refactor useScreenTracking to use useNavigationState hook - Update all import paths to new location - Analytics now only initializes and tracks within student screens
…data in MyInfoScreen
… provide user feedback
…nput handling in EditPhoneNumberScreen
…nting number for accurate mapping
[Feat/native/#175] Analytics API 부착
…roved visual consistency during selection state
[Refactor/native/#155] 4차(최종)
Fix/native qa 173
…layout in IdentityStep for better alignment
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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.
Cursor Bugbot has reviewed your changes and found 8 potential issues.
Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.
This is the final PR Bugbot will review for you during this billing cycle
Your free Bugbot reviews will reset on February 23
Details
Your team is on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle for each member of your team.
To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.
|
|
||
| type PasswordResetDTOResetPasswordRequest = | ||
| components['schemas']['PasswordResetDTO.ResetPasswordRequest']; | ||
| const postPasswordResetVerifyCode = async (data: PasswordResetDTOResetPasswordRequest) => { |
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.
Wrong type used for password reset verify-code endpoint
High Severity
The postPasswordResetVerifyCode function uses PasswordResetDTO.ResetPasswordRequest type, which requires email, code, and newPassword fields. However, the verify-code endpoint only needs email and code. The schema defines a separate PasswordResetDTO.VerifyCodeRequest type that matches the expected fields. This type mismatch will cause TypeScript to require a newPassword field that shouldn't be sent to this endpoint, or lead to runtime API errors if the wrong data structure is sent.
| case 'text': | ||
| default: | ||
| return <p className='text-sm whitespace-pre-wrap text-gray-900'>{content}</p>; | ||
| return <p className='text-sm break-all text-gray-900'>{content}</p>; |
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.
CSS change removes whitespace preservation in chat messages
Medium Severity
Replacing whitespace-pre-wrap with break-all removes whitespace and newline preservation for text messages. In a QnA/chat context, user-entered line breaks and intentional spacing will no longer be displayed correctly. whitespace-pre-wrap preserves formatting while break-all only controls word breaking behavior without preserving whitespace sequences.
| runOnJS(onAnimationFinish)(); | ||
| } | ||
| }); | ||
| }); |
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.
Missing error handler leaves app stuck on splash screen
Medium Severity
SplashScreen.hideAsync() is called with .then() but no .catch() handler. If hideAsync() rejects, the fade-out animation never starts, onAnimationFinish is never called, and the splash screen (positioned absolute z-50 covering the full screen) remains visible indefinitely. Since isAnimationStarted is set to true before the async call, retries are also blocked. The app appears frozen with no way for the user to recover except force-quitting.
| @@ -0,0 +1,18 @@ | |||
| import { client, TanstackQueryClient } from '@/apis/client'; | |||
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.
| const iosGoogleServicesFile = process.env.IOS_GOOGLE_SERVICES_PLIST || './GoogleService-Info.plist'; | ||
|
|
||
| const isDev = | ||
| process.env.APP_VARIANT === 'development' || process.env.EAS_BUILD_PROFILE === 'development'; |
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.
| }); | ||
| }; | ||
|
|
||
| export default postSignUpLocal; |
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.
Duplicate and unused postSignUpLocal function
Medium Severity
postSignUpLocal duplicates postEmailSignup - both call the same endpoint /api/student/auth/signup/local with the same request type StudentSignupReq. Additionally, postSignUpLocal is exported but never imported or used anywhere in the codebase. This creates maintenance burden and confusion about which function to use.
| }; | ||
|
|
||
| export default useSubscribeQnaList; | ||
| export type { ConnectionStatus, ReconnectConfig, QnAListEvent }; |
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.
Massive code duplication in SSE subscription hooks
Medium Severity
useGetSubscribeQnaList.ts (373 lines) duplicates nearly all logic from useGetSubscribeQna.ts (409 lines). Both share identical: ConnectionStatus type, ReconnectConfig type, DEFAULT_RECONNECT_CONFIG, exponential backoff logic, timer management, heartbeat timeout handling, app state change handling, network state handling, and connection lifecycle. Only the URL endpoint and event types differ. This should be refactored into a shared base SSE hook.
Additional Locations (1)
| } from 'lucide-react-native'; | ||
| import { AnimatedPressable, Container } from '@components/common'; | ||
| import useEmailAuth, { | ||
| type EmailAuthStep, |
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.
Note
High Risk
High risk due to major native app configuration changes (Firebase/Kakao/Google/Apple, package ID, EAS/Metro) plus new authentication flows and token handling; these can impact login stability, builds, and push/deeplink behavior.
Overview
Adds new native authentication flows: provider-based OAuth on-device (Apple/Google/Kakao) plus email login/signup/password reset via a new bottom sheet UI and hooks, replacing the prior web-based social login/callback approach.
Updates the native app’s infrastructure and configuration for production builds: introduces EAS config, Metro monorepo resolution tweaks, Firebase/notifications setup (including a custom Expo config plugin to patch iOS Podfile modular headers), Kakao SDK init, splash screen overlay, deep-link handling, and additional dependencies; also refactors multiple API controllers (new/typed endpoints, new QnA list SSE subscription + read-status dedupe, upload size limit enforcement, and broader query invalidation helpers) and adds a reusable
AnimatedPressablewith optional analytics tracking.Written by Cursor Bugbot for commit 1c526ea. This will update automatically on new commits. Configure here.