Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📝 WalkthroughWalkthrough학생 선택 기능을 추가하고 (MultiSelectInput), 강의 편집 시 등록된 학생 정보를 조회하여 폼에 기본값으로 설정하며, 학생 프로필에 이메일 공유 기능을 구현하고, 라우팅 시 페이지를 최상단으로 스크롤하는 기능을 추가했습니다. Changes
Sequence DiagramsequenceDiagram
participant User
participant LandingPage
participant useUserStore
participant Router as react-router-dom
User->>LandingPage: 페이지 방문
LandingPage->>useUserStore: isAuthenticated, userType 읽기
alt 인증됨 (isAuthenticated === true)
alt userType === 'admin'
LandingPage->>Router: navigate(ROUTES.ADMIN.ROOT, { replace: true })
Router->>User: 관리자 대시보드로 이동
else userType === 'student'
LandingPage->>Router: navigate(ROUTES.STUDENT.ROOT, { replace: true })
Router->>User: 학생 대시보드로 이동
end
else 미인증
User->>LandingPage: 페이지 상호작용 (hover, click)
LandingPage->>Router: navigate(ROUTES.USER_ID, { state: { type: 'admin'/'student' } })
Router->>User: 로그인 페이지로 이동
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~35 minutes Possibly related PRs
Suggested labels
Suggested reviewers
상세 리뷰 의견✨ 좋은 점MultiSelectInput 컴포넌트: 태그 기반의 직관적인 다중 선택 UI로, Enter/공백/쉼표로 태그 추가하고 중복 방지 로직이 잘 구현되어 있습니다. 다만 IME 컴포지션 상태 처리가 있어 한글 입력 환경도 대응했네요. 👍 LandingPage 인증 리다이렉트: useEffect에서 인증 상태를 확인하고 사용자 타입별로 적절한 대시보드로 자동 이동하는 흐름이 깔끔합니다. 🔍 개선 제안1. CourseForm의 학생 선택 로직 검증 // src/widgets/course-form/ui/CourseForm.tsx
<Controller
control={control}
name="students"
render={({ field, fieldState }) => (
<MultiSelectInput
value={field.value || []}
onChange={field.onChange}
errorMessage={fieldState.error?.message}
/>
)}
/>
2. StudentProfile의 이메일 공유 기능 const sendEmail = () => {
window.location.href = `mailto:${email}`;
};
3. CourseEditPage 학생 조회 로직 // src/pages/admin/courses/CourseEditPage.tsx
const { data: enrollmentData } = useQuery({
queryKey: ['enrollments', courseId],
// ...
});
const studentIds = enrollmentData?.data?.map((e) => e.studentId) ?? [];
4. Monaco 에디터 옵션 정리 // src/features/student/ui/CodePreview.tsx & src/pages/submit-assignment/ui/CodeEditor.tsx
editorOptions={{
readOnlyMessage: '',
folding: false,
glyphMargin: false,
// ...
}}
5. useScrollToTop 훅의 위치 // src/shared/lib/useScrollToTop.ts
useEffect(() => {
window.scrollTo(0, 0);
}, [pathname]);
6. LandingPage 리다이렉트 타이밍 // src/pages/common/LandingPage.tsx
useEffect(() => {
if (isAuthenticated) {
const route = userType === 'admin' ? ROUTES.ADMIN.ROOT : ROUTES.STUDENT.ROOT;
navigate(route, { replace: true });
}
}, [isAuthenticated, userType, navigate]);
📋 체크리스트
🚥 Pre-merge checks | ❌ 3❌ Failed checks (3 warnings)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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 |
✨ 변경 사항
📦 전체 변경 이력
v0.9.0 ~ v0.10.0