Skip to content

feat(web): 비로그인 홈 학교 검색 UI 추가#519

Closed
yoonc01 wants to merge 3 commits into
mainfrom
home-university-search-entry
Closed

feat(web): 비로그인 홈 학교 검색 UI 추가#519
yoonc01 wants to merge 3 commits into
mainfrom
home-university-search-entry

Conversation

@yoonc01
Copy link
Copy Markdown
Member

@yoonc01 yoonc01 commented May 10, 2026

작업 내용

  • 비로그인 홈 화면에서 기존 4개 액션 버튼 대신 파견 학교 찾기 검색 영역을 노출하도록 변경했습니다.
  • 로그인 사용자는 기존 4개 액션 버튼을 유지하도록 분기하고, 기존 버튼 UI는 HomeActionLinks로 분리했습니다.
  • 비로그인 검색 영역에서 소속 학교, 어학, 관심 국가를 선택한 뒤 학교별 목록 페이지로 이동하도록 구현했습니다.
  • 홈의 전체 학교 리스트 chip을 권역 기준에서 전체/학교별 기준으로 변경했습니다.
  • 학교별 chip 선택 시 해당 학교의 파견 학교만 미리보기로 노출하고, 더보기는 선택된 학교 목록 페이지로 이동하도록 변경했습니다.
  • 검색/성적 입력 화면에서 함께 쓰던 CustomDropdown을 공용 컴포넌트 위치로 이동했습니다.

특이 사항

  • 홈 화면에서 로그인 여부에 따라 UI를 다르게 렌더링해야 해서 / 페이지를 동적 렌더링(force-dynamic)으로 변경했습니다.

리뷰 요구사항 (선택)

  • 비로그인 홈 검색 영역의 선택 흐름이 기획 의도와 맞는지 확인 부탁드립니다.
  • 전체 학교 리스트의 학교별 chip 선택 시 더보기를 학교별 목록으로 보내는 동작이 적절한지 확인 부탁드립니다.

@yoonc01 yoonc01 self-assigned this May 10, 2026
@vercel
Copy link
Copy Markdown

vercel Bot commented May 10, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
solid-connection-web Ready Ready Preview, Comment May 10, 2026 1:37pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
solid-connect-web-admin Skipped Skipped May 10, 2026 1:37pm

@github-actions github-actions Bot added the web label May 10, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 10, 2026

Review Change Stack

Warning

Rate limit exceeded

@yoonc01 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 20 minutes and 9 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: e1ca2d40-0e6a-4aa7-844c-fb355de78670

📥 Commits

Reviewing files that changed from the base of the PR and between 7e65878 and 05b595f.

📒 Files selected for processing (19)
  • apps/web/src/app/(home)/_ui/HomeActionLinks/index.tsx
  • apps/web/src/app/(home)/_ui/HomeEntrySection/index.tsx
  • apps/web/src/app/(home)/_ui/HomeEntrySection/skeleton/index.tsx
  • apps/web/src/app/(home)/_ui/HomeUniversitySearchSection/_hooks/useHomeUniversitySearch.ts
  • apps/web/src/app/(home)/_ui/HomeUniversitySearchSection/index.tsx
  • apps/web/src/app/(home)/_ui/UniversityList/_hooks/useHomeUniversityList.ts
  • apps/web/src/app/(home)/_ui/UniversityList/_hooks/useRegionHandler.ts
  • apps/web/src/app/(home)/_ui/UniversityList/index.tsx
  • apps/web/src/app/(home)/page.tsx
  • apps/web/src/app/layout.tsx
  • apps/web/src/app/university/[homeUniversity]/search/_ui/SearchPageContent.tsx
  • apps/web/src/app/university/score/submit/gpa/GpaSubmitForm.tsx
  • apps/web/src/app/university/score/submit/language-test/LanguageTestSubmitForm.tsx
  • apps/web/src/app/university/search/PageContent.tsx
  • apps/web/src/components/layout/ReissueProvider.tsx
  • apps/web/src/components/layout/ReissueProvider/index.tsx
  • apps/web/src/components/search/CustomDropdown.tsx
  • apps/web/src/lib/zustand/useAuthStore.ts
  • apps/web/src/utils/universitySearchQuery.ts

🔍 Walkthrough

이 PR은 홈 페이지 UI를 재구성하고 컴포넌트 아키텍처를 개선하는 작업입니다:

  1. 새로운 UI 컴포넌트 추가

    • 로그인 사용자용 HomeActionLinks 컴포넌트 추가 (네 개의 네비게이션 타일)
    • 미로그인 사용자용 HomeUniversitySearchSection 컴포넌트 추가 (대학 검색 폼)
  2. 상태 관리 로직 재구성

    • useHomeUniversityList Hook으로 대학 선택 상태 관리 통합
    • 기존 useRegionHandler Hook 제거
    • UniversityList 컴포넌트 리팩토링
  3. 홈 페이지 렌더링 전환

    • 서버에서 로그인 상태 확인
    • 로그인 상태에 따라 다른 컴포넌트 조건부 렌더링
    • ISR에서 동적 렌더링(force-dynamic)으로 변경
  4. CustomDropdown 컴포넌트 중앙화

    • 여러 파일의 import 경로를 @/components/search/CustomDropdown으로 통합
    • TypeScript 타입 안정성 개선

📊 Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

👥 Suggested reviewers

  • wibaek
  • enunsnv
  • khwww
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 변경사항의 핵심을 정확히 반영합니다. 비로그인 홈 화면에 학교 검색 UI를 추가한 주요 변경사항을 명확하게 요약했습니다.
Description check ✅ Passed PR 설명이 작업 내용, 특이 사항, 리뷰 요구사항을 포함하여 템플릿 구조를 따르고 있으며 충분한 정보를 제공합니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch home-university-search-entry

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


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 and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a 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

🤖 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 `@apps/web/src/app/`(home)/_ui/HomeUniversitySearchSection/index.tsx:
- Around line 22-27: languageOptions is building dropdown items by using
Object.keys(LANGUAGE_TEST_TYPE_MAP) and assigning the raw key to label, which
may expose internal codes; change the mapping to iterate
Object.entries(LANGUAGE_TEST_TYPE_MAP) inside the useMemo and set label to the
user-facing name from the entry (e.g., the map's value/display property) while
keeping value as the code so the dropdown shows friendly labels but preserves
the original value; update the code that consumes languageOptions if it expects
the old shape.
🪄 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: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 9fce3231-c8c6-48a8-ae78-84e16d64ea20

📥 Commits

Reviewing files that changed from the base of the PR and between 5e6e9eb and 7e65878.

📒 Files selected for processing (11)
  • apps/web/src/app/(home)/_ui/HomeActionLinks/index.tsx
  • apps/web/src/app/(home)/_ui/HomeUniversitySearchSection/index.tsx
  • apps/web/src/app/(home)/_ui/UniversityList/_hooks/useHomeUniversityList.ts
  • apps/web/src/app/(home)/_ui/UniversityList/_hooks/useRegionHandler.ts
  • apps/web/src/app/(home)/_ui/UniversityList/index.tsx
  • apps/web/src/app/(home)/page.tsx
  • apps/web/src/app/university/[homeUniversity]/search/_ui/SearchPageContent.tsx
  • apps/web/src/app/university/score/submit/gpa/GpaSubmitForm.tsx
  • apps/web/src/app/university/score/submit/language-test/LanguageTestSubmitForm.tsx
  • apps/web/src/app/university/search/PageContent.tsx
  • apps/web/src/components/search/CustomDropdown.tsx
💤 Files with no reviewable changes (1)
  • apps/web/src/app/(home)/_ui/UniversityList/_hooks/useRegionHandler.ts

Comment thread apps/web/src/app/(home)/_ui/HomeUniversitySearchSection/index.tsx Outdated
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7e658784d2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +24 to +27
Object.keys(LANGUAGE_TEST_TYPE_MAP).map((value) => ({
value,
label: value,
})),
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Render language options with human-readable labels

The new home search dropdown builds its options with Object.keys(LANGUAGE_TEST_TYPE_MAP) and sets label to the enum key, so users see internal values like TOEFL_IBT instead of the localized display text already defined in LANGUAGE_TEST_TYPE_MAP. This makes the filter harder to understand and is inconsistent with the existing search forms that map to display labels; build options from Object.entries so the label uses the mapped text.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a32d7196af

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

const PREVIEW_UNIVERSITY_COUNT = 3;

const useHomeUniversityList = (allRegionsUniversityList: AllRegionsUniversityList) => {
const [selectedHomeUniversity, setSelectedHomeUniversity] = useState<string | null>(ALL_HOME_UNIVERSITY_CHOICE);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve a selected chip instead of allowing null state

ButtonTab toggles the current choice to null when a selected chip is clicked again, but this new hook no longer restores a default value (the removed useRegionHandler used to force fallback to "전체"). In practice this leaves the home list with no active chip and makes moreHref fall back to /university, so users can accidentally lose the school-specific context by re-clicking the active chip.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 05b595fe65

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +27 to +29
if (!shouldAttemptRefresh) {
setInitialized(true);
return;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Retry token reissue even when refresh flag is cleared

This early return prevents postReissueToken() from running whenever shouldAttemptRefresh is false, but shouldAttemptRefresh is reset to false by clearAccessToken() after any reissue failure (including transient network/API errors). In that scenario, users who still have a valid HttpOnly refresh cookie will be treated as permanently logged out on subsequent app loads because initialization now skips reissue entirely.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant