Skip to content

jangjunwoo/ldf-7-login - #12

Merged
jjwopen merged 5 commits into
mainfrom
jangjunwoo/ldf-7-login
Jul 27, 2026
Merged

jangjunwoo/ldf-7-login#12
jjwopen merged 5 commits into
mainfrom
jangjunwoo/ldf-7-login

Conversation

@jjwopen

@jjwopen jjwopen commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • 새로운 기능
    • 로그인 및 성별 선택 흐름 UI(성별 선택, 시작/로그인 버튼)와 로딩 표시를 추가했습니다.
    • 인증 화면용 영어/한국어 문구 지원과 함께 로그인 관련 라우트를 추가했습니다.
    • 공통 로딩 UI를 제공하고, 관련 Storybook 예제를 추가했습니다.
  • 스타일
    • 로그인 레이아웃 및 네비게이션/컨테이너 스타일을 개선하고, 배경(표면) 색상을 조정했습니다.
  • 문서
    • 라우트 재생성 안내를 최신 대상 파일 및 명령어 기준으로 업데이트했습니다.
  • 기타
    • 애플리케이션 버전을 0.0.5로 올렸습니다.

jjwopen added 2 commits July 24, 2026 17:53
/auth/gender components and screen
/auth/login
/auth/login/gender
@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@jjwopen, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 47 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3227488a-34fc-4e47-830c-9f20d8b3abde

📥 Commits

Reviewing files that changed from the base of the PR and between c4a4d1f and b34afb5.

📒 Files selected for processing (1)
  • src/common/components/ui/loading/index.stories.tsx
📝 Walkthrough

Walkthrough

인증 로그인 기능에 성별 선택 및 IDP 로그인 화면이 추가되었습니다. 관련 번역, 로딩 UI, Storybook 스토리, 중첩 라우트와 공개 export가 구성되었으며, 공통 레이아웃 및 배경 스타일과 패키지 버전이 갱신되었습니다.

Changes

인증 로그인 기능

Layer / File(s) Summary
공통 로딩 UI와 공개 export
src/common/components/**
Loading 컴포넌트와 Storybook 스토리가 추가되고 공통 UI export 및 NavButton import 구성이 갱신되었습니다.
인증 모델과 입력 컴포넌트
src/features/auth/models/**, src/features/auth/views/components/**
Gender, GenderButton, GenderSelect, IdpLoginButton이 추가되어 성별 선택, 로그인 콜백, 비활성화 및 로딩 상태를 처리합니다.
로그인 화면과 프레임 연결
src/features/auth/views/**
LoginLayoutScreen, 로그인 프레임, Storybook 스토리와 관련 feature export가 추가되었습니다.
라우트와 인증 번역 연결
src/routes/auth/login/**, public/locales/{en,ko}/_.json, AGENTS.md, package.json
로그인 중첩 라우트와 인증 번역 키가 추가되고 라우트 재생성 안내 및 패키지 버전이 갱신되었습니다.
레이아웃과 배경 스타일 정리
src/common/components/layout/index.tsx, src/styles.css
레이아웃 Tailwind 클래스와 --color-bg-surface 값이 변경되었습니다.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant LoginRoute
  participant LoginFrame
  participant LoginLayoutScreen
  participant LoginControl
  User->>LoginRoute: 로그인 경로 접속
  LoginRoute->>LoginFrame: 프레임 렌더링
  LoginFrame->>LoginLayoutScreen: 레이아웃 렌더링
  LoginLayoutScreen->>LoginControl: IDP 버튼 또는 성별 선택 UI 렌더링
  User->>LoginControl: 로그인 또는 시작 클릭
  LoginControl->>LoginFrame: onLogin 콜백 호출
Loading

Possibly related PRs

Poem

깡충, 로그인 길이 열렸네
성별 버튼이 반짝반짝
로딩 아이콘 빙글빙글
번역 문구도 노래하네
토끼도 신나게 출발! 🐇

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive 제목이 jangjunwoo/ldf-7-login으로 변경 내용을 충분히 설명하지 못하는 식별자형 표현입니다. 로그인 화면/컴포넌트 추가처럼 핵심 변경을 드러내는 간결한 제목으로 바꿔 주세요.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jangjunwoo/ldf-7-login

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@jjwopen

jjwopen commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 11

🧹 Nitpick comments (2)
src/features/auth/views/components/gender-button/index.tsx (1)

1-1: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

타입 import를 인라인 형식으로 맞춰 주세요.

import type { ReactNode } from 'react' 대신 import { type ReactNode } from 'react'를 사용해야 합니다.

As per coding guidelines, 타입 import는 standalone import type가 아니라 inline type import를 사용해야 합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/features/auth/views/components/gender-button/index.tsx` at line 1, Update
the ReactNode import in the gender button component to use the inline
type-import syntax within a regular import, replacing the standalone type import
while preserving the same type-only behavior.

Source: Coding guidelines

src/features/auth/views/screens/login-layout-screen.stories.tsx (1)

1-3: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

external import를 alias import보다 먼저 배치해 주세요.

현재 @/features/auth import가 Storybook external import보다 앞에 있습니다. As per coding guidelines, external import를 먼저 두고 internal alias import를 뒤에 배치해야 합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/features/auth/views/screens/login-layout-screen.stories.tsx` around lines
1 - 3, Reorder the imports in the story module so the external Storybook type
import from `@storybook/react-vite` appears before the internal `@/features/auth`
alias import, without changing either import’s contents.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/common/components/layout/index.tsx`:
- Line 9: Update the layout container’s text color class in the div near the
root layout so it is not inherited by child controls such as the unselected
button rendered by the gender-button component. Restrict white text to the dark
elements that require it, or assign the unselected gender button an explicit
dark text color while preserving the existing selected-state styling.

In `@src/common/components/ui/loading/index.stories.tsx`:
- Around line 1-3: Update the imports in the Loading Storybook module so the
external `@storybook/react-vite` import appears before the sibling Loading import,
and merge Meta and StoryObj into the external import using inline type
specifiers instead of a standalone import type declaration.

In `@src/common/components/ui/loading/index.tsx`:
- Around line 5-6: Update the Loading component’s Loader2 element to expose the
loading state to assistive technology by accepting a translated label prop and
applying it as aria-label alongside role="status". Preserve the existing styling
and loading behavior.

In `@src/features/auth/views/components/gender-button/index.tsx`:
- Around line 14-22: Update the button in the gender-button component to expose
its selected state to assistive technologies by adding aria-pressed={selected}.
Preserve the existing styling, click behavior, disabled handling, and prop
spreading.

In `@src/features/auth/views/components/gender-select/index.tsx`:
- Around line 19-25: Update the login/start button in the component containing
clickLogin to use disabled={clicked || selected === null}, preventing activation
before a gender is selected or after clicking. Remove the console.log debug
statement from clickLogin while preserving its existing guard and onLogin
behavior.
- Around line 49-55: Update the button rendering around clickLogin so the
clicked loading state preserves an accessible name instead of exposing only the
Loader2 icon. Add aria-busy={clicked} and retain the existing start-label as an
accessible or visually hidden text while showing the loader, without changing
the non-loading behavior.

In `@src/features/auth/views/components/idp-login-button/index.tsx`:
- Around line 10-17: Update the button returned by the IdP login component to
bind its disabled state to the existing clicked state, so it becomes disabled
immediately after the first click while preserving the current onLogin flow.

In `@src/features/auth/views/frames/gender-select-frame.tsx`:
- Line 9: Remove the gender value from the console.log statement in
GenderSelectFrame, or remove the debug logging entirely; authentication flow
logs must not expose the user's gender.
- Around line 8-11: Update handleGenderSelect in GenderSelectFrame to invoke the
actual login request using the selected gender, navigate to the post-login
destination on success, and clear the loading state when the request fails.
Remove the console-only behavior and restore the real navigation flow,
preserving the callback’s loading-state contract.

In `@src/features/auth/views/frames/idp-login-frame.tsx`:
- Around line 1-10: Update IdpLoginFrame’s handleLogin to navigate to the
gender-selection route '/auth/login/gender' after successful login instead of
only logging. Re-enable and use the existing useNavigate integration, then keep
passing handleLogin to IdpLoginButton so the redirect occurs through the login
completion callback.

In `@src/features/auth/views/screens/login-layout-screen.tsx`:
- Line 1: Replace the standalone type import for ReactNode in
src/features/auth/views/screens/login-layout-screen.tsx lines 1-1 with inline
type-import syntax. Apply the same inline type-import conversion to Meta and
StoryObj in src/features/auth/views/screens/login-layout-screen.stories.tsx
lines 3-3; no other changes are needed.

---

Nitpick comments:
In `@src/features/auth/views/components/gender-button/index.tsx`:
- Line 1: Update the ReactNode import in the gender button component to use the
inline type-import syntax within a regular import, replacing the standalone type
import while preserving the same type-only behavior.

In `@src/features/auth/views/screens/login-layout-screen.stories.tsx`:
- Around line 1-3: Reorder the imports in the story module so the external
Storybook type import from `@storybook/react-vite` appears before the internal
`@/features/auth` alias import, without changing either import’s contents.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: bfa76a7e-2fb7-42fe-9245-88bd523ee806

📥 Commits

Reviewing files that changed from the base of the PR and between f8a20e3 and 977ccb3.

📒 Files selected for processing (30)
  • AGENTS.md
  • package.json
  • public/locales/en/_.json
  • public/locales/ko/_.json
  • src/common/components/index.ts
  • src/common/components/layout/index.tsx
  • src/common/components/nav-bar/index.tsx
  • src/common/components/ui/index.ts
  • src/common/components/ui/loading/index.stories.tsx
  • src/common/components/ui/loading/index.tsx
  • src/features/auth/index.ts
  • src/features/auth/models/gender.ts
  • src/features/auth/models/index.ts
  • src/features/auth/viewmodels/index.ts
  • src/features/auth/views/components/gender-button/index.tsx
  • src/features/auth/views/components/gender-select/index.tsx
  • src/features/auth/views/components/idp-login-button/index.tsx
  • src/features/auth/views/components/index.ts
  • src/features/auth/views/frames/gender-select-frame.tsx
  • src/features/auth/views/frames/idp-login-frame.tsx
  • src/features/auth/views/frames/index.ts
  • src/features/auth/views/index.ts
  • src/features/auth/views/screens/index.ts
  • src/features/auth/views/screens/login-layout-screen.stories.tsx
  • src/features/auth/views/screens/login-layout-screen.tsx
  • src/features/user/views/index.ts
  • src/routes/auth/login/gender.tsx
  • src/routes/auth/login/index.tsx
  • src/routes/auth/login/route.tsx
  • src/styles.css

<div className={cn('bg-bg-surface h-dvh px-5', className)}>
<div className=" text-white mx-auto flex h-full min-h-0 w-full max-w-100 flex-col gap-5 bg-bg">
<NavBar className={'border-b border-b-white mx-10'} />
<div className="bg-bg mx-auto flex h-full min-h-0 w-full max-w-100 flex-col gap-5 text-white">

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

하위 버튼에 text-white를 전역 상속시키지 않도록 수정해 주세요.

src/features/auth/views/components/gender-button/index.tsx의 비선택 상태는 bg-bg-surface만 지정하므로 이 컨테이너의 text-white를 상속합니다. 현재 src/styles.css Line 81의 #e5e5e5 배경과 흰색 텍스트 조합은 대비가 부족해 성별 선택 UI의 텍스트를 읽기 어렵습니다. 흰색 텍스트를 어두운 요소에만 적용하거나, 비선택 버튼에 명시적인 어두운 텍스트 색상을 지정해 주세요.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/common/components/layout/index.tsx` at line 9, Update the layout
container’s text color class in the div near the root layout so it is not
inherited by child controls such as the unselected button rendered by the
gender-button component. Restrict white text to the dark elements that require
it, or assign the unselected gender button an explicit dark text color while
preserving the existing selected-state styling.

Comment thread src/common/components/ui/loading/index.stories.tsx Outdated
Comment on lines +5 to +6
export function Loading({ fullScreen = true, className, containerClassName }: Loading.Props) {
const loading = <Loader2 className={cn('text-icon size-12 animate-spin', className)} />;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

로딩 상태를 보조기술에 노출해 주세요.

Line 6의 Loader2는 시각적으로만 회전하며 role과 접근 가능한 이름이 없습니다. IDP 로그인이나 라우트 전환 중임을 스크린 리더 사용자가 알 수 없으므로, 번역된 label을 prop으로 받아 role="status"aria-label을 적용해 주세요.

권장 예시
-  const loading = <Loader2 className={cn('text-icon size-12 animate-spin', className)} />;
+  const loading = (
+    <Loader2
+      role="status"
+      aria-label="Loading"
+      className={cn('text-icon size-12 animate-spin', className)}
+    />
+  );
📝 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.

Suggested change
export function Loading({ fullScreen = true, className, containerClassName }: Loading.Props) {
const loading = <Loader2 className={cn('text-icon size-12 animate-spin', className)} />;
export function Loading({ fullScreen = true, className, containerClassName }: Loading.Props) {
const loading = (
<Loader2
role="status"
aria-label="Loading"
className={cn('text-icon size-12 animate-spin', className)}
/>
);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/common/components/ui/loading/index.tsx` around lines 5 - 6, Update the
Loading component’s Loader2 element to expose the loading state to assistive
technology by accepting a translated label prop and applying it as aria-label
alongside role="status". Preserve the existing styling and loading behavior.

Comment on lines +14 to +22
<button
className={cn(
'w-full rounded-lg py-2 text-sm transition-all duration-150',
selected ? 'bg-bg text-white' : 'bg-bg-surface',
className,
)}
onClick={onClick}
disabled={disabled}
{...props}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

선택 상태를 보조기술에 노출하세요.

현재 selected는 색상 클래스만 변경하므로 스크린 리더가 선택된 항목을 알 수 없습니다. aria-pressed={selected} 또는 radio semantics를 추가해 주세요.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/features/auth/views/components/gender-button/index.tsx` around lines 14 -
22, Update the button in the gender-button component to expose its selected
state to assistive technologies by adding aria-pressed={selected}. Preserve the
existing styling, click behavior, disabled handling, and prop spreading.

Comment on lines +19 to +25
const clickLogin = () => {
if (!selected) {
console.log('not selected');
return;
}
setClicked(true);
onLogin(selected);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

선택 전 시작 버튼을 비활성화하세요.

현재 성별을 선택하지 않아도 버튼이 활성화되어 있으며, 클릭하면 로그만 남기고 아무 동작도 하지 않습니다. disabled={clicked || selected === null}로 설정하고 디버그 로그는 제거해 주세요.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/features/auth/views/components/gender-select/index.tsx` around lines 19 -
25, Update the login/start button in the component containing clickLogin to use
disabled={clicked || selected === null}, preventing activation before a gender
is selected or after clicking. Remove the console.log debug statement from
clickLogin while preserving its existing guard and onLogin behavior.

Comment thread src/features/auth/views/components/idp-login-button/index.tsx
Comment on lines +8 to +11
const handleGenderSelect = (gender: Gender) => {
console.log(`gender selected: ${gender} in GenderSelectFrame`);
// navigate({ to: '/' });
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

성별 선택 콜백을 실제 로그인 완료 흐름에 연결해야 합니다.

GenderSelect는 callback 호출 전에 로딩 상태를 고정하지만, 현재 handler는 console.log만 실행하고 이동 코드는 주석 처리되어 있습니다. 첫 클릭 후 로더가 영구적으로 남으므로 실제 로그인 요청과 성공 시 navigation, 실패 시 로딩 해제를 연결해 주세요.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/features/auth/views/frames/gender-select-frame.tsx` around lines 8 - 11,
Update handleGenderSelect in GenderSelectFrame to invoke the actual login
request using the selected gender, navigate to the post-login destination on
success, and clear the loading state when the request fails. Remove the
console-only behavior and restore the real navigation flow, preserving the
callback’s loading-state contract.

// const navigate = useNavigate();

const handleGenderSelect = (gender: Gender) => {
console.log(`gender selected: ${gender} in GenderSelectFrame`);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

성별 값을 콘솔에 기록하지 마세요.

인증 흐름에서 사용자의 성별 값을 브라우저 콘솔에 기록하고 있습니다. 클라이언트 로그 수집이나 디버그 접근을 통해 개인 속성이 노출될 수 있으므로 값을 제거하거나 비식별화해 주세요.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/features/auth/views/frames/gender-select-frame.tsx` at line 9, Remove the
gender value from the console.log statement in GenderSelectFrame, or remove the
debug logging entirely; authentication flow logs must not expose the user's
gender.

Comment on lines +1 to +10
// import { useNavigate } from '@tanstack/react-router';

import { IdpLoginButton, LoginLayoutScreen } from '@/features/auth';

export function IdpLoginFrame() {
// const navigate = useNavigate();

const handleLogin = () => {
console.log('Login complete in IdpLoginFrame');
// navigate({ to: '/auth/login/gender' });

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== locate file =="
git ls-files | rg 'src/features/auth/views/frames/idp-login-frame\.tsx$|src/features/auth' | head -80

echo "== target file =="
cat -n src/features/auth/views/frames/idp-login-frame.tsx

echo "== relevant auth files outline =="
for f in $(git ls-files 'src/features/auth/**' | rg 'index\.tsx$|idp-login-button|gender|login' | head -80); do
  echo "--- $f"
  wc -l "$f"
done
rg -n "handleLogin|IdpLoginButton|gender|/auth/login/gender|useNavigate|onLogin|onSuccess" src/features/auth src/routes 2>/dev/null | head -200

Repository: gsainfoteam/bbosong-fe

Length of output: 5695


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== idp-login-frame =="
cat -n src/features/auth/views/frames/idp-login-frame.tsx

echo "== idp-login-button =="
cat -n src/features/auth/views/components/idp-login-button/index.tsx

echo "== gender-select-frame and gender route =="
cat -n src/features/auth/views/frames/gender-select-frame.tsx
cat -n src/routes/auth/login/gender.tsx

echo "== package deps relevant =="
if [ -f package.json ]; then
  node - <<'JS'
const fs = require('fs');
const pkg = JSON.parse(fs.readFileSync('package.json','utf8'));
console.log(JSON.stringify({
  dependencies: pkg.dependencies && Object.fromEntries(Object.entries(pkg.dependencies).filter(([k]) => /react-router|tanstack|react/.test(k))),
  devDependencies: pkg.devDependencies && Object.fromEntries(Object.entries(pkg.devDependencies).filter(([k]) => /bun-types|typescript|react/.test(k))),
}, null, 2));
JS
fi

echo "== route files under auth =="
git ls-files 'src/routes/auth/**/*.tsx' 'src/routes/**/*.tsx' | sed -n '1,120p'

Repository: gsainfoteam/bbosong-fe

Length of output: 3996


IDP 로그인 완료 후 성별 선택 라우트로 이동하도록 연결해야 합니다.

handleLoginconsole.log만 실행하고 onLogin 전달의 IdpLoginButton은 클릭 시 로딩 상태만으로 끝나기 때문에, 로그인 성공 처리 후 다음 라우트인 '/auth/login/gender'로 이동해야 합니다.

수정 예시
-// import { useNavigate } from '`@tanstack/react-router`';
+import { useNavigate } from '`@tanstack/react-router`';

 export function IdpLoginFrame() {
-  // const navigate = useNavigate();
+  const navigate = useNavigate();

   const handleLogin = () => {
-    console.log('Login complete in IdpLoginFrame');
-    // navigate({ to: '/auth/login/gender' });
+    navigate({ to: '/auth/login/gender' });
   };
📝 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.

Suggested change
// import { useNavigate } from '@tanstack/react-router';
import { IdpLoginButton, LoginLayoutScreen } from '@/features/auth';
export function IdpLoginFrame() {
// const navigate = useNavigate();
const handleLogin = () => {
console.log('Login complete in IdpLoginFrame');
// navigate({ to: '/auth/login/gender' });
import { useNavigate } from '`@tanstack/react-router`';
import { IdpLoginButton, LoginLayoutScreen } from '`@/features/auth`';
export function IdpLoginFrame() {
const navigate = useNavigate();
const handleLogin = () => {
navigate({ to: '/auth/login/gender' });
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/features/auth/views/frames/idp-login-frame.tsx` around lines 1 - 10,
Update IdpLoginFrame’s handleLogin to navigate to the gender-selection route
'/auth/login/gender' after successful login instead of only logging. Re-enable
and use the existing useNavigate integration, then keep passing handleLogin to
IdpLoginButton so the redirect occurs through the login completion callback.

Comment thread src/features/auth/views/screens/login-layout-screen.tsx Outdated
apply coderabbit suggestions
@jjwopen

jjwopen commented Jul 27, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

apply coderabbit suggestions
@jjwopen
jjwopen merged commit 7998041 into main Jul 27, 2026
3 checks passed
@jjwopen
jjwopen deleted the jangjunwoo/ldf-7-login branch July 27, 2026 04:07
@coderabbitai coderabbitai Bot mentioned this pull request Jul 30, 2026
jjwopen added a commit that referenced this pull request Aug 10, 2026
* Login components and pages(LDF-7)
/auth/gender components and screen

* Login components and pages(LDF-7)
/auth/login
/auth/login/gender

* Login components and pages(LDF-7)
edit version

* Login components and pages(LDF-7)
apply coderabbit suggestions

* Login components and pages(LDF-7)
apply coderabbit suggestions
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant