Skip to content

feat: 승인됨 탭 추가#139

Merged
ff1451 merged 2 commits intodevelopfrom
138-feat-승인된-지원자-지원서-확인-가능케-변경
Feb 28, 2026

Hidden character warning

The head ref may contain hidden characters: "138-feat-\uc2b9\uc778\ub41c-\uc9c0\uc6d0\uc790-\uc9c0\uc6d0\uc11c-\ud655\uc778-\uac00\ub2a5\ucf00-\ubcc0\uacbd"
Merged

feat: 승인됨 탭 추가#139
ff1451 merged 2 commits intodevelopfrom
138-feat-승인된-지원자-지원서-확인-가능케-변경

Conversation

@ff1451
Copy link
Copy Markdown
Collaborator

@ff1451 ff1451 commented Feb 26, 2026

Summary by CodeRabbit

  • 새로운 기능
    • 매니저용 회원 신청서 목록에 멤버별 신청서 조회 기능 추가 (상세 페이지 및 라우트 포함)
    • 신청서 상세에서 지원자 프로필, 제출일, 문항별 답변 및 결제 영수증 이미지 확대 보기(모달) 제공
    • 멤버 목록에서 바로 해당 멤버의 신청서로 이동하는 버튼 추가
    • 목록 페이징 표시 및 UI 경량화(페이지 기반 총합 표기) 개선
    • 내부 데이터 조회를 위한 관리자 전용 조회 기능(페이징/정렬 지원) 및 스마트 뒤로가기 경로 보완

@ff1451 ff1451 self-assigned this Feb 26, 2026
@ff1451 ff1451 linked an issue Feb 26, 2026 that may be closed by this pull request
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Feb 26, 2026

📝 Walkthrough

Walkthrough

매니저용 클럽 멤버 지원서 기능이 추가되었습니다. API 레이어에 getManagedClubMemberApplications(clubId, params?)getManagedClubMemberApplicationByUser(clubId, userId)가 추가되었고, 이를 사용하는 훅 useGetManagedMemberApplicationsuseGetManagedMemberApplicationDetailByUser가 구현되었습니다. 관리자 페이지에 멤버 지원서 목록과 사용자별 지원서 상세 페이지 컴포넌트 및 라우트가 추가되었고, 멤버 리스트의 액션 모달에서 해당 상세 페이지로 이동하는 네비게이션이 연결되었습니다. 이미지 모달 및 페이로드(질문/응답) 렌더링도 포함됩니다.

Possibly related PRs

🚥 Pre-merge checks | ✅ 1 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Title check ⚠️ Warning PR 제목 '승인됨 탭 추가'는 변경사항의 실제 내용과 맞지 않습니다. 실제 변경사항은 승인됨 탭이 아닌 회원 지원서 상세 조회 기능 구현입니다. PR 제목을 '회원 지원서 상세 조회 기능 추가' 또는 유사한 정확한 내용의 제목으로 변경해주세요. 현재 제목은 구현된 기능을 반영하지 않습니다.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

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

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 138-feat-승인된-지원자-지원서-확인-가능케-변경

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

Copy link
Copy Markdown
Contributor

@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

🧹 Nitpick comments (1)
src/pages/Manager/ManagedApplicationList/index.tsx (1)

103-104: 빈 목록 상태 UI를 추가하면 UX가 좋아집니다.

Line 103-104에서 항목이 0개면 영역이 비어 보입니다. 탭별 빈 상태 메시지를 넣는 것을 권장합니다.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/pages/Manager/ManagedApplicationList/index.tsx` around lines 103 - 104,
The view currently maps currentList?.applications to Card and shows nothing when
the array is empty; update the ManagedApplicationList render to detect when
currentList?.applications is empty (e.g., !currentList ||
currentList.applications.length === 0) and render a tab-specific empty state
component or message instead of the map; locate the mapping code around
currentList?.applications.map(...) and replace or wrap it with a conditional
that renders a reusable Empty/Placeholder UI (with explanatory text and an
action button if appropriate) so each tab shows a clear empty-state message.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/pages/Manager/ManagedApplicationList/index.tsx`:
- Around line 26-27: The two hooks useGetManagedApplications and
useGetManagedMemberApplications are always invoked regardless of activeTab, so
if the inactive tab's useSuspenseQuery fails it blocks rendering; update the
component to only call each hook when its tab is active (or wrap each tab pane
in its own Suspense boundary) and add error handling for
useGetManagedMemberApplications (e.g., catch or error boundary) so
member-application API errors don't bubble up; specifically, conditionally
invoke useGetManagedApplications when activeTab === 'applications' (or render
its Suspense-wrapped pane) and conditionally invoke
useGetManagedMemberApplications when activeTab === 'members' (or wrap it with
its own Suspense/ErrorBoundary) to prevent inactive-tab API failures from
affecting the active tab.

---

Nitpick comments:
In `@src/pages/Manager/ManagedApplicationList/index.tsx`:
- Around line 103-104: The view currently maps currentList?.applications to Card
and shows nothing when the array is empty; update the ManagedApplicationList
render to detect when currentList?.applications is empty (e.g., !currentList ||
currentList.applications.length === 0) and render a tab-specific empty state
component or message instead of the map; locate the mapping code around
currentList?.applications.map(...) and replace or wrap it with a conditional
that renders a reusable Empty/Placeholder UI (with explanatory text and an
action button if appropriate) so each tab shows a clear empty-state message.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1f8f825 and 817886b.

📒 Files selected for processing (3)
  • src/apis/club/index.ts
  • src/pages/Manager/ManagedApplicationList/index.tsx
  • src/pages/Manager/hooks/useManagedMemberApplications.ts

Comment thread src/pages/Manager/ManagedApplicationList/index.tsx Outdated
Copy link
Copy Markdown
Contributor

@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.

🧹 Nitpick comments (2)
src/pages/Manager/ManagedMemberApplicationDetail/index.tsx (2)

89-99: 모달 접근성: Escape 키 지원 고려

이미지 모달에서 Escape 키로 닫기 기능을 추가하면 접근성이 향상됩니다.

♻️ Escape 키 핸들링 예시
import { useEffect } from 'react';

// 컴포넌트 내부에 추가
useEffect(() => {
  if (!isImageOpen) return;
  const handleKeyDown = (e: KeyboardEvent) => {
    if (e.key === 'Escape') closeImage();
  };
  window.addEventListener('keydown', handleKeyDown);
  return () => window.removeEventListener('keydown', handleKeyDown);
}, [isImageOpen, closeImage]);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/pages/Manager/ManagedMemberApplicationDetail/index.tsx` around lines 89 -
99, The image modal rendered when isImageOpen and application.feePaymentImageUrl
are truthy currently lacks keyboard handling; add an effect inside the component
that listens for 'keydown' while isImageOpen is true and calls closeImage() when
e.key === 'Escape', and ensure the listener is removed on cleanup; place this
useEffect near the Portal/modal code so it references isImageOpen and closeImage
and does window.addEventListener('keydown', ...) /
window.removeEventListener(...).

8-10: params가 undefined일 때 NaN 발생 가능

Number(undefined)NaN을 반환합니다. 방어적 코드를 추가하거나, 상위에서 이미 라우트 파라미터가 보장된다면 무시해도 됩니다.

♻️ 방어적 코드 예시
 const params = useParams();
-const clubId = Number(params.clubId);
-const userId = Number(params.userId);
+const clubId = Number(params.clubId) || 0;
+const userId = Number(params.userId) || 0;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/pages/Manager/ManagedMemberApplicationDetail/index.tsx` around lines 8 -
10, useParams() may return undefined keys so Number(params.clubId) /
Number(params.userId) can produce NaN; update the code around useParams, params,
clubId and userId to defensively handle missing route params: extract the raw
params (e.g. clubId and userId strings), validate they exist and are numeric (or
provide a safe fallback), and either convert with a safe parse (rejecting NaN)
or early-return/redirect/error if missing; ensure any downstream code using
clubId/userId expects the validated numeric values.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@src/pages/Manager/ManagedMemberApplicationDetail/index.tsx`:
- Around line 89-99: The image modal rendered when isImageOpen and
application.feePaymentImageUrl are truthy currently lacks keyboard handling; add
an effect inside the component that listens for 'keydown' while isImageOpen is
true and calls closeImage() when e.key === 'Escape', and ensure the listener is
removed on cleanup; place this useEffect near the Portal/modal code so it
references isImageOpen and closeImage and does
window.addEventListener('keydown', ...) / window.removeEventListener(...).
- Around line 8-10: useParams() may return undefined keys so
Number(params.clubId) / Number(params.userId) can produce NaN; update the code
around useParams, params, clubId and userId to defensively handle missing route
params: extract the raw params (e.g. clubId and userId strings), validate they
exist and are numeric (or provide a safe fallback), and either convert with a
safe parse (rejecting NaN) or early-return/redirect/error if missing; ensure any
downstream code using clubId/userId expects the validated numeric values.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 817886b and 782a6ae.

📒 Files selected for processing (7)
  • src/App.tsx
  • src/apis/club/index.ts
  • src/pages/Manager/ManagedApplicationList/index.tsx
  • src/pages/Manager/ManagedMemberApplicationDetail/index.tsx
  • src/pages/Manager/ManagedMemberList/index.tsx
  • src/pages/Manager/hooks/useManagedApplications.ts
  • src/utils/hooks/useSmartBack.ts

@ff1451 ff1451 merged commit 6c3e678 into develop Feb 28, 2026
2 checks passed
@ff1451 ff1451 deleted the 138-feat-승인된-지원자-지원서-확인-가능케-변경 branch April 7, 2026 09:32
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.

[feat] 승인된 지원자 지원서 확인 가능케 변경

1 participant